revo-jailbreak/objects/enemy/skelarcher.gd

50 lines
1.6 KiB
GDScript

extends "res://objects/enemy/enemy.gd"
const ArrowProjectile = preload("res://objects/enemy/enemy_arrow.tscn")
const BoneParticle = preload("res://objects/enemy/bone_particle.tscn")
export var shoot_time = 1.0
export var arrow_speed = 60.0
# bone death particles
export var bones_amount = 12
export var bones_speed = 50.0
onready var timer = $Timer
onready var anims = $AnimationPlayer
onready var sprite = $Sprite
onready var arrow_spawn_l = $ArrowSpawnL
onready var arrow_spawn_r = $ArrowSpawnR
func _ready():
death_sound = Audio.a_die_skeleton
timer.start(shoot_time)
# adjust to difficulty
shoot_time /= Game.enemy_speed_factor
arrow_speed *= Game.enemy_speed_factor
func _on_Timer_timeout():
anims.play("shoot")
func spawn_arrow():
var arrow = ArrowProjectile.instance()
if scale.x > 0:
arrow.global_position = global_position + arrow_spawn_r.position
else:
arrow.global_position = global_position + arrow_spawn_l.position
arrow.direction = scale.x
arrow.target_group = "player_hitbox"
arrow.speed = arrow_speed
Game.get_map().add_child(arrow)
timer.start(shoot_time)
func die():
for n in bones_amount:
var bone = BoneParticle.instance()
bone.rotation = rand_range(0.0, 2.0*PI) # random rotation
bone.global_position = global_position
bone.linear_velocity = Vector2(bones_speed * rand_range(0.5, 1.5), 0.0).rotated(rand_range(-PI, 0.0))
bone.angular_velocity = rand_range(-PI*2.0, PI*2.0)
var timer = get_tree().create_timer(3.0 + rand_range(0.0, 1.0), false)
timer.connect("timeout", bone, "queue_free")
get_parent().call_deferred("add_child", bone)
.die() # call rest of enemy.gd die() funciton