Esempio n. 1
0
    /// <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;
 }
Esempio n. 4
0
    /// <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;
    }
Esempio n. 5
0
    /// <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);
    }
Esempio n. 6
0
    /// <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);
    }