extends Node @onready var data: Data = get_node("/root/Arena/Data") @onready var castIndicator: CastIndicator = get_node("/root/Arena/CastIndicator") @export var avatar: Combatant var casting = false var spell: Spell var spellIndex: int var timer: float = 0 # Called when the node enters the scene tree for the first time. func _ready(): data.spellbook.initCooldowns() # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta): if !casting: for i in range(data.spellbook.spells.size()): if Input.is_action_just_pressed("Spell" + str(i)) && data.spellbook.cooldowns[i] == 0: casting = true spell = data.spellbook.spells[i] spellIndex = i castIndicator.show() castIndicator.setDirs(spell.castCombo[0], spell.castCombo[1]) avatar.particleSystem.emitting = true timer = 0 else: timer += delta if (Input.is_action_just_pressed(spell.castCombo[spell.castProgress])): spell.castProgress += 1 if spell.castProgress == spell.castCombo.size() - 1: castIndicator.setDirs(spell.castCombo[spell.castProgress]) elif spell.castProgress < spell.castCombo.size() - 1: castIndicator.setDirs(spell.castCombo[spell.castProgress], spell.castCombo[spell.castProgress + 1]) if spell.castProgress == spell.castCombo.size(): casting = false avatar.particleSystem.emitting = false spell.castProgress = 0 avatar.renderer.play("attack1") data.spellbook.cooldowns[spellIndex] = spell.cooldown castIndicator.hide() elif (timer >= spell.timeout || Input.is_action_just_pressed("up") || Input.is_action_just_pressed("down") || Input.is_action_just_pressed("left") || Input.is_action_just_pressed("right")): avatar.alterHealth(-spell.backfireStrength, true) casting = false avatar.particleSystem.emitting = false spell.castProgress = 0 data.spellbook.cooldowns[spellIndex] = spell.cooldown * (spell.castProgress / spell.castCombo.size()) castIndicator.hide() for i in range(data.spellbook.cooldowns.size()): data.spellbook.cooldowns[i] -= delta if data.spellbook.cooldowns[i] < 0: data.spellbook.cooldowns[i] = 0