extends CharacterBody2D class_name Npc const SPEED = 100 const MINIMUM_STATE_DURATION = 3 const STATES = ['panic'] var gravity = ProjectSettings.get_setting("physics/2d/default_gravity") var direction = 0 func _ready(): pick_new_direction() $fsm.set_states(STATES) func panic_state(delta): if is_on_wall(): direction *= -1 var should_update = ( $fsm.state_duration >= MINIMUM_STATE_DURATION && ceil($fsm.state_duration) % 2 == (randi() %2) ) if should_update: pick_new_direction() $fsm.state_duration = 0 velocity.x = direction velocity.y += gravity * delta move_and_slide() func pick_new_direction(): direction = [1,-1][randi_range(0,1)] * SPEED