public override void OnInspectorGUI() { Actor myActor = target as Actor; Actor.ActionSource[] sourceValues = Enum.GetValues(typeof(Actor.ActionSource)) as Actor.ActionSource[]; string[] sourceNames = Enum.GetNames(typeof(Actor.ActionSource)); SelectionList <Actor.ActionSource> sources = new SelectionList <Actor.ActionSource>(sourceValues, sourceNames); myActor.actionEffectSource = sources.RadioList("Action Source", myActor.actionEffectSource, 3); myActor.immunities = sources.CheckboxList("Immunities", myActor.immunities, 3); }
public override void OnInspectorGUI() { #region Actor Stats Actor myActor = target as Actor; #region Actor Name myActor.actorName = EditorGUILayout.TextField("Actor Name: ", myActor.actorName); #endregion #region Action Target myActor.actionTarget = (Actor.ActionTarget)EditorGUILayout.EnumPopup("Action Target: ", myActor.actionTarget); #endregion #region Action Effect myActor.actionEffect = (Actor.ActionEffect)EditorGUILayout.EnumPopup("Action Effect: ", myActor.actionEffect); #endregion #region AES & Immunities Actor.ActionSource[] sourceValues = Enum.GetValues(typeof(Actor.ActionSource)) as Actor.ActionSource[]; string[] sourceNames = Enum.GetNames(typeof(Actor.ActionSource)); SelectionList <Actor.ActionSource> sources = new SelectionList <Actor.ActionSource>(sourceValues, sourceNames); myActor.actionEffectSource = sources.RadioList("Action Source: ", myActor.actionEffectSource, 3); myActor.immunities = sources.CheckboxList("Immunities: ", myActor.immunities, 3); #endregion #region MaxHit Points string mhpLabel = "Max Hit Points: "; int newMaxHitPoints = myActor.GetComponent <Actor>().maxHitPoints; newMaxHitPoints = EditorGUILayout.IntSlider(mhpLabel, newMaxHitPoints, 0, 1500); myActor.GetComponent <Actor>().maxHitPoints = newMaxHitPoints; #endregion #region Hit Points string hpLabel = "Hit Points: "; int newHitPoints = myActor.GetComponent <Actor>().hitPoints; newHitPoints = EditorGUILayout.IntSlider(hpLabel, newHitPoints, 1, 100); myActor.GetComponent <Actor>().hitPoints = newHitPoints; #endregion #region Initiative string iLabel = "Initiative: "; int newInitiative = myActor.GetComponent <Actor>().initiative; newInitiative = EditorGUILayout.IntSlider(iLabel, newInitiative, 10, 100); myActor.GetComponent <Actor>().initiative = newInitiative; #endregion #region Damage string dLabel = "Damage: "; int newDamage = myActor.GetComponent <Actor>().damage; newDamage = EditorGUILayout.IntSlider(dLabel, newDamage, 0, 180); myActor.GetComponent <Actor>().damage = newDamage; #endregion #region Percent Chance to Hit string pchLabel = "Percent Chance To Hit: "; int newPcth = myActor.GetComponent <Actor>().percentChanceToHit; newPcth = EditorGUILayout.IntSlider(pchLabel, newPcth, 0, 100); myActor.GetComponent <Actor>().percentChanceToHit = newPcth; #endregion #region Board Position Actor.Position[] positionValues = Enum.GetValues(typeof(Actor.Position)) as Actor.Position[]; string[] positionNames = Enum.GetNames(typeof(Actor.Position)); SelectionList <Actor.Position> positions = new SelectionList <Actor.Position>(positionValues, positionNames); myActor.boardPosition = positions.PositionGrid("Board Position: ", myActor.boardPosition, 3); #endregion #endregion #region AI Authoring if (errorBoxStyle == null) { InitializeStyles(); } showDerivedProperties = EditorGUILayout.Foldout(showDerivedProperties, new GUIContent("Derived Properties", "Properties based on static unit stats.")); if (showDerivedProperties) { derivedStats = AssetDatabase.LoadAssetAtPath("Assets/DerivedProperties.asset", typeof(DerivedStatList)) as DerivedStatList; if (derivedStats == null) { UnityEngine.MonoBehaviour.print("Nope, not there"); derivedStats = ScriptableObject.CreateInstance <DerivedStatList>(); AssetDatabase.CreateAsset(derivedStats, "Assets/DerivedProperties.asset"); AssetDatabase.SaveAssets(); } int nameFieldWidth = 80; for (int i = 0; i < derivedStats.Length; i++) { int statNameWidth = (int)EditorStyles.textField.CalcSize(new GUIContent(derivedStats.list[i].statName + " ")).x; if (statNameWidth > nameFieldWidth) { nameFieldWidth = statNameWidth; } } bool derivedPropEquationChanged = false; EditorGUILayout.BeginVertical(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Name", GUILayout.Width(nameFieldWidth)); EditorGUILayout.LabelField("Expression"); EditorGUILayout.LabelField("Current Value", GUILayout.MaxWidth(90)); EditorGUILayout.EndHorizontal(); for (int i = 0; i < (derivedStats != null ? derivedStats.Length : 0); i++) { EditorGUILayout.BeginHorizontal(); derivedStats.list[i].statName = EditorGUILayout.TextField(derivedStats.list[i].statName, GUILayout.Width(nameFieldWidth)); int derivedValue = 0; string derivedEquationErrorMessage = string.Empty; if (!derivedStats.list[i].TryEvaluate((target as Actor), derivedStats, out derivedValue)) { derivedEquationErrorMessage = "Invalid expression."; } string newDerivedPropEquation = EditorGUILayout.TextField(derivedStats.list[i].expression, derivedEquationErrorMessage.Length == 0 ? EditorStyles.textField : errorBoxStyle); if (derivedEquationErrorMessage.Length > 0) { GUI.Label(GUILayoutUtility.GetLastRect(), new GUIContent(string.Empty, derivedEquationErrorMessage)); } else { EditorGUILayout.LabelField(derivedValue.ToString(), GUILayout.MaxWidth(90)); } if (newDerivedPropEquation != derivedStats.list[i].expression) { derivedPropEquationChanged = true; } derivedStats.list[i].expression = newDerivedPropEquation; EditorGUILayout.EndHorizontal(); } EditorGUILayout.EndVertical(); bool added = false; if (GUILayout.Button("Add")) { added = true; if (derivedStats == null) { derivedStats = new DerivedStatList(); } List <DerivedStat> newDerivedStats; if (derivedStats.list != null) { newDerivedStats = new List <DerivedStat>(derivedStats.list); } else { newDerivedStats = new List <DerivedStat>(); } newDerivedStats.Add(new DerivedStat()); derivedStats.list = newDerivedStats.ToArray(); this.Repaint(); } if (GUI.changed || added) { EditorUtility.SetDirty(derivedStats); serializedObject.ApplyModifiedProperties(); AssetDatabase.SaveAssets(); } if (derivedPropEquationChanged) { this.Repaint(); } DrawDefaultInspector(); } #endregion }
public override void OnInspectorGUI() { Actor editActor = target as Actor; Actor.ActionSource[] immTypeVal = Enum.GetValues(typeof(Actor.ActionSource)) as Actor.ActionSource[]; string[] immTypeName = Enum.GetNames(typeof(Actor.ActionSource)); for (int i = 0; i < immTypeName.Length; i++) { immTypeName[i] += '\t'; } Actor.Position[] posVal = Enum.GetValues(typeof(Actor.Position)) as Actor.Position[]; string[] posName = Enum.GetNames(typeof(Actor.Position)); for (int i = 0; i < posName.Length; i++) { posName[i] += '\t'; } immunityList = new SelectionList <Actor.ActionSource>(immTypeVal, immTypeName); positionList = new SelectionList <Actor.Position>(posVal, posName); #region Name, and HP EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Name"); actName = GUILayout.TextField(editActor.actorName); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Max Hit Points"); maxHP = EditorGUILayout.IntSlider(maxHP, 1, 10000); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Current Hit Points"); currentHP = EditorGUILayout.IntSlider(currentHP, 0, maxHP); EditorGUILayout.EndHorizontal(); #endregion #region Position editPosition = EditorGUILayout.Foldout(editPosition, "Position"); if (editPosition) { boardPos = positionList.RadioList("", boardPos, 2); } #endregion #region Damage EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Damage"); dmg = EditorGUILayout.IntSlider(dmg, 0, 180); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Effect"); EditorGUILayout.EnumFlagsField(effect); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Damage Type"); EditorGUILayout.EnumFlagsField(dmgType); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Attack type"); EditorGUILayout.EnumFlagsField(targetType); EditorGUILayout.EndHorizontal(); #endregion #region Immunities editImmunity = EditorGUILayout.Foldout(editImmunity, "Immunities"); if (editImmunity) { immunities = immunityList.CheckboxList("Immunities", immunities, 2); } #endregion #region AI editAI = EditorGUILayout.Foldout(editAI, "AI Options"); if (editAI) { derivedStats = AssetDatabase.LoadAssetAtPath("Assets/DerivedProperties.asset", typeof(DerivedStatList)) as DerivedStatList; if (derivedStats == null) { derivedStats = ScriptableObject.CreateInstance <DerivedStatList>(); AssetDatabase.CreateAsset(derivedStats, "Assets/DerivedProperties.asset"); AssetDatabase.SaveAssets(); } EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Chance to Hit"); chanceToHit = EditorGUILayout.IntSlider(chanceToHit, 0, 100); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Inititive"); init = EditorGUILayout.IntSlider(init, 5, 100); init = init / 5; init *= 5; EditorGUILayout.EndHorizontal(); EditorGUILayout.Separator(); EditorGUILayout.LabelField("AI Targeting Filters"); EditorGUILayout.LabelField("Filter order does matter (Ordered top to bottom)"); EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Name", GUILayout.MaxWidth(80)); EditorGUILayout.LabelField("Expression"); EditorGUILayout.EndHorizontal(); FilterLayout(); EditorGUILayout.Separator(); bool added = false; if (GUILayout.Button("Add Filter")) { added = true; AddButtonOnClick(); } if (GUI.changed || added) { EditorUtility.SetDirty(derivedStats); serializedObject.ApplyModifiedProperties(); AssetDatabase.SaveAssets(); } } #endregion #region Assignment editActor.actorName = actName; editActor.boardPosition = boardPos; editActor.maxHitPoints = maxHP; editActor.damage = dmg; editActor.actionEffect = effect; editActor.actionEffectSource = dmgType; editActor.immunities = immunities; editActor.actionTarget = targetType; editActor.percentChanceToHit = chanceToHit; editActor.initiative = init; editActor.hitPoints = currentHP; #endregion }
public override void OnInspectorGUI() { Actor myActor = target as Actor; //Actor name can not be empty, default to name of game object myActor.actorName = EditorGUILayout.TextField("Actor Name", myActor.actorName); if (myActor.actorName == "") { myActor.actorName = myActor.name; } EditorGUILayout.Space(); //Max HP must be > 0 int newHP = EditorGUILayout.DelayedIntField("Max HP", myActor.maxHitPoints); if (newHP > 0) { myActor.maxHitPoints = newHP; } //Initiative must be between 10 and 100 in steps of 5 const int STEP = 5; myActor.initiative = STEP * (EditorGUILayout.IntSlider("Initiative", myActor.initiative, 10, 100) / STEP); //Immunities Actor.ActionSource[] sourceValues = Enum.GetValues(typeof(Actor.ActionSource)) as Actor.ActionSource[]; string[] sourceNames = Enum.GetNames(typeof(Actor.ActionSource)); SelectionList <Actor.ActionSource> sources = new SelectionList <Actor.ActionSource>(sourceValues, sourceNames); isImmunitiesShowing = EditorGUILayout.Foldout(isImmunitiesShowing, "Immunities"); if (isImmunitiesShowing) { myActor.immunities = sources.CheckboxList("Immunities", myActor.immunities, 3); } EditorGUILayout.Space(); //Action Effect Actor.ActionEffect[] effectValues = Enum.GetValues(typeof(Actor.ActionEffect)) as Actor.ActionEffect[]; string[] effectNames = Enum.GetNames(typeof(Actor.ActionEffect)); SelectionList <Actor.ActionEffect> effects = new SelectionList <Actor.ActionEffect>(effectValues, effectNames); myActor.actionEffect = effects.RadioList("Action Effect", myActor.actionEffect, 3); //Damage & Chance to hit if (myActor.actionEffect == Actor.ActionEffect.Normal) { myActor.damage = EditorGUILayout.IntSlider("Damage", myActor.damage, 0, 180); myActor.percentChanceToHit = EditorGUILayout.IntSlider("Percent Chance to Hit", myActor.percentChanceToHit, 0, 100); } else if (myActor.actionEffect == Actor.ActionEffect.Heal) { myActor.damage = EditorGUILayout.IntSlider("Damage", myActor.damage, 0, 180); myActor.percentChanceToHit = 100; } else { myActor.damage = 0; myActor.percentChanceToHit = EditorGUILayout.IntSlider("Percent Chance to Hit", myActor.percentChanceToHit, 0, 100); } //Action Effect Source myActor.actionEffectSource = (Actor.ActionSource)EditorGUILayout.EnumPopup("Action Effect Source", myActor.actionEffectSource); //Action Target myActor.actionTarget = (Actor.ActionTarget)EditorGUILayout.EnumPopup("Action Target", myActor.actionTarget); //Target Select Rule myActor.targetSelectionRule = (Actor.TargetSelectionRule)EditorGUILayout.EnumPopup("Target Selection Rule", myActor.targetSelectionRule); //Current Target EditorGUILayout.LabelField("Current Target:", myActor.currentTarget.name); EditorGUILayout.Space(); //Board Position Actor.Position[] positionValues = Enum.GetValues(typeof(Actor.Position)) as Actor.Position[]; string[] positionNames = Enum.GetNames(typeof(Actor.Position)); SelectionList <Actor.Position> positions = new SelectionList <Actor.Position>(positionValues, positionNames); isBoardPosShowing = EditorGUILayout.Foldout(isBoardPosShowing, "Board Position"); if (isBoardPosShowing) { myActor.boardPosition = positions.PositionGrid("Board Position", myActor.boardPosition, 3); } }