Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define CELL_DEBUG
- using UnityEngine;
- using UnityEditor;
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Reflection;
- public class CellsDatabaseEditorWindow : EditorWindow {
- public const string DEFAULT_DATABASE_PATH = "Assets/Data/CellsDatabase.asset";
- private static CellsDatabaseEditorWindow instance = null;
- private CellsDatabase target = null;
- private CellClassData activeCellClass = null;
- private float buttonHeight = 30.0f;
- private float activeButtonHeight = 50.0f;
- //gui vars
- private int [] modificationPopupIndices;
- private Type [] modificationClasses;
- private string [] modificationClassesNames;
- private bool onGuiInit = false;
- [MenuItem("Cells/Open database")]
- public static void OpenDatabase()
- {
- #if CELL_DEBUG
- Debug.Log("open");
- #endif
- if(instance == null)
- {
- EditorWindow.GetWindow(typeof(CellsDatabaseEditorWindow));
- }
- else
- {
- instance.Focus();
- }
- }
- void OnEnable()
- {
- instance = this;
- LoadDatabase();
- activeCellClass = null;
- target.SyncClasses();
- }
- private void LoadDatabase()
- {
- target = AssetDatabase.LoadAssetAtPath(DEFAULT_DATABASE_PATH,typeof(CellsDatabase)) as CellsDatabase;
- if(target == null)
- {
- CreateDatabase();
- }
- else
- {
- Debug.Log("Database loaded. Elements: " + target.cells.Count.ToString());
- }
- }
- private void CreateDatabase()
- {
- AssetDatabase.CreateAsset(ScriptableObject.CreateInstance(typeof(CellsDatabase)), DEFAULT_DATABASE_PATH);
- target = AssetDatabase.LoadAssetAtPath(DEFAULT_DATABASE_PATH,typeof(CellsDatabase)) as CellsDatabase;
- if(target == null)
- {
- throw new Exception("Databse creation failed");
- }
- Debug.Log("Database created");
- }
- //layout
- void OnGUI()
- {
- if(target != null)
- {
- if(GUILayout.Button("reload"))
- {
- LoadDatabase();
- }
- EditorGUILayout.BeginHorizontal();
- //cell type panel
- EditorGUILayout.BeginVertical(GUILayout.Width(150));
- foreach(CellClassData cellData in target.cells)
- {
- string buttonTitle = cellData.name.ToString();
- float height = buttonHeight;
- if(activeCellClass != null && cellData.name.Equals(activeCellClass.name))
- {
- height = activeButtonHeight;
- }
- if(GUILayout.Button(buttonTitle,GUILayout.Height(height)))
- {
- SetActiveCell(cellData);
- }
- }
- EditorGUILayout.EndVertical();
- //cell type properties panel
- EditorGUILayout.BeginVertical(GUILayout.MinWidth(300));
- if(activeCellClass != null)
- {
- // Title
- EditorGUILayout.LabelField(activeCellClass.name.ToString());
- EditorGUILayout.Separator();
- // Prefab
- Cell cell = EditorGUILayout.ObjectField("Prefab", activeCellClass.prefab,
- activeCellClass.name,
- false) as Cell;
- if(cell != null)
- {
- activeCellClass.prefab = cell.gameObject;
- }
- EditorGUILayout.Separator();
- // Modifications
- EditorGUILayout.LabelField("Modifications");
- for(int a = 0; a < activeCellClass.modifications.Count; a++)
- {
- CellClassModification modification = activeCellClass.modifications[a];
- EditorGUILayout.BeginHorizontal();
- modificationPopupIndices[a] = EditorGUILayout.Popup("Class", modificationPopupIndices[a], modificationClassesNames);
- modification.name = modificationClasses[modificationPopupIndices[a]];
- Debug.Log(a + " : Mod name: " + modification.name);
- modification.price = EditorGUILayout.IntField("Price", modification.price);
- if(GUILayout.Button("Remove"))
- {
- activeCellClass.modifications.RemoveAt(a);
- SyncModificationPopups();
- }
- EditorGUILayout.EndHorizontal();
- }
- if(GUILayout.Button("Add"))
- {
- AddModification();
- }
- }
- else
- {
- EditorGUILayout.LabelField("No cell class selected");
- }
- EditorGUILayout.EndVertical();
- EditorGUILayout.EndHorizontal();
- if(GUI.changed)
- {
- EditorUtility.SetDirty(target);
- }
- }
- else
- {
- }
- }
- void AddModification()
- {
- if(activeCellClass != null)
- {
- CellClassModification modification = new CellClassModification();
- modification.name = modificationClasses[0];
- modification.price = 0;
- activeCellClass.modifications.Add(modification);
- SyncModificationPopups();
- }
- }
- void SetActiveCell(CellClassData data)
- {
- activeCellClass = data;
- SyncModificationPopups();
- }
- void SyncModificationPopups()
- {
- modificationClasses = Cell.GetAllChildren().ToArray();
- modificationClassesNames = new string[modificationClasses.Length];
- modificationPopupIndices = new int[activeCellClass.modifications.Count];
- for(int a = 0; a < modificationClassesNames.Length; a++)
- {
- modificationClassesNames[a] = modificationClasses[a].ToString();
- }
- for(int a = 0; a < activeCellClass.modifications.Count; a++)
- {
- for(int b = 0; b < modificationClasses.Length; b++)
- {
- if(activeCellClass.modifications[a].name.Equals(modificationClasses[b]))
- {
- modificationPopupIndices[a] = b;
- break;
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement