extends Node3D
+@onready var _walls = $map
+
+var _player_wall_tscn = preload("res://player/player_wall.tscn")
+var _wall_start: Vector3 = Vector3.ZERO
func _input(event: InputEvent) -> void:
if event.is_action_pressed("ui_cancel"):
get_tree().quit()
+
+
+func _on_player_player_ready(player: Player) -> void:
+ var origin: Vector3 = player.get_tree().get_first_node_in_group("wall_origin").global_position
+ _wall_start = origin
+
+
+func _on_player_player_turn(player: Player) -> void:
+ var origin: Vector3 = player.global_position
+
+ var wall: PlayerWall = _player_wall_tscn.instantiate()
+ add_child(wall)
+ wall.global_position = _wall_start
+ wall.global_scale(Vector3(1, 1, (origin - _wall_start).length()))
+ wall.global_rotation = player.global_rotation
+ print("Made a wall: " + str(wall))
+
+ _wall_start = origin
[node name="player" parent="." instance=ExtResource("1_3tqxd")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -16)
-speed = 5.0
-distance = 3.0
+distance = 5.0
+
+[connection signal="playerReady" from="player" to="." method="_on_player_player_ready"]
+[connection signal="playerTurn" from="player" to="." method="_on_player_player_turn"]
+class_name Player
extends CharacterBody3D
+
+signal playerReady
+signal playerTurn
+
+
@export_category("Movement")
@export var speed = 5.0
@export var distance = 3.0
@onready var _springArm = $SpringArm3D
-@onready var _skin = %skin
+func _ready() -> void:
+ _springArm.spring_length = distance
+ playerReady.emit(self)
+
func _input(event: InputEvent) -> void:
if event.is_action_pressed("player_left"):
+ playerTurn.emit(self)
global_rotate(Vector3.UP, PI/2)
elif event.is_action_pressed("player_right"):
+ playerTurn.emit(self)
global_rotate(Vector3.UP, -PI/2)
-func _physics_process(delta: float) -> void:
+
+func _physics_process(_delta: float) -> void:
velocity = global_transform.basis.z * speed
move_and_slide()
size = Vector3(0.25116, 0.472717, 0.987427)
[node name="Player" type="CharacterBody3D"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.367284)
script = ExtResource("1_kh0vu")
[node name="skin" parent="." instance=ExtResource("1_m3abw")]
spring_length = 5.0
[node name="Camera3D" type="Camera3D" parent="SpringArm3D"]
+
+[node name="WallOrigin" type="Node3D" parent="." groups=["wall_origin"]]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.343644)
--- /dev/null
+class_name PlayerWall
+extends Node3D
--- /dev/null
+[gd_scene load_steps=4 format=3 uid="uid://6a20phajjwu8"]
+
+[ext_resource type="Script" path="res://player/player_wall.gd" id="1_rj8im"]
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_sk1tc"]
+albedo_color = Color(0.1152, 0.8192, 0.96, 1)
+emission_enabled = true
+emission = Color(0.354498, 0.45596, 0.814702, 1)
+emission_energy_multiplier = 1.44
+
+[sub_resource type="BoxMesh" id="BoxMesh_p4d0s"]
+material = SubResource("StandardMaterial3D_sk1tc")
+size = Vector3(1, 0.01, 1)
+
+[node name="PlayerWall" type="Node3D"]
+script = ExtResource("1_rj8im")
+
+[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
+transform = Transform3D(-4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, 0, 0, 0.5)
+mesh = SubResource("BoxMesh_p4d0s")
window/size/viewport_width=2304
window/size/viewport_height=1296
+[global_group]
+
+wall_origin=""
+
[input]
player_left={