コード例 #1
0
ファイル: UIPerkMenu.cs プロジェクト: phelow/FallOfTheTzar
    public void OnUnlockPerkButton(PerkTB perk)
    {
        if (perk.cost > GetPlayerPoint())
        {
            Debug.Log("Insufficient Points!");
            //UINGUISetup.DisplayMessage("Insufficient Points!");
            return;
        }

        if (PerkManagerTB.UnlockPerk(selectedID))
        {
            Debug.Log(perk.name + " has been unlocked");
            //UINGUISetup.DisplayMessage(selectedPerk.name+" has been unlocked");
        }
    }
コード例 #2
0
 static void CheckDeletePrereq(int ID)
 {
     for (int i = 0; i < perkList.Count; i++)
     {
         PerkTB perk = perkList[i];
         if (perk.prereq.Contains(ID))
         {
             perk.prereq.Remove(ID);
         }
         for (int n = 0; n < perk.prereq.Count; n++)
         {
             if (perk.prereq[n] > ID)
             {
                 perk.prereq[n] -= 1;
             }
         }
     }
 }
コード例 #3
0
    static void SwapPerkInList(int ID1, int ID2)
    {
        PerkTB temp = perkList[ID1].Clone();

        perkList[ID1] = perkList[ID2].Clone();
        perkList[ID2] = temp.Clone();
        InitPerkUIDependency();

        foreach (PerkTB perk in perkList)
        {
            for (int i = 0; i < perk.prereq.Count; i++)
            {
                if (perk.prereq[i] == ID1)
                {
                    perk.prereq[i] = ID2;
                }
                else if (perk.prereq[i] == ID2)
                {
                    perk.prereq[i] = ID1;
                }
            }
        }
    }
コード例 #4
0
ファイル: PerkManagerTB.cs プロジェクト: phelow/FallOfTheTzar
    public PerkTB Clone()
    {
        PerkTB perk = new PerkTB();

        perk.ID              = ID;
        perk.name            = name;
        perk.desp            = desp;
        perk.icon            = icon;
        perk.iconUnavailable = iconUnavailable;
        perk.iconUnlocked    = iconUnlocked;
        //perk.type=type;

        perk.iconName            = iconName;
        perk.iconUnavailableName = iconUnavailableName;
        perk.iconUnlockedName    = iconUnlockedName;


        perk.cost = cost;

        //perk.effects=effects;
        for (int i = 0; i < effects.Count; i++)
        {
            perk.effects.Add(effects[i].Clone());
        }

        perk.prereq         = prereq;
        perk.reqby          = reqby;
        perk.applyToAllUnit = applyToAllUnit;
        perk.unitPrefab     = unitPrefab;

        perk.unlocked = unlocked;

        perk.availableInScene = availableInScene;
        perk.startingState    = startingState;

        return(perk);
    }
コード例 #5
0
ファイル: PerkManagerTB.cs プロジェクト: phelow/FallOfTheTzar
 public static bool UnlockPerk(PerkTB perk)
 {
     return UnlockPerk(perk, true);
 }
コード例 #6
0
ファイル: PerkTBEditorWindow.cs プロジェクト: justking14/FOTZ
    void OnGUI()
    {
        if(window==null) Init();

        if(GUI.Button(new Rect(5, 10, 100, 30), "New Perk")){
            PerkTB perk=new PerkTB();
            perk.ID=GenerateNewID();
            perkIDList.Add(perk.ID);
            perk.name="Perk "+perkList.Count;
            perkList.Add(perk);

            NewSelection(perkList.Count-1);
            delete=-1;

            GUI.changed=true;
        }
        if(selectedPerkID>=0 && selectedPerkID<perkList.Count){
            if(GUI.Button(new Rect(115, 10, 100, 30), "Clone Perk")){
                PerkTB perk=perkList[selectedPerkID].Clone();
                perk.ID=GenerateNewID();
                perkIDList.Add(perk.ID);
                perkList.Add(perk);

                NewSelection(perkList.Count-1);
                delete=-1;

                GUI.changed=true;
            }
        }

        cont=new GUIContent("Reset Perk", "Reset all persistant perk progress made in gameplay");
        if(GUI.Button(new Rect(window.position.width-110, 10, 100, 30), cont)){
            ResetAllPerk();
        }

        GUI.Box(new Rect(5, 50, window.position.width-10, 185), "");
        scrollPos = GUI.BeginScrollView(new Rect(5, 55, window.position.width-12, 175), scrollPos, new Rect(5, 50, window.position.width-40, 10+((perkList.Count-1)/3)*35));

        int row=0;
        int column=0;
        for(int i=0; i<perkList.Count; i++){

            GUIStyle style=GUI.skin.label;
            style.alignment=TextAnchor.MiddleCenter;
            if(swapID==i) GUI.color=new Color(.9f, .9f, .0f, 1);
            else GUI.color=new Color(.8f, .8f, .8f, 1);
            GUI.Box(new Rect(10+column*210, 50+row*30, 25, 25), "");
            if(GUI.Button(new Rect(10+column*210, 50+row*30, 25, 25), "")){
                delete=-1;
                if(swapID==i) swapID=-1;
                else if(swapID==-1) swapID=i;
                else{
                    SwapPerkInList(swapID, i);
                    swapID=-1;
                }
            }
            GUI.Label(new Rect(8+column*210, 50+row*30, 25, 25), i.ToString(), style);
            GUI.color=Color.white;
            style.alignment=TextAnchor.MiddleLeft;

            if(selectedPerkID==i) GUI.color = Color.green;
            if(perkList[selectedPerkID].prereq.Contains(i)) GUI.color=new Color(0, 1f, 1f, 1f);
            style=GUI.skin.button;
            style.fontStyle=FontStyle.Bold;

            GUI.SetNextControlName ("PerkButton");
            if(GUI.Button(new Rect(10+27+column*210, 50+row*30, 100, 25), perkList[i].name, style)){
                GUI.FocusControl ("PerkButton");
                NewSelection(i);
                delete=-1;
            }
            GUI.color = Color.white;
            style.fontStyle=FontStyle.Normal;

            if(delete!=i){
                if(GUI.Button(new Rect(10+27+102+column*210, 50+row*30, 25, 25), "X")){
                    delete=i;
                }
            }
            else{
                GUI.color = Color.red;
                if(GUI.Button(new Rect(10+27+102+column*210, 50+row*30, 55, 25), "Delete")){
                    CheckDeletePrereq(i);
                    perkIDList.Remove(perkList[i].ID);
                    perkList.RemoveAt(i);
                    InitPerkUIDependency();
                    if(i<=selectedPerkID) selectedPerkID-=1;
                    delete=-1;

                    GUI.changed=true;
                }
                GUI.color = Color.white;
            }

            column+=1;
            if(column==3){
                column=0;
                row+=1;
            }
        }

        GUI.EndScrollView();

        if(selectedPerkID>-1 && selectedPerkID<perkList.Count){
            PerkConfigurator();
        }

        if(GUI.changed) EditorUtility.SetDirty(prefab);
    }
コード例 #7
0
ファイル: UnitTB.cs プロジェクト: phelow/FallOfTheTzar
	public void OnPerkUnlock(PerkTB perk){
		if(GameControlTB.IsPlayerFaction(factionID)){
			if(perk.applyToAllUnit){
				InitPerkBonus();
			}
			else{
				if(perk.unitPrefabID.Contains(prefabID)){
					InitPerkBonus();
				}
			}
		}
	}
コード例 #8
0
ファイル: PerkManagerTB.cs プロジェクト: phelow/FallOfTheTzar
    public static bool UnlockPerk(PerkTB perk, bool flag)
    {
        if (perk.unlocked)
        {
            Debug.Log("attemp to unlock unlocked perk");
            return(false);
        }

        perk.unlocked = true;

        perkPoint += 1;

        if (flag)
        {
            if (!instance.usePersistentData)
            {
                instance.point -= perk.cost;
            }
            else
            {
                GlobalStatsTB.GainPlayerPoint(-perk.cost);
            }
        }

        if (perk.applyToAllUnit)
        {
            for (int i = 0; i < perk.effects.Count; i++)
            {
                PerkEffectTB effect = perk.effects[i];

                int effectID = (int)effect.type;

                if (effect.isModifier)
                {
                    globalUnitStats.stats[effectID].mod += effect.value;
                }
                else
                {
                    globalUnitStats.stats[effectID].value += effect.value;
                }
            }
        }
        else
        {
            for (int i = 0; i < unitStats.Count; i++)
            {
                if (perk.unitPrefab.Contains(unitStats[i].unit))
                {
                    perk.unitPrefabID.Add(unitStats[i].unit.prefabID);

                    for (int j = 0; j < perk.effects.Count; j++)
                    {
                        PerkEffectTB effect = perk.effects[j];

                        int effectID = (int)effect.type;

                        if (effect.isModifier)
                        {
                            unitStats[i].stats[effectID].mod += effect.value;
                        }
                        else
                        {
                            unitStats[i].stats[effectID].value += effect.value;
                        }
                    }

                    break;
                }
            }
        }

        if (onPerkUnlockE != null)
        {
            onPerkUnlockE(perk);
        }

        return(true);
    }
コード例 #9
0
ファイル: PerkManagerTB.cs プロジェクト: phelow/FallOfTheTzar
 public static bool UnlockPerk(PerkTB perk)
 {
     return(UnlockPerk(perk, true));
 }
コード例 #10
0
ファイル: PerkManagerTB.cs プロジェクト: phelow/FallOfTheTzar
    /*
     * void OnGUI(){
     *
     *      int startX=10;
     *      int startY=10;
     *
     *      GUI.Label(new Rect(startX, startY, 150, 25), "perk point: "+perkPoint);
     *      startY+=30;
     *
     *      for(int i=0; i<perkList.Count; i++){
     *              PerkTB perk=perkList[i];
     *              if(perk.unlocked){
     *                      GUI.Label(new Rect(startX, startY, 100, 25), perk.name);
     *              }
     *              else{
     *                      if(perk.IsAvailable()){
     *                              if(GUI.Button(new Rect(startX, startY, 100, 25), perk.name)){
     *                                      UnlockPerk(perk);
     *                              }
     *                      }
     *                      else{
     *                              GUI.Box(new Rect(startX, startY, 100, 25), perk.name);
     *                      }
     *              }
     *              startY+=30;
     *      }
     *
     *      if(GUI.Button(new Rect(startX, startY+30, 100, 25), "reset all")){
     *              ResetPerk();
     *      }
     * }
     */


    public static void LoadPerk()
    {
        GameObject obj = Resources.Load("PrefabList/PerkTBListPrefab", typeof(GameObject)) as GameObject;

        if (obj == null)
        {
            Debug.Log("load perk fail, make sure the resource file exists");
            return;
        }

        PerkTBListPrefab prefab = obj.GetComponent <PerkTBListPrefab>();

        perkList = prefab.perkTBList;

        if (!instance.usePersistentData)
        {
            for (int i = 0; i < perkList.Count; i++)
            {
                perkList[i] = perkList[i].Clone();
            }
        }

        //check local perk, synchronice the list, set the lock/unlock list
        for (int i = 0; i < perkList.Count; i++)
        {
            PerkTB perk = perkList[i];
            for (int j = 0; j < instance.localPerkList.Count; j++)
            {
                PerkTB localPerk = instance.localPerkList[j];
                if (perk.ID == localPerk.ID)
                {
                    if (!localPerk.availableInScene)
                    {
                        perkList.RemoveAt(i);
                        i -= 1;
                    }
                    else
                    {
                        if (localPerk.startingState == _StartingState.Locked)
                        {
                            perk.unlocked = false;
                        }
                        else if (localPerk.startingState == _StartingState.Unlocked)
                        {
                            perk.unlocked = true;
                        }
                        else if (localPerk.startingState == _StartingState.Default)
                        {
                        }
                    }
                    break;
                }
            }
        }


        //re-'unlocked' unlocked perk, to register the perk point and etc.
        for (int i = 0; i < perkList.Count; i++)
        {
            if (perkList[i].unlocked)
            {
                UnlockPerk(perkList[i], false);
            }
        }
    }
コード例 #11
0
    void PerkConfigurator()
    {
        int startY = 245;
        int startX = 360;
        int spaceY = 18;

        GUIStyle style = new GUIStyle();

        style.wordWrap = true;

        PerkTB perk = perkList[selectedPerkID];

        EditorGUI.LabelField(new Rect(startX, startY, 200, 20), "Default Icon: ");
        perk.icon = (Texture)EditorGUI.ObjectField(new Rect(startX + 10, startY + 17, 60, 60), perk.icon, typeof(Texture), false);
        startX   += 100;

        EditorGUI.LabelField(new Rect(startX, startY, 200, 34), "Unavailable: ");
        perk.iconUnavailable = (Texture)EditorGUI.ObjectField(new Rect(startX + 10, startY + 17, 60, 60), perk.iconUnavailable, typeof(Texture), false);
        startX += 80;

        EditorGUI.LabelField(new Rect(startX, startY, 200, 34), "Unlocked: ");
        perk.iconUnlocked = (Texture)EditorGUI.ObjectField(new Rect(startX, startY + 17, 60, 60), perk.iconUnlocked, typeof(Texture), false);


        if (perk.icon != null && perk.icon.name != perk.iconName)
        {
            perk.iconName = perk.icon.name;
            //GUI.changed=true;
        }
        if (perk.iconUnavailable != null && perk.iconUnavailable.name != perk.iconUnavailableName)
        {
            perk.iconUnavailableName = perk.iconUnavailable.name;
            //GUI.changed=true;
        }
        if (perk.iconUnlocked != null && perk.iconUnlocked.name != perk.iconUnlockedName)
        {
            perk.iconUnlockedName = perk.iconUnlocked.name;
            //GUI.changed=true;
        }



        //~ startX+=100;
        //~ EditorGUI.LabelField(new Rect(startX, startY, 200, 34), "Description: ");
        //~ startY+=17;
        //~ EditorGUI.LabelField(new Rect(startX, startY, window.position.width-startX-20, 120), perkTypeTooltip[(int)perk.type], style);

        startX = 5;
        startY = 245;

        cont = new GUIContent("Name: ", "The name of the perk");
        EditorGUI.LabelField(new Rect(startX, startY, 200, 20), cont);
        perk.name = EditorGUI.TextField(new Rect(startX + 50, startY - 1, 150, 17), perk.name);


        cont = new GUIContent("cost:", "The cost to unlock the perk");
        EditorGUI.LabelField(new Rect(startX + 225, startY, 180, 17), cont);
        perk.cost = EditorGUI.IntField(new Rect(startX + 260, startY, 60, 17), perk.cost);


        startY += 5;
        cont    = new GUIContent("Description (to be used in runtime): ", "");
        EditorGUI.LabelField(new Rect(startX, startY += spaceY, 250, 20), cont);
        perk.desp = EditorGUI.TextArea(new Rect(startX, startY + spaceY - 3, 320, 50), perk.desp);

        //startY+=10;
        //~ int perkType=(int)perk.type;
        //~ EditorGUI.LabelField(new Rect(startX, startY, 200, 20), "Type: ");
        //~ perkType=EditorGUI.Popup(new Rect(startX+50, startY, 150, 20), perkType, perkTypeLabel);
        //~ perk.type=(_PerkTypeTB)perkType;
        //if(perkType!=(int)perk.type) perk.SetType((_PerkTypeTB)perkType);

        //~ startY+=60;
        //~ cont=new GUIContent("cost:", "The cost to unlock the perk");
        //~ EditorGUI.LabelField(new Rect(startX, startY+=spaceY, 180, 17), cont);
        //~ perk.cost=EditorGUI.IntField(new Rect(startX+100, startY, 80, 17), perk.cost);


        startY += 60;


        cont = new GUIContent("Effect Types:", "The type of effect for this perk, determine what the perk do\nEach perk can only have up to 3 effects");
        EditorGUI.LabelField(new Rect(startX, startY += spaceY, 180, 17), cont);



        int tempStartY = startY;

        for (int n = 0; n < perk.effects.Count; n++)
        {
            PerkEffectTB effect   = perk.effects[n];
            int          perkType = (int)effect.type;
            cont  = new GUIContent("Type:", "The type of effect");
            contL = new GUIContent[perkTypeLabel.Length];
            for (int i = 0; i < contL.Length; i++)
            {
                contL[i] = new GUIContent(perkTypeLabel[i], perkTypeTooltip[i]);
            }
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, 180, 17), cont);
            perkType    = EditorGUI.Popup(new Rect(startX + 50, startY, 130, 17), perkType, contL);
            effect.type = (_PerkTypeTB)perkType;

            cont = new GUIContent("value:", "The value for this particular effect");
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, 180, 17), cont);
            effect.value = EditorGUI.FloatField(new Rect(startX + 100, startY, 80, 17), effect.value);

            int modifierFlag = 0;
            if (effect.isModifier)
            {
                modifierFlag = 1;
            }
            cont = new GUIContent("value type:", "how the value will be applied");
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, 180, 17), cont);
            contL = new GUIContent[2];
            for (int i = 0; i < contL.Length; i++)
            {
                contL[i] = new GUIContent(modTypeLabel[i], modTypeTooltip[i]);
            }
            modifierFlag = EditorGUI.Popup(new Rect(startX + 100, startY, 80, 17), modifierFlag, contL);
            if (modifierFlag == 1)
            {
                effect.isModifier = true;
            }
            else
            {
                effect.isModifier = false;
            }

            if (GUI.Button(new Rect(startX + 50, startY += spaceY, 130, 15), "Remove Effect"))
            {
                perk.effects.RemoveAt(n);
                n -= 1;
            }

            startY  = tempStartY;
            startX += 210;
        }

        if (perk.effects.Count < 3)
        {
            if (GUI.Button(new Rect(startX, startY += spaceY, 150, 20), "Add"))
            {
                perk.effects.Add(new PerkEffectTB());
            }
        }

        startX = 5;
        //startY+=100;
        startY = 460;

        cont = new GUIContent("PerkPoint Required:", "The perk point required before the perk can be unlocked\neach unlocked perk gives one perk point");
        EditorGUI.LabelField(new Rect(startX, startY, 180, 17), cont);
        perk.pointReq = EditorGUI.IntField(new Rect(startX + 120, startY, 60, 17), perk.pointReq);
        spaceY       += 5;

        prereq = perk.prereq;
        cont   = new GUIContent("Pre-req Perk(s): ", "perk that required to be unlocked before this perk comes available to be unlocked");
        EditorGUI.LabelField(new Rect(startX, startY += spaceY, 200, 20), cont);       //startY-=5;
        //existing prereq
        for (int i = 0; i < prereq.Count; i++)
        {
            int existPrereq = prereq[i];
            EditorGUI.LabelField(new Rect(startX, startY += spaceY - 5, 150, 20), " - ");
            existPrereq = EditorGUI.Popup(new Rect(startX + 20, startY, 160, 20), existPrereq, perkListLabel);
            if (existPrereq != selectedPerkID)
            {
                prereq[i] = existPrereq;
            }
            if (existPrereq == perkList.Count)
            {
                perk.prereq.RemoveAt(i);
                perkList[i].reqby.Remove(selectedPerkID);
            }
        }
        //assignNewOne
        if (prereq.Count < 3)
        {
            EditorGUI.LabelField(new Rect(startX, startY += spaceY - 5, 150, 20), "Add new: ");
            newPrereq = EditorGUI.Popup(new Rect(startX + 70, startY, 110, 20), newPrereq, perkListLabel);
            if (newPrereq < perkList.Count)
            {
                if (!perk.prereq.Contains(newPrereq) && selectedPerkID != newPrereq)
                {
                    perk.prereq.Add(newPrereq);
                    perkList[newPrereq].reqby.Add(selectedPerkID);
                }
                newPrereq = perkList.Count;
            }
        }


        startY = 460;
        startX = 220;

        cont = new GUIContent("Apply to all unit: ", "check to if effect apply universally to all unit\notherwise specify the units to be affected");
        EditorGUI.LabelField(new Rect(startX, startY, 200, 20), cont);
        perk.applyToAllUnit = EditorGUI.Toggle(new Rect(startX + 100, startY, 200, 20), perk.applyToAllUnit);

        if (!perk.applyToAllUnit)
        {
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, 200, 20), "Select unit to be affected: ");

            int index = 0;

            for (int i = 0; i < perk.unitPrefab.Count; i++)
            {
                if (perk.unitPrefab[i] == null)
                {
                    perk.unitPrefab.RemoveAt(i);    i -= 1;
                }
            }

            for (int i = 0; i < perk.unitPrefab.Count; i++)
            {
                for (int n = 0; n < unitList.Count; n++)
                {
                    if (perk.unitPrefab[i] == unitList[n])
                    {
                        EditorGUI.LabelField(new Rect(startX, startY += spaceY, 150, 20), " - ");
                        index = n;
                        index = EditorGUI.Popup(new Rect(startX + 15, startY, 160, 20), index, nameList);
                        if (!perk.unitPrefab.Contains(unitList[index]))
                        {
                            perk.unitPrefab[i] = unitList[index];
                        }
                        break;
                    }
                }
            }

            index = nameList.Length - 1;
            EditorGUI.LabelField(new Rect(startX, startY += spaceY, 150, 20), "Add new: ");
            index = EditorGUI.Popup(new Rect(startX + 70, startY, 105, 20), index, nameList);
            if (index < nameList.Length - 1)
            {
                if (!perk.unitPrefab.Contains(unitList[index]))
                {
                    perk.unitPrefab.Add(unitList[index]);
                }
            }
        }



        if (GUI.changed)
        {
            EditorUtility.SetDirty(prefab);
        }
    }
コード例 #12
0
    void OnGUI()
    {
        if (window == null)
        {
            Init();
        }

        if (GUI.Button(new Rect(5, 10, 100, 30), "New Perk"))
        {
            PerkTB perk = new PerkTB();
            perk.ID = GenerateNewID();
            perkIDList.Add(perk.ID);
            perk.name = "Perk " + perkList.Count;
            perkList.Add(perk);

            NewSelection(perkList.Count - 1);
            delete = -1;

            GUI.changed = true;
        }
        if (selectedPerkID >= 0 && selectedPerkID < perkList.Count)
        {
            if (GUI.Button(new Rect(115, 10, 100, 30), "Clone Perk"))
            {
                PerkTB perk = perkList[selectedPerkID].Clone();
                perk.ID = GenerateNewID();
                perkIDList.Add(perk.ID);
                perkList.Add(perk);

                NewSelection(perkList.Count - 1);
                delete = -1;

                GUI.changed = true;
            }
        }

        cont = new GUIContent("Reset Perk", "Reset all persistant perk progress made in gameplay");
        if (GUI.Button(new Rect(window.position.width - 110, 10, 100, 30), cont))
        {
            ResetAllPerk();
        }


        GUI.Box(new Rect(5, 50, window.position.width - 10, 185), "");
        scrollPos = GUI.BeginScrollView(new Rect(5, 55, window.position.width - 12, 175), scrollPos, new Rect(5, 50, window.position.width - 40, 10 + ((perkList.Count - 1) / 3) * 35));

        int row    = 0;
        int column = 0;

        for (int i = 0; i < perkList.Count; i++)
        {
            GUIStyle style = GUI.skin.label;
            style.alignment = TextAnchor.MiddleCenter;
            if (swapID == i)
            {
                GUI.color = new Color(.9f, .9f, .0f, 1);
            }
            else
            {
                GUI.color = new Color(.8f, .8f, .8f, 1);
            }
            GUI.Box(new Rect(10 + column * 210, 50 + row * 30, 25, 25), "");
            if (GUI.Button(new Rect(10 + column * 210, 50 + row * 30, 25, 25), ""))
            {
                delete = -1;
                if (swapID == i)
                {
                    swapID = -1;
                }
                else if (swapID == -1)
                {
                    swapID = i;
                }
                else
                {
                    SwapPerkInList(swapID, i);
                    swapID = -1;
                }
            }
            GUI.Label(new Rect(8 + column * 210, 50 + row * 30, 25, 25), i.ToString(), style);
            GUI.color       = Color.white;
            style.alignment = TextAnchor.MiddleLeft;

            if (selectedPerkID == i)
            {
                GUI.color = Color.green;
            }
            if (perkList[selectedPerkID].prereq.Contains(i))
            {
                GUI.color = new Color(0, 1f, 1f, 1f);
            }
            style           = GUI.skin.button;
            style.fontStyle = FontStyle.Bold;

            GUI.SetNextControlName("PerkButton");
            if (GUI.Button(new Rect(10 + 27 + column * 210, 50 + row * 30, 100, 25), perkList[i].name, style))
            {
                GUI.FocusControl("PerkButton");
                NewSelection(i);
                delete = -1;
            }
            GUI.color       = Color.white;
            style.fontStyle = FontStyle.Normal;

            if (delete != i)
            {
                if (GUI.Button(new Rect(10 + 27 + 102 + column * 210, 50 + row * 30, 25, 25), "X"))
                {
                    delete = i;
                }
            }
            else
            {
                GUI.color = Color.red;
                if (GUI.Button(new Rect(10 + 27 + 102 + column * 210, 50 + row * 30, 55, 25), "Delete"))
                {
                    CheckDeletePrereq(i);
                    perkIDList.Remove(perkList[i].ID);
                    perkList.RemoveAt(i);
                    InitPerkUIDependency();
                    if (i <= selectedPerkID)
                    {
                        selectedPerkID -= 1;
                    }
                    delete = -1;

                    GUI.changed = true;
                }
                GUI.color = Color.white;
            }

            column += 1;
            if (column == 3)
            {
                column = 0;
                row   += 1;
            }
        }

        GUI.EndScrollView();

        if (selectedPerkID > -1 && selectedPerkID < perkList.Count)
        {
            PerkConfigurator();
        }

        if (GUI.changed)
        {
            EditorUtility.SetDirty(prefab);
        }
    }
コード例 #13
0
    public override void OnInspectorGUI()
    {
        pm = (PerkManagerTB)target;

        //DrawDefaultInspector();


        EditorGUILayout.Space();
        EditorGUILayout.Space();

        cont = new GUIContent("Dont Destroy On Load:", "Check to use this component through out the game\nWhen checked, setting in other PerkManager wont take effect after this scene is loaded\nIntended for game where perk progress is persistant");
        EditorGUILayout.BeginHorizontal("");
        EditorGUILayout.LabelField(cont, GUILayout.MinWidth(230));
        pm.dontDestroyOnLoad = EditorGUILayout.Toggle(pm.dontDestroyOnLoad);
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.Space();

        cont = new GUIContent("Use Persistent Data:", "Check to make any perk progression persistant. Otherwise any progression made will be reset upon leaving the level.\nAny persistant progression can be reset using PerkEditorWindow.");
        EditorGUILayout.BeginHorizontal("");
        EditorGUILayout.LabelField(cont, GUILayout.MinWidth(230));
        pm.usePersistentData = EditorGUILayout.Toggle(pm.usePersistentData);
        EditorGUILayout.EndHorizontal();


        if (!pm.usePersistentData)
        {
            cont     = new GUIContent("Starting Point:", "The point available for player to unlock perk in this level,\nor this play through if dontDestroyOnLoad is checked");
            pm.point = EditorGUILayout.IntField(cont, pm.point);
        }
        EditorGUILayout.Space();


        cont = new GUIContent("Set All To Default", "Set all perk starting state to default\n\nAll perk will be lock/unlocked state will be carried forward from previous play through");
        if (GUILayout.Button(cont, GUILayout.MaxHeight(17)))
        {
            for (int i = 0; i < pm.localPerkList.Count; i++)
            {
                pm.localPerkList[i].startingState = _StartingState.Default;
            }
        }
        cont = new GUIContent("Set All To Locked", "Set all perk starting state to locked\nAll perk will be locked from start, override any previous progress");
        if (GUILayout.Button("Set All To Locked", GUILayout.MaxHeight(17)))
        {
            for (int i = 0; i < pm.localPerkList.Count; i++)
            {
                pm.localPerkList[i].startingState = _StartingState.Locked;
            }
        }
        cont = new GUIContent("Set All To Unlocked", "Set all perk starting state to unlocked\nAll perk will be unlocked from start, override any previous progress");
        if (GUILayout.Button("Set All To Unlocked", GUILayout.MaxHeight(17)))
        {
            for (int i = 0; i < pm.localPerkList.Count; i++)
            {
                pm.localPerkList[i].startingState = _StartingState.Unlocked;
            }
        }


        EditorGUILayout.Space();
        EditorGUILayout.Space();

        for (int m = 0; m < pm.localPerkList.Count; m++)
        {
            PerkTB perk = pm.localPerkList[m];

            GUILayout.BeginHorizontal();

            cont = new GUIContent(perk.icon, perk.desp);
            GUILayout.Box(cont, GUILayout.Width(35), GUILayout.Height(35), GUILayout.MaxHeight(35));

            GUILayout.BeginVertical();

            GUILayout.BeginHorizontal();
            cont = new GUIContent(perk.name, "Check if perk is available in this scene");
            GUILayout.Label(cont, GUILayout.ExpandWidth(true), GUILayout.MaxHeight(15));

            perk.availableInScene = EditorGUILayout.Toggle(perk.availableInScene, GUILayout.MaxWidth(90), GUILayout.MaxHeight(15), GUILayout.ExpandWidth(false));
            GUILayout.EndHorizontal();

            if (perk.availableInScene)
            {
                int startingState = (int)perk.startingState;
                cont  = new GUIContent("StartingState:", "The starting unlocked state of the perk");
                contL = new GUIContent[startingStateLabel.Length];
                for (int i = 0; i < contL.Length; i++)
                {
                    contL[i] = new GUIContent(startingStateLabel[i], startingStateTooltip[i]);
                }
                startingState      = EditorGUILayout.IntPopup(cont, startingState, contL, intVal, GUILayout.MaxHeight(15));
                perk.startingState = (_StartingState)startingState;
            }

            GUILayout.EndVertical();

            GUILayout.EndHorizontal();
        }


        if (GUI.changed)
        {
            EditorUtility.SetDirty(pm);
        }
    }
コード例 #14
0
ファイル: UIPerkMenu.cs プロジェクト: phelow/FallOfTheTzar
    public void DrawPerkMenu(bool preBattle)
    {
        //GUI.depth = 0;
        GUIStyle style = new GUIStyle();

        style.fontSize = 20;      style.fontStyle = FontStyle.Bold; style.normal.textColor = UI.colorH;       style.alignment = TextAnchor.UpperCenter;


        List <PerkTB> perkList = PerkManagerTB.GetAllPerks();
        PerkTB        perk     = null;


        int winWidth  = 595;
        int winHeight = 470;

        int startX = Screen.width / 2 - winWidth / 2;
        int startY = Screen.height / 2 - winHeight / 2;

        int rowLimit = 8;

        int row = 0;              int column = 0;

        for (int i = 0; i < 3; i++)
        {
            GUI.Box(new Rect(startX, startY, winWidth, winHeight), "");
        }

        GUI.Label(new Rect(startX, startY + 10, winWidth, winHeight), "Perk Menu", style);


        int point = 0;

        if (!PerkManagerTB.UsePersistentData())
        {
            point = PerkManagerTB.GetPoint();
        }
        else
        {
            point = GlobalStatsTB.GetPlayerPoint();
        }

        style.fontSize = 14;      style.fontStyle = FontStyle.Bold; style.normal.textColor = UI.colorH;       style.alignment = TextAnchor.UpperLeft;
        if (!preBattle)
        {
            GUI.Label(new Rect(startX + 10, startY + 5, 150, 25), "Point: " + point, style);
        }
        GUI.Label(new Rect(startX + 10, startY + 20, 150, 25), "PerkPoint: " + PerkManagerTB.perkPoint, style);

        if (!preBattle)
        {
            if (GUI.Button(new Rect(startX + winWidth - 35, startY + 5, 30, 30), "X", UI.buttonStyle))
            {
                OnPerkmenu();
            }
        }

        startX += 10;     startY += 40;

        int scrollLength = (int)(Mathf.Ceil(perkList.Count / 8 + 1) * 70);

        if (perkList.Count % rowLimit == 0)
        {
            scrollLength -= 70;
        }
        Rect viewRect   = new Rect(startX, startY, winWidth - 20, 280);
        Rect scrollRect = new Rect(startX, startY, winWidth - 50, scrollLength);

        GUI.Box(viewRect, "");
        scrollPosition = GUI.BeginScrollView(viewRect, scrollPosition, scrollRect);

        startX += 5;      startY += 5;

        for (int ID = 0; ID < perkList.Count; ID++)
        {
            perk = perkList[ID];
            Texture icon = null;
            if (perk.unlocked)
            {
                icon = perk.iconUnlocked;
            }
            else
            {
                if (perk.IsAvailable() == 0)
                {
                    icon = perk.icon;
                }
                else
                {
                    icon = perk.iconUnavailable;
                }
            }

            if (selectedID == ID)
            {
                if (GUI.Button(new Rect(startX + column * 70 - 3, startY + row * 70 - 3, 66, 66), icon))
                {
                    selectedID = ID;
                }
            }
            else
            {
                if (GUI.Button(new Rect(startX + column * 70, startY + row * 70, 60, 60), icon))
                {
                    selectedID = ID;
                }
            }

            column += 1;
            if (column == 8)
            {
                row += 1; column = 0;
            }
        }

        GUI.EndScrollView();

        startY += 285;
        GUI.Box(new Rect(startX - 5, startY, winWidth - 20, 130), "");

        perk = perkList[selectedID];
        int perkAvai = perk.IsAvailable();

        string status = "";

        if (perk.unlocked)
        {
            status = " (Unlocked)";
        }
        else if (perkAvai != 0)
        {
            status = " (Unavailable)";
        }

        style.fontSize = 17;      style.alignment = TextAnchor.UpperLeft;   style.normal.textColor = UI.colorH;
        GUI.Label(new Rect(startX, startY += 5, winWidth - 30, 30), perk.name + status, style);

        style.fontSize = 17;      style.alignment = TextAnchor.UpperRight;  style.normal.textColor = UI.colorH;
        GUI.Label(new Rect(startX, startY += 5, winWidth - 30, 30), "Cost: " + perk.cost, style);

        style.alignment = TextAnchor.UpperLeft;   style.normal.textColor = UI.colorN; style.wordWrap = true;
        GUI.Label(new Rect(startX, startY += 25, winWidth - 30, 30), perk.desp, style);



        string requireTxt = "";



        //inssufficient points
        if (perkAvai == 1)
        {
            requireTxt = "Require " + perk.cost + "point";
        }
        //min perk point not reach
        else if (perkAvai == 2)
        {
            requireTxt = "Require " + perk.pointReq + " perk points";
        }
        //pre-req perk not unlocked
        else if (perkAvai == 3)
        {
            string text = "Require: ";

            List <int> list = perk.prereq;
            int        i    = 0;
            foreach (int ID in list)
            {
                if (i > 0)
                {
                    text += ", ";
                }
                text += PerkManagerTB.GetAllPerks()[ID].name;
                i    += 1;
            }

            requireTxt = text;
        }

        style.fontSize = 14;      style.alignment = TextAnchor.UpperLeft;   style.normal.textColor = Color.red; style.wordWrap = false;
        GUI.Label(new Rect(startX, startY + 75, winWidth - 30, 30), requireTxt, style);


        if (!perk.unlocked && perkAvai == 0)
        {
            if (GUI.Button(new Rect(startX + winWidth - 30 - 120, startY += 60, 120, 30), "Unlock", UI.buttonStyle))
            {
                OnUnlockPerkButton(perk);
            }
        }
    }
コード例 #15
0
ファイル: PerkManagerTB.cs プロジェクト: phelow/FallOfTheTzar
    public static bool UnlockPerk(PerkTB perk, bool flag)
    {
        if(perk.unlocked){
            Debug.Log("attemp to unlock unlocked perk");
            return false;
        }

        perk.unlocked=true;

        perkPoint+=1;

        if(flag){
            if(!instance.usePersistentData) instance.point-=perk.cost;
            else GlobalStatsTB.GainPlayerPoint(-perk.cost);
        }

        if(perk.applyToAllUnit){
            for(int i=0; i<perk.effects.Count; i++){
                PerkEffectTB effect=perk.effects[i];

                int effectID=(int)effect.type;

                if(effect.isModifier) globalUnitStats.stats[effectID].mod+=effect.value;
                else globalUnitStats.stats[effectID].value+=effect.value;
            }
        }
        else{
            for(int i=0; i<unitStats.Count; i++){
                if(perk.unitPrefab.Contains(unitStats[i].unit)){

                    perk.unitPrefabID.Add(unitStats[i].unit.prefabID);

                    for(int j=0; j<perk.effects.Count; j++){
                        PerkEffectTB effect=perk.effects[j];

                        int effectID=(int)effect.type;

                        if(effect.isModifier) unitStats[i].stats[effectID].mod+=effect.value;
                        else unitStats[i].stats[effectID].value+=effect.value;
                    }

                    break;
                }
            }
        }

        if(onPerkUnlockE!=null) onPerkUnlockE(perk);

        return true;
    }
コード例 #16
0
ファイル: PerkManagerTB.cs プロジェクト: phelow/FallOfTheTzar
    public PerkTB Clone()
    {
        PerkTB perk=new PerkTB();

        perk.ID=ID;
        perk.name=name;
        perk.desp=desp;
        perk.icon=icon;
        perk.iconUnavailable=iconUnavailable;
        perk.iconUnlocked=iconUnlocked;
        //perk.type=type;

        perk.iconName=iconName;
        perk.iconUnavailableName=iconUnavailableName;
        perk.iconUnlockedName=iconUnlockedName;

        perk.cost=cost;

        //perk.effects=effects;
        for(int i=0; i<effects.Count; i++){
            perk.effects.Add(effects[i].Clone());
        }

        perk.prereq=prereq;
        perk.reqby=reqby;
        perk.applyToAllUnit=applyToAllUnit;
        perk.unitPrefab=unitPrefab;

        perk.unlocked=unlocked;

        perk.availableInScene=availableInScene;
        perk.startingState=startingState;

        return perk;
    }
コード例 #17
0
ファイル: UIPerkMenu.cs プロジェクト: phelow/FallOfTheTzar
    public void OnUnlockPerkButton(PerkTB perk)
    {
        if(perk.cost>GetPlayerPoint()){
            Debug.Log("Insufficient Points!");
            //UINGUISetup.DisplayMessage("Insufficient Points!");
            return;
        }

        if(PerkManagerTB.UnlockPerk(selectedID)){
            Debug.Log(perk.name+" has been unlocked");
            //UINGUISetup.DisplayMessage(selectedPerk.name+" has been unlocked");
        }
    }