using UnityEngine; using UnityEditor; using System; using System.Collections; using System.Collections.Generic; namespace TBTK{ [CustomEditor(typeof(GridManager))] public class I_GridManagerEditor : TBEditorInspector { private GridManager instance; public override void Awake(){ base.Awake(); instance = (GridManager)target; InitLabel(); } private string[] gridTypeLabel; private string[] gridTypeTooltip; private string[] colliderTypeLabel; private string[] colliderTypeTooltip; private string[] rangeCalTypeLabel; private string[] rangeCalTypeTooltip; void InitLabel(){ int enumLength = Enum.GetValues(typeof(_GridType)).Length; gridTypeLabel=new string[enumLength]; gridTypeTooltip=new string[enumLength]; for(int i=0; i().Generate(); EditorGUILayout.BeginHorizontal(); if(GUILayout.Button("Generate Unit")) instance.gameObject.GetComponent().GenerateUnit(); if(GUILayout.Button("Generate Collectible")) instance.gameObject.GetComponent().GenerateCollectible(); EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); EditorGUILayout.BeginHorizontal(); GUI.color=new Color(1f, .75f, .5f, 1); if(GUILayout.Button("Clear")) instance.gameObject.GetComponent().Clear(); GUI.color=Color.white; if(GUILayout.Button("Clear Invalid Spawn/Deploy Point")){ instance.gameObject.GetComponent().ClearInvalidDeploymentAndSpawnArea(); SceneView.RepaintAll(); } EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUIUtility.labelWidth=180; cont=new GUIContent("Generate Grid On Start:", "Check regenerate the grid when the scene start playing"); instance.generateGridOnStart=EditorGUILayout.Toggle(cont, instance.generateGridOnStart); cont=new GUIContent("Generate Unit On Start:", "Check regenerate the grid when the scene start playing"); instance.generateUnitOnStart=EditorGUILayout.Toggle(cont, instance.generateUnitOnStart); cont=new GUIContent("Generate Collectible On Start:", "Check regenerate the grid when the scene start playing"); instance.generateCollectibleOnStart=EditorGUILayout.Toggle(cont, instance.generateCollectibleOnStart); EditorGUIUtility.labelWidth=0; EditorGUILayout.Space(); int rangeCalculation=(int)instance.rangeCalculation; cont=new GUIContent("Range Calculation:", "The type calculation used when determined range\nOnly applicable when using square-grid with diagonal neighbour"); if(instance.cacheGridType==_GridType.SquareGrid && instance.cacheDiagonalNeighbour){ contL=TBE.SetupContL(rangeCalTypeLabel, rangeCalTypeTooltip); rangeCalculation = EditorGUILayout.Popup(cont, rangeCalculation, contL); instance.rangeCalculation=(GridManager._RangeCalculation)rangeCalculation; } else EditorGUILayout.LabelField(cont, new GUIContent("n/a")); EditorGUILayout.Space(); EditorGUILayout.BeginHorizontal(); showBaseProperties=EditorGUILayout.Foldout(showBaseProperties, "Grid Properties", TBE.foldoutS); if(showBaseProperties) EditorGUILayout.LabelField("Active-Grid", GUILayout.MaxWidth(cacheLabelLength)); EditorGUILayout.EndHorizontal(); if(showBaseProperties){ EditorGUILayout.BeginHorizontal(); int gridType=(int)instance.gridType; cont=new GUIContent("Grid Type:", "The type of grid to use (Hex or Square)"); contL=TBE.SetupContL(gridTypeLabel, gridTypeTooltip); gridType = EditorGUILayout.Popup(cont, gridType, contL); instance.gridType=(_GridType)gridType; EditorGUILayout.LabelField(instance.cacheGridType==_GridType.HexGrid ? "Hex" : "Square", GUILayout.MaxWidth(cacheLabelLength)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); int colliderType=(int)instance.colliderType; cont=new GUIContent("Collider Type:", "The type of collider to use (The collider are used for cursor detection)"); contL=TBE.SetupContL(colliderTypeLabel, colliderTypeTooltip); colliderType = EditorGUILayout.Popup(cont, colliderType, contL); instance.colliderType=(_GridColliderType)colliderType; EditorGUILayout.LabelField(instance.cacheColliderType==_GridColliderType.Master ? "Master" : "Individual", GUILayout.MaxWidth(cacheLabelLength)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); cont=new GUIContent("Diagonal Neighbor:", "Check to enable diagonal neighbor"); if(instance.gridType==_GridType.HexGrid) EditorGUILayout.LabelField(cont, new GUIContent("n/a")); else instance.enableDiagonalNeighbour=EditorGUILayout.Toggle(cont, instance.enableDiagonalNeighbour); if(instance.gridType!=_GridType.HexGrid) EditorGUILayout.LabelField(instance.cacheDiagonalNeighbour.ToString(), GUILayout.MaxWidth(cacheLabelLength)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); cont=new GUIContent("Grid Width:", "The number of tile in the grid in x-axis"); instance.dimensionX=EditorGUILayout.IntField(cont, instance.dimensionX); EditorGUILayout.LabelField(instance.cacheDimensionX.ToString(), GUILayout.MaxWidth(cacheLabelLength)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); cont=new GUIContent("Grid Length:", "The number of tile in the grid in z-axis"); instance.dimensionZ=EditorGUILayout.IntField(cont, instance.dimensionZ); EditorGUILayout.LabelField(instance.cacheDimensionZ.ToString(), GUILayout.MaxWidth(cacheLabelLength)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); cont=new GUIContent("Node Size:", "The size of individual node in the grid"); instance.nodeSize=EditorGUILayout.FloatField(cont, instance.nodeSize); EditorGUILayout.LabelField(instance.cacheNodeSize.ToString("f2"), GUILayout.MaxWidth(cacheLabelLength)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); cont=new GUIContent("Node Spacing:", "The spacing between nodes in the grid"); instance.nodeSpacing=EditorGUILayout.FloatField(cont, instance.nodeSpacing); EditorGUILayout.LabelField(instance.cacheNodeSpacing.ToString("f2"), GUILayout.MaxWidth(cacheLabelLength)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); cont=new GUIContent("Unwalkable Rate:", "The percentage of the unwalkable tile on the grid.\nTakes value from 0-1 with 0.25 means 25% of the grid will not be walkabe"); instance.unwalkableRate=EditorGUILayout.FloatField(cont, instance.unwalkableRate); EditorGUILayout.LabelField("", GUILayout.MaxWidth(cacheLabelLength)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); cont=new GUIContent("Obstacle Rate:", "The percentage of the tile with obstacle on the grid.\nTakes value from 0-1 with 0.25 means 25% of the grid will have obstacle"); instance.obstacleRate=EditorGUILayout.FloatField(cont, instance.obstacleRate); EditorGUILayout.LabelField("", GUILayout.MaxWidth(cacheLabelLength)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); cont=new GUIContent("Wall/Fence Rate:", "The percentage of the tile with wall(s) on the grid.\nTakes value from 0-1 with 0.25 means 25% of the grid will have wall"); instance.wallRate=EditorGUILayout.FloatField(cont, instance.wallRate); EditorGUILayout.LabelField("", GUILayout.MaxWidth(cacheLabelLength)); EditorGUILayout.EndHorizontal(); } EditorGUILayout.Space(); I_GridEditor.DrawGridEditor(instance); EditorGUILayout.Space(); EditorGUILayout.Space(); //DefaultInspector(0); //DrawDefaultInspector(); GridManager.inspector=DefaultInspector(GridManager.inspector); } public void OnSceneGUI(){ I_GridEditor.OnSceneGUI(); } } }