the-third-place/scenes/boss.gd

162 lines
3.9 KiB
GDScript

extends Area2D
var enemy_type: String = "boss"
var bullet_scene = preload("res://scenes/enemy_bullet.tscn")
var start_pos = Vector2.ZERO
var speed = 0
var tween_speed: float = 1.4
var pause: bool = false
var horse_counter: int = 0
var horse_phase: bool = true
var exploding:bool = false
var heart_taken: bool = false
var heart_broken: bool = false
@onready var boss = $AnimationPlayer
@onready var screensize = get_viewport_rect().size
func _ready():
EventBus.ending.connect(_on_ending)
boss_intro()
$Heart.monitoring = false
$Heart.monitorable = false
func _process(_delta: float) -> void:
if pause == true: return
func boss_intro():
# Move boss into screen
position = Vector2(screensize.x / 2, -screensize.y)
var tween = create_tween().set_ease(Tween.EASE_OUT)
tween.tween_property(self, "position:y", 100, 2)
await tween.finished
# Introduce Lady of Whispers
print("Boss intro!")
await get_tree().create_timer(2).timeout
boss.play("align")
await get_tree().create_timer(2).timeout
boss.play("rise")
await get_tree().create_timer(4).timeout
boss.play("whisper")
await get_tree().create_timer(1).timeout
# Check to see if horse phase is available
horse_phase_check()
func horse_phase_check():
if horse_phase == true: boss_horse()
if horse_phase == false:
print("No more horse!")
$Sprite2D.frame = 0
if horse_phase == false and heart_broken == true:
$Sprite2D.frame = 4
func boss_horse():
if heart_taken == false:
print("Boss horse!")
await get_tree().create_timer(2).timeout
EventBus.flash_screen.emit(.25)
$Heart.hide()
$Heart.monitoring = false
$Sprite2D.frame = 7
$Horse.show()
$Horse.start()
var horse_player = $Horse/AnimationPlayer
horse_player.play("run")
await get_tree().create_timer(10).timeout
EventBus.flash_screen.emit(.25)
$Horse.hide()
$Horse.end()
await get_tree().create_timer(5).timeout
horse_counter += 1
lady_of_whispers()
if heart_taken == true or heart_broken == true:
horse_phase = false
horse_phase_check()
func lady_of_whispers():
if horse_counter == 2:
offer_heart()
if horse_counter <= 1:
print("Lady of Whispers!")
boss.play("rise")
await get_tree().create_timer(4).timeout
boss.play("whisper")
await boss.animation_finished
await get_tree().create_timer(1).timeout
horse_phase_check()
func hit_detection():
return
func offer_heart():
print("Lady of Whispers offers you a heart!")
boss.play("rise")
await get_tree().create_timer(4).timeout
$Heart.show()
$Heart.monitoring = true
$Heart.monitorable = true
heart_check()
func heart_check():
print("Heart check!")
if heart_taken == false:
await get_tree().create_timer(4).timeout
horse_counter = 0
print("Horse Counter:",horse_counter)
if heart_taken == true or heart_broken == true:
$Heart.monitoring = false
$Heart.monitorable = false
horse_phase = false
horse_phase_check()
func _on_ending(value: int):
if value == 1:
heart_taken = true
horse_phase = false
#horse_phase_check()
print("Fix your broken heart or die")
$Sprite2D.frame = 0
var tween = create_tween()
tween.tween_property(self, "position:y", 180, 2).set_ease(Tween.EASE_OUT)
tween.tween_property(self, "position:y", 60 * -1, .25).set_ease(Tween.EASE_IN)
await get_tree().create_timer(8).timeout
EventBus.goose_talk.emit(3)
self.monitoring = false
self.monitorable = false
if value == 2:
heart_broken = true
horse_phase = false
horse_phase_check()
print("Some hearts are too wild.")
$Heart.hide()
$Heart.monitoring = false
$Heart.monitorable = false
EventBus.flash_screen.emit(.25)
$Sprite2D.frame = 4
await get_tree().create_timer(4).timeout
EventBus.goose_talk.emit(4)
self.monitoring = false
self.monitorable = false
EventBus.win_game.emit()