Prototype tile placement
This commit is contained in:
parent
a476687fbf
commit
2c3fa47ac5
1
build_enable_button.gd
Normal file
1
build_enable_button.gd
Normal file
@ -0,0 +1 @@
|
|||||||
|
extends CheckButton
|
||||||
1
build_enable_button.gd.uid
Normal file
1
build_enable_button.gd.uid
Normal file
@ -0,0 +1 @@
|
|||||||
|
uid://toyg8a6pv2i1
|
||||||
20
main.tscn
20
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="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"]
|
||||||
|
|||||||
45
map/base_map/grid.gd
Normal file
45
map/base_map/grid.gd
Normal file
@ -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)
|
||||||
1
map/base_map/grid.gd.uid
Normal file
1
map/base_map/grid.gd.uid
Normal file
@ -0,0 +1 @@
|
|||||||
|
uid://n4vvqmlmq5fp
|
||||||
8
map/base_map/test_map.tscn
Normal file
8
map/base_map/test_map.tscn
Normal file
@ -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="."]
|
||||||
40
map/map_manager.gd
Normal file
40
map/map_manager.gd
Normal file
@ -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.
|
||||||
1
map/map_manager.gd.uid
Normal file
1
map/map_manager.gd.uid
Normal file
@ -0,0 +1 @@
|
|||||||
|
uid://d24sr2dat4lj0
|
||||||
22
map/map_manager.tscn
Normal file
22
map/map_manager.tscn
Normal file
@ -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"]
|
||||||
@ -11,9 +11,18 @@ config_version=5
|
|||||||
[application]
|
[application]
|
||||||
|
|
||||||
config/name="Project Villain"
|
config/name="Project Villain"
|
||||||
|
run/main_scene="uid://x8xo5b1b3q41"
|
||||||
config/features=PackedStringArray("4.4", "Forward Plus")
|
config/features=PackedStringArray("4.4", "Forward Plus")
|
||||||
config/icon="res://icon.svg"
|
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]
|
[physics]
|
||||||
|
|
||||||
3d/default_gravity=0.0
|
3d/default_gravity=0.0
|
||||||
|
|||||||
6
tiles/base_tile/tile.gd
Normal file
6
tiles/base_tile/tile.gd
Normal file
@ -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.
|
||||||
@ -1,7 +1,7 @@
|
|||||||
[gd_scene load_steps=3 format=3 uid="uid://gs6yynwvvot2"]
|
[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="Script" uid="uid://jqjcr7dxjnbt" path="res://tiles/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="PlaneMesh" uid="uid://bis4hdushjnjm" path="res://tiles/base_tile/base_floor.tres" id="2_ipr02"]
|
||||||
|
|
||||||
[node name="Tile" type="Node3D"]
|
[node name="Tile" type="Node3D"]
|
||||||
script = ExtResource("1_v7x5k")
|
script = ExtResource("1_v7x5k")
|
||||||
@ -1,5 +0,0 @@
|
|||||||
extends Node3D
|
|
||||||
|
|
||||||
# tiles need five total faces. If a face doesn't exist, it's assumed to be open space.
|
|
||||||
|
|
||||||
#
|
|
||||||
@ -1,5 +0,0 @@
|
|||||||
[gd_scene format=3 uid="uid://bujuwgn3y42ek"]
|
|
||||||
|
|
||||||
[node name="TestWorld" type="Node3D"]
|
|
||||||
|
|
||||||
[node name="Grid" type="Node3D" parent="."]
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
[gd_scene format=3 uid="uid://0d1d5e1u2fys"]
|
|
||||||
|
|
||||||
[node name="WorldManager" type="Node3D"]
|
|
||||||
Loading…
Reference in New Issue
Block a user