randomgeon/player/abilities/ability.gd
Dan Baker 214e0aa5e0 Many changes
Handle it
2025-05-04 09:30:14 +01:00

63 lines
No EOL
1.5 KiB
GDScript

class_name Ability extends Node2D
@export var cooldown: float = 5.0
@export var effect_duration: float = 3.0
var modifiers: Array = []
var can_activate: bool = true
var cooldown_timer: Timer
var effect_timer: Timer
var is_active: bool = false
func _ready():
cooldown_timer = Timer.new()
add_child(cooldown_timer)
cooldown_timer.one_shot = true
cooldown_timer.connect("timeout", _on_cooldown_timeout)
effect_timer = Timer.new()
add_child(effect_timer)
effect_timer.one_shot = true
effect_timer.connect("timeout", _on_effect_timeout)
func activate():
if !can_activate:
return
# Apply ability effects
_start_ability()
# Apply modifiers to the ability
for modifier in modifiers:
modifier.modify_ability(self)
is_active = true
can_activate = false
effect_timer.start(effect_duration)
func add_modifier(modifier: Modifier):
modifiers.append(modifier)
modifier.on_equip(self)
func remove_modifier(modifier_id: String):
for i in range(modifiers.size()):
if modifiers[i].id == modifier_id:
modifiers[i].on_unequip(self)
modifiers.remove_at(i)
break
# Override in child classes
func _start_ability():
pass
# Override in child classes
func _end_ability():
pass
func _on_effect_timeout():
is_active = false
_end_ability()
cooldown_timer.start(cooldown)
func _on_cooldown_timeout():
can_activate = true