using Godot; using System; [Tool] public partial class AdventureResourceInspector : Node { const int ORDERED = 0; const int EVENTS = 1; private PackedScene zombieEditorScene = ResourceLoader.Load("uid://db5ah76l43ng2"); private Tree tree; private AdventureLevelResource heldResource; private TreeItem root; private Texture2D deleteTexture = ResourceLoader.Load("res://addons/pvzadventure/icons/delete.png"); [Signal] public delegate void RefreshedEventHandler(); [Export] public Control editorContainer; public override void _Ready() { tree = GetNode("Tree"); } public void Refresh(AdventureLevelResource resource) { heldResource = resource; RefreshTree(); } private void RefreshTree() { tree.Clear(); root = tree.CreateItem(); root.DisableFolding = true; root.SetText(0, "Level"); EmitSignal(SignalName.Refreshed); for (int i = 0; i < heldResource.waves.Count; i++) { var item = tree.CreateItem(root); item.DisableFolding = true; item.SetText(0, string.Format("Wave {0}", i)); item.AddButton(0, deleteTexture, tooltipText: "Removes wave. (note that number will not visibly change)"); var order = tree.CreateItem(item); order.SetText(0, "Zombies"); var spawns = tree.CreateItem(item); spawns.SetText(0, "Events"); } } public void OnNewButtonPressed() { var wave = new WaveData(); heldResource.waves.Add(wave); RefreshTree(); } public void OnItemSelected() { foreach (var child in editorContainer.GetChildren()) { child.QueueFree(); } var selected = tree.GetSelected(); if (selected == root) { GD.Print("level pressed"); } else { if (selected.GetParent() == root) return; var index = selected.GetIndex(); if (index == ORDERED) { var editor = zombieEditorScene.Instantiate(); editorContainer.AddChild(editor); editor.SetEditedWave(heldResource.waves[int.Parse(selected.GetParent().GetText(0).Split(" ")[1])]); } else if (index == EVENTS) { GD.Print("Events pressed"); } } } public void OnTreeButtonClicked(TreeItem item, int column, int id, int button_index) { heldResource.waves.RemoveAt(item.GetIndex()); RefreshTree(); } }