|
|
- using UnityEngine;
- using UnityEditor;
- using System.Collections.Generic;
-
- public class TowerEditor : EditorWindow {
-
- CastleAnimator rootObject;
-
- GameObject[] SelectedObjects;
- Vector2 scrollPos;
-
- public enum OPTIONS { SelectBases, SelectTowers, SelectBridges }
- public OPTIONS mode;
-
- public CastleAnimator.ScaleDirection scaleDirection;
- public CastleAnimator.ScaleDirection prevScaleDirection;
-
- public int index = 0;
- public int prevIndex = -1;
-
-
- public GameObject SelectedBase;
-
- // Add menu named "My Window" to the Window menu
- [MenuItem("Paco/TowerEditor")]
- static void Init()
- {
- // Get existing open window or if none, make a new one:
- TowerEditor window = (TowerEditor)EditorWindow.GetWindow(typeof(TowerEditor));
- window.Show();
- }
-
- #region GUI Functions
- void OnGUI()
- {
- GUILayout.Label("Root Object", EditorStyles.boldLabel);
- rootObject = (CastleAnimator)EditorGUILayout.ObjectField(rootObject, typeof(CastleAnimator), true);
-
- GUILayout.Box("", new GUILayoutOption[] { GUILayout.ExpandWidth(true), GUILayout.Height(1) });
- mode = (OPTIONS)EditorGUILayout.EnumPopup(mode);
-
- //if (GUILayout.Button("FIX SCALE POINTS")) FixScalePoints();
-
- GUILayout.Box("", new GUILayoutOption[] { GUILayout.ExpandWidth(true), GUILayout.Height(1) });
-
- switch (mode) {
- case OPTIONS.SelectBases:
- BaseGUI();
- break;
- case OPTIONS.SelectTowers:
- TowerGUI();
- break;
- case OPTIONS.SelectBridges:
- BridgeGUI();
- break;
- }
-
- }
-
- public void OnInspectorUpdate()
- {
- // This will only get called 10 times per second.
- Repaint();
- }
-
- public void BaseGUI()
- {
-
- scrollPos = EditorGUILayout.BeginScrollView(scrollPos, false, false, GUILayout.Height(position.height - 100));
-
- foreach (Transform selection in Selection.transforms) {
- GUILayout.Label(selection.name);
- }
-
- EditorGUILayout.EndScrollView();
-
- GUI.enabled = (rootObject != null);
- if (GUILayout.Button("Add Bases")) {
- AddBase(Selection.transforms);
- }
- GUI.enabled = true;
- }
-
- public void TowerGUI()
- {
- scrollPos = EditorGUILayout.BeginScrollView(scrollPos, false, false, GUILayout.Height(position.height - 100));
-
- foreach (Transform selection in Selection.transforms) {
- GUILayout.Label(selection.name);
- }
-
- EditorGUILayout.EndScrollView();
-
-
- EditorGUILayout.BeginHorizontal();
-
- GUI.enabled = (rootObject != null);
-
- string[] options = { "Select CastleObject" };
- if (rootObject != null)
- options = rootObject.GetBaseNames();
-
- index = EditorGUILayout.Popup(index, options);
-
- if (GUILayout.Button("Add Tower")) {
- AddTower(index, Selection.transforms);
- }
- GUI.enabled = true;
-
- EditorGUILayout.EndHorizontal();
- if (index != prevIndex) {
- ChangeTower(index);
- prevIndex = index;
- }
- }
-
- public void BridgeGUI()
- {
- scrollPos = EditorGUILayout.BeginScrollView(scrollPos, false, false, GUILayout.Height(position.height - 118));
-
- foreach (Transform selection in Selection.transforms) {
-
- if (rootObject != null && !rootObject.Bases[index].tower.TowerPieces.Contains(selection.gameObject)) {
-
- GUILayout.BeginHorizontal();
- GUILayout.Label(selection.name);
- GUILayout.Label((CheckInUse(selection))?"(In Use)": "", EditorStyles.boldLabel);
- GUILayout.EndHorizontal();
-
- } else if (rootObject == null) {
- GUILayout.Label(selection.name);
- }
- }
-
- EditorGUILayout.EndScrollView();
-
- GUI.enabled = (rootObject != null);
-
- scaleDirection = (CastleAnimator.ScaleDirection)EditorGUILayout.EnumPopup(scaleDirection);
-
- EditorGUILayout.BeginHorizontal();
- string[] options = { "Select CastleObject" };
- if (rootObject != null)
- options = rootObject.GetBaseNames();
-
- index = EditorGUILayout.Popup(index, options);
-
-
- if (GUILayout.Button("Add Bridge")) {
- AddBridge(index,scaleDirection , Selection.transforms);
- }
-
- GUI.enabled = true;
-
- EditorGUILayout.EndHorizontal();
- if (index != prevIndex || scaleDirection != prevScaleDirection) {
- ChangeBridge(index, scaleDirection);
- prevIndex = index;
- prevScaleDirection = scaleDirection;
- }
-
-
- }
-
- #endregion GUI Functions
-
- private void AddBase(Transform[] newBases)
- {
- foreach (Transform selectedBase in newBases) {
- rootObject.AddBase(selectedBase);
- }
- }
-
- private void FixScalePoints()
- {
- if (rootObject == null)
- return;
-
- for (int i = 0; i < rootObject.Bases.Count; i++) {
- CastleAnimator.Base tempBase = rootObject.Bases[i];
- tempBase.tower.ScalePoints = new GameObject[4];
-
- for (int j = 0; j < 4; j++) {
- tempBase.tower.ScalePoints[j] = new GameObject();
- tempBase.tower.ScalePoints[j].transform.parent = tempBase.gameObject.transform;
- tempBase.tower.ScalePoints[j].transform.localPosition = Vector3.zero;
- tempBase.tower.ScalePoints[j].name = "ScalePoint" + rootObject.Bases.Count + ", " + i;
- }
-
- rootObject.Bases[i] = tempBase;
- }
-
- }
-
- private void AddTower(int index, Transform[] newTower)
- {
- rootObject.AddTower(rootObject.Bases[index], newTower);
- }
-
- private void AddBridge(int index, CastleAnimator.ScaleDirection dir, Transform[] newBridge)
- {
- rootObject.AddBridge(rootObject.Bases[index],dir , newBridge);
- }
-
-
- private void ChangeTower(int index)
- {
- if (rootObject == null)
- return;
-
- CastleAnimator.Base curBase = rootObject.Bases[index];
-
- List<GameObject> Tower = new List<GameObject>();
- Tower.Add(curBase.gameObject);
- foreach (GameObject towerPiece in curBase.tower.TowerPieces)
- Tower.Add(towerPiece);
-
- Selection.objects = Tower.ToArray();
- }
-
- private void ChangeBridge(int index, CastleAnimator.ScaleDirection direction)
- {
- if (rootObject == null)
- return;
-
- CastleAnimator.Base curBase = rootObject.Bases[index];
-
- List<GameObject> Bridge = new List<GameObject>();
- //Bridge.Add(curBase.gameObject);
- foreach (GameObject towerPiece in curBase.tower.TowerPieces)
- Bridge.Add(towerPiece);
-
- foreach (Transform child in curBase.tower.ScalePoints[(int)direction].transform)
- Bridge.Add(child.gameObject);
-
- Selection.objects = Bridge.ToArray();
- }
-
- private bool CheckInUse(Transform selection)
- {
- if (rootObject == null)
- return false;
-
- foreach (CastleAnimator.Base Base in rootObject.Bases) {
-
- foreach(GameObject ScalePoint in Base.tower.ScalePoints) {
- if (selection.IsChildOf(ScalePoint.transform))
- return true;
-
- }
-
- }
- return false;
-
- }
-
- }
|