728x90

퀵슬롯 구현이 끝났다.

 

 

void Awake에  아래 구절 추가
 for(int i=0;i<4;i++)//퀵슬롯 아이템 4개 초기화용 추가
        {
            QuickSlotItem.Add(null);
        }
         Load();//json 데이터 읽어온후 
        DrawQuickslot();// 퀵슬롯 그려준다 

slotclick 함수에 아래 코드 추가 
        if(CurItem.ItemType=="Potion")//슬롯클릭시 아이템 타입이 포션이면 
        {
            if(QuickSlotItem!=null)
            registQuickSlot();//등록함수 호출
        }
        

public void DrawQuickslot() // 퀵슬롯 아이템갯수, 아이템아이콘 그려주는 역활 및 save 
    {
        for(int i=0;i<QuickSlotItem.Count;i++)
        {
            if(QuickSlotItem[i]!=null)//퀵슬롯 아이템리스트에 아이템이 존재한다면 
            {
                InvenQuickSlot[i].GetComponentInChildren<Text>().text = QuickSlotItem[i].Number.ToString(); //연결된 인벤토리 퀵슬롯 갯수 text는 quickslotitem number를 받아서 넣어주고
                InvenQuickSlot[i].transform.GetChild(1).GetComponent<Image>().sprite = ItemSprite[Alltem.FindIndex(x => x.Name == QuickSlotItem[i].Name)];//이미지도 같다

            }
            else // 존재하지않는다면  초기화 
            {
                InvenQuickSlot[i].GetComponentInChildren<Text>().text = null; 
                InvenQuickSlot[i].transform.GetChild(1).GetComponent<Image>().sprite = none;
            }
            MainQuickSlot[i].GetComponentInChildren<Text>().text = InvenQuickSlot[i].GetComponentInChildren<Text>().text;//메인 과 인벤 퀵슬롯연결 이하동문
            MainQuickSlot[i].transform.GetChild(1).GetComponent<Image>().sprite = InvenQuickSlot[i].transform.GetChild(1).GetComponent<Image>().sprite;
        }
        Save();//json데이터로 저장 
    }
    public void registQuickSlot()//퀵슬롯아이템리스트에 등록함수 포션일때만 호출된다 
    {
        for (int i = 0; i < QuickSlotItem.Count; i++)
        {
            if (QuickSlotItem[i] == null)//퀵슬롯 아이템이 null 이라면 
            {
                QuickSlotItem[i] = CurItem;//클릭된 아이템 넣고 
                
                break;//탈출

            }
            if (QuickSlotItem[i].Name == CurItem.Name)//클릭한 아이템과 퀵슬롯에 등록된 아이템이 같다면 
            {
                QuickSlotItem[i] = null; // null 로 초기화후 
                
                break;//탈출
            }
            
        }
    }
    public void InvenQuickSlotClick(int slotNum)//인벤토리 퀵슬롯 클릭시 null 로 초기화 함수
    {
        QuickSlotItem[slotNum] = null;
        DrawQuickslot();//그려주는 함수 호출 

    }
    public void MainQuickSlotClick(int slotNum)//메인 퀵슬롯 클릭 함수 
    {
        if(QuickSlotItem[slotNum]!=null) // 퀵슬롯아이템리스트 i 가 null이 아니면 
        {
           switch( QuickSlotItem[slotNum].Type)//퀵슬롯 아이템이 hp 인지 mp 인지 구별후 
            {
                case "HP":
                    if(int.Parse(QuickSlotItem[slotNum].Number)>0)// 갯수가 0 보다 크다면 
                    {
                        int i =int.Parse(QuickSlotItem[slotNum].Number) - 1;//int i 선언후 갯수를 빼주고 
                        QuickSlotItem[slotNum].Number = i.ToString();// 퀵슬롯아이템리스트에 갯수를 다시 넣어주고  
                        CharacterManger.instance.stat.curHp += int.Parse(QuickSlotItem[slotNum].value);//캐릭터 cupHp에 value만큼 더해주고 
                        if(CharacterManger.instance.stat.curHp>=CharacterManger.instance.stat.maxHp)// 만약 curHp가 maxHp 보다 크거나 같으면 
                        {
                            CharacterManger.instance.stat.curHp = CharacterManger.instance.stat.maxHp;//curHp는 maxHp로 
                        }
                    }
                    break;
                case "MP":
                    if (int.Parse(QuickSlotItem[slotNum].Number) > 0)//위와같다
                    {
                        int i = int.Parse(QuickSlotItem[slotNum].Number) - 1;
                        QuickSlotItem[slotNum].Number = i.ToString();
                        CharacterManger.instance.stat.curMp += int.Parse(QuickSlotItem[slotNum].value);
                        if (CharacterManger.instance.stat.curMp >= CharacterManger.instance.stat.maxMp)
                        {
                            CharacterManger.instance.stat.curMp = CharacterManger.instance.stat.maxMp;
                        }
                    }
                    break;

            }
        }
        
        DrawQuickslot();//갯수 업데이트 및 저장 
    }
    
    void Save()
    {
        string jdatamyitemlist = JsonConvert.SerializeObject(MyItemList); // string에 내 아이템리스트를 json으로 바꿔줘서 넣어주고 
        string jdatamyquickslot = JsonConvert.SerializeObject(QuickSlotItem);//퀵슬롯 아이템 json데이터로 바꿔주고
        File.WriteAllText(Application.dataPath + "/Resources/MyItemText.txt", jdatamyitemlist);//파일을 아래와같이 저장
        File.WriteAllText(Application.dataPath + "/Resources/MyQuickSlot.txt", jdatamyquickslot);// 이파일을 Resources 폴더에 MyItemText jdata로 저장해준다 
        TabClick(curTab); // 탭클릭호출 
    }

    void Load()
    {
        string jdatamyitemlist = File.ReadAllText(Application.dataPath + "/Resources/MyItemText.txt");//내 퀵슬롯 데이터 읽어오고 
        string jdatamyquickslot = File.ReadAllText(Application.dataPath + "/Resources/MyQuickSlot.txt");// 내아이템 리스트 를 읽어오고 
        MyItemList = JsonConvert.DeserializeObject<List<Item>>(jdatamyitemlist); // Convert하여 Myitemlist에 넣어준다 
        QuickSlotItem =JsonConvert.DeserializeObject<List<Item>>(jdatamyquickslot);//퀵슬롯 아이템에 넣어준다 
        TabClick(curTab); // 처음 탭클릭 호출
    }

 

 

이걸로 퀵슬롯 구현은 끝낫고 

 

내일은 상점을 구현해볼 예정이다.

 

 

 

 

 

반응형