diff --git a/ruf-der-pilze/scripts/tavern.gd b/ruf-der-pilze/scripts/tavern.gd index 3f671bf..27c053b 100644 --- a/ruf-der-pilze/scripts/tavern.gd +++ b/ruf-der-pilze/scripts/tavern.gd @@ -1,6 +1,7 @@ extends Node3D const ROOM_COUNT := 8 +const INTERACT_DISTANCE := 2.5 var _modifier: int = 0 var _roll_log: RichTextLabel @@ -45,21 +46,40 @@ func _broadcast_camera_transform() -> void: func _spawn_player(room_index: int) -> void: - var room_num := (room_index % ROOM_COUNT) + 1 # Zimmer heißen Room1..Room8 - var spawn_path := "UpperFloor/Room%d/SpawnPoint" % room_num - var spawn := get_node_or_null(spawn_path) as Marker3D + var room_name := "Room%d" % (room_index % ROOM_COUNT + 1) + var spawn := get_node("UpperFloor/%s/SpawnPoint" % room_name) as Marker3D if spawn == null: - push_error("[Tavern] SpawnPoint nicht gefunden: %s" % spawn_path) + push_error("[Tavern] SpawnPoint nicht gefunden: %s" % room_name) return - var controller := Node3D.new() + + var controller := CharacterBody3D.new() controller.name = "PlayerController" + controller.set_script(load("res://scripts/player_controller.gd")) + + var shape := CollisionShape3D.new() + var capsule := CapsuleShape3D.new() + capsule.radius = 0.3 + capsule.height = 1.8 + shape.shape = capsule + shape.position = Vector3(0, 0.9, 0) + controller.add_child(shape) + var camera := Camera3D.new() camera.name = "Camera3D" camera.current = true + camera.position = Vector3(0, 1.6, 0) controller.add_child(camera) + + var ray := RayCast3D.new() + ray.name = "InteractRay" + ray.target_position = Vector3(0, 0, -INTERACT_DISTANCE) + ray.enabled = true + camera.add_child(ray) + add_child(controller) - controller.global_transform = spawn.global_transform - print("[Tavern] Spieler gespawnt in %s" % spawn_path) + controller.global_position = spawn.global_position + controller.global_rotation = spawn.global_rotation + print("[Tavern] Spieler gespawnt in %s" % room_name) func _setup_dice_ui() -> void: