scene transitions
parent
39c2d7c29d
commit
29b146558e
|
@ -24,4 +24,18 @@ public partial class EventBus : Node
|
||||||
|
|
||||||
[Signal]
|
[Signal]
|
||||||
public delegate void DeregisteredBossEventHandler(Characters.Boss boss);
|
public delegate void DeregisteredBossEventHandler(Characters.Boss boss);
|
||||||
|
|
||||||
|
[Signal]
|
||||||
|
public delegate void EnterTransitionEventHandler();
|
||||||
|
|
||||||
|
[Signal]
|
||||||
|
public delegate void TransitionFinishedEventHandler();
|
||||||
|
|
||||||
|
[Signal]
|
||||||
|
public delegate void ExitTransitionEventHandler();
|
||||||
|
|
||||||
|
public override void _Ready()
|
||||||
|
{
|
||||||
|
ProcessMode = ProcessModeEnum.Always;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1833,6 +1833,7 @@ glow_enabled = true
|
||||||
glow_hdr_threshold = 1.4
|
glow_hdr_threshold = 1.4
|
||||||
|
|
||||||
[node name="TileMap" type="TileMap" node_paths=PackedStringArray("Entities", "Areas", "Spawners", "Markers")]
|
[node name="TileMap" type="TileMap" node_paths=PackedStringArray("Entities", "Areas", "Spawners", "Markers")]
|
||||||
|
process_mode = 1
|
||||||
y_sort_enabled = true
|
y_sort_enabled = true
|
||||||
texture_filter = 3
|
texture_filter = 3
|
||||||
tile_set = SubResource("TileSet_18c7j")
|
tile_set = SubResource("TileSet_18c7j")
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
[ext_resource type="PackedScene" uid="uid://c271rdjhd1gfo" path="res://UI/Base.tscn" id="2_mm0qt"]
|
[ext_resource type="PackedScene" uid="uid://c271rdjhd1gfo" path="res://UI/Base.tscn" id="2_mm0qt"]
|
||||||
|
|
||||||
[node name="World" type="Node2D" node_paths=PackedStringArray("MusicPlayer", "DialogueBalloon")]
|
[node name="World" type="Node2D" node_paths=PackedStringArray("MusicPlayer", "DialogueBalloon")]
|
||||||
|
process_mode = 3
|
||||||
script = ExtResource("1_1k6ew")
|
script = ExtResource("1_1k6ew")
|
||||||
MusicPlayer = NodePath("MusicPlayer")
|
MusicPlayer = NodePath("MusicPlayer")
|
||||||
DialogueBalloon = NodePath("CanvasLayer/SubViewportContainer/UIViewport/DialogBalloon")
|
DialogueBalloon = NodePath("CanvasLayer/SubViewportContainer/UIViewport/DialogBalloon")
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
shader_type canvas_item;
|
||||||
|
|
||||||
|
uniform float a: hint_range(0.0, 1.0, 0.1) = 0;
|
||||||
|
uniform float b: hint_range(0.0, 1.0, 0.1) = 0;
|
||||||
|
|
||||||
|
void fragment() {
|
||||||
|
if (UV.x < a) {
|
||||||
|
if (UV.x > b) {
|
||||||
|
COLOR.a = 1.0;
|
||||||
|
} else {
|
||||||
|
COLOR.a = 0.0;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
COLOR.a = 0.0;
|
||||||
|
}
|
||||||
|
}
|
|
@ -17,7 +17,10 @@ public partial class GlobalState : Node
|
||||||
[Signal]
|
[Signal]
|
||||||
public delegate void SummonBossEventHandler(string bossName);
|
public delegate void SummonBossEventHandler(string bossName);
|
||||||
|
|
||||||
public void Print(string str) => GD.Print(str);
|
public override void _Ready()
|
||||||
|
{
|
||||||
|
ProcessMode = ProcessModeEnum.Always;
|
||||||
|
}
|
||||||
|
|
||||||
public void ImportFromSave(Save save)
|
public void ImportFromSave(Save save)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,12 +1,14 @@
|
||||||
[gd_scene load_steps=6 format=3 uid="uid://c271rdjhd1gfo"]
|
[gd_scene load_steps=7 format=3 uid="uid://c271rdjhd1gfo"]
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://73jm5qjy52vq" path="res://Dialogue/balloon.tscn" id="1_atjb1"]
|
[ext_resource type="PackedScene" uid="uid://73jm5qjy52vq" path="res://Dialogue/balloon.tscn" id="1_atjb1"]
|
||||||
[ext_resource type="Script" path="res://UI/UIController.cs" id="2_b4b6l"]
|
[ext_resource type="Script" path="res://UI/UIController.cs" id="2_b4b6l"]
|
||||||
[ext_resource type="PackedScene" uid="uid://bxo553hblp6nf" path="res://UI/HealthBar.tscn" id="3_j1j6h"]
|
[ext_resource type="PackedScene" uid="uid://bxo553hblp6nf" path="res://UI/HealthBar.tscn" id="3_j1j6h"]
|
||||||
[ext_resource type="PackedScene" uid="uid://01d24ij5av1y" path="res://UI/BossBar.tscn" id="4_igi28"]
|
[ext_resource type="PackedScene" uid="uid://01d24ij5av1y" path="res://UI/BossBar.tscn" id="4_igi28"]
|
||||||
[ext_resource type="PackedScene" uid="uid://c77754nvmckn" path="res://UI/LocationDisplay.tscn" id="5_cr6vo"]
|
[ext_resource type="PackedScene" uid="uid://c77754nvmckn" path="res://UI/LocationDisplay.tscn" id="5_cr6vo"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://d3q1yu3n7cqfj" path="res://UI/SceneTransition.tscn" id="6_j0nhv"]
|
||||||
|
|
||||||
[node name="BaseUI" type="CanvasLayer"]
|
[node name="BaseUI" type="CanvasLayer"]
|
||||||
|
process_mode = 3
|
||||||
|
|
||||||
[node name="SubViewportContainer" type="SubViewportContainer" parent="."]
|
[node name="SubViewportContainer" type="SubViewportContainer" parent="."]
|
||||||
anchors_preset = 15
|
anchors_preset = 15
|
||||||
|
@ -73,3 +75,6 @@ visible = false
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
|
|
||||||
[node name="LocationDisplay" parent="SubViewportContainer/UIViewport/MainUILayer" instance=ExtResource("5_cr6vo")]
|
[node name="LocationDisplay" parent="SubViewportContainer/UIViewport/MainUILayer" instance=ExtResource("5_cr6vo")]
|
||||||
|
|
||||||
|
[node name="SceneTransition" parent="SubViewportContainer/UIViewport/MainUILayer" instance=ExtResource("6_j0nhv")]
|
||||||
|
z_index = 1
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
using Godot;
|
||||||
|
using SupaLidlGame.Extensions;
|
||||||
|
|
||||||
|
namespace SupaLidlGame.UI;
|
||||||
|
|
||||||
|
public partial class SceneTransition : Control
|
||||||
|
{
|
||||||
|
private AnimationPlayer _animPlayer;
|
||||||
|
private Events.EventBus _bus;
|
||||||
|
|
||||||
|
public override void _Ready()
|
||||||
|
{
|
||||||
|
_animPlayer = GetNode<AnimationPlayer>("AnimationPlayer");
|
||||||
|
_bus = this.GetEventBus();
|
||||||
|
_bus.EnterTransition += Enter;
|
||||||
|
_bus.ExitTransition += Exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async void Enter()
|
||||||
|
{
|
||||||
|
_animPlayer.Play("enter");
|
||||||
|
await ToSignal(_animPlayer, "animation_finished");
|
||||||
|
_bus.EmitSignal(Events.EventBus.SignalName.TransitionFinished);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Exit()
|
||||||
|
{
|
||||||
|
_animPlayer.Play("exit");
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,125 @@
|
||||||
|
[gd_scene load_steps=8 format=3 uid="uid://d3q1yu3n7cqfj"]
|
||||||
|
|
||||||
|
[ext_resource type="Shader" path="res://Shaders/WipeTransition.gdshader" id="1_1rft7"]
|
||||||
|
[ext_resource type="Script" path="res://UI/SceneTransition.cs" id="1_mx0ay"]
|
||||||
|
|
||||||
|
[sub_resource type="ShaderMaterial" id="ShaderMaterial_vfeh4"]
|
||||||
|
shader = ExtResource("1_1rft7")
|
||||||
|
shader_parameter/a = 0.0
|
||||||
|
shader_parameter/b = 0.0
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_4e8tt"]
|
||||||
|
resource_name = "enter"
|
||||||
|
length = 0.5
|
||||||
|
step = 0.05
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("ColorRect:material:shader_parameter/a")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.25),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [0.0, 1.0]
|
||||||
|
}
|
||||||
|
tracks/1/type = "value"
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("ColorRect:material:shader_parameter/b")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [0.0]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_c026w"]
|
||||||
|
length = 0.001
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("ColorRect:material:shader_parameter/a")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [0.0]
|
||||||
|
}
|
||||||
|
tracks/1/type = "value"
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("ColorRect:material:shader_parameter/b")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [0.0]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_uvf4a"]
|
||||||
|
resource_name = "exit"
|
||||||
|
length = 0.25
|
||||||
|
step = 0.05
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("ColorRect:material:shader_parameter/a")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [1.0]
|
||||||
|
}
|
||||||
|
tracks/1/type = "value"
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("ColorRect:material:shader_parameter/b")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = {
|
||||||
|
"times": PackedFloat32Array(0, 0.25),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [0.0, 1.0]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="AnimationLibrary" id="AnimationLibrary_51tf5"]
|
||||||
|
_data = {
|
||||||
|
"RESET": SubResource("Animation_c026w"),
|
||||||
|
"enter": SubResource("Animation_4e8tt"),
|
||||||
|
"exit": SubResource("Animation_uvf4a")
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="SceneTransition" type="Control"]
|
||||||
|
layout_mode = 3
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
script = ExtResource("1_mx0ay")
|
||||||
|
|
||||||
|
[node name="ColorRect" type="ColorRect" parent="."]
|
||||||
|
material = SubResource("ShaderMaterial_vfeh4")
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
color = Color(0, 0, 0, 1)
|
||||||
|
|
||||||
|
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||||
|
libraries = {
|
||||||
|
"": SubResource("AnimationLibrary_51tf5")
|
||||||
|
}
|
|
@ -3,6 +3,7 @@ using SupaLidlGame.Characters;
|
||||||
using SupaLidlGame.Extensions;
|
using SupaLidlGame.Extensions;
|
||||||
using SupaLidlGame.Scenes;
|
using SupaLidlGame.Scenes;
|
||||||
using SupaLidlGame.State.Global;
|
using SupaLidlGame.State.Global;
|
||||||
|
using SupaLidlGame.Events;
|
||||||
|
|
||||||
namespace SupaLidlGame.Utils;
|
namespace SupaLidlGame.Utils;
|
||||||
|
|
||||||
|
@ -58,7 +59,7 @@ public partial class World : Node
|
||||||
|
|
||||||
public State.Global.GlobalState GlobalState { get; set; }
|
public State.Global.GlobalState GlobalState { get; set; }
|
||||||
|
|
||||||
public Events.EventBus EventBus { get; set; }
|
public EventBus EventBus { get; set; }
|
||||||
|
|
||||||
private CacheStore<string, Map> _maps = new();
|
private CacheStore<string, Map> _maps = new();
|
||||||
|
|
||||||
|
@ -95,9 +96,10 @@ public partial class World : Node
|
||||||
UIController = this.GetMainUI();
|
UIController = this.GetMainUI();
|
||||||
|
|
||||||
EventBus = this.GetEventBus();
|
EventBus = this.GetEventBus();
|
||||||
EventBus.RequestMoveToArea += (Events.RequestAreaArgs args) =>
|
EventBus.RequestMoveToArea += (RequestAreaArgs args) =>
|
||||||
{
|
{
|
||||||
CallDeferred(nameof(MoveToArea), args.Area, args.Connector);
|
//CallDeferred(nameof(MoveToArea), args.Area, args.Connector);
|
||||||
|
MoveToArea(args.Area, args.Connector);
|
||||||
};
|
};
|
||||||
EventBus.RegisteredBoss += RegisterBoss;
|
EventBus.RegisteredBoss += RegisterBoss;
|
||||||
EventBus.DeregisteredBoss += DeregisterBoss;
|
EventBus.DeregisteredBoss += DeregisterBoss;
|
||||||
|
@ -155,7 +157,7 @@ public partial class World : Node
|
||||||
CurrentMap.Active = true;
|
CurrentMap.Active = true;
|
||||||
CurrentMap.Load();
|
CurrentMap.Load();
|
||||||
|
|
||||||
EventBus.EmitSignal(Events.EventBus.SignalName.AreaChanged, map);
|
EventBus.EmitSignal(EventBus.SignalName.AreaChanged, map);
|
||||||
|
|
||||||
if (CurrentPlayer is not null)
|
if (CurrentPlayer is not null)
|
||||||
{
|
{
|
||||||
|
@ -220,7 +222,7 @@ public partial class World : Node
|
||||||
{
|
{
|
||||||
CurrentPlayer = _playerScene.Instantiate<Player>();
|
CurrentPlayer = _playerScene.Instantiate<Player>();
|
||||||
|
|
||||||
CurrentPlayer.Death += (Events.HurtArgs args) =>
|
CurrentPlayer.Death += (HurtArgs args) =>
|
||||||
{
|
{
|
||||||
// TODO: respawn the player at the last campfire.
|
// TODO: respawn the player at the last campfire.
|
||||||
GetTree().CreateTimer(3).Timeout += () =>
|
GetTree().CreateTimer(3).Timeout += () =>
|
||||||
|
@ -230,15 +232,6 @@ public partial class World : Node
|
||||||
GlobalState.Stats.DeathCount++;
|
GlobalState.Stats.DeathCount++;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
|
||||||
CurrentPlayer.Hurt += (Events.HurtArgs args) =>
|
|
||||||
{
|
|
||||||
// TODO: move this to UI controller and add a setup method
|
|
||||||
var bar = UIController.GetNode<UI.HealthBar>("Top/Margin/HealthBar");
|
|
||||||
bar.ProgressBar.Value = args.NewHealth;
|
|
||||||
};
|
|
||||||
*/
|
|
||||||
|
|
||||||
return CurrentPlayer;
|
return CurrentPlayer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -253,16 +246,23 @@ public partial class World : Node
|
||||||
CurrentPlayer.GlobalPosition = marker?.GlobalPosition ?? Vector2.Zero;
|
CurrentPlayer.GlobalPosition = marker?.GlobalPosition ?? Vector2.Zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void MoveToArea(string path, string connector)
|
public async void MoveToArea(string path, string connector)
|
||||||
{
|
{
|
||||||
_currentConnector = connector;
|
_currentConnector = connector;
|
||||||
GD.Print($"Moving to area {path} - {connector}");
|
GD.Print($"Moving to area {path} - {connector}");
|
||||||
|
|
||||||
|
EventBus.EmitSignal(EventBus.SignalName.EnterTransition);
|
||||||
|
GetTree().Paused = true;
|
||||||
|
await ToSignal(EventBus, EventBus.SignalName.TransitionFinished);
|
||||||
|
|
||||||
if (path != CurrentMap.SceneFilePath)
|
if (path != CurrentMap.SceneFilePath)
|
||||||
{
|
{
|
||||||
LoadScene(path);
|
LoadScene(path);
|
||||||
//_currentMapResourcePath = path;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EventBus.EmitSignal(EventBus.SignalName.ExitTransition);
|
||||||
|
GetTree().Paused = false;
|
||||||
|
|
||||||
// after finished loading, move our player to the connector
|
// after finished loading, move our player to the connector
|
||||||
MovePlayerToConnector(connector);
|
MovePlayerToConnector(connector);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue