Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using UnityEditor;
- using Sirenix.OdinInspector;
- using Sirenix.OdinInspector.Editor;
- using Sirenix.Utilities.Editor;
- using GameData;
- using System.Collections.Generic;
- public class ConfigsEditor : OdinMenuEditorWindow
- {
- [OnValueChanged("StateChage")]
- [LabelText("Game data:")]
- [LabelWidth(100f)]
- [EnumToggleButtons]
- [ShowInInspector]
- private ConfigsState currentState;
- private int enumIndex = 0;
- private bool treeRebuild = false;
- private DrawSelected<InteractZoneData> drawZoneData = new DrawSelected<InteractZoneData>();
- private DrawSelected<NPCLevelsData> drawNPCLevelData = new DrawSelected<NPCLevelsData>();
- private DrawSelected<MovieData> drawMovieData = new DrawSelected<MovieData>();
- private DrawSelected<ShopData> drawShopData = new DrawSelected<ShopData>();
- private DrawSelected<UINPCUnlockData> drawNPCUnlockData = new DrawSelected<UINPCUnlockData>();
- private DrawSelected<UpgradeData> drawUpgradeData = new DrawSelected<UpgradeData>();
- private DrawSelected<UpgradesSettings> drawUpgradeSettings = new DrawSelected<UpgradesSettings>();
- //paths to ScriptbleObjects in project
- private string zoneDataPath = "Assets/Configs/InteractZones";
- private string NPCLevelDataPath = "Assets/Configs/NPCs/Levels";
- private string moviesDataPath = "Assets/Configs/Movies";
- private string shopDataPath = "Assets/Configs/ShopItems";
- private string NPCUnlockDataPath = "Assets/Configs/NPCs/NPCs";
- private string upgradeData = "Assets/Configs/Upgrades/Data";
- private string upgradesSettings = "Assets/Configs/Upgrades";
- [MenuItem("Tools/Configs")]
- private static void OpenWindow()
- {
- GetWindow<ConfigsEditor>().Show();
- }
- private void StateChage()
- {
- treeRebuild = true;
- }
- protected override void Initialize()
- {
- drawZoneData.SetPath(zoneDataPath);
- drawNPCLevelData.SetPath(NPCLevelDataPath);
- drawMovieData.SetPath(moviesDataPath);
- drawShopData.SetPath(shopDataPath);
- drawNPCUnlockData.SetPath(NPCUnlockDataPath);
- drawUpgradeData.SetPath(upgradeData);
- drawUpgradeSettings.SetPath(upgradesSettings);
- }
- protected override void OnGUI()
- {
- if (treeRebuild && Event.current.type == EventType.Layout) {
- ForceMenuTreeRebuild();
- treeRebuild = false;
- }
- SirenixEditorGUI.Title("Настройки игры", "Здесь можно настроить игровой контент и параметры игры.", TextAlignment.Center, true);
- EditorGUILayout.Space();
- //switch (currentState) {
- // case ConfigsState.NPCsLevelingData:
- // case ConfigsState.NPCsUnlockData:
- // case ConfigsState.InteractZonesData:
- // case ConfigsState.UpgradesData:
- // case ConfigsState.UpgradesSettings:
- // case ConfigsState.MoviesData:
- // case ConfigsState.ShopData:
- // DrawEditor(enumIndex);
- // break;
- // default:
- // break;
- //}
- EditorGUILayout.Space();
- base.OnGUI();
- }
- protected override void DrawEditors()
- {
- switch (currentState) {
- case ConfigsState.NPCsLevelingData:
- drawNPCLevelData.SetSelected(this.MenuTree.Selection.SelectedValue);
- break;
- case ConfigsState.NPCsUnlockData:
- drawNPCUnlockData.SetSelected(this.MenuTree.Selection.SelectedValue);
- break;
- case ConfigsState.InteractZonesData:
- drawZoneData.SetSelected(this.MenuTree.Selection.SelectedValue);
- break;
- case ConfigsState.UpgradesData:
- drawUpgradeData.SetSelected(this.MenuTree.Selection.SelectedValue);
- break;
- case ConfigsState.UpgradesSettings:
- drawUpgradeSettings.SetSelected(this.MenuTree.Selection.SelectedValue);
- break;
- case ConfigsState.MoviesData:
- drawMovieData.SetSelected(this.MenuTree.Selection.SelectedValue);
- break;
- case ConfigsState.ShopData:
- drawShopData.SetSelected(this.MenuTree.Selection.SelectedValue);
- break;
- default:
- break;
- }
- DrawEditor((int)currentState);
- }
- protected override IEnumerable<object> GetTargets()
- {
- List<object> targets = new List<object>();
- targets.Add(drawNPCLevelData);
- targets.Add(drawNPCUnlockData);
- targets.Add(drawZoneData);
- targets.Add(drawUpgradeData);
- targets.Add(drawUpgradeSettings);
- targets.Add(drawMovieData);
- targets.Add(drawShopData);
- targets.Add(base.GetTargets());
- enumIndex = targets.Count - 1;
- return targets;
- }
- protected override void DrawMenu()
- {
- switch (currentState) {
- case ConfigsState.NPCsLevelingData:
- case ConfigsState.NPCsUnlockData:
- case ConfigsState.InteractZonesData:
- case ConfigsState.UpgradesData:
- case ConfigsState.UpgradesSettings:
- case ConfigsState.MoviesData:
- case ConfigsState.ShopData:
- base.DrawMenu();
- break;
- default:
- break;
- }
- }
- protected override OdinMenuTree BuildMenuTree()
- {
- OdinMenuTree tree = new OdinMenuTree();
- switch (currentState) {
- case ConfigsState.NPCsLevelingData:
- tree.AddAllAssetsAtPath("NPCs Leveling Data", NPCLevelDataPath, typeof(NPCLevelsData));
- break;
- case ConfigsState.NPCsUnlockData:
- tree.AddAllAssetsAtPath("NPCs Unlock Data", NPCLevelDataPath, typeof(UINPCUnlockData));
- break;
- case ConfigsState.InteractZonesData:
- tree.AddAllAssetsAtPath("Interact zones Data", NPCLevelDataPath, typeof(InteractZoneData));
- break;
- case ConfigsState.UpgradesData:
- tree.AddAllAssetsAtPath("Upgrades Data", NPCLevelDataPath, typeof(UpgradeData));
- break;
- case ConfigsState.UpgradesSettings:
- tree.AddAllAssetsAtPath("Upgrades Settings Data", NPCLevelDataPath, typeof(UpgradesSettings));
- break;
- case ConfigsState.MoviesData:
- tree.AddAllAssetsAtPath("Movies Data", NPCLevelDataPath, typeof(MovieData));
- break;
- case ConfigsState.ShopData:
- tree.AddAllAssetsAtPath("Shop items Data", NPCLevelDataPath, typeof(ShopData));
- break;
- }
- return tree;
- }
- public enum ConfigsState
- {
- NPCsLevelingData,
- NPCsUnlockData,
- InteractZonesData,
- UpgradesData,
- UpgradesSettings,
- MoviesData,
- ShopData
- }
- }
- public class DrawSelected<T> where T : ScriptableObject
- {
- private static readonly string controlAssetsGroup = "CreateNew/Horizontal";
- [InlineEditor(InlineEditorObjectFieldModes.CompletelyHidden)]
- public T selected;
- [LabelWidth(100)]
- [PropertyOrder(-1)]
- [HorizontalGroup("$controlAssetsGroup")]
- public string nameForNew;
- private string path;
- [HorizontalGroup("$controlAssetsGroup")]
- [GUIColor(0f, 0.7f, 0f)]
- [Button]
- public void CreateNew()
- {
- if (nameForNew == "") return;
- T newItem = ScriptableObject.CreateInstance<T>();
- newItem.name = "New " + typeof(T).ToString();
- if (path == "") path = "Assets/Configs";
- AssetDatabase.CreateAsset(newItem, path + "\\" + nameForNew + ".asset");
- AssetDatabase.SaveAssets();
- nameForNew = "";
- }
- [HorizontalGroup("$controlAssetsGroup")]
- [GUIColor(0.7f, 0f, 0f)]
- [Button]
- public void DeleteSelected()
- {
- if(selected != null) {
- string _path = AssetDatabase.GetAssetPath(selected);
- AssetDatabase.DeleteAsset(_path);
- AssetDatabase.SaveAssets();
- }
- }
- public void SetSelected(object item)
- {
- var attempt = item as T;
- if (attempt != null) this.selected = attempt;
- }
- public void SetPath(string path)
- {
- this.path = path;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement