public static UpgradeButton Create(GameObject prefab, Transform uiTransform, Tower.Level level, Tower tower) { var upgrade = Instantiate(prefab, uiTransform).GetComponent <UpgradeButton>(); upgrade._level = level; upgrade._tower = tower; return(upgrade); }
public override void OnInspectorGUI() { while (foldouts.Count < tower.data.levels.Count) { foldouts.Add(false); } if (foldouts.Count > tower.data.levels.Count) { foldouts.RemoveRange(tower.data.levels.Count, foldouts.Count - tower.data.levels.Count); } GUI.enabled = false; script = EditorGUILayout.ObjectField("Script", script, typeof(MonoScript), false) as MonoScript; GUI.enabled = true; tower.data.towerName = EditorGUILayout.TextField("Tower Name", tower.data.towerName); tower.turret = EditorGUILayout.ObjectField("Turret", tower.turret, typeof(Transform), true) as Transform; EditorGUILayout.Space(); tower.data.attackTarget = (Tower.AttackTarget)EditorGUILayout.EnumPopup("Attack Target", tower.data.attackTarget); if (tower.data.attackTarget != Tower.AttackTarget.None) { tower.data.attackType = (Tower.AttackType)EditorGUILayout.EnumPopup("Attack Type", tower.data.attackType); tower.data.onHitEffect = (Tower.OnHitEffect)EditorGUILayout.EnumPopup("On Hit Effect", tower.data.onHitEffect); } EditorGUILayout.Space(); tower.data.buffTarget = (Tower.BuffTarget)EditorGUILayout.EnumPopup("Buff Target", tower.data.buffTarget); if (tower.data.buffTarget == Tower.BuffTarget.Aura) { tower.data.buffType = (Tower.BuffType)EditorGUILayout.EnumPopup("Buff Type", tower.data.buffType); } EditorGUILayout.Space(); for (int i = 0; i < tower.data.levels.Count; ++i) { Tower.Level towerLevel = tower.data.levels[i]; if (foldouts[i]) { EditorGUILayout.Space(); } foldouts[i] = EditorGUILayout.Foldout(foldouts[i], "Level " + i, true); if (foldouts[i]) { towerLevel.cost = (ushort)EditorGUILayout.IntField("Cost", towerLevel.cost); if (tower.data.attackTarget != Tower.AttackTarget.None) { towerLevel.attackDamage = EditorGUILayout.FloatField("Attack Damage", towerLevel.attackDamage); towerLevel.attackInterval = EditorGUILayout.FloatField("Attack Interval", towerLevel.attackInterval); towerLevel.attackRange = EditorGUILayout.FloatField("Attack Range", towerLevel.attackRange); if (tower.data.attackType == Tower.AttackType.AOE) { towerLevel.aoeRadius = EditorGUILayout.FloatField("Attack AOE Radius", towerLevel.aoeRadius); } } if (tower.data.buffTarget != Tower.BuffTarget.None) { towerLevel.auraRange = EditorGUILayout.FloatField("Aura Range", towerLevel.auraRange); if (tower.data.buffType == Tower.BuffType.AttackDamage) { towerLevel.attackDamageAura = EditorGUILayout.FloatField("Attack Damage Bonus", towerLevel.attackDamageAura); } else if (tower.data.buffType == Tower.BuffType.AttackSpeed) { towerLevel.attackSpeedAura = EditorGUILayout.FloatField("Attack Speed Bonus", towerLevel.attackSpeedAura); } } if (i > 0 && GUILayout.Button("Delete", GUILayout.Width(100), GUILayout.Height(20))) { tower.data.levels.RemoveAt(i); foldouts.RemoveAt(i); } else { tower.data.levels[i] = towerLevel; } } } EditorGUILayout.Space(); EditorGUILayout.Space(); if (GUILayout.Button("New")) { tower.data.levels.Add(new Tower.Level()); foldouts.Add(true); } if (GUI.changed) { EditorUtility.SetDirty(tower); var scene = SceneManager.GetActiveScene(); if (scene != null) { EditorSceneManager.MarkSceneDirty(scene); } var prefabStage = PrefabStageUtility.GetCurrentPrefabStage(); if (prefabStage != null) { EditorSceneManager.MarkSceneDirty(prefabStage.scene); } } }