From 503caa4430ee78836a1d9c595f286b0c9da0c053 Mon Sep 17 00:00:00 2001 From: Cat Flynn Date: Thu, 8 Dec 2022 21:15:20 +0000 Subject: [PATCH] pulsing cursor #5 --- half-earth/materials/cursor.tres | 4 ++-- half-earth/nodes/game.tscn | 13 +++++++---- half-earth/scripts/GridCursor.cs | 40 ++++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 6 deletions(-) diff --git a/half-earth/materials/cursor.tres b/half-earth/materials/cursor.tres index 91a714d..7cc3f5c 100644 --- a/half-earth/materials/cursor.tres +++ b/half-earth/materials/cursor.tres @@ -4,6 +4,6 @@ [resource] shader = ExtResource( 1 ) -shader_param/lowColor = Color( 1, 0.960784, 0, 1 ) -shader_param/highColor = Color( 0.921569, 0, 1, 1 ) +shader_param/lowColor = Color( 0, 0, 0, 0 ) +shader_param/highColor = Color( 0, 0.976471, 1, 1 ) shader_param/t = null diff --git a/half-earth/nodes/game.tscn b/half-earth/nodes/game.tscn index 5515fad..abfc88c 100644 --- a/half-earth/nodes/game.tscn +++ b/half-earth/nodes/game.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=7 format=2] +[gd_scene load_steps=8 format=2] [ext_resource path="res://nodes/grid.tscn" type="PackedScene" id=1] [ext_resource path="res://nodes/grid_cursor.tscn" type="PackedScene" id=2] @@ -7,16 +7,20 @@ [ext_resource path="res://nodes/interaction_mode.tscn" type="PackedScene" id=5] [ext_resource path="res://nodes/ui/build_mode_ui.tscn" type="PackedScene" id=6] +[sub_resource type="Curve" id=1] +_data = [ Vector2( 0, 0 ), 0.0, 5.0, 0, 0, Vector2( 0.5, 1 ), 0.0, 0.0, 0, 0, Vector2( 1, 0 ), -4.0, 0.0, 0, 0 ] + [node name="Root" type="Node"] +[node name="Clock" parent="." instance=ExtResource( 4 )] +_autoTick = true + [node name="Grid" parent="." instance=ExtResource( 1 )] DiffusionCoefficient = 0.1 [node name="Cursor" parent="." instance=ExtResource( 2 )] Grid = NodePath("../Grid") - -[node name="Clock" parent="." instance=ExtResource( 4 )] -_autoTick = true +_pulseShape = SubResource( 1 ) [node name="Interaction Mode" parent="." instance=ExtResource( 5 )] @@ -31,6 +35,7 @@ anchor_bottom = 1.0 [connection signal="OnPauseChanged" from="Clock" to="UI/Debug" method="_on_Clock_OnPauseChanged"] [connection signal="OnTick" from="Clock" to="Grid" method="_on_Clock_OnTick"] [connection signal="OnTick" from="Clock" to="UI/Debug" method="_on_Clock_OnTick"] +[connection signal="OnInteractionModeChanged" from="Interaction Mode" to="Cursor" method="_on_Interaction_Mode_OnInteractionModeChanged"] [connection signal="OnInteractionModeChanged" from="Interaction Mode" to="UI/Debug" method="_on_Interaction_Mode_OnInteractionModeChanged"] [connection signal="OnInteractionModeChanged" from="Interaction Mode" to="UI/Build Mode" method="_on_Interaction_Mode_OnInteractionModeChanged"] [connection signal="OnExit" from="UI/Build Mode" to="Interaction Mode" method="Reset"] diff --git a/half-earth/scripts/GridCursor.cs b/half-earth/scripts/GridCursor.cs index c2f1631..8159385 100644 --- a/half-earth/scripts/GridCursor.cs +++ b/half-earth/scripts/GridCursor.cs @@ -8,6 +8,17 @@ public class GridCursor : Sprite private WorldGrid _grid; private ShaderMaterial _material; + #region Animation + [Export] + private Curve _pulseShape; + [Export] + private float _pulseRate = 1.0f; + private float PulsePeriod => 1.0f / _pulseRate; + #endregion + + private float _elapsed = 0.0f; + private bool _pulsing = false; + private const string T = "t"; public override void _Ready() @@ -48,4 +59,33 @@ public class GridCursor : Sprite } } } + + public override void _Process(float delta) + { + _elapsed += delta * _pulseRate; + + if (!_pulsing) + { + _material.SetShaderParam(T, 1f); + return; + } + + var a = _pulseShape.Interpolate(_elapsed % 1.0f); + _material.SetShaderParam(T, a); + } + + + public void _on_Interaction_Mode_OnInteractionModeChanged(InteractionMode.Mode oldMode, InteractionMode.Mode newMode) + { + switch (newMode) + { + case InteractionMode.Mode.SELECT: + _pulsing = false; + break; + + case InteractionMode.Mode.BUILD: + _pulsing = true; + break; + } + } }