update
This commit is contained in:
@@ -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))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user