This commit is contained in:
Team3
2026-09-16 01:23:42 +02:00
parent 12cbb88692
commit 936773c4e9
13 changed files with 1300 additions and 314 deletions

View File

@@ -17,10 +17,8 @@ func _ready() -> void:
ui = UI.new()
add_child(ui)
ui.panel_opened.connect(func() -> void:
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
player.look_enabled = false)
ui.panel_closed.connect(func() -> void:
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
player.look_enabled = true)
player = Player.new()
@@ -31,7 +29,7 @@ func _ready() -> void:
Color(0.8, 0.95, 1)))
_traumwelt()
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
func _traumwelt() -> void:
@@ -39,8 +37,7 @@ func _traumwelt() -> void:
_setze_welt(DreamWorld.new())
player.set_mode(Player.Mode.TRAUM)
player.global_position = (welt as DreamWorld).spawn
player.yaw = 0.0
player.pitch = -0.18
player.yaw = Player.CAM_YAW
func _erde() -> void:
@@ -48,8 +45,7 @@ func _erde() -> void:
_setze_welt(EarthWorld.new())
player.set_mode(Player.Mode.GEIST)
player.global_position = (welt as EarthWorld).spawn
player.yaw = 0.0
player.pitch = -0.42
player.yaw = Player.CAM_YAW
func _setze_welt(neu: Node3D) -> void:
@@ -59,6 +55,7 @@ func _setze_welt(neu: Node3D) -> void:
welt = neu
add_child(welt)
move_child(welt, 0)
welt.set("spieler", player) # für den Etagenschnitt
Game.teleport_lock = 1.0
_fokus = null
_fokus_mensch = null
@@ -92,7 +89,10 @@ func _fokus_suchen() -> void:
if auf_erde:
var bestm := REICHWEITE_MENSCH
for m in (welt as EarthWorld).humans:
var d: float = p.distance_to((m as Node3D).global_position + Vector3(0, 1.0, 0))
var mp: Vector3 = (m as Node3D).global_position + Vector3(0, 1.0, 0)
if absf(mp.y - p.y) > 2.0:
continue # andere Etage: durch die Decke sieht man nichts
var d: float = p.distance_to(mp)
if d < bestm:
bestm = d
_fokus_mensch = m
@@ -143,17 +143,11 @@ func _notiz_hinweis(mensch: Bewohner) -> String:
func _unhandled_input(event: InputEvent) -> void:
if event.is_action_pressed("ui_cancel") and not ui.offen:
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE if \
Input.mouse_mode == Input.MOUSE_MODE_CAPTURED else Input.MOUSE_MODE_CAPTURED
player.look_enabled = Input.mouse_mode == Input.MOUSE_MODE_CAPTURED
get_viewport().set_input_as_handled()
return
if ui.offen:
return
if event is InputEventMouseButton and event.pressed and Input.mouse_mode == Input.MOUSE_MODE_VISIBLE:
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
player.look_enabled = true
if event is InputEventMouseButton and event.pressed \
and event.button_index == MOUSE_BUTTON_LEFT:
_klick(event.position)
return
for stufe in [1, 2, 3]:
if event.is_action_pressed("tempo_%d" % stufe):
@@ -213,6 +207,30 @@ func _notieren() -> void:
Game.notieren(id, int(ziel.slot))
## Klick auf einen Menschen: an ihn hängen, noch ein Klick löst wieder.
func _klick(pos: Vector2) -> void:
if not auf_erde:
return
var bester: Bewohner = null
var beste := 48.0
for m in (welt as EarthWorld).humans:
var w: Vector3 = (m as Node3D).global_position + Vector3(0, 0.8, 0)
if player.cam.is_position_behind(w):
continue
var d := player.cam.unproject_position(w).distance_to(pos)
if d < beste:
beste = d
bester = m
if bester == null:
return
if player.folgt == bester:
player.folgt = null
Game.notified.emit("Du lässt %s wieder los." % bester.data["name"], Color(0.8, 0.85, 1))
else:
player.folgt = bester
Game.notified.emit("Du hängst dich an %s." % bester.data["name"], Color(0.7, 0.9, 1))
## Als Geist an einen Menschen hängen und ihn durch seinen Tag begleiten.
func _verfolgen() -> void:
if not auf_erde: