Skip to content

Commit f5db4e9

Browse files
Add screensaver
1 parent 2c95b0e commit f5db4e9

7 files changed

Lines changed: 174 additions & 45 deletions

File tree

TitleScreen/TitleScreen.cs

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,18 @@ public partial class TitleScreen : Node2D
66
{
77

88
[Export] private GameTurnTable _gameTurnTable;
9+
[Export] private AudioStreamPlayer _audioStreamPlayer;
10+
[Export] private CanvasLayer _screensaverNode;
11+
[Export] private Timer _timer;
12+
13+
private bool _isScreensaverActive = false;
914

1015
private string[] _buttonSceneMap;
1116

1217
public override void _Ready()
1318
{
19+
_timer.Timeout += _startScreensaver;
20+
1421
_buttonSceneMap = new string[]
1522
{
1623
"res://FortunateSlug/FortunateSlug.tscn",
@@ -24,9 +31,31 @@ public override void _Ready()
2431

2532
public override void _Input(InputEvent @event)
2633
{
27-
if (@event.IsActionPressed("ButtonA"))
34+
if (@event.IsActionPressed("ButtonA") && !_isScreensaverActive)
2835
{
2936
GetTree().ChangeSceneToFile( _buttonSceneMap[_gameTurnTable.GetCurrentSelection()]);
3037
}
38+
39+
if (@event is not InputEventJoypadButton or InputEventKey )
40+
{
41+
return; // These are the only events that should reset the screensaver. Doing this bc I think the touch screen is causing issues
42+
}
43+
44+
45+
if (_isScreensaverActive)
46+
{
47+
_isScreensaverActive = false;
48+
_audioStreamPlayer.Play();
49+
_screensaverNode.Visible = false;
50+
}
51+
52+
_timer.Start();
53+
}
54+
55+
private void _startScreensaver()
56+
{
57+
_isScreensaverActive = true;
58+
_audioStreamPlayer.Stop();
59+
_screensaverNode.Visible = true;
3160
}
3261
}

TitleScreen/TitleScreen.tscn

Lines changed: 75 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
[gd_scene load_steps=14 format=3 uid="uid://nd7ukwmx7jhi"]
1+
[gd_scene load_steps=17 format=3 uid="uid://nd7ukwmx7jhi"]
22

33
[ext_resource type="Script" uid="uid://b1wukt21q1qto" path="res://TitleScreen/TitleScreen.cs" id="1_uidrc"]
44
[ext_resource type="Shader" uid="uid://c24kwaabn8wdb" path="res://TitleScreen/TitleScreen.gdshader" id="2_g0pfn"]
@@ -8,6 +8,8 @@
88
[ext_resource type="FontFile" uid="uid://digk2l351175t" path="res://Common/G.B.BOOT.ttf" id="4_lawj5"]
99
[ext_resource type="SpriteFrames" uid="uid://djvdnxolrvgcf" path="res://TitleScreen/Games/GameAnimationsFrames.tres" id="7_4x3tk"]
1010
[ext_resource type="Script" uid="uid://d0cey1yvlliqu" path="res://TitleScreen/GameTurnTable.cs" id="7_70hon"]
11+
[ext_resource type="Shader" uid="uid://uxjqkunke18t" path="res://TitleScreen/screensaver/starWarp.gdshader" id="9_j3fyg"]
12+
[ext_resource type="Script" uid="uid://cufgidcmins7c" path="res://TitleScreen/TitleText.cs" id="10_mhd54"]
1113

1214
[sub_resource type="ShaderMaterial" id="ShaderMaterial_ntd8f"]
1315
shader = ExtResource("2_g0pfn")
@@ -17,59 +19,61 @@ shader_parameter/scanline_intensity = 0.5
1719
shader_parameter/chromatic_aberration_strength = 0.005
1820
shader_parameter/chromatic_aberration_direction = Vector2(1, 0)
1921

20-
[sub_resource type="Animation" id="Animation_70hon"]
21-
length = 0.001
22+
[sub_resource type="Animation" id="Animation_4x3tk"]
23+
resource_name = "GameSlides"
24+
length = 0.5
25+
step = 0.5
2226
tracks/0/type = "value"
2327
tracks/0/imported = false
2428
tracks/0/enabled = true
2529
tracks/0/path = NodePath("CurrentGame:position")
2630
tracks/0/interp = 1
2731
tracks/0/loop_wrap = true
2832
tracks/0/keys = {
29-
"times": PackedFloat32Array(0),
30-
"transitions": PackedFloat32Array(1),
33+
"times": PackedFloat32Array(0, 0.5),
34+
"transitions": PackedFloat32Array(1, 1),
3135
"update": 0,
32-
"values": [Vector2(640, 480)]
36+
"values": [Vector2(640, 480), Vector2(-130, 480)]
3337
}
3438
tracks/1/type = "value"
3539
tracks/1/imported = false
3640
tracks/1/enabled = true
37-
tracks/1/path = NodePath("PrevGame:position")
41+
tracks/1/path = NodePath("NextGame:position")
3842
tracks/1/interp = 1
3943
tracks/1/loop_wrap = true
4044
tracks/1/keys = {
41-
"times": PackedFloat32Array(0),
42-
"transitions": PackedFloat32Array(1),
45+
"times": PackedFloat32Array(0, 0.5),
46+
"transitions": PackedFloat32Array(1, 1),
4347
"update": 0,
44-
"values": [Vector2(-130, 480)]
48+
"values": [Vector2(1410, 480), Vector2(640, 480)]
4549
}
4650
tracks/2/type = "value"
4751
tracks/2/imported = false
4852
tracks/2/enabled = true
49-
tracks/2/path = NodePath("NextGame:position")
53+
tracks/2/path = NodePath("SlideIn:position")
5054
tracks/2/interp = 1
5155
tracks/2/loop_wrap = true
5256
tracks/2/keys = {
53-
"times": PackedFloat32Array(0),
54-
"transitions": PackedFloat32Array(1),
57+
"times": PackedFloat32Array(0, 0.5),
58+
"transitions": PackedFloat32Array(1, 1),
5559
"update": 0,
56-
"values": [Vector2(1410, 480)]
60+
"values": [Vector2(2180, 480), Vector2(1410, 480)]
5761
}
5862
tracks/3/type = "value"
5963
tracks/3/imported = false
6064
tracks/3/enabled = true
61-
tracks/3/path = NodePath("SlideIn:position")
65+
tracks/3/path = NodePath("PrevGame:position")
6266
tracks/3/interp = 1
6367
tracks/3/loop_wrap = true
6468
tracks/3/keys = {
65-
"times": PackedFloat32Array(0),
66-
"transitions": PackedFloat32Array(1),
69+
"times": PackedFloat32Array(0, 0.5),
70+
"transitions": PackedFloat32Array(1, 1),
6771
"update": 0,
68-
"values": [Vector2(2180, 480)]
72+
"values": [Vector2(-130, 480), Vector2(-900, 480)]
6973
}
7074

71-
[sub_resource type="Animation" id="Animation_4x3tk"]
72-
resource_name = "GameSlides"
75+
[sub_resource type="Animation" id="Animation_j3fyg"]
76+
resource_name = "GameSlidesRev"
7377
length = 0.5
7478
step = 0.5
7579
tracks/0/type = "value"
@@ -82,7 +86,7 @@ tracks/0/keys = {
8286
"times": PackedFloat32Array(0, 0.5),
8387
"transitions": PackedFloat32Array(1, 1),
8488
"update": 0,
85-
"values": [Vector2(640, 480), Vector2(-130, 480)]
89+
"values": [Vector2(640, 480), Vector2(1410, 480)]
8690
}
8791
tracks/1/type = "value"
8892
tracks/1/imported = false
@@ -94,7 +98,7 @@ tracks/1/keys = {
9498
"times": PackedFloat32Array(0, 0.5),
9599
"transitions": PackedFloat32Array(1, 1),
96100
"update": 0,
97-
"values": [Vector2(1410, 480), Vector2(640, 480)]
101+
"values": [Vector2(1410, 480), Vector2(2180, 480)]
98102
}
99103
tracks/2/type = "value"
100104
tracks/2/imported = false
@@ -106,7 +110,7 @@ tracks/2/keys = {
106110
"times": PackedFloat32Array(0, 0.5),
107111
"transitions": PackedFloat32Array(1, 1),
108112
"update": 0,
109-
"values": [Vector2(2180, 480), Vector2(1410, 480)]
113+
"values": [Vector2(-900, 480), Vector2(-130, 480)]
110114
}
111115
tracks/3/type = "value"
112116
tracks/3/imported = false
@@ -118,60 +122,58 @@ tracks/3/keys = {
118122
"times": PackedFloat32Array(0, 0.5),
119123
"transitions": PackedFloat32Array(1, 1),
120124
"update": 0,
121-
"values": [Vector2(-130, 480), Vector2(-900, 480)]
125+
"values": [Vector2(-130, 480), Vector2(640, 480)]
122126
}
123127

124-
[sub_resource type="Animation" id="Animation_j3fyg"]
125-
resource_name = "GameSlidesRev"
126-
length = 0.5
127-
step = 0.5
128+
[sub_resource type="Animation" id="Animation_70hon"]
129+
length = 0.001
128130
tracks/0/type = "value"
129131
tracks/0/imported = false
130132
tracks/0/enabled = true
131133
tracks/0/path = NodePath("CurrentGame:position")
132134
tracks/0/interp = 1
133135
tracks/0/loop_wrap = true
134136
tracks/0/keys = {
135-
"times": PackedFloat32Array(0, 0.5),
136-
"transitions": PackedFloat32Array(1, 1),
137+
"times": PackedFloat32Array(0),
138+
"transitions": PackedFloat32Array(1),
137139
"update": 0,
138-
"values": [Vector2(640, 480), Vector2(1410, 480)]
140+
"values": [Vector2(640, 480)]
139141
}
140142
tracks/1/type = "value"
141143
tracks/1/imported = false
142144
tracks/1/enabled = true
143-
tracks/1/path = NodePath("NextGame:position")
145+
tracks/1/path = NodePath("PrevGame:position")
144146
tracks/1/interp = 1
145147
tracks/1/loop_wrap = true
146148
tracks/1/keys = {
147-
"times": PackedFloat32Array(0, 0.5),
148-
"transitions": PackedFloat32Array(1, 1),
149+
"times": PackedFloat32Array(0),
150+
"transitions": PackedFloat32Array(1),
149151
"update": 0,
150-
"values": [Vector2(1410, 480), Vector2(2180, 480)]
152+
"values": [Vector2(-130, 480)]
151153
}
152154
tracks/2/type = "value"
153155
tracks/2/imported = false
154156
tracks/2/enabled = true
155-
tracks/2/path = NodePath("SlideIn:position")
157+
tracks/2/path = NodePath("NextGame:position")
156158
tracks/2/interp = 1
157159
tracks/2/loop_wrap = true
158160
tracks/2/keys = {
159-
"times": PackedFloat32Array(0, 0.5),
160-
"transitions": PackedFloat32Array(1, 1),
161+
"times": PackedFloat32Array(0),
162+
"transitions": PackedFloat32Array(1),
161163
"update": 0,
162-
"values": [Vector2(-900, 480), Vector2(-130, 480)]
164+
"values": [Vector2(1410, 480)]
163165
}
164166
tracks/3/type = "value"
165167
tracks/3/imported = false
166168
tracks/3/enabled = true
167-
tracks/3/path = NodePath("PrevGame:position")
169+
tracks/3/path = NodePath("SlideIn:position")
168170
tracks/3/interp = 1
169171
tracks/3/loop_wrap = true
170172
tracks/3/keys = {
171-
"times": PackedFloat32Array(0, 0.5),
172-
"transitions": PackedFloat32Array(1, 1),
173+
"times": PackedFloat32Array(0),
174+
"transitions": PackedFloat32Array(1),
173175
"update": 0,
174-
"values": [Vector2(-130, 480), Vector2(640, 480)]
176+
"values": [Vector2(2180, 480)]
175177
}
176178

177179
[sub_resource type="AnimationLibrary" id="AnimationLibrary_70hon"]
@@ -181,9 +183,19 @@ _data = {
181183
&"RESET": SubResource("Animation_70hon")
182184
}
183185

184-
[node name="TitleScreen" type="Node2D" node_paths=PackedStringArray("_gameTurnTable")]
186+
[sub_resource type="ShaderMaterial" id="ShaderMaterial_mhd54"]
187+
shader = ExtResource("9_j3fyg")
188+
shader_parameter/bg_top_color = Vector4(0, 0, 0, 1)
189+
shader_parameter/bg_bottom_color = Vector4(0.07, -0.05, 0.17, 1)
190+
shader_parameter/gradient_ratio = 0.36
191+
shader_parameter/time_scale = 1.0
192+
193+
[node name="TitleScreen" type="Node2D" node_paths=PackedStringArray("_gameTurnTable", "_audioStreamPlayer", "_screensaverNode", "_timer")]
185194
script = ExtResource("1_uidrc")
186195
_gameTurnTable = NodePath("GameTurnTable")
196+
_audioStreamPlayer = NodePath("AudioStreamPlayer")
197+
_screensaverNode = NodePath("Screensaver")
198+
_timer = NodePath("Timer")
187199

188200
[node name="CanvasLayer" type="CanvasLayer" parent="."]
189201

@@ -326,3 +338,22 @@ frame_progress = 0.567812
326338
libraries = {
327339
&"": SubResource("AnimationLibrary_70hon")
328340
}
341+
342+
[node name="Timer" type="Timer" parent="."]
343+
wait_time = 20.0
344+
one_shot = true
345+
autostart = true
346+
ignore_time_scale = true
347+
348+
[node name="Screensaver" type="CanvasLayer" parent="."]
349+
350+
[node name="ColorRect" type="ColorRect" parent="Screensaver"]
351+
material = SubResource("ShaderMaterial_mhd54")
352+
offset_right = 1281.0
353+
offset_bottom = 756.0
354+
color = Color(0, 0, 0, 1)
355+
356+
[node name="TitleText" type="Sprite2D" parent="Screensaver"]
357+
position = Vector2(702, 289)
358+
texture = ExtResource("3_ntd8f")
359+
script = ExtResource("10_mhd54")

TitleScreen/TitleText.cs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using Godot;
2+
using System;
3+
4+
public partial class TitleText : Sprite2D
5+
{
6+
[Export] public Vector2 Speed = new Vector2(200, 150); // pixels per second
7+
private Vector2 _direction;
8+
9+
public override void _Ready()
10+
{
11+
var rand = new Random();
12+
_direction = new Vector2(
13+
rand.Next(0, 2) == 0 ? -1 : 1,
14+
rand.Next(0, 2) == 0 ? -1 : 1
15+
);
16+
}
17+
18+
public override void _Process(double delta)
19+
{
20+
21+
var viewportSize = GetViewportRect().Size;
22+
var halfSize = Texture.GetSize() * 0.5f;
23+
24+
Position += Speed * _direction * (float)delta;
25+
26+
if (Position.X - halfSize.X <= 0 || Position.X + halfSize.X >= viewportSize.X)
27+
_direction.X *= -1;
28+
29+
if (Position.Y - halfSize.Y <= 0 || Position.Y + halfSize.Y >= viewportSize.Y)
30+
_direction.Y *= -1;
31+
}
32+
}

TitleScreen/TitleText.cs.uid

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
uid://cufgidcmins7c
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
//based on this star shader. Thanks gerardogc2378
2+
//https://godotshaders.com/shader/stars-shader/
3+
4+
shader_type canvas_item;
5+
6+
uniform vec4 bg_top_color;
7+
uniform vec4 bg_bottom_color;
8+
uniform float gradient_ratio;
9+
uniform float time_scale;
10+
11+
float rand(vec2 st) {
12+
return fract(sin(dot(st.xy, vec2(12.9898,78.233))) * 43758.5453123);
13+
}
14+
15+
void fragment() {
16+
float color = 0.0;
17+
18+
if (rand(SCREEN_UV.xy / 20.0) > 0.996)
19+
{
20+
float r = rand(SCREEN_UV.xy);
21+
color = r * (0.85 * sin((TIME * time_scale) * (r * 5.0) + 720.0 * r) + 0.95);
22+
}
23+
24+
vec4 gradient_color = mix(bg_top_color, bg_bottom_color, SCREEN_UV.y / gradient_ratio);
25+
26+
COLOR = vec4(vec3(color),1.0) + gradient_color;
27+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
uid://uxjqkunke18t

globals/TheWatcher.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,14 @@
44
//We literally only have a global to troll people
55
public partial class TheWatcher : Node
66
{
7+
public override void _Ready()
8+
{
9+
if (Engine.IsEditorHint())
10+
{
11+
Input.MouseMode = Input.MouseModeEnum.Hidden;
12+
}
13+
}
14+
715
public override void _Input(InputEvent @event)
816
{
917
if (Input.IsActionJustPressed("prank"))

0 commit comments

Comments
 (0)