public PerkEffectTB Clone() { PerkEffectTB effect=new PerkEffectTB(); effect.type=type; effect.value=value; effect.isModifier=isModifier; return effect; }
public PerkEffectTB Clone() { PerkEffectTB effect = new PerkEffectTB(); effect.type = type; effect.value = value; effect.isModifier = isModifier; return(effect); }
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); }
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); } }