Advertisement
Guest User

Untitled

a guest
Jan 9th, 2015
215
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.30 KB | None | 0 0
  1. #define CELL_DEBUG
  2.  
  3. using UnityEngine;
  4. using UnityEditor;
  5. using System;
  6. using System.Collections;
  7. using System.Collections.Generic;
  8. using System.Reflection;
  9.  
  10. public class CellsDatabaseEditorWindow : EditorWindow {
  11.  
  12.     public const string DEFAULT_DATABASE_PATH = "Assets/Data/CellsDatabase.asset";
  13.  
  14.     private static CellsDatabaseEditorWindow instance = null;
  15.  
  16.     private CellsDatabase target = null;
  17.    
  18.     private CellClassData activeCellClass = null;
  19.    
  20.     private float buttonHeight = 30.0f;
  21.     private float activeButtonHeight = 50.0f;
  22.    
  23.     //gui vars
  24.    
  25.     private int [] modificationPopupIndices;
  26.     private Type [] modificationClasses;
  27.     private string [] modificationClassesNames;
  28.     private bool onGuiInit = false;
  29.    
  30.     [MenuItem("Cells/Open database")]
  31.     public static void OpenDatabase()
  32.     {
  33. #if CELL_DEBUG
  34.         Debug.Log("open");
  35. #endif
  36.  
  37.         if(instance == null)
  38.         {
  39.             EditorWindow.GetWindow(typeof(CellsDatabaseEditorWindow));
  40.         }
  41.         else
  42.         {
  43.             instance.Focus();
  44.         }
  45.     }
  46.  
  47.     void OnEnable()
  48.     {
  49.         instance = this;
  50.  
  51.         LoadDatabase();
  52.        
  53.         activeCellClass = null;
  54.         target.SyncClasses();
  55.     }
  56.  
  57.     private void LoadDatabase()
  58.     {
  59.         target = AssetDatabase.LoadAssetAtPath(DEFAULT_DATABASE_PATH,typeof(CellsDatabase)) as CellsDatabase;
  60.  
  61.         if(target == null)
  62.         {
  63.             CreateDatabase();
  64.         }
  65.         else
  66.         {
  67.             Debug.Log("Database loaded. Elements: " + target.cells.Count.ToString());
  68.         }
  69.     }
  70.  
  71.     private void CreateDatabase()
  72.     {
  73.         AssetDatabase.CreateAsset(ScriptableObject.CreateInstance(typeof(CellsDatabase)), DEFAULT_DATABASE_PATH);
  74.  
  75.         target = AssetDatabase.LoadAssetAtPath(DEFAULT_DATABASE_PATH,typeof(CellsDatabase)) as CellsDatabase;
  76.  
  77.         if(target == null)
  78.         {
  79.             throw new Exception("Databse creation failed");
  80.         }
  81.  
  82.         Debug.Log("Database created");
  83.     }
  84.  
  85.  
  86.     //layout
  87.  
  88.    
  89.     void OnGUI()
  90.     {
  91.         if(target != null)
  92.         {
  93.             if(GUILayout.Button("reload"))
  94.             {
  95.                 LoadDatabase();
  96.             }
  97.            
  98.             EditorGUILayout.BeginHorizontal();
  99.  
  100.             //cell type panel
  101.             EditorGUILayout.BeginVertical(GUILayout.Width(150));
  102.            
  103.             foreach(CellClassData cellData in target.cells)
  104.             {
  105.                 string buttonTitle = cellData.name.ToString();
  106.                 float height = buttonHeight;
  107.                
  108.                 if(activeCellClass != null && cellData.name.Equals(activeCellClass.name))
  109.                 {
  110.                     height = activeButtonHeight;
  111.                 }
  112.                
  113.                 if(GUILayout.Button(buttonTitle,GUILayout.Height(height)))
  114.                 {
  115.                     SetActiveCell(cellData);
  116.                 }
  117.             }
  118.            
  119.             EditorGUILayout.EndVertical();
  120.  
  121.             //cell type properties panel
  122.             EditorGUILayout.BeginVertical(GUILayout.MinWidth(300));
  123.            
  124.             if(activeCellClass != null)
  125.             {
  126.                 //  Title
  127.                
  128.                 EditorGUILayout.LabelField(activeCellClass.name.ToString());
  129.                
  130.                 EditorGUILayout.Separator();
  131.                
  132.                 //  Prefab
  133.                
  134.                 Cell cell = EditorGUILayout.ObjectField("Prefab", activeCellClass.prefab,
  135.                                                         activeCellClass.name,
  136.                                                         false) as Cell;
  137.                 if(cell != null)
  138.                 {
  139.                     activeCellClass.prefab = cell.gameObject;
  140.                 }
  141.                
  142.                 EditorGUILayout.Separator();
  143.                
  144.                 //  Modifications
  145.                
  146.                 EditorGUILayout.LabelField("Modifications");
  147.                
  148.                 for(int a = 0; a < activeCellClass.modifications.Count; a++)
  149.                 {
  150.                     CellClassModification modification = activeCellClass.modifications[a];
  151.                    
  152.                     EditorGUILayout.BeginHorizontal();
  153.                    
  154.                     modificationPopupIndices[a] = EditorGUILayout.Popup("Class", modificationPopupIndices[a], modificationClassesNames);
  155.                    
  156.                     modification.name = modificationClasses[modificationPopupIndices[a]];
  157.                     Debug.Log(a + " : Mod name: " + modification.name);
  158.                    
  159.                     modification.price = EditorGUILayout.IntField("Price", modification.price);
  160.  
  161.                     if(GUILayout.Button("Remove"))
  162.                     {
  163.                         activeCellClass.modifications.RemoveAt(a);
  164.                         SyncModificationPopups();
  165.                     }
  166.                    
  167.                     EditorGUILayout.EndHorizontal();
  168.                 }
  169.                
  170.                 if(GUILayout.Button("Add"))
  171.                 {
  172.                     AddModification();
  173.                 }
  174.             }
  175.             else
  176.             {
  177.                 EditorGUILayout.LabelField("No cell class selected");
  178.             }
  179.            
  180.             EditorGUILayout.EndVertical();
  181.            
  182.            
  183.            
  184.             EditorGUILayout.EndHorizontal();
  185.            
  186.             if(GUI.changed)
  187.             {
  188.                 EditorUtility.SetDirty(target);
  189.             }
  190.         }
  191.         else
  192.         {
  193.  
  194.         }
  195.     }
  196.  
  197.     void AddModification()
  198.     {
  199.         if(activeCellClass != null)
  200.         {
  201.             CellClassModification modification = new CellClassModification();
  202.  
  203.             modification.name = modificationClasses[0];
  204.             modification.price = 0;
  205.  
  206.             activeCellClass.modifications.Add(modification);
  207.  
  208.             SyncModificationPopups();
  209.         }
  210.     }
  211.  
  212.     void SetActiveCell(CellClassData data)
  213.     {
  214.         activeCellClass = data;
  215.         SyncModificationPopups();
  216.     }
  217.  
  218.     void SyncModificationPopups()
  219.     {
  220.         modificationClasses = Cell.GetAllChildren().ToArray();
  221.  
  222.         modificationClassesNames = new string[modificationClasses.Length];
  223.        
  224.         modificationPopupIndices =  new int[activeCellClass.modifications.Count];
  225.        
  226.         for(int a = 0; a < modificationClassesNames.Length; a++)
  227.         {
  228.             modificationClassesNames[a] = modificationClasses[a].ToString();
  229.         }
  230.        
  231.         for(int a = 0; a < activeCellClass.modifications.Count; a++)
  232.         {
  233.             for(int b = 0; b < modificationClasses.Length; b++)
  234.             {
  235.  
  236.                 if(activeCellClass.modifications[a].name.Equals(modificationClasses[b]))
  237.                 {
  238.                     modificationPopupIndices[a] = b;
  239.                     break;
  240.                 }
  241.             }
  242.         }
  243.     }
  244. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement