Suspicionパラメータ
suspicion = 疑い
NPCの視界にいるとき、毎秒パラメータが上昇
最大値に達すると、ゲームオーバー
視界の外にいると、少しづつ減少
0より小さくならない
どうやる?
GUI/ ... /SuspitionMeter を SuspitionMeterグループに登録して、group_callで操作する
各Level sceneとは疎結合にしたい
TextureProgress自体にスクリプトをアタッチする
SuspicionMeter.gd
code: SuspicionMeter.py
extends TextureProgress
var suspicion: float = 0
const suspicion_step = 1 # 1secごとに上昇する値
const suspicion_dropoff = 0.25 # 1secごとに減少する値
func player_seen():
suspicion += suspicion_step
# progress.value を更新
self.value = suspicion
if suspicion >= self.max_value:
end_game()
func _process(delta):
suspicion -= suspicion_dropoff
suspicion = clamp(suspicion, 0, self.max_value)
self.value = suspicion
func end_game():
get_tree().quit()
ゲームの終了判定もここでやってしまう。
suspicionという変数を変更してから
TextureProgress.value を更新しているが、progressのvalueはsetter/getterどっちもあるので
いらない気もする。
PlayerDetect.gd から group_call
code: PlayerDetect.py
func _process(delta):
if is_Player_in_FOV() and is_Player_in_LOS():
$Torch.color = RED
get_tree().call_group("SuspicionMeter", "player_seen")
else:
$Torch.color = WHITE
fpsごとに、playerが視界に入っていたらget_tree().group_call()で、
suspicionの上昇を呼び出す。
Guard も Camera も同じ処理を継承してるので、ここだけ変えればいい