53 lines
1.1 KiB
GDScript
53 lines
1.1 KiB
GDScript
class_name IceEffectComponent
|
|
extends Node
|
|
|
|
@export var duration: float = 1.0
|
|
@export var side_to_side_movement: SideToSideMovement
|
|
@export var periodic_shooting: PeriodicShootingComponent
|
|
|
|
var timer: Timer
|
|
var is_frozen: bool = false
|
|
var movement_speed: float = 0.0
|
|
|
|
|
|
func _ready() -> void:
|
|
timer = Timer.new()
|
|
timer.timeout.connect(on_timer_timeout)
|
|
prepare_timer()
|
|
add_child(timer)
|
|
|
|
if side_to_side_movement:
|
|
movement_speed = side_to_side_movement.speed
|
|
|
|
|
|
func _process(_delta: float) -> void:
|
|
if not side_to_side_movement or not periodic_shooting:
|
|
return
|
|
|
|
if is_frozen:
|
|
side_to_side_movement.process_mode = PROCESS_MODE_DISABLED
|
|
periodic_shooting.process_mode = PROCESS_MODE_DISABLED
|
|
else:
|
|
side_to_side_movement.process_mode = PROCESS_MODE_ALWAYS
|
|
periodic_shooting.process_mode = PROCESS_MODE_ALWAYS
|
|
|
|
|
|
func on_timer_timeout() -> void:
|
|
deactivate()
|
|
|
|
|
|
func activate() -> void:
|
|
is_frozen = true
|
|
timer.start()
|
|
|
|
|
|
func deactivate() -> void:
|
|
is_frozen = false
|
|
timer.stop()
|
|
|
|
|
|
func prepare_timer() -> void:
|
|
timer.set_wait_time(duration)
|
|
timer.set_one_shot(true)
|
|
timer.stop()
|