From f38d91ad9aea03c70bafe37937239a389d0b4bfa Mon Sep 17 00:00:00 2001 From: adtpdn Date: Tue, 15 Apr 2025 10:37:53 +0800 Subject: [PATCH] update some plugins, fitting the 4.4.1 gridmap feature --- .../enhanced_gridmap/enhanced_gridmap_dock.gd | 137 ++++++++++++++---- .../enhanced_gridmap_dock.tscn | 1 + assets/models/meshes/block.res | Bin 11922 -> 5868 bytes assets/obstacle_example.png.import | 34 +++++ scenes/main.tscn | 8 +- 5 files changed, 150 insertions(+), 30 deletions(-) create mode 100644 assets/obstacle_example.png.import diff --git a/addons/enhanced_gridmap/enhanced_gridmap_dock.gd b/addons/enhanced_gridmap/enhanced_gridmap_dock.gd index 731c69f..e00e8e9 100644 --- a/addons/enhanced_gridmap/enhanced_gridmap_dock.gd +++ b/addons/enhanced_gridmap/enhanced_gridmap_dock.gd @@ -69,52 +69,124 @@ func connect_signals(): func initialize_custom_item_states(): # Add default item states - add_custom_item_state("Normal", 0) - add_custom_item_state("Non-Walkable", 4) + #add_custom_item_state("Normal", 0) + #add_custom_item_state("Non-Walkable", 4) + pass func add_custom_item_state(name: String, id: int): + # Check if an item state with this ID already exists + if custom_item_states.has(id): + print("Item state with ID ", id, " already exists") + return + var new_state = CustomItemState.new(name, id) custom_item_states[id] = new_state add_item_state_ui(new_state) +#func add_item_state_ui(item_state: CustomItemState): + #var container = HBoxContainer.new() + #var name_edit = LineEdit.new() + #var id_spin = SpinBox.new() + #var randomize_check = CheckBox.new() + #var percentage_spin = SpinBox.new() + #var remove_button = Button.new() +# + #name_edit.text = item_state.name + #name_edit.size_flags_horizontal = Control.SIZE_EXPAND_FILL + #name_edit.text_changed.connect(_on_item_state_name_changed.bind(item_state)) +# + #id_spin.value = item_state.id + #id_spin.min_value = 0 + #id_spin.max_value = 9999 + #id_spin.value_changed.connect(_on_item_state_id_changed.bind(item_state)) +# + #randomize_check.text = "🎲" + #randomize_check.button_pressed = item_state.include_in_randomize + #randomize_check.toggled.connect(_on_item_state_randomize_toggled.bind(item_state)) +# + #percentage_spin.min_value = 0 + #percentage_spin.max_value = 100 + #percentage_spin.value = item_state.randomize_percentage + #percentage_spin.suffix = "%" + #percentage_spin.value_changed.connect(_on_item_state_percentage_changed.bind(item_state)) +# + #remove_button.text = "Del" + #remove_button.pressed.connect(_on_remove_item_state_pressed.bind(item_state, container)) +# + #container.add_child(name_edit) + #container.add_child(id_spin) + #container.add_child(randomize_check) + #container.add_child(percentage_spin) + #container.add_child(remove_button) +# + #item_states_container.add_child(container) + func add_item_state_ui(item_state: CustomItemState): var container = HBoxContainer.new() - var name_edit = LineEdit.new() - var id_spin = SpinBox.new() + + # Create a new OptionButton instead of separate name_edit and id_spin + var item_selector = OptionButton.new() + item_selector.size_flags_horizontal = Control.SIZE_EXPAND_FILL + + # Populate the selector with items from mesh_library + if enhanced_gridmap and enhanced_gridmap.mesh_library: + var item_list = enhanced_gridmap.mesh_library.get_item_list() + # Add an "Empty" option as item -1 + item_selector.add_item("Empty", -1) + + # Add all items from the mesh library + for item_id in item_list: + var item_name = enhanced_gridmap.mesh_library.get_item_name(item_id) + item_selector.add_item(item_name, item_id) + # Select the current item if it matches + if item_id == item_state.id: + item_selector.select(item_selector.get_item_count() - 1) + + # Connect the item selection signal + item_selector.item_selected.connect( + func(index): + var selected_id = item_selector.get_item_id(index) + var selected_name = item_selector.get_item_text(index) + _on_item_state_selection_changed(selected_id, selected_name, item_state) + ) + var randomize_check = CheckBox.new() var percentage_spin = SpinBox.new() var remove_button = Button.new() - - name_edit.text = item_state.name - name_edit.size_flags_horizontal = Control.SIZE_EXPAND_FILL - name_edit.text_changed.connect(_on_item_state_name_changed.bind(item_state)) - - id_spin.value = item_state.id - id_spin.min_value = 0 - id_spin.max_value = 9999 - id_spin.value_changed.connect(_on_item_state_id_changed.bind(item_state)) - + randomize_check.text = "🎲" randomize_check.button_pressed = item_state.include_in_randomize randomize_check.toggled.connect(_on_item_state_randomize_toggled.bind(item_state)) - + percentage_spin.min_value = 0 percentage_spin.max_value = 100 percentage_spin.value = item_state.randomize_percentage percentage_spin.suffix = "%" percentage_spin.value_changed.connect(_on_item_state_percentage_changed.bind(item_state)) - + remove_button.text = "Del" remove_button.pressed.connect(_on_remove_item_state_pressed.bind(item_state, container)) - - container.add_child(name_edit) - container.add_child(id_spin) + + # Add all components to the container + container.add_child(item_selector) container.add_child(randomize_check) container.add_child(percentage_spin) container.add_child(remove_button) - + item_states_container.add_child(container) +# Add a new function to handle item selection changes +func _on_item_state_selection_changed(new_id: int, new_name: String, item_state: CustomItemState): + # Remove the item state from the dictionary with the old ID + custom_item_states.erase(item_state.id) + + # Update the item state + item_state.id = new_id + item_state.name = new_name + + # Add the item state back to the dictionary with the new ID + custom_item_states[new_id] = item_state + func _on_add_item_state_pressed(): var new_id = custom_item_states.size() add_custom_item_state("New State {0}".format([new_id]), new_id) @@ -142,7 +214,7 @@ class CustomItemState: var id: int var include_in_randomize: bool = false var randomize_percentage: float = 0 - + func _init(_name: String, _id: int): name = _name id = _id @@ -152,14 +224,14 @@ func set_enhanced_gridmap(gridmap: EnhancedGridMap): if enhanced_gridmap: if enhanced_gridmap.grid_updated.is_connected(_on_grid_updated): enhanced_gridmap.grid_updated.disconnect(_on_grid_updated) - - + enhanced_gridmap = gridmap if enhanced_gridmap: enhanced_gridmap.grid_updated.connect(_on_grid_updated) floor_spin.max_value = enhanced_gridmap.floors - 1 floors_count_spin.value = enhanced_gridmap.floors update_ui() + _update_fill_options() # Update the fill options when setting a new gridmap diagonal_movement_check.button_pressed = enhanced_gridmap.diagonal_movement print("EnhancedGridMap set: ", enhanced_gridmap) @@ -215,6 +287,9 @@ func _update_grid_ui(): var option = OptionButton.new() option.set_meta("grid_position", Vector3i(x, current_floor, z)) + # Add empty option at index 0 + option.add_item("Empty", -1) + # Add items from the mesh library for i in range(item_list.size()): option.add_item(enhanced_gridmap.mesh_library.get_item_name(item_list[i]), i) @@ -223,7 +298,7 @@ func _update_grid_ui(): if cell_item != -1 and cell_item < option.get_item_count(): option.select(cell_item) else: - option.select(0)# Select the first item if the cell is empty + option.select(0) # Select the first item if the cell is empty option.item_selected.connect(_on_cell_item_selected.bind(option)) option.size_flags_horizontal = Control.SIZE_EXPAND_FILL @@ -328,11 +403,21 @@ func _on_fill_pressed(): else: print("No item selected for filling") +# func _on_cell_item_selected(index: int, option: OptionButton): +# var position = option.get_meta("grid_position") +# if enhanced_gridmap: +# if index >= 0 and index < enhanced_gridmap.mesh_library.get_item_list().size(): +# enhanced_gridmap.set_cell_item(position, index) + func _on_cell_item_selected(index: int, option: OptionButton): var position = option.get_meta("grid_position") if enhanced_gridmap: - if index >= 0 and index < enhanced_gridmap.mesh_library.get_item_list().size(): - enhanced_gridmap.set_cell_item(position, index) + var item_id = option.get_item_id(index) + if item_id == -1: + # Handle empty selection + enhanced_gridmap.set_cell_item(position, -1) + elif index > 0: # Skip the first item (Empty) + enhanced_gridmap.set_cell_item(position, item_id) func _on_find_path_pressed(): if enhanced_gridmap: diff --git a/addons/enhanced_gridmap/enhanced_gridmap_dock.tscn b/addons/enhanced_gridmap/enhanced_gridmap_dock.tscn index 99c0891..f2189e3 100644 --- a/addons/enhanced_gridmap/enhanced_gridmap_dock.tscn +++ b/addons/enhanced_gridmap/enhanced_gridmap_dock.tscn @@ -6,6 +6,7 @@ anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 +offset_bottom = 137.0 grow_horizontal = 2 grow_vertical = 2 script = ExtResource("1_abcde") diff --git a/assets/models/meshes/block.res b/assets/models/meshes/block.res index 09353655268c8ba75e4a387a7d6cdf6956084c37..ab6f591b004885015a638809ad31d2c81f59af1a 100644 GIT binary patch literal 5868 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 CfMyQ> literal 11922 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 diff --git a/assets/obstacle_example.png.import b/assets/obstacle_example.png.import new file mode 100644 index 0000000..6917e76 --- /dev/null +++ b/assets/obstacle_example.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bh8jg8k21ubsh" +path="res://.godot/imported/obstacle_example.png-3c341da752bc068c99b3358aacbd41dd.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/obstacle_example.png" +dest_files=["res://.godot/imported/obstacle_example.png-3c341da752bc068c99b3358aacbd41dd.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/scenes/main.tscn b/scenes/main.tscn index 5837fd0..bf860c5 100644 --- a/scenes/main.tscn +++ b/scenes/main.tscn @@ -38,16 +38,16 @@ enable_bots = false mesh_library = ExtResource("1_110wo") cell_size = Vector3(1, 1, 1) data = { -"cells": PackedInt32Array(0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 3, 0, 0, 4, 0, 0, 5, 0, 0, 6, 0, 0, 7, 0, 0, 8, 0, 0, 9, 0, 0, 10, 0, 0, 11, 0, 1, 0, 0, 1, 1, 0, 1, 2, 0, 1, 3, 0, 1, 4, 0, 1, 5, 0, 1, 6, 0, 1, 7, 0, 1, 8, 0, 1, 9, 0, 1, 10, 0, 1, 11, 0, 2, 0, 0, 2, 1, 0, 2, 2, 0, 2, 3, 0, 2, 4, 0, 2, 5, 0, 2, 6, 0, 2, 7, 0, 2, 8, 0, 2, 9, 0, 2, 10, 0, 2, 11, 0, 3, 0, 0, 3, 1, 0, 3, 2, 0, 3, 3, 0, 3, 4, 0, 3, 5, 0, 3, 6, 0, 3, 7, 0, 3, 8, 0, 3, 9, 0, 3, 10, 0, 3, 11, 0, 4, 0, 0, 4, 1, 0, 4, 2, 0, 4, 3, 0, 4, 4, 0, 4, 5, 0, 4, 6, 0, 4, 7, 0, 4, 8, 0, 4, 9, 0, 4, 10, 0, 4, 11, 0, 5, 0, 0, 5, 1, 0, 5, 2, 0, 5, 3, 0, 5, 4, 0, 5, 5, 0, 5, 6, 0, 5, 7, 0, 5, 8, 0, 5, 9, 0, 5, 10, 0, 5, 11, 0, 6, 0, 0, 6, 1, 0, 6, 2, 0, 6, 3, 0, 6, 4, 0, 6, 5, 0, 6, 6, 0, 6, 7, 0, 6, 8, 0, 6, 9, 0, 6, 10, 0, 6, 11, 0, 7, 0, 0, 7, 1, 0, 7, 2, 0, 7, 3, 0, 7, 4, 0, 7, 5, 0, 7, 6, 0, 7, 7, 0, 7, 8, 0, 7, 9, 0, 7, 10, 0, 7, 11, 0, 8, 0, 0, 8, 1, 0, 8, 2, 0, 8, 3, 0, 8, 4, 0, 8, 5, 0, 8, 6, 0, 8, 7, 0, 8, 8, 0, 8, 9, 0, 8, 10, 0, 8, 11, 0, 9, 0, 0, 9, 1, 0, 9, 2, 0, 9, 3, 0, 9, 4, 0, 9, 5, 0, 9, 6, 0, 9, 7, 0, 9, 8, 0, 9, 9, 0, 9, 10, 0, 9, 11, 0, 10, 0, 0, 10, 1, 0, 10, 2, 0, 10, 3, 0, 10, 4, 0, 10, 5, 0, 10, 6, 0, 10, 7, 0, 10, 8, 0, 10, 9, 0, 10, 10, 0, 10, 11, 0, 11, 0, 0, 11, 1, 0, 11, 2, 0, 11, 3, 0, 11, 4, 0, 11, 5, 0, 11, 6, 0, 11, 7, 0, 11, 8, 0, 11, 9, 0, 11, 10, 0, 11, 11, 0, 12, 0, 0, 12, 1, 0, 12, 2, 0, 12, 3, 0, 12, 4, 0, 12, 5, 0, 12, 6, 0, 12, 7, 0, 12, 8, 0, 12, 9, 0, 12, 10, 0, 12, 11, 0, 13, 0, 0, 13, 1, 0, 13, 2, 0, 13, 3, 0, 13, 4, 0, 13, 5, 0, 13, 6, 0, 13, 7, 0, 13, 8, 0, 13, 9, 0, 13, 10, 0, 13, 11, 0, 65537, 1, 9, 65537, 2, 9, 65537, 3, 10, 65537, 4, 7, 65537, 5, 10, 65537, 6, 7, 65537, 7, 7, 65537, 8, 8, 65537, 9, 7, 65537, 10, 10, 65537, 11, 8, 65538, 1, 8, 65538, 2, 8, 65538, 3, 10, 65538, 4, 8, 65538, 5, 10, 65538, 6, 8, 65538, 7, 9, 65538, 8, 9, 65538, 9, 7, 65538, 10, 7, 65538, 11, 9, 65539, 0, 8, 65539, 1, 9, 65539, 2, 7, 65539, 3, 10, 65539, 4, 9, 65539, 5, 7, 65539, 6, 8, 65539, 8, 7, 65539, 9, 7, 65539, 10, 7, 65539, 11, 9, 65540, 0, 9, 65540, 1, 9, 65540, 2, 10, 65540, 3, 8, 65540, 4, 9, 65540, 5, 10, 65540, 6, 7, 65540, 7, 10, 65540, 8, 9, 65540, 9, 10, 65540, 10, 9, 65540, 11, 10, 65541, 0, 8, 65541, 1, 8, 65541, 2, 8, 65541, 3, 10, 65541, 4, 7, 65541, 5, 9, 65541, 6, 8, 65541, 7, 10, 65541, 8, 9, 65541, 9, 8, 65541, 10, 10, 65541, 11, 9, 65542, 0, 7, 65542, 1, 8, 65542, 2, 9, 65542, 3, 10, 65542, 4, 9, 65542, 5, 10, 65542, 6, 10, 65542, 7, 7, 65542, 8, 7, 65542, 9, 10, 65542, 10, 7, 65542, 11, 7, 65543, 0, 9, 65543, 1, 8, 65543, 2, 10, 65543, 3, 7, 65543, 4, 7, 65543, 5, 10, 65543, 6, 9, 65543, 7, 8, 65543, 8, 9, 65543, 9, 7, 65543, 10, 7, 65543, 11, 9, 65544, 0, 7, 65544, 1, 7, 65544, 2, 10, 65544, 3, 10, 65544, 4, 7, 65544, 5, 7, 65544, 6, 9, 65544, 7, 10, 65544, 8, 7, 65544, 9, 7, 65544, 10, 8, 65544, 11, 9, 65545, 0, 9, 65545, 1, 10, 65545, 2, 9, 65545, 3, 9, 65545, 4, 9, 65545, 5, 9, 65545, 6, 9, 65545, 7, 9, 65545, 8, 10, 65545, 9, 7, 65545, 10, 7, 65545, 11, 9, 65546, 0, 8, 65546, 1, 8, 65546, 2, 7, 65546, 3, 10, 65546, 4, 7, 65546, 5, 9, 65546, 6, 9, 65546, 7, 9, 65546, 8, 7, 65546, 9, 9, 65546, 10, 10, 65546, 11, 10, 65547, 0, 10, 65547, 1, 8, 65547, 2, 7, 65547, 3, 8, 65547, 4, 10, 65547, 5, 7, 65547, 6, 10, 65547, 7, 7, 65547, 8, 10, 65547, 9, 8, 65547, 10, 7, 65547, 11, 8, 65548, 0, 7, 65548, 1, 9, 65548, 2, 10, 65548, 3, 9, 65548, 4, 7, 65548, 5, 9, 65548, 6, 8, 65548, 7, 10, 65548, 8, 10, 65548, 9, 8, 65548, 10, 9, 65548, 11, 9, 65538, 0, 10, 65537, 0, 7, 65539, 7, 9) +"cells": PackedInt32Array(0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 3, 0, 0, 4, 0, 0, 5, 0, 1, 0, 0, 1, 1, 0, 1, 2, 0, 1, 3, 0, 1, 4, 0, 1, 5, 0, 2, 0, 0, 2, 1, 0, 2, 2, 0, 2, 3, 0, 2, 4, 0, 2, 5, 0, 3, 0, 0, 3, 1, 0, 3, 2, 0, 3, 3, 0, 3, 4, 0, 3, 5, 0, 4, 0, 0, 4, 1, 0, 4, 2, 0, 4, 3, 0, 4, 4, 0, 4, 5, 0, 5, 0, 0, 5, 1, 0, 5, 2, 0, 5, 3, 0, 5, 4, 0, 5, 5, 0, 6, 0, 0, 6, 1, 0, 6, 2, 0, 6, 3, 0, 6, 4, 0, 6, 5, 0, 7, 0, 0, 7, 1, 0, 7, 2, 0, 7, 3, 0, 7, 4, 0, 7, 5, 0, 8, 0, 0, 8, 1, 0, 8, 2, 0, 8, 3, 0, 8, 4, 0, 8, 5, 0, 9, 0, 0, 9, 1, 0, 9, 2, 0, 9, 3, 0, 9, 4, 0, 9, 5, 0, 10, 0, 0, 10, 1, 0, 10, 2, 0, 10, 3, 0, 10, 4, 0, 10, 5, 0, 11, 0, 0, 11, 1, 0, 11, 2, 0, 11, 3, 0, 11, 4, 0, 11, 5, 0, 12, 0, 0, 12, 1, 0, 12, 2, 0, 12, 3, 0, 12, 4, 0, 12, 5, 0, 13, 0, 0, 13, 1, 0, 13, 2, 0, 13, 3, 0, 13, 4, 0, 13, 5, 0, 65536, 0, 8, 65536, 1, 10, 65536, 2, 7, 65536, 3, 10, 65536, 4, 8, 65536, 5, 7, 65537, 0, 9, 65537, 1, 10, 65537, 2, 9, 65537, 3, 8, 65537, 4, 10, 65537, 5, 9, 65538, 0, 7, 65538, 1, 8, 65538, 2, 7, 65538, 3, 8, 65538, 4, 7, 65538, 5, 9, 65539, 0, 8, 65539, 1, 10, 65539, 2, 10, 65539, 3, 8, 65539, 4, 10, 65539, 5, 8, 65540, 0, 7, 65540, 1, 8, 65540, 2, 10, 65540, 3, 7, 65540, 4, 8, 65540, 5, 9, 65541, 0, 7, 65541, 1, 8, 65541, 2, 7, 65541, 3, 9, 65541, 4, 8, 65541, 5, 10, 65542, 0, 8, 65542, 1, 7, 65542, 2, 9, 65542, 3, 10, 65542, 4, 8, 65542, 5, 9, 65543, 0, 10, 65543, 1, 8, 65543, 2, 7, 65543, 3, 10, 65543, 4, 8, 65543, 5, 10, 65544, 0, 7, 65544, 1, 10, 65544, 2, 7, 65544, 3, 9, 65544, 4, 8, 65544, 5, 7, 65545, 0, 7, 65545, 1, 8, 65545, 2, 7, 65545, 3, 7, 65545, 4, 7, 65545, 5, 9, 65546, 0, 7, 65546, 1, 7, 65546, 2, 8, 65546, 3, 8, 65546, 4, 10, 65546, 5, 8, 65547, 0, 7, 65547, 1, 10, 65547, 2, 7, 65547, 3, 9, 65547, 4, 10, 65547, 5, 10, 65548, 0, 8, 65548, 1, 9, 65548, 2, 10, 65548, 3, 7, 65548, 4, 8, 65548, 5, 7, 65549, 0, 8, 65549, 1, 10, 65549, 2, 10, 65549, 3, 9, 65549, 4, 8, 65549, 5, 10, 131072, 0, 2031616, 131072, 1, 2031616, 131072, 2, 2031616, 131072, 3, 2031616, 131072, 4, 2031616, 131072, 5, 2031616, 131073, 0, 2031616, 131073, 1, 2031616, 131073, 2, 2031616, 131073, 3, 2031616, 131073, 4, 2031616, 131073, 5, 2031616, 131074, 0, 2031616, 131074, 1, 2031616, 131074, 2, 2031616, 131074, 3, 2031616, 131074, 4, 2031616, 131074, 5, 2031616, 131075, 0, 2031616, 131075, 1, 2031616, 131075, 2, 2031616, 131075, 3, 2031616, 131075, 4, 2031616, 131075, 5, 2031616, 131076, 0, 2031616, 131076, 1, 2031616, 131076, 2, 2031616, 131076, 3, 2031616, 131076, 4, 2031616, 131076, 5, 2031616, 131077, 0, 2031616, 131077, 1, 2031616, 131077, 2, 2031616, 131077, 3, 2031616, 131077, 4, 2031616, 131077, 5, 2031616, 131078, 0, 2031616, 131078, 1, 2031616, 131078, 2, 2031616, 131078, 3, 2031616, 131078, 4, 2031616, 131078, 5, 2031616, 131079, 0, 2031616, 131079, 1, 2031616, 131079, 2, 2031616, 131079, 3, 2031616, 131079, 4, 2031616, 131079, 5, 2031616, 131080, 0, 2031616, 131080, 1, 2031616, 131080, 2, 2031616, 131080, 3, 2031616, 131080, 4, 2031616, 131080, 5, 2031616, 131081, 0, 2031616, 131081, 1, 2031616, 131081, 2, 2031616, 131081, 3, 2031616, 131081, 4, 2031616, 131081, 5, 2031616, 131082, 0, 2031616, 131082, 1, 2031616, 131082, 2, 2031616, 131082, 3, 2031616, 131082, 4, 2031616, 131082, 5, 2031616, 131083, 0, 2031616, 131083, 1, 2031616, 131083, 2, 2031616, 131083, 3, 2031616, 131083, 4, 2031616, 131083, 5, 2031616, 131084, 0, 2031616, 131084, 1, 2031616, 131084, 2, 2031616, 131084, 3, 2031616, 131084, 4, 2031616, 131084, 5, 2031616, 131085, 0, 2031616, 131085, 1, 2031616, 131085, 2, 2031616, 131085, 3, 2031616, 131085, 4, 2031616, 131085, 5, 2031616) } script = ExtResource("2_hbe1v") columns = 14 -rows = 12 +rows = 6 obstacle_items = Array[int]([12]) -metadata/_editor_floor_ = Vector3(0, -2, 0) +metadata/_editor_floor_ = Vector3(0, 1, 0) [node name="Camera3D" type="Camera3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 0.422618, 0.906308, 0, -0.906308, 0.422618, 7, 26, 17) +transform = Transform3D(1, 0, 0, 0, 0.422618, 0.906308, 0, -0.906308, 0.422618, 7, 19, 11.2354) environment = ExtResource("4_ky38j") fov = 35.5