Initial data

This commit is contained in:
Rendo 2025-07-17 20:28:47 +05:00
commit f65cb11474
12 changed files with 340 additions and 48 deletions

View file

@ -7,8 +7,9 @@ public partial class AdventureLevelResource : Resource
{
[Export] public float startSun = 50;
//[Export] public Array<Conditions> conditions;
[Export(PropertyHint.Range,"0,1,0.01")] public float wavePercentage;
[Export(PropertyHint.Range, "0,1,0.01")] public float wavePercentage;
[Export] public float standardWaveDelay;
[Export] public float initialWaveDelay;
[Export] public Array<WaveData> waves;
[Export] public Array<PackedScene> initialScenes = [.. new PackedScene[45]];
}

View file

@ -1,8 +1,7 @@
[gd_scene load_steps=6 format=3 uid="uid://dkq82o31vr3i2"]
[gd_scene load_steps=5 format=3 uid="uid://dkq82o31vr3i2"]
[ext_resource type="Script" uid="uid://dkgxtig5fwdgi" path="res://addons/pvzadventure/scripts/AdventureEditor.cs" id="1_go5yu"]
[ext_resource type="Script" uid="uid://binuuattefn7d" path="res://addons/pvzadventure/scripts/FileButton.cs" id="2_d5hwn"]
[ext_resource type="PackedScene" uid="uid://db5ah76l43ng2" path="res://addons/pvzadventure/scenes/zombie_editor.tscn" id="3_1ojhm"]
[ext_resource type="Script" uid="uid://c6jttmpeyakoa" path="res://addons/pvzadventure/scripts/EditorsContainer.cs" id="3_5imrs"]
[ext_resource type="Script" uid="uid://b0hl4ap18wbb2" path="res://addons/pvzadventure/scripts/AdventureResourceInspector.cs" id="3_d5hwn"]
@ -52,10 +51,6 @@ size_flags_horizontal = 3
size_flags_stretch_ratio = 3.0
script = ExtResource("3_5imrs")
[node name="ZombieEditor" parent="Editor/WorkArea/PanelContainer" instance=ExtResource("3_1ojhm")]
visible = false
layout_mode = 2
[node name="Inspector" type="VSplitContainer" parent="Editor/WorkArea"]
layout_mode = 2
size_flags_horizontal = 3

View file

@ -1,5 +1,153 @@
[gd_scene format=3 uid="uid://sqessjn0m4o3"]
[gd_scene load_steps=3 format=3 uid="uid://sqessjn0m4o3"]
[ext_resource type="PackedScene" uid="uid://djb8ynxhnmo0t" path="res://addons/pvzadventure/scenes/universal_grid_item.tscn" id="1_d8e2t"]
[ext_resource type="Script" uid="uid://cumeahjpjgagq" path="res://addons/pvzadventure/scripts/InitialEditor.cs" id="1_tu7vy"]
[node name="InitialEditor" type="ScrollContainer"]
offset_right = 40.0
offset_bottom = 40.0
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_tu7vy")
[node name="GridContainer" type="GridContainer" parent="."]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
columns = 9
[node name="GridItem" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem2" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem3" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem4" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem5" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem6" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem7" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem8" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem9" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem10" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem11" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem12" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem13" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem14" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem15" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem16" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem17" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem18" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem19" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem20" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem21" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem22" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem23" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem24" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem25" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem26" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem27" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem28" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem29" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem30" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem31" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem32" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem33" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem34" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem35" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem36" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem37" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem38" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem39" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem40" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem41" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem42" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem43" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem44" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2
[node name="GridItem45" parent="GridContainer" instance=ExtResource("1_d8e2t")]
layout_mode = 2

View file

@ -1,6 +1,7 @@
[gd_scene load_steps=3 format=3 uid="uid://djb8ynxhnmo0t"]
[gd_scene load_steps=4 format=3 uid="uid://djb8ynxhnmo0t"]
[ext_resource type="Script" uid="uid://fof6kr0et8ng" path="res://addons/pvzadventure/scripts/ZE_GridItem.cs" id="1_e5mae"]
[ext_resource type="Script" uid="uid://b8ccbjhhus7xk" path="res://addons/pvzadventure/scripts/UNI_GridItem.cs" id="1_e5mae"]
[ext_resource type="Script" uid="uid://c3cgpwy1qaeww" path="res://addons/pvzadventure/scripts/packed_scene_preview_generator.gd" id="2_k7w8c"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_jbknv"]
bg_color = Color(0.18359, 0.18359, 0.18359, 1)
@ -15,9 +16,9 @@ clip_contents = true
custom_minimum_size = Vector2(100, 100)
anchors_preset = -1
anchor_right = 0.172
anchor_bottom = 0.25
anchor_bottom = 0.212
offset_right = -0.200005
offset_bottom = -15.0
offset_bottom = 0.199997
theme_override_styles/panel = SubResource("StyleBoxFlat_jbknv")
script = ExtResource("1_e5mae")
@ -25,3 +26,10 @@ script = ExtResource("1_e5mae")
layout_mode = 2
expand_mode = 1
stretch_mode = 5
script = ExtResource("2_k7w8c")
[node name="Viewport" type="SubViewport" parent="Texture"]
process_mode = 4
transparent_bg = true
[node name="Camera2D" type="Camera2D" parent="Texture/Viewport"]

View file

@ -11,6 +11,7 @@ public partial class AdventureResourceInspector : Node
const string EVENTS_ITEM_NAME = "Events";
const string HUGEWAVE_ITEM_NAME = "Is huge wave?";
private PackedScene zombieEditorScene = ResourceLoader.Load<PackedScene>("uid://db5ah76l43ng2");
private PackedScene initialEditorScene = ResourceLoader.Load<PackedScene>("uid://sqessjn0m4o3");
private Tree tree;
private AdventureLevelResource heldResource;
@ -99,7 +100,10 @@ public partial class AdventureResourceInspector : Node
break;
case INITIAL_ITEM_NAME:
var initialEditor = initialEditorScene.Instantiate<InitialEditor>();
editorContainer.AddChild(initialEditor);
initialEditor.SetData(heldResource);
initialEditor.SaveCallback += adventureEditor.Save;
break;
}
}

View file

@ -0,0 +1,46 @@
using Godot;
[Tool]
public partial class InitialEditor : Node
{
public AdventureLevelResource editedResource;
[Signal] public delegate void SaveCallbackEventHandler();
public override void _Ready()
{
foreach (var child in GetChild(0).GetChildren())
{
if (child is UNI_GridItem gridItem)
{
gridItem.ResourceChanged += OnResourceChanged;
}
}
}
public void SetData(AdventureLevelResource resource)
{
editedResource = resource;
for (int i = 0; i < GetChild(0).GetChildCount(); i++)
{
if (GetChild(0).GetChild(i) is UNI_GridItem gridItem)
{
gridItem.index = i;
if (editedResource.initialScenes[i] == null)
gridItem.SetData("");
else
gridItem.SetData(editedResource.initialScenes[i].ResourcePath);
}
}
}
public void OnResourceChanged(string to, int index)
{
if (ResourceLoader.Exists(to))
{
editedResource.initialScenes[index] = ResourceLoader.Load<PackedScene>(to);
}
else
{
editedResource.initialScenes[index] = null;
}
EmitSignal(SignalName.SaveCallback);
}
}

View file

@ -0,0 +1 @@
uid://cumeahjpjgagq

View file

@ -1,15 +1,46 @@
using Godot;
using System;
[Tool]
public partial class UNI_GridItem : PanelContainer
{
// Called when the node enters the scene tree for the first time.
public override void _Ready()
private string path;
public int index;
[Signal] public delegate void ResourceChangedEventHandler(string path, int index);
public void SetData(string data)
{
path = data;
UpdateContent();
}
private void UpdateContent()
{
if (path == null || path == "")
{
GetNode<TextureRect>("Texture").Texture = null;
return;
}
GetNode<TextureRect>("Texture").Call("set_path", path);
}
// Called every frame. 'delta' is the elapsed time since the previous frame.
public override void _Process(double delta)
public override Variant _GetDragData(Vector2 atPosition)
{
return path;
}
public override bool _CanDropData(Vector2 atPosition, Variant data)
{
return data.AsGodotDictionary<string, string>().ContainsKey("files") && ResourceLoader.Exists(data.AsGodotDictionary<string, Variant>()["files"].AsStringArray()[0]);
}
public override void _DropData(Vector2 atPosition, Variant data)
{
SetData(data.AsGodotDictionary<string, Variant>()["files"].AsStringArray()[0]);
EmitSignal(SignalName.ResourceChanged, path, index);
}
public override void _GuiInput(InputEvent @event)
{
if (@event is InputEventMouseButton buttonEvent && buttonEvent.ButtonIndex == MouseButton.Right )
{
SetData(null);
EmitSignal(SignalName.ResourceChanged, path, index);
}
}
}

View file

@ -0,0 +1,42 @@
@tool
extends TextureRect
@onready var subview = $Viewport
@onready var camera = $Viewport/Camera2D
var scene : Node
func set_path(path):
if scene:
scene.queue_free()
if ResourceLoader.exists(path) == false:
return
var packed_scene : PackedScene = load(path)
render_scene(path, packed_scene)
func render_scene(path: String,packed : PackedScene):
scene = packed.instantiate()
subview.add_child(scene)
var bb = get_bounding_box(scene)
subview.size = Vector2(max(bb.size.x,bb.size.y),max(bb.size.x,bb.size.y))
camera.position = bb.position * Vector2(0.5,0.5)
var vtexture : ViewportTexture = subview.get_texture()
texture = vtexture
func get_bounding_box(root: Node2D) -> Rect2:
var rect := Rect2();
var children := root.get_children();
while children:
var child = children.pop_back();
children.append_array(child.get_children());
if child.has_method('get_rect') and child.has_method('to_global'):
var child_rect := child.get_rect() as Rect2;
child_rect.position = child.to_global(child_rect.position);
rect = rect.merge(child_rect);
return rect;

View file

@ -0,0 +1 @@
uid://c3cgpwy1qaeww