diff --git a/Scenes/Maps/Tutorial.tscn b/Scenes/Maps/Tutorial.tscn index fbcf39a2..c5227a9f 100644 --- a/Scenes/Maps/Tutorial.tscn +++ b/Scenes/Maps/Tutorial.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=50 format=4 uid="uid://bpnahwxmjgb6t"] +[gd_scene load_steps=49 format=4 uid="uid://bpnahwxmjgb6t"] [ext_resource type="Script" uid="uid://doxmbokehw8ci" path="res://Scripts/GameManager.cs" id="1_qxyfr"] [ext_resource type="Resource" uid="uid://b4u3cs6ietmow" path="res://Resources/Maps/Tutorial.tres" id="2_0xhda"] @@ -15,7 +15,6 @@ [ext_resource type="PackedScene" uid="uid://byms2dhliyux0" path="res://Scenes/Actors/teleporter.tscn" id="11_pkaga"] [ext_resource type="PackedScene" uid="uid://c27co22bjym3c" path="res://Scenes/Actors/Camera.tscn" id="12_chhxg"] [ext_resource type="PackedScene" uid="uid://d1h48wgasakk4" path="res://Scenes/Interactable/alarm_box.tscn" id="13_cawq2"] -[ext_resource type="Script" uid="uid://b5fesrd4lv8t1" path="res://Scripts/Resources/Events/EventResource.cs" id="15_0xhda"] [ext_resource type="Script" uid="uid://bwox5lmgiijcs" path="res://Scripts/Resources/Events/ActivateEvent.cs" id="15_l8ewr"] [ext_resource type="PackedScene" uid="uid://ca6befbx0nurt" path="res://Scenes/Interactable/ScriptableEnabledAlarmTrigger.tscn" id="15_qub1o"] [ext_resource type="PackedScene" uid="uid://bc64lr3vlwchq" path="res://Scenes/Door_Vertical.tscn" id="16_wk6n2"] @@ -198,10 +197,10 @@ position = Vector2(612, -56) State = 1 [node name="OnAlarmEnabled" parent="Parallax2D/Tilemaps/Actors/VerticalDoor" instance=ExtResource("15_qub1o")] -Events = Array[ExtResource("15_0xhda")]([SubResource("Resource_3vy3u")]) +Events = [SubResource("Resource_3vy3u")] [node name="OnAlarmDisabled" parent="Parallax2D/Tilemaps/Actors/VerticalDoor" instance=ExtResource("17_wxxk5")] -Events = Array[ExtResource("15_0xhda")]([SubResource("Resource_wvpi7")]) +Events = [SubResource("Resource_wvpi7")] [node name="AlarmBox2" parent="Parallax2D/Tilemaps/Actors" instance=ExtResource("17_lq462")] position = Vector2(440, -121) @@ -216,35 +215,35 @@ position = Vector2(72, 8) [node name="Intro" parent="Parallax2D/Tilemaps/Actors/TutorialDialogueTriggers" instance=ExtResource("21_t630o")] position = Vector2(128, 351) -Events = Array[ExtResource("15_0xhda")]([SubResource("Resource_ierdo")]) +Events = [SubResource("Resource_ierdo")] [node name="Switch" parent="Parallax2D/Tilemaps/Actors/TutorialDialogueTriggers" instance=ExtResource("21_t630o")] position = Vector2(234, 287) -Events = Array[ExtResource("15_0xhda")]([SubResource("Resource_8yymf")]) +Events = [SubResource("Resource_8yymf")] [node name="Weapon" parent="Parallax2D/Tilemaps/Actors/TutorialDialogueTriggers" instance=ExtResource("21_t630o")] position = Vector2(128, 176) -Events = Array[ExtResource("15_0xhda")]([SubResource("Resource_dbad5"), SubResource("Resource_f3qhg"), SubResource("Resource_ulu4a")]) +Events = [SubResource("Resource_dbad5"), SubResource("Resource_f3qhg"), SubResource("Resource_ulu4a")] [node name="Barrels" parent="Parallax2D/Tilemaps/Actors/TutorialDialogueTriggers" instance=ExtResource("21_t630o")] position = Vector2(231, 40) -Events = Array[ExtResource("15_0xhda")]([SubResource("Resource_35vjh")]) +Events = [SubResource("Resource_35vjh")] [node name="Teleporter1" parent="Parallax2D/Tilemaps/Actors/TutorialDialogueTriggers" instance=ExtResource("21_t630o")] position = Vector2(259, -41) -Events = Array[ExtResource("15_0xhda")]([SubResource("Resource_p02qj")]) +Events = [SubResource("Resource_p02qj")] [node name="Teleporter2" parent="Parallax2D/Tilemaps/Actors/TutorialDialogueTriggers" instance=ExtResource("21_t630o")] position = Vector2(345, -40) -Events = Array[ExtResource("15_0xhda")]([SubResource("Resource_t62sp")]) +Events = [SubResource("Resource_t62sp")] [node name="Repeater" parent="Parallax2D/Tilemaps/Actors/TutorialDialogueTriggers" instance=ExtResource("21_t630o")] position = Vector2(634, -40) -Events = Array[ExtResource("15_0xhda")]([SubResource("Resource_m71ef")]) +Events = [SubResource("Resource_m71ef")] [node name="Cameras" parent="Parallax2D/Tilemaps/Actors/TutorialDialogueTriggers" instance=ExtResource("21_t630o")] position = Vector2(433, -41) -Events = Array[ExtResource("15_0xhda")]([SubResource("Resource_54a43"), SubResource("Resource_8phm4"), SubResource("Resource_7uxja")]) +Events = [SubResource("Resource_54a43"), SubResource("Resource_8phm4"), SubResource("Resource_7uxja")] [node name="VerticalDoor2" parent="Parallax2D/Tilemaps/Actors" instance=ExtResource("16_wk6n2")] position = Vector2(916, -56) diff --git a/Scripts/Activables/DialogueStarter.cs b/Scripts/Activables/DialogueStarter.cs index 5f759a92..6225ac20 100644 --- a/Scripts/Activables/DialogueStarter.cs +++ b/Scripts/Activables/DialogueStarter.cs @@ -7,13 +7,14 @@ public partial class DialogueStarter : ChainActivable { [Export] private string _trackName = "timeline"; - + [Export] public StringName PauseActionName { get; private set; } = "pause"; //[Export] private Array _dialogueEndActivationTargets; private Node _dialogic; private GameManager _gameManager; - + private bool _dialogueActive = false; + public override void _Ready() { base._Ready(); @@ -23,6 +24,15 @@ public partial class DialogueStarter : ChainActivable _dialogic = GetNode("/root/Dialogic"); _dialogic.ProcessMode = ProcessModeEnum.Always; } + + public override void _Process(double delta) + { + if (!_dialogueActive) return; + if (Input.IsActionJustPressed(PauseActionName)) + { + _dialogic.Call("end_timeline"); + } + } private void OnTimelineEnded() { @@ -37,6 +47,7 @@ public partial class DialogueStarter : ChainActivable public override bool Activate(ActivationType activationType = ActivationType.Toggle) { + _dialogueActive = true; if (GlobalState.Instance.SessionSettings.SkipDialogues) { DialogueEndAction(); @@ -57,6 +68,7 @@ public partial class DialogueStarter : ChainActivable private void DialogueEndAction() { + _dialogueActive = false; _gameManager.ChangeState(GameState.Playing); ActivateTargets(); // foreach (var activationTarget in _dialogueEndActivationTargets) diff --git a/Scripts/Misc/DialogueAutoStarter.cs b/Scripts/Misc/DialogueAutoStarter.cs index 86198e5b..d1c37128 100644 --- a/Scripts/Misc/DialogueAutoStarter.cs +++ b/Scripts/Misc/DialogueAutoStarter.cs @@ -6,8 +6,12 @@ public partial class DialogueAutoStarter : Node2D { [Export] private StringName _trackName = "timeline"; [Export] private StringName _finishedScenePath; + + [Export] public StringName PauseActionName { get; private set; } = "pause"; private Node _dialogic; + + private bool _dialogueActive = false; public override void _Ready() { @@ -19,6 +23,15 @@ public partial class DialogueAutoStarter : Node2D CallDeferred(MethodName.Activate); } + public override void _Process(double delta) + { + if (!_dialogueActive) return; + if (Input.IsActionJustPressed(PauseActionName)) + { + _dialogic.Call("end_timeline"); + } + } + private void OnTimelineEnded() { if (_dialogic.IsConnected("timeline_ended", Callable.From(OnTimelineEnded))) @@ -31,6 +44,8 @@ public partial class DialogueAutoStarter : Node2D public bool Activate() { + _dialogueActive = true; + if (GlobalState.Instance.SessionSettings.SkipDialogues) { DialogueEndAction(); @@ -47,6 +62,7 @@ public partial class DialogueAutoStarter : Node2D private void DialogueEndAction() { + _dialogueActive = false; GlobalState.Instance.GotoScene(_finishedScenePath); } } \ No newline at end of file diff --git a/Scripts/Misc/DialogueSkipListener.cs b/Scripts/Misc/DialogueSkipListener.cs new file mode 100644 index 00000000..c96e580d --- /dev/null +++ b/Scripts/Misc/DialogueSkipListener.cs @@ -0,0 +1,19 @@ +using Godot; + +namespace Cirno.Scripts.Misc; + +public partial class DialogueSkipListener : Node2D +{ + [Export] public StringName PauseActionName { get; private set; }= "pause"; + + [Signal] + public delegate void SkippedEventHandler(); + + public override void _Process(double delta) + { + if (Input.IsActionJustPressed(PauseActionName)) + { + EmitSignalSkipped(); + } + } +} \ No newline at end of file diff --git a/Scripts/Misc/DialogueSkipListener.cs.uid b/Scripts/Misc/DialogueSkipListener.cs.uid new file mode 100644 index 00000000..c0d1b305 --- /dev/null +++ b/Scripts/Misc/DialogueSkipListener.cs.uid @@ -0,0 +1 @@ +uid://b3eytmrd7ic3d diff --git a/Scripts/Resources/Events/DialogueStartEvent.cs b/Scripts/Resources/Events/DialogueStartEvent.cs index cf364eff..888451a8 100644 --- a/Scripts/Resources/Events/DialogueStartEvent.cs +++ b/Scripts/Resources/Events/DialogueStartEvent.cs @@ -1,4 +1,5 @@ -using Godot; +using Cirno.Scripts.Misc; +using Godot; namespace Cirno.Scripts.Resources.Events; @@ -10,6 +11,8 @@ public partial class DialogueStartEvent : EventResource private GameManager _gameManager; private bool _isComplete = false; + private DialogueSkipListener _listener; + public override void Init(Node2D parent) { _gameManager = parent.GetGameManager(); @@ -25,6 +28,8 @@ public partial class DialogueStartEvent : EventResource return; } + CreateSkipListener(parent); + Hud.Instance?.HideHud(); _dialogic.Connect("timeline_ended", Callable.From(OnTimelineEnded)); @@ -34,6 +39,21 @@ public partial class DialogueStartEvent : EventResource _gameManager.ChangeState(GameState.Dialogue); } + private void CreateSkipListener(Node2D parent) + { + _listener = new DialogueSkipListener(); + parent.AddChild(_listener); + _listener.ProcessMode = Node.ProcessModeEnum.Always; + _listener.Skipped += ListenerOnSkipped; + } + + private void ListenerOnSkipped() + { + _listener.Skipped -= ListenerOnSkipped; + _listener.QueueFree(); + _dialogic.Call("end_timeline"); + } + private void OnTimelineEnded() { Hud.Instance?.ShowHud();