glowlings/entities/scripts/crystal_glow.gd
2024-06-04 15:45:48 +01:00

71 lines
2.2 KiB
GDScript

extends Node2D
class_name CrystalGlow
var glow_colour : String :
set(value):
glow_colour = value.to_lower()
var orientation : String:
set(value):
orientation = value.to_lower()
var animation_start_timer : float
var animation_start_offset : float = randf_range(0, 3)
var internals_updated : bool = false
@onready var animation_player : AnimationPlayer = $CrystalGlowAnimation
@onready var glow_light : Sprite2D = $CrystalGlowLight
@onready var glow_area : Sprite2D = $CrystalAreaLight
@onready var glow_area_large : Sprite2D = $CrystalAreaLargeLight
@onready var crystal_particles : CPUParticles2D = $CrystalParticles
func _process(delta : float) -> void:
# The first time this is processed in the scene we need to update the orientation and colour
if !internals_updated:
update()
internals_updated = true
animation_start_timer += delta
if animation_start_timer >= animation_start_offset and !animation_player.is_playing():
animation_player.play('CrystalGlow')
func update() -> void:
update_orientation()
update_colour()
# Update the orientation of the crystal glow so its pointing in the right direction
func update_orientation() -> void:
if orientation == 'up':
rotation = 0
elif orientation == 'down':
rotation = PI
elif orientation == 'left':
rotation = -PI/2
elif orientation == 'right':
rotation = PI/2
# Update the colour of the crystal glow
func update_colour() -> void:
var base_blue : String = '5ffffe'
var base_yellow : String = 'F2F230'
var base_red : String = 'FF3333'
if glow_colour == 'blue':
glow_light.self_modulate = base_blue + '15'
glow_area.self_modulate = base_blue + '04'
glow_area_large.self_modulate = base_blue + '04'
crystal_particles.self_modulate = '00ffff62'
elif glow_colour == 'yellow':
glow_light.self_modulate = base_yellow + '15'
glow_area.self_modulate = base_yellow + '04'
glow_area_large.self_modulate = base_yellow + '04'
crystal_particles.self_modulate = base_yellow + '62'
elif glow_colour == 'red':
glow_light.self_modulate = base_red + '15'
glow_area.self_modulate = base_red + '04'
glow_area_large.self_modulate = base_red + '04'
crystal_particles.self_modulate = base_red + '62'
else:
pass