/// <summary> /// 取得空的遊戲內套裝 /// </summary> /// <returns></returns> public MeatBallSet GetSetObject(SetType _setName) { MeatBallSet set = null; //確認資料池中是否已經有該套裝 if (dataPool.ContainsKey(_setName)) { //確認散件是否在使用中 for (int i = 0; i < objectPool[_setName].Count; i++) { if (objectPool[_setName][i].IsPartUsing) { continue; } //如果沒有任何一個在使用中的話在初始化函式後直接回傳 objectPool[_setName][i].ReuseAllParts(); return(objectPool[_setName][i]); } } set = GameObject.Instantiate(GetSet(_setName)); set.FindPartsSection(); set.InstantiateParts(); set.ReuseAllParts(); objectPool[_setName].Add(set); return(set); }
/// <summary> /// 改變玩家貢丸的套服,回傳結果。 /// </summary> /// <returns>當主要玩家不是貢丸時回傳否</returns> public bool ChangeMainMeatBallSet(MeatBallSet _set) { MeatBall mb = myFigureSystem.Main as MeatBall; if (myFigureSystem.Main == null || mb == null) { return(false); } mb.SetSet(_set); return(true); }
/// <summary> /// 更換整個套裝 /// </summary> /// <param name="_set"></param> public void SetSet(MeatBallSet _set) { //設定AnimatorOoverrideController if (_set.AOC != null) { ChangeAOC(_set.AOC); } //設定套裝物件 Suit = _set.Suit; Weapon = _set.Weapon; Hat = _set.Hat; Glove = _set.Glove; }
/// <summary> /// 開始讀取套裝資料與其事件 /// </summary> public void LoadData() { List <MyUIElementData> list = new List <MyUIElementData>(); for (int i = 0; i < initialSetList.Length; i++) { MeatBallSet set = MeatBallSetFactory.Instance.GetSet(initialSetList[i]); MyUIElementData setElement = set.NewElement; setElement.ButtonClickEvent = (_index, _extraData) => { //給貢丸換套裝 GameLogicManager.Instance.ChangeMainMeatBallSet( MeatBallSetFactory.Instance.GetSetObject(set.Type)); //登入下方按鈕填入技能 MyUIElementData hatElement = null; MyUIElementData suitElement = null; MyUIElementData gloveElement = null; MyUIElementData weaponElement = null; if (set.Hat.Skill != null) { hatElement = set.Hat.Skill.NewElementData; } if (set.Suit.Skill != null) { suitElement = set.Suit.Skill.NewElementData; } if (set.Glove.Skill != null) { gloveElement = set.Glove.Skill.NewElementData; } if (set.Weapon.Skill != null) { weaponElement = set.Weapon.Skill.NewElementData; } SkillsUI.ChangeSkill((int)MeatBall.SetPartType.Hat, hatElement); SkillsUI.ChangeSkill((int)MeatBall.SetPartType.Suit, suitElement); SkillsUI.ChangeSkill((int)MeatBall.SetPartType.Glove, gloveElement); SkillsUI.ChangeSkill((int)MeatBall.SetPartType.Weapon, weaponElement); }; list.Add(setElement); } SetSelectElements = list; }
/// <summary> /// 取得套裝散件 /// </summary> /// <param name="_setName"></param> /// <param name="_type"></param> /// <returns></returns> protected MBSetPart GetPartGameObject(SetType _setName, MeatBall.SetPartType _type) { //如果原資料就沒有該部位了就回傳null if (dataPool[_setName].GetPartByEnum(_type) == null) { return(null); } Debug.Log("Search Suit"); MBSetPart part = null; //尋找該Dictionary for (int i = 0; i < objectPool[_setName].Count; i++) { //找出該套裝 part = objectPool[_setName][i].GetPartByEnum(_type); //如果此物件的該部位正在被使用就繼續找別的 if (part.IsThisUsing) { part = null; continue; } //沒在使用就指定該物件 break; } //整場物件都沒有空的部位就造新的套裝再取其物件 if (part == null) { MeatBallSet newSet = GameObject.Instantiate(GetSet(_setName)) as MeatBallSet; objectPool[_setName].Add(newSet); newSet.InstantiateParts(); part = newSet.GetPartByEnum(_type); } Debug.Log(part.name); //事前準備 part.ReuseGameObject(); //回傳該物件 return(part); }
/// <summary> /// 從資源檔案取得套裝 /// </summary> /// <param name="_setName"></param> /// <returns></returns> public MeatBallSet GetSet(SetType _set) { MeatBallSet set = null; if (!dataPool.ContainsKey(_set)) { ScriptableObject so = LoadFactory.Instance.LoadScriptableObject(_set.ToString(), "MeatBall", "Set"); if (so == null) { throw new Exception(_set + " : This Name is no match any Set."); } set = so as MeatBallSet; //給予資料池此物件 dataPool.Add(_set, set); //遊戲物件池也初始化但沒給值 objectPool.Add(_set, new List <MeatBallSet>()); } else { set = dataPool[_set]; } return(set); }