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"); } }
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; } } } }
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; } } } }
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); }
public static bool UnlockPerk(PerkTB perk) { return UnlockPerk(perk, true); }
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); }
public void OnPerkUnlock(PerkTB perk){ if(GameControlTB.IsPlayerFaction(factionID)){ if(perk.applyToAllUnit){ InitPerkBonus(); } else{ if(perk.unitPrefabID.Contains(prefabID)){ InitPerkBonus(); } } } }
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); }
public static bool UnlockPerk(PerkTB perk) { return(UnlockPerk(perk, true)); }
/* * 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); } } }
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); } }
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); } }
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); } }
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); } } }
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; }
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; }
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"); } }