From 2c3fa47ac55e78c3dd8a0c385e263776e4d0ff63 Mon Sep 17 00:00:00 2001 From: effie Date: Wed, 18 Jun 2025 23:38:20 +1000 Subject: [PATCH] Prototype tile placement --- actors/{base => base_actor}/base_actor.tscn | 0 build_enable_button.gd | 1 + build_enable_button.gd.uid | 1 + main.tscn | 20 ++++++++- map/base_map/grid.gd | 45 +++++++++++++++++++ map/base_map/grid.gd.uid | 1 + map/base_map/test_map.tscn | 8 ++++ map/map_manager.gd | 40 +++++++++++++++++ map/map_manager.gd.uid | 1 + map/map_manager.tscn | 22 +++++++++ project.godot | 9 ++++ .../base_tile/base_floor.tres | 0 tiles/base_tile/tile.gd | 6 +++ .../base_tile/tile.gd.uid | 0 .../base_world => tiles}/base_tile/tile.tscn | 4 +- world/base_world/base_tile/tile.gd | 5 --- world/base_world/test_world.tscn | 5 --- world/world_manager.tscn | 3 -- 18 files changed, 155 insertions(+), 16 deletions(-) rename actors/{base => base_actor}/base_actor.tscn (100%) create mode 100644 build_enable_button.gd create mode 100644 build_enable_button.gd.uid create mode 100644 map/base_map/grid.gd create mode 100644 map/base_map/grid.gd.uid create mode 100644 map/base_map/test_map.tscn create mode 100644 map/map_manager.gd create mode 100644 map/map_manager.gd.uid create mode 100644 map/map_manager.tscn rename {world/base_world => tiles}/base_tile/base_floor.tres (100%) create mode 100644 tiles/base_tile/tile.gd rename {world/base_world => tiles}/base_tile/tile.gd.uid (100%) rename {world/base_world => tiles}/base_tile/tile.tscn (74%) delete mode 100644 world/base_world/base_tile/tile.gd delete mode 100644 world/base_world/test_world.tscn delete mode 100644 world/world_manager.tscn diff --git a/actors/base/base_actor.tscn b/actors/base_actor/base_actor.tscn similarity index 100% rename from actors/base/base_actor.tscn rename to actors/base_actor/base_actor.tscn diff --git a/build_enable_button.gd b/build_enable_button.gd new file mode 100644 index 0000000..da3f810 --- /dev/null +++ b/build_enable_button.gd @@ -0,0 +1 @@ +extends CheckButton diff --git a/build_enable_button.gd.uid b/build_enable_button.gd.uid new file mode 100644 index 0000000..1e28ad9 --- /dev/null +++ b/build_enable_button.gd.uid @@ -0,0 +1 @@ +uid://toyg8a6pv2i1 diff --git a/main.tscn b/main.tscn index a52716d..f9f0216 100644 --- a/main.tscn +++ b/main.tscn @@ -1,3 +1,21 @@ -[gd_scene format=3 uid="uid://x8xo5b1b3q41"] +[gd_scene load_steps=2 format=3 uid="uid://x8xo5b1b3q41"] + +[ext_resource type="PackedScene" uid="uid://0d1d5e1u2fys" path="res://map/map_manager.tscn" id="1_ig7tw"] [node name="Main" type="Node"] + +[node name="CanvasLayer" type="CanvasLayer" parent="."] + +[node name="CheckButton" type="CheckButton" parent="CanvasLayer"] +offset_left = 1008.0 +offset_top = 18.0 +offset_right = 1120.0 +offset_bottom = 49.0 +text = "Building" + +[node name="MapManager" parent="." instance=ExtResource("1_ig7tw")] + +[node name="Camera3D" type="Camera3D" parent="."] +transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 18.064, 14.45, 9.456) + +[connection signal="toggled" from="CanvasLayer/CheckButton" to="MapManager" method="_build_toggled"] diff --git a/map/base_map/grid.gd b/map/base_map/grid.gd new file mode 100644 index 0000000..9a793e6 --- /dev/null +++ b/map/base_map/grid.gd @@ -0,0 +1,45 @@ +extends Node3D + +var load_tile = preload("res://tiles/base_tile/tile.tscn") + +var tiledict = {} + +func _ready(): + pass + +func init_tile(float_build_start_pos, float_build_mouse_pos): + + var build_start_pos: Vector3i = float_build_start_pos.snapped(Vector3i(1.0, 1.0, 1.0)) + var build_mouse_pos: Vector3i = float_build_mouse_pos.snapped(Vector3i(1.0, 1.0, 1.0)) + + var flat_pos = build_start_pos + build_mouse_pos + var distance = abs(build_start_pos - build_mouse_pos) + + #var build_mouse_x = floor(build_mouse_pos.x) + #var build_mouse_z = floor(build_mouse_pos.z) + # + #var grid_x_count = max(1, build_mouse_pos.x - build_start_pos.x) + #var grid_z_count = max(1, build_mouse_pos.z - build_start_pos.z) + + var crop_x = max(1, distance.x) + var crop_z = max(1, distance.z) + + for x in crop_x: + for z in crop_z: + + var id = flat_pos + + var tile = load_tile.instantiate() + + tile.position = build_start_pos + Vector3i(x, 0, z) + + print("global", build_start_pos + Vector3i(x, 0, z)) + + if not tiledict.has(id): + + print("global after", build_start_pos + Vector3i(x, 0, z)) + print("x (global)", id) + print("global", tile.position) + + tiledict[id] = tile + add_child(tile) diff --git a/map/base_map/grid.gd.uid b/map/base_map/grid.gd.uid new file mode 100644 index 0000000..2cd6e90 --- /dev/null +++ b/map/base_map/grid.gd.uid @@ -0,0 +1 @@ +uid://n4vvqmlmq5fp diff --git a/map/base_map/test_map.tscn b/map/base_map/test_map.tscn new file mode 100644 index 0000000..888f4fb --- /dev/null +++ b/map/base_map/test_map.tscn @@ -0,0 +1,8 @@ +[gd_scene load_steps=2 format=3 uid="uid://bujuwgn3y42ek"] + +[ext_resource type="Script" uid="uid://n4vvqmlmq5fp" path="res://map/base_map/grid.gd" id="1_2j6sh"] + +[node name="TestWorld" type="Node3D"] +script = ExtResource("1_2j6sh") + +[node name="Grid" type="Node3D" parent="."] diff --git a/map/map_manager.gd b/map/map_manager.gd new file mode 100644 index 0000000..b599745 --- /dev/null +++ b/map/map_manager.gd @@ -0,0 +1,40 @@ +extends Node3D + +var load_map = preload("res://map/base_map/test_map.tscn") +var map = load_map.instantiate() + +var build_enabled = false +var is_building = false + +var build_start_pos = null + +func _ready(): + add_child(map) + +func _input(event): + pass + +func _build_toggled(toggled_on) -> void: + if toggled_on: + build_enabled = true + else: + build_enabled = false + +func toggle_building(event): + if event.pressed: + is_building = true + + if not event.pressed: + is_building = false + +func _on_area_3d_input_event(_camera, event, event_position, _normal, _shade_id): + if event.is_action("select") && build_enabled: + is_building = true + build_start_pos = event_position + toggle_building(event) + + if not event.is_action_pressed("select") && is_building: + var build_mouse_pos = event_position + map.init_tile(build_start_pos, build_mouse_pos) + + pass # Replace with function body. diff --git a/map/map_manager.gd.uid b/map/map_manager.gd.uid new file mode 100644 index 0000000..b2bfdf0 --- /dev/null +++ b/map/map_manager.gd.uid @@ -0,0 +1 @@ +uid://d24sr2dat4lj0 diff --git a/map/map_manager.tscn b/map/map_manager.tscn new file mode 100644 index 0000000..d1d6cdb --- /dev/null +++ b/map/map_manager.tscn @@ -0,0 +1,22 @@ +[gd_scene load_steps=4 format=3 uid="uid://0d1d5e1u2fys"] + +[ext_resource type="Script" uid="uid://d24sr2dat4lj0" path="res://map/map_manager.gd" id="1_rcbs8"] + +[sub_resource type="BoxShape3D" id="BoxShape3D_rcbs8"] +size = Vector3(256, 0, 256) + +[sub_resource type="PrismMesh" id="PrismMesh_rcbs8"] + +[node name="MapManager" type="Node3D"] +script = ExtResource("1_rcbs8") + +[node name="Area3D" type="Area3D" parent="."] + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Area3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 128, 0, 128) +shape = SubResource("BoxShape3D_rcbs8") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="Area3D"] +mesh = SubResource("PrismMesh_rcbs8") + +[connection signal="input_event" from="Area3D" to="." method="_on_area_3d_input_event"] diff --git a/project.godot b/project.godot index 65f0759..fc9ee45 100644 --- a/project.godot +++ b/project.godot @@ -11,9 +11,18 @@ config_version=5 [application] config/name="Project Villain" +run/main_scene="uid://x8xo5b1b3q41" config/features=PackedStringArray("4.4", "Forward Plus") config/icon="res://icon.svg" +[input] + +select={ +"deadzone": 0.2, +"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":false,"double_click":false,"script":null) +] +} + [physics] 3d/default_gravity=0.0 diff --git a/world/base_world/base_tile/base_floor.tres b/tiles/base_tile/base_floor.tres similarity index 100% rename from world/base_world/base_tile/base_floor.tres rename to tiles/base_tile/base_floor.tres diff --git a/tiles/base_tile/tile.gd b/tiles/base_tile/tile.gd new file mode 100644 index 0000000..1d22a91 --- /dev/null +++ b/tiles/base_tile/tile.gd @@ -0,0 +1,6 @@ +extends Node3D + +var id = null +# tiles are 'buildable area' or not. non-buildable tiles are used as normal, but not chanegd by player + +# buildable are tiles need five total faces. If a face doesn't exist, it's assumed to be open space. diff --git a/world/base_world/base_tile/tile.gd.uid b/tiles/base_tile/tile.gd.uid similarity index 100% rename from world/base_world/base_tile/tile.gd.uid rename to tiles/base_tile/tile.gd.uid diff --git a/world/base_world/base_tile/tile.tscn b/tiles/base_tile/tile.tscn similarity index 74% rename from world/base_world/base_tile/tile.tscn rename to tiles/base_tile/tile.tscn index 2fd09c9..79f28ab 100644 --- a/world/base_world/base_tile/tile.tscn +++ b/tiles/base_tile/tile.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=3 format=3 uid="uid://gs6yynwvvot2"] -[ext_resource type="Script" uid="uid://jqjcr7dxjnbt" path="res://world/base_world/base_tile/tile.gd" id="1_v7x5k"] -[ext_resource type="PlaneMesh" uid="uid://bis4hdushjnjm" path="res://world/base_world/base_tile/base_floor.tres" id="2_ipr02"] +[ext_resource type="Script" uid="uid://jqjcr7dxjnbt" path="res://tiles/base_tile/tile.gd" id="1_v7x5k"] +[ext_resource type="PlaneMesh" uid="uid://bis4hdushjnjm" path="res://tiles/base_tile/base_floor.tres" id="2_ipr02"] [node name="Tile" type="Node3D"] script = ExtResource("1_v7x5k") diff --git a/world/base_world/base_tile/tile.gd b/world/base_world/base_tile/tile.gd deleted file mode 100644 index 60489df..0000000 --- a/world/base_world/base_tile/tile.gd +++ /dev/null @@ -1,5 +0,0 @@ -extends Node3D - -# tiles need five total faces. If a face doesn't exist, it's assumed to be open space. - -# diff --git a/world/base_world/test_world.tscn b/world/base_world/test_world.tscn deleted file mode 100644 index def4fcf..0000000 --- a/world/base_world/test_world.tscn +++ /dev/null @@ -1,5 +0,0 @@ -[gd_scene format=3 uid="uid://bujuwgn3y42ek"] - -[node name="TestWorld" type="Node3D"] - -[node name="Grid" type="Node3D" parent="."] diff --git a/world/world_manager.tscn b/world/world_manager.tscn deleted file mode 100644 index 5797cc6..0000000 --- a/world/world_manager.tscn +++ /dev/null @@ -1,3 +0,0 @@ -[gd_scene format=3 uid="uid://0d1d5e1u2fys"] - -[node name="WorldManager" type="Node3D"]