revo-jailbreak/objects/enemy/boss/famira.gd

84 lines
1.6 KiB
GDScript

extends Node2D
export var decisions: Dictionary = {
"wait": 2,
"chase": 3,
"punch": 3,
"beam": 1,
}
export var wait_time: float = 1.0
export var chase_speed: float = 50.0
var rng := RandomNumberGenerator.new()
var current_action: String = "wait"
onready var punch_cast: RayCast2D = $PunchCast
onready var chase_cast: RayCast2D = $ChaseCast
func _ready() -> void:
rng.seed = "HEROMARK2".hash()
_decide_action()
func _physics_process(delta: float) -> void:
match current_action:
"chase":
if chase_cast.is_colliding():
print("huh")
_decide_action()
else:
print("hehe")
position.x -= chase_speed * delta
func _decide_action() -> void:
# fill array based on weights
var weighted_decisions := []
for k in decisions.keys():
for i in decisions[k]:
weighted_decisions.append(k)
# choose an action
current_action = weighted_decisions[rng.randi() % weighted_decisions.size()]
# act based on new action
match current_action:
"wait":
wait()
"chase":
chase()
"punch":
if punch_cast.is_colliding():
punch()
else:
current_action = "chase"
chase()
"beam":
beam()
func wait() -> void:
print("waiting")
yield(get_tree().create_timer(wait_time, false), "timeout")
_decide_action()
func chase() -> void:
# TODO: play animation
print("chasing")
func punch() -> void:
# TODO: play animation
print("PUNCH")
yield(get_tree().create_timer(wait_time, false), "timeout")
_decide_action()
func beam() -> void:
# TODO: play animation and stuff
print("BEAM")
yield(get_tree().create_timer(wait_time, false), "timeout")
_decide_action()