Glowing crystals mainly

This commit is contained in:
Dan 2024-06-04 15:45:48 +01:00
parent ce0ef75241
commit 49e344f109
8 changed files with 624 additions and 188 deletions

View file

@ -1,75 +1,91 @@
[gd_scene load_steps=7 format=3 uid="uid://di05lhhav43s7"]
[gd_scene load_steps=8 format=3 uid="uid://di05lhhav43s7"]
[ext_resource type="Texture2D" uid="uid://durqtk0juny64" path="res://resources/particles/light_beam.png" id="1_px2l5"]
[ext_resource type="Script" path="res://entities/scripts/crystal_glow.gd" id="2_dtblp"]
[ext_resource type="Texture2D" uid="uid://b0v24ggq57237" path="res://resources/particles/smallcircle.png" id="3_3ioih"]
[sub_resource type="Animation" id="Animation_trlpq"]
[sub_resource type="Curve" id="Curve_ffgoa"]
_data = [Vector2(0, 0), 0.0, 1.4, 0, 0, Vector2(0.203642, 1), 0.0, 0.0, 0, 0, Vector2(0.799669, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
point_count = 4
[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_ruaam"]
blend_mode = 1
[sub_resource type="Animation" id="Animation_bf3hv"]
resource_name = "CrystalGlow"
length = 5.0
loop_mode = 1
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:energy")
tracks/0/path = NodePath("CrystalAreaLight:scale")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 2.6, 5),
"transitions": PackedFloat32Array(-2, -2, -2),
"times": PackedFloat32Array(0, 1.9, 3.2, 5),
"transitions": PackedFloat32Array(1, 1, 1, 1),
"update": 0,
"values": [2.8, 0.1, 2.8]
"values": [Vector2(1, 1), Vector2(1.1, 1.1), Vector2(0.8, 0.8), Vector2(1, 1)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("../CrystalAreaLight:energy")
tracks/1/path = NodePath("CrystalAreaLight:modulate:a")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(-0.025, 1, 1.8, 2.8, 3.175, 3.875, 4.5, 4.975),
"transitions": PackedFloat32Array(-2, -2, -2, -2, -2, -2, -2, -2),
"times": PackedFloat32Array(0.00999999, 0.21, 0.61, 1.01, 1.61, 1.81, 2.2, 2.6, 4, 4.2, 4.6, 5),
"transitions": PackedFloat32Array(-2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2),
"update": 0,
"values": [1.0, 0.5, 1.0, 0.6, 0.8, 1.0, 1.2, 1.0]
"values": [1.0, 0.5, 0.8, 1.0, 1.0, 0.5, 0.8, 1.0, 1.0, 0.5, 0.8, 1.0]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("CrystalAreaLargeLight:scale")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 2.6, 5),
"transitions": PackedFloat32Array(-2, -2, -2),
"update": 0,
"values": [Vector2(2, 2), Vector2(2.2, 2.2), Vector2(2, 2)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("CrystalGlowLight:scale")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 2, 5),
"transitions": PackedFloat32Array(-2, -2, -2),
"update": 0,
"values": [Vector2(1, 1), Vector2(2, 1), Vector2(1, 1)]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("CrystalGlowLight:modulate:a")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0.1, 1.3, 2.8, 4, 5),
"transitions": PackedFloat32Array(1, -2, 1, -2, 1),
"update": 0,
"values": [1.0, 0.5, 1.0, 0.2, 1.0]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_78u0w"]
[sub_resource type="AnimationLibrary" id="AnimationLibrary_r67ky"]
_data = {
"CrystalGlow": SubResource("Animation_trlpq")
"CrystalGlow": SubResource("Animation_bf3hv")
}
[sub_resource type="Curve" id="Curve_ffgoa"]
_data = [Vector2(0, 0), 0.0, 1.4, 0, 0, Vector2(0.203642, 1), 0.0, 0.0, 0, 0, Vector2(0.799669, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
point_count = 4
[node name="CrystalGlow" type="Node2D"]
script = ExtResource("2_dtblp")
[node name="CrystalGlowAnimation" type="AnimationPlayer" parent="."]
root_node = NodePath("../CrystalGlowLight")
libraries = {
"": SubResource("AnimationLibrary_78u0w")
}
autoplay = "CrystalGlow"
[node name="CrystalGlowLight" type="PointLight2D" parent="."]
modulate = Color(1.5, 1.5, 1.5, 1)
rotation = 3.14159
scale = Vector2(1.71326, 1)
color = Color(0.517647, 0.796078, 1, 1)
energy = 2.8
texture = ExtResource("1_px2l5")
offset = Vector2(0, 50)
texture_scale = 1.15
[node name="CrystalAreaLight" type="PointLight2D" parent="."]
modulate = Color(1.5, 1.5, 1.5, 1)
color = Color(0.372549, 1, 0.996078, 1)
texture = ExtResource("3_3ioih")
offset = Vector2(0, -6)
texture_scale = 1.2
[node name="CPUParticles2D" type="CPUParticles2D" parent="."]
[node name="CrystalParticles" type="CPUParticles2D" parent="."]
self_modulate = Color(0, 1, 1, 0.384314)
amount = 2
lifetime = 5.0
randomness = 0.1
@ -85,3 +101,31 @@ scale_amount_min = 2.0
scale_amount_max = 4.0
scale_amount_curve = SubResource("Curve_ffgoa")
color = Color(1, 1, 1, 0.164706)
[node name="CrystalGlowLight" type="Sprite2D" parent="."]
modulate = Color(1.5, 1.5, 1.5, 1)
self_modulate = Color(0.372549, 1, 0.996078, 0.0823529)
material = SubResource("CanvasItemMaterial_ruaam")
position = Vector2(0, -31)
rotation = 3.14159
texture = ExtResource("1_px2l5")
offset = Vector2(0, 6)
[node name="CrystalAreaLight" type="Sprite2D" parent="."]
self_modulate = Color(1.5, 1.5, 1.5, 0.408)
material = SubResource("CanvasItemMaterial_ruaam")
texture = ExtResource("3_3ioih")
offset = Vector2(0, 6)
[node name="CrystalAreaLargeLight" type="Sprite2D" parent="."]
modulate = Color(1.2, 1.2, 1.2, 1)
self_modulate = Color(0, 1, 1, 0.109804)
material = SubResource("CanvasItemMaterial_ruaam")
position = Vector2(0, -12)
scale = Vector2(2, 2)
texture = ExtResource("3_3ioih")
[node name="CrystalGlowAnimation" type="AnimationPlayer" parent="."]
libraries = {
"": SubResource("AnimationLibrary_r67ky")
}

View file

@ -1,6 +1,71 @@
extends Node2D
class_name CrystalGlow
func _ready() -> void:
Log.pr("CrystalGlow ready")
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