This commit is contained in:
Team3
2026-09-16 13:08:59 +02:00
parent 89fad5dc7a
commit e813b5f7aa
17 changed files with 483 additions and 247 deletions

View File

@@ -72,10 +72,43 @@ func _process(delta: float) -> void:
Game.notiz_sperre = maxf(0.0, Game.notiz_sperre - delta)
Game.situationen_ticken(dt, auf_erde and not Game.schlaeft_ziel())
_fokus_suchen()
_markieren()
_dabeisein()
_hinweis_setzen()
## Wer ein Schild trägt: Mission, Fokus, Verfolgter und wer unter der Maus steht.
func _markieren() -> void:
Game.markiert = {}
if Game.active_mission != "":
Game.markiert[Game.active_mission] = true
if _fokus_mensch != null:
Game.markiert[str(_fokus_mensch.data["id"])] = true
if player.folgt != null and is_instance_valid(player.folgt):
Game.markiert[str(player.folgt.data["id"])] = true
if auf_erde:
var unter_maus := _mensch_unter_maus(get_viewport().get_mouse_position())
if unter_maus != null:
Game.markiert[str(unter_maus.data["id"])] = true
## Der Mensch, der auf dem Bildschirm am nächsten am Punkt steht -- oder null.
func _mensch_unter_maus(pos: Vector2) -> Bewohner:
if not auf_erde:
return null
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
return bester
func _fokus_suchen() -> void:
_fokus = null
_fokus_mensch = null
@@ -96,7 +129,9 @@ func _fokus_suchen() -> void:
if d < bestm:
bestm = d
_fokus_mensch = m
if _fokus_mensch != null and (_fokus == null or bestm < best):
if player.folgt != null and is_instance_valid(player.folgt):
_fokus_mensch = player.folgt # wer sich angehängt hat, ist dabei -- auch auf der Treppe
if _fokus_mensch != null and (_fokus == null or bestm < best or _fokus_mensch == player.folgt):
_fokus = null
elif _fokus != null:
_fokus_mensch = null
@@ -209,25 +244,14 @@ func _notieren() -> void:
## 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
var bester := _mensch_unter_maus(pos)
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
player.anhaengen(bester)
Game.notified.emit("Du hängst dich an %s." % bester.data["name"], Color(0.7, 0.9, 1))
@@ -244,7 +268,7 @@ func _verfolgen() -> void:
Game.notified.emit("Geh näher an einen Menschen heran, um ihm zu folgen.",
Color(1, 0.85, 0.5))
return
player.folgt = _fokus_mensch
player.anhaengen(_fokus_mensch)
Game.notified.emit("Du hängst dich an %s." % _fokus_mensch.data["name"],
Color(0.7, 0.9, 1))