You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
678 B
35 lines
678 B
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
|
|
|