Пример #1
0
 public PerkEffectTB Clone()
 {
     PerkEffectTB effect=new PerkEffectTB();
     effect.type=type;
     effect.value=value;
     effect.isModifier=isModifier;
     return effect;
 }
Пример #2
0
    public PerkEffectTB Clone()
    {
        PerkEffectTB effect = new PerkEffectTB();

        effect.type       = type;
        effect.value      = value;
        effect.isModifier = isModifier;
        return(effect);
    }
Пример #3
0
    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);
    }
Пример #4
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);
        }
    }