extends Area signal enemy_damaged signal enemy_died export (PackedScene) var enemybullet var base_pos = Vector3() var angle = 0 export var move_w = 22 export var move_h = 12 var bullets var hpmax = 990 var hp = hpmax var damage = 0 var attack_point = 10 var damage_timer = 0 var rnd = RandomNumberGenerator.new() func _ready(): base_pos = translation angle = 0 damage = 0 damage_timer = 0 hp = hpmax bullets = get_tree().root.get_node("Main/EnemyBullets") #func _process(delta): # pass func _physics_process(delta): move(delta) check_damage() damaging_animation(delta) func move(delta): angle += delta translation.x = base_pos.x + move_w * cos(deg2rad(angle * 90)) translation.z = base_pos.z + move_h * sin(deg2rad(angle * 70)) func check_damage(): if damage > 0: hp -= damage damage = 0 damage_timer = 0.25 if hp <= 0: hp = 0 emit_signal("enemy_died") emit_signal("enemy_damaged") func damaging_animation(delta): if damage_timer > 0: damage_timer -= delta var target_mesh = $EnemyZakoModel if damage_timer <= 0: damage_timer = 0 target_mesh.translation = Vector3() else: # shake translation var r = 0.5 var x = rnd.randf_range(-r, r) var z = rnd.randf_range(-r, r) target_mesh.translation = Vector3(x, 0, z) func _on_ShotTimer_timeout(): var angle_add = 12 var angle = 90 - angle_add * 3 var spd = 0.2 for i in range(7): _shot(translation, angle, spd) if hp <= hpmax * 0.7: _shot(translation, angle, spd * 0.8) if hp <= hpmax * 0.3: _shot(translation, angle, spd * 1.2) _shot(translation, angle, spd * 1.1) _shot(translation, angle, spd * 0.9) angle += angle_add func _shot(pos, angle, spd): var bullet = enemybullet.instance() bullet.translation = pos bullet.set_dir_and_speed(angle, spd) bullets.add_child(bullet) func _on_EnemyZako_area_entered(area): if is_queued_for_deletion(): return # print("playerbullet hit the enemy") if area.is_in_group("playerbullets"): damage = area.attack_point func _on_EnemyZako_body_entered(body): if is_queued_for_deletion(): return # print("player hit the enemy") if body.is_in_group("player"): body.damage = attack_point