Custom NPC Behavior: Teaching a Villager to Flee
verse-library
OnDamaged(Result : damage_result) : void =
if:
Agent := GetAgent[]
Character := Agent.GetFortCharacter[]
Navigatable := Character.GetNavigatable[]
Focus := Character.GetFocusInterface[]
Attacker := agent[Result.Instigator?]
AttackerChar := Attacker.GetFortCharacter[]
then:
MyPos := Character.GetTransform().Translation
ThreatPos := AttackerChar.GetTransform().Translation
# Direction pointing FROM the threat TO us, normalized, then pushed out.
Away := (MyPos - ThreatPos)
FleePoint := MyPos + Away * FleeDistance
Target := MakeNavigationTarget(FleePoint)
Print("Villager spooked — fleeing!")
# Keep looking at the attacker while we run (focus never completes
# on its own, so spawn it as its own fiber).
spawn{ Focus.MaintainFocus(Attacker) }
spawn{ RunAway(Navigatable, Target) }