Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 06a270e916 | |||
| b621df5435 | |||
| 03dbc08293 |
@@ -9,7 +9,7 @@ var quest_resource: String
|
|||||||
func _execute() -> void:
|
func _execute() -> void:
|
||||||
var resource = ResourceLoader.load(quest_resource)
|
var resource = ResourceLoader.load(quest_resource)
|
||||||
QuestManager.ChangeQuestStatus(resource,QuestEventUtils.QuestStatus.AVAILABLE)
|
QuestManager.ChangeQuestStatus(resource,QuestEventUtils.QuestStatus.AVAILABLE)
|
||||||
QuestManager.SetFollowQuest(resource)
|
QuestManager.SetActiveQuest(resource)
|
||||||
finish() # called to continue with the next event
|
finish() # called to continue with the next event
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ var quest_resource: String
|
|||||||
func _execute() -> void:
|
func _execute() -> void:
|
||||||
var resource = ResourceLoader.load(quest_resource)
|
var resource = ResourceLoader.load(quest_resource)
|
||||||
QuestManager.ChangeQuestStatus(resource,QuestEventUtils.QuestStatus.DONE)
|
QuestManager.ChangeQuestStatus(resource,QuestEventUtils.QuestStatus.DONE)
|
||||||
QuestManager.SetFollowQuest(null)
|
QuestManager.SetActiveQuest(null)
|
||||||
finish() # called to continue with the next event
|
finish() # called to continue with the next event
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -23,9 +23,9 @@ func _execute() -> void:
|
|||||||
|
|
||||||
var result: bool
|
var result: bool
|
||||||
if compare_status == QuestEventUtils.QuestStatusOrActive.ACTIVE:
|
if compare_status == QuestEventUtils.QuestStatusOrActive.ACTIVE:
|
||||||
result = QuestManager.GetFollowQuest() == resource
|
result = QuestManager.GetActiveQuest() == resource
|
||||||
elif compare_status == QuestEventUtils.QuestStatusOrActive.NOT_ACTIVE:
|
elif compare_status == QuestEventUtils.QuestStatusOrActive.NOT_ACTIVE:
|
||||||
result = QuestManager.GetFollowQuest() != resource
|
result = QuestManager.GetActiveQuest() != resource
|
||||||
else:
|
else:
|
||||||
result = QuestManager.GetQuestStatus(resource).status == compare_status
|
result = QuestManager.GetQuestStatus(resource).status == compare_status
|
||||||
|
|
||||||
|
|||||||
@@ -2381,17 +2381,17 @@ script = ExtResource("40_w3jkj")
|
|||||||
script = ExtResource("66_2065p")
|
script = ExtResource("66_2065p")
|
||||||
questResource = ExtResource("67_tm0yg")
|
questResource = ExtResource("67_tm0yg")
|
||||||
toStatus = 1
|
toStatus = 1
|
||||||
makeCurrent = true
|
makeActive = true
|
||||||
|
|
||||||
[node name="ToolsCollectedTrigger" type="Node" parent="SpeicialQuestTrigger"]
|
[node name="ToolsCollectedTrigger" type="Node" parent="SpeicialQuestTrigger"]
|
||||||
script = ExtResource("68_hux6i")
|
script = ExtResource("68_hux6i")
|
||||||
_itemsToContain = Array[Resource]([SubResource("Resource_y820s"), SubResource("Resource_50loj")])
|
_itemsToContain = Array[Resource]([SubResource("Resource_y820s"), SubResource("Resource_50loj")])
|
||||||
_onActiveQuest = ExtResource("68_lbnqo")
|
_onAvailableQuest = ExtResource("68_lbnqo")
|
||||||
_toNextQuest = ExtResource("69_l4wxt")
|
_toNextQuest = ExtResource("69_l4wxt")
|
||||||
|
|
||||||
[node name="FieldWorkTrigger" type="Node" parent="SpeicialQuestTrigger"]
|
[node name="FieldWorkTrigger" type="Node" parent="SpeicialQuestTrigger"]
|
||||||
script = ExtResource("74_fv1t2")
|
script = ExtResource("74_fv1t2")
|
||||||
_onActiveQuest = ExtResource("75_l7ekk")
|
_onAvailableQuest = ExtResource("75_l7ekk")
|
||||||
_toNextQuest = ExtResource("76_xcwle")
|
_toNextQuest = ExtResource("76_xcwle")
|
||||||
|
|
||||||
[node name="StartDialog" type="Node" parent="SpeicialQuestTrigger/FieldWorkTrigger"]
|
[node name="StartDialog" type="Node" parent="SpeicialQuestTrigger/FieldWorkTrigger"]
|
||||||
@@ -2416,7 +2416,7 @@ timeline = "quest2_tomatoes_end"
|
|||||||
[connection signal="Dialogue" from="YSorted/ducks/DialogicToggle" to="YSorted/ducks/dialogic starter" method="open"]
|
[connection signal="Dialogue" from="YSorted/ducks/DialogicToggle" to="YSorted/ducks/dialogic starter" method="open"]
|
||||||
[connection signal="finished" from="Audio/Background Music Ramp up" to="Audio/Background Music loop" method="PlayFromOffset"]
|
[connection signal="finished" from="Audio/Background Music Ramp up" to="Audio/Background Music loop" method="PlayFromOffset"]
|
||||||
[connection signal="ready" from="SpeicialQuestTrigger/QuestInstantStart" to="SpeicialQuestTrigger/QuestInstantStart/QuestTrigger" method="Trigger"]
|
[connection signal="ready" from="SpeicialQuestTrigger/QuestInstantStart" to="SpeicialQuestTrigger/QuestInstantStart/QuestTrigger" method="Trigger"]
|
||||||
[connection signal="OnFulfilled" from="SpeicialQuestTrigger/FieldWorkTrigger" to="SpeicialQuestTrigger/FieldWorkTrigger/StartDialog" method="start"]
|
[connection signal="OnFulfilled" from="SpeicialQuestTrigger/FieldWorkTrigger" to="SpeicialQuestTrigger/FieldWorkTrigger/StartDialog" method="open"]
|
||||||
|
|
||||||
[editable path="YSorted/Vesna"]
|
[editable path="YSorted/Vesna"]
|
||||||
[editable path="YSorted/Brünnen/InteractionArea"]
|
[editable path="YSorted/Brünnen/InteractionArea"]
|
||||||
|
|||||||
@@ -2186,7 +2186,7 @@ script = ExtResource("56_bjj0f")
|
|||||||
script = ExtResource("55_ub0r7")
|
script = ExtResource("55_ub0r7")
|
||||||
questResource = ExtResource("56_q833x")
|
questResource = ExtResource("56_q833x")
|
||||||
toStatus = 1
|
toStatus = 1
|
||||||
makeCurrent = true
|
makeActive = true
|
||||||
|
|
||||||
[connection signal="body_entered" from="Fight1/FightStarter/TriggerArea" to="Fight1/FightStarter" method="Start"]
|
[connection signal="body_entered" from="Fight1/FightStarter/TriggerArea" to="Fight1/FightStarter" method="Start"]
|
||||||
[connection signal="FightEnded" from="Fight1/FightBaseScene" to="YSorted/Vesna" method="show"]
|
[connection signal="FightEnded" from="Fight1/FightBaseScene" to="YSorted/Vesna" method="show"]
|
||||||
|
|||||||
@@ -563,7 +563,7 @@ script = ExtResource("17_k0k8c")
|
|||||||
script = ExtResource("21_blyw3")
|
script = ExtResource("21_blyw3")
|
||||||
questResource = ExtResource("22_yd2gv")
|
questResource = ExtResource("22_yd2gv")
|
||||||
toStatus = 1
|
toStatus = 1
|
||||||
makeCurrent = true
|
makeActive = true
|
||||||
|
|
||||||
[node name="Camera2D" type="Camera2D" parent="." node_paths=PackedStringArray("_followNode")]
|
[node name="Camera2D" type="Camera2D" parent="." node_paths=PackedStringArray("_followNode")]
|
||||||
position = Vector2(-1534, -26)
|
position = Vector2(-1534, -26)
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ text = "Start Quest 1"
|
|||||||
script = ExtResource("1_wnfrg")
|
script = ExtResource("1_wnfrg")
|
||||||
questResource = ExtResource("2_nud5h")
|
questResource = ExtResource("2_nud5h")
|
||||||
toStatus = 1
|
toStatus = 1
|
||||||
makeCurrent = true
|
makeActive = true
|
||||||
|
|
||||||
[node name="Button2" type="Button" parent="."]
|
[node name="Button2" type="Button" parent="."]
|
||||||
offset_left = 460.0
|
offset_left = 460.0
|
||||||
@@ -43,7 +43,7 @@ text = "Start Quest 2"
|
|||||||
script = ExtResource("1_wnfrg")
|
script = ExtResource("1_wnfrg")
|
||||||
questResource = ExtResource("3_tb5fn")
|
questResource = ExtResource("3_tb5fn")
|
||||||
toStatus = 1
|
toStatus = 1
|
||||||
makeCurrent = true
|
makeActive = true
|
||||||
|
|
||||||
[node name="Button4" type="Button" parent="."]
|
[node name="Button4" type="Button" parent="."]
|
||||||
offset_left = 460.0
|
offset_left = 460.0
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ text = "Active"
|
|||||||
script = ExtResource("3_sx4ix")
|
script = ExtResource("3_sx4ix")
|
||||||
questResource = ExtResource("4_qyyck")
|
questResource = ExtResource("4_qyyck")
|
||||||
toStatus = 1
|
toStatus = 1
|
||||||
makeCurrent = true
|
makeActive = true
|
||||||
|
|
||||||
[node name="Done" type="Button" parent="CanvasLayer2/VBoxContainer/HBoxContainer"]
|
[node name="Done" type="Button" parent="CanvasLayer2/VBoxContainer/HBoxContainer"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using Godot;
|
using Godot;
|
||||||
namespace Babushka.scripts.CSharp.Common.Inventory;
|
namespace Babushka.scripts.CSharp.Common.Inventory;
|
||||||
|
|
||||||
// Do not instantiate this resource
|
// Do not instantiate this resource
|
||||||
|
|||||||
@@ -1,22 +0,0 @@
|
|||||||
using Godot;
|
|
||||||
using System;
|
|
||||||
using Babushka.scripts.CSharp.Common.Quest;
|
|
||||||
|
|
||||||
public partial class PopUpPostIt : Control
|
|
||||||
{
|
|
||||||
private Label Text => GetNode<Label>("Text");
|
|
||||||
|
|
||||||
private AnimationPlayer Animation => GetNode<AnimationPlayer>("AnimationPlayer");
|
|
||||||
|
|
||||||
QuestManager QM => QuestManager.Instance!;
|
|
||||||
public override void _EnterTree()
|
|
||||||
{
|
|
||||||
QM.QuestBecomesActive += NewQuestPostIt;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void NewQuestPostIt(QuestResource questResource)
|
|
||||||
{
|
|
||||||
Text.Text = questResource.title;
|
|
||||||
Animation.Play("NewPostit");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
uid://byar6yqrlph6k
|
|
||||||
@@ -24,7 +24,7 @@ public partial class QuestListItemUi : Control
|
|||||||
_ => ""
|
_ => ""
|
||||||
};
|
};
|
||||||
|
|
||||||
UpdateCircled(questResource == QuestManager.Instance.GetFollowQuest());
|
UpdateCircled(questResource == QuestManager.Instance.GetActiveQuest());
|
||||||
ShowName(name);
|
ShowName(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,10 +17,10 @@ public partial class QuestLog : Control
|
|||||||
|
|
||||||
public QuestResource? currentDetailQuest
|
public QuestResource? currentDetailQuest
|
||||||
{
|
{
|
||||||
get => QuestManager.Instance!.GetFollowQuest();
|
get => QuestManager.Instance!.GetActiveQuest();
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
QuestManager.Instance!.SetFollowQuest(value); // TODO: fix setup
|
QuestManager.Instance!.SetActiveQuest(value); // TODO: fix setup
|
||||||
EmitSignalDetailQuestChanged(this);
|
EmitSignalDetailQuestChanged(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ public partial class QuestManager : Node
|
|||||||
public static QuestManager? Instance { get; private set; }
|
public static QuestManager? Instance { get; private set; }
|
||||||
|
|
||||||
[Signal]
|
[Signal]
|
||||||
public delegate void QuestBecomesActiveEventHandler(QuestResource questResource);
|
public delegate void QuestBecomesAvailableEventHandler(QuestResource questResource);
|
||||||
|
|
||||||
[Signal]
|
[Signal]
|
||||||
public delegate void QuestsChangedEventHandler();
|
public delegate void QuestsChangedEventHandler();
|
||||||
@@ -26,7 +26,7 @@ public partial class QuestManager : Node
|
|||||||
|
|
||||||
private Godot.Collections.Dictionary<QuestResource, QuestStatus> _questStatus = new();
|
private Godot.Collections.Dictionary<QuestResource, QuestStatus> _questStatus = new();
|
||||||
|
|
||||||
private QuestResource? _followQuest;
|
private QuestResource? _activeQuest;
|
||||||
|
|
||||||
|
|
||||||
public void ChangeQuestStatus(QuestResource questResource, QuestStatus.Status newStatus)
|
public void ChangeQuestStatus(QuestResource questResource, QuestStatus.Status newStatus)
|
||||||
@@ -40,11 +40,11 @@ public partial class QuestManager : Node
|
|||||||
value.status = newStatus;
|
value.status = newStatus;
|
||||||
|
|
||||||
EmitSignalQuestsChanged();
|
EmitSignalQuestsChanged();
|
||||||
EmitSignalDialogicActiveQuest(_followQuest?.id ?? "none");
|
EmitSignalDialogicActiveQuest(_activeQuest?.id ?? "none");
|
||||||
|
|
||||||
if (newStatus == QuestStatus.Status.Active)
|
if (newStatus == QuestStatus.Status.Available)
|
||||||
{
|
{
|
||||||
EmitSignalQuestBecomesActive(questResource);
|
EmitSignalQuestBecomesAvailable(questResource);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -53,9 +53,9 @@ public partial class QuestManager : Node
|
|||||||
return _questStatus.Where(qs => qs.Value.status != QuestStatus.Status.Hidden);
|
return _questStatus.Where(qs => qs.Value.status != QuestStatus.Status.Hidden);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<QuestPair> GetActiveQuests()
|
public IEnumerable<QuestPair> GetAvailableQuests()
|
||||||
{
|
{
|
||||||
return _questStatus.Where(qs => qs.Value.status == QuestStatus.Status.Active);
|
return _questStatus.Where(qs => qs.Value.status == QuestStatus.Status.Available);
|
||||||
}
|
}
|
||||||
public QuestStatus GetQuestStatus(QuestResource questResource)
|
public QuestStatus GetQuestStatus(QuestResource questResource)
|
||||||
{
|
{
|
||||||
@@ -67,15 +67,15 @@ public partial class QuestManager : Node
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
public QuestResource? GetFollowQuest()
|
public QuestResource? GetActiveQuest()
|
||||||
{
|
{
|
||||||
return _followQuest;
|
return _activeQuest;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetFollowQuest(QuestResource? questResource)
|
public void SetActiveQuest(QuestResource? questResource)
|
||||||
{
|
{
|
||||||
_followQuest = questResource;
|
_activeQuest = questResource;
|
||||||
EmitSignalQuestsChanged();
|
EmitSignalQuestsChanged();
|
||||||
EmitSignalDialogicActiveQuest(_followQuest?.id ?? "none");
|
EmitSignalDialogicActiveQuest(_activeQuest?.id ?? "none");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ public partial class QuestMessagePopup : Control
|
|||||||
|
|
||||||
private void NewActiveQuest()
|
private void NewActiveQuest()
|
||||||
{
|
{
|
||||||
var shownQuest = QuestManager.Instance!.GetFollowQuest();
|
var shownQuest = QuestManager.Instance!.GetActiveQuest();
|
||||||
if (_currentlyShown == shownQuest)
|
if (_currentlyShown == shownQuest)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ public partial class QuestResource : Resource
|
|||||||
{
|
{
|
||||||
[Export]
|
[Export]
|
||||||
public string id = "";
|
public string id = "";
|
||||||
[Export]
|
[Export(PropertyHint.MultilineText)]
|
||||||
public string title = "";
|
public string title = "";
|
||||||
[Export(PropertyHint.MultilineText)]
|
[Export(PropertyHint.MultilineText)]
|
||||||
public string description = "";
|
public string description = "";
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ public partial class QuestStatus : GodotObject
|
|||||||
public enum Status
|
public enum Status
|
||||||
{
|
{
|
||||||
Hidden = 0,
|
Hidden = 0,
|
||||||
Active = 1,
|
Available = 1,
|
||||||
Done = 2,
|
Done = 2,
|
||||||
Canceled = 3,
|
Canceled = 3,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,15 +8,15 @@ using Godot.Collections;
|
|||||||
public partial class QuestTestingScript : Node
|
public partial class QuestTestingScript : Node
|
||||||
{
|
{
|
||||||
[Export(PropertyHint.ArrayType)]
|
[Export(PropertyHint.ArrayType)]
|
||||||
private Array<QuestResource>? _questsToActivate;
|
private Array<QuestResource>? _questsToMakeAvailable;
|
||||||
|
|
||||||
public override void _EnterTree()
|
public override void _EnterTree()
|
||||||
{
|
{
|
||||||
Debug.Assert(_questsToActivate != null);
|
Debug.Assert(_questsToMakeAvailable != null);
|
||||||
|
|
||||||
foreach (var questResource in _questsToActivate)
|
foreach (var questResource in _questsToMakeAvailable)
|
||||||
{
|
{
|
||||||
QuestManager.Instance!.ChangeQuestStatus(questResource, QuestStatus.Status.Active);
|
QuestManager.Instance!.ChangeQuestStatus(questResource, QuestStatus.Status.Available);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,14 +4,11 @@ using Babushka.scripts.CSharp.Common.Quest;
|
|||||||
|
|
||||||
public partial class QuestTrigger : Node
|
public partial class QuestTrigger : Node
|
||||||
{
|
{
|
||||||
[Export]
|
[Export] public QuestResource? questResource;
|
||||||
public QuestResource? questResource;
|
|
||||||
|
|
||||||
[Export]
|
[Export] public QuestStatus.Status toStatus;
|
||||||
public QuestStatus.Status toStatus;
|
|
||||||
|
|
||||||
[Export]
|
[Export] private bool makeActive = false;
|
||||||
private bool makeCurrent = false;
|
|
||||||
|
|
||||||
public void Trigger()
|
public void Trigger()
|
||||||
{
|
{
|
||||||
@@ -21,13 +18,14 @@ public partial class QuestTrigger : Node
|
|||||||
throw new Exception("QuestResource is not set on QuestTrigger node.");
|
throw new Exception("QuestResource is not set on QuestTrigger node.");
|
||||||
|
|
||||||
if (QuestManager.Instance == null)
|
if (QuestManager.Instance == null)
|
||||||
throw new Exception("QuestManager instance is not available. Make sure it is initialized before calling Trigger.");
|
throw new Exception(
|
||||||
|
"QuestManager instance is not available. Make sure it is initialized before calling Trigger.");
|
||||||
|
|
||||||
QuestManager.Instance.ChangeQuestStatus(questResource, toStatus);
|
QuestManager.Instance.ChangeQuestStatus(questResource, toStatus);
|
||||||
|
|
||||||
if (makeCurrent)
|
if (makeActive)
|
||||||
{
|
{
|
||||||
QuestManager.Instance.SetFollowQuest(questResource);
|
QuestManager.Instance.SetActiveQuest(questResource);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -11,28 +11,28 @@ using Babushka.scripts.CSharp.Common.Quest;
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public abstract partial class QuestFulfillmentBase : Node
|
public abstract partial class QuestFulfillmentBase : Node
|
||||||
{
|
{
|
||||||
[Export] private QuestResource _onActiveQuest;
|
[Export] private QuestResource _onAvailableQuest = null!;
|
||||||
[Export] private QuestResource _toNextQuest;
|
[Export] private QuestResource _toNextQuest = null!;
|
||||||
|
|
||||||
[Export] private bool _whenFulfilledSetActiveQuestToDone = true;
|
[Export] private bool _whenFulfilledSetAvailableQuestToDone = true;
|
||||||
|
[Export] private bool _whenFulfilledSetNextQuestToAvailable = true;
|
||||||
[Export] private bool _whenFulfilledSetNextQuestToActive = true;
|
[Export] private bool _whenFulfilledSetNextQuestToActive = true;
|
||||||
[Export] private bool _whenFulfilledSetNextQuestToFollow = true;
|
|
||||||
|
|
||||||
[Signal] private delegate void OnFulfilledEventHandler();
|
[Signal] private delegate void OnFulfilledEventHandler();
|
||||||
|
|
||||||
protected void Fulfill()
|
protected void Fulfill()
|
||||||
{
|
{
|
||||||
if (_whenFulfilledSetActiveQuestToDone)
|
if (_whenFulfilledSetAvailableQuestToDone)
|
||||||
{
|
{
|
||||||
QuestManager.Instance!.ChangeQuestStatus(_onActiveQuest, QuestStatus.Status.Done);
|
QuestManager.Instance!.ChangeQuestStatus(_onAvailableQuest, QuestStatus.Status.Done);
|
||||||
|
}
|
||||||
|
if (_whenFulfilledSetNextQuestToAvailable)
|
||||||
|
{
|
||||||
|
QuestManager.Instance!.ChangeQuestStatus(_toNextQuest, QuestStatus.Status.Available);
|
||||||
}
|
}
|
||||||
if (_whenFulfilledSetNextQuestToActive)
|
if (_whenFulfilledSetNextQuestToActive)
|
||||||
{
|
{
|
||||||
QuestManager.Instance!.ChangeQuestStatus(_toNextQuest, QuestStatus.Status.Active);
|
QuestManager.Instance!.SetActiveQuest(_toNextQuest);
|
||||||
}
|
|
||||||
if (_whenFulfilledSetNextQuestToFollow)
|
|
||||||
{
|
|
||||||
QuestManager.Instance!.SetFollowQuest(_toNextQuest);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
EmitSignalOnFulfilled();
|
EmitSignalOnFulfilled();
|
||||||
@@ -40,6 +40,6 @@ public abstract partial class QuestFulfillmentBase : Node
|
|||||||
|
|
||||||
protected bool IsQuestActive()
|
protected bool IsQuestActive()
|
||||||
{
|
{
|
||||||
return QuestManager.Instance!.GetActiveQuests().Any(q => q.Key == _onActiveQuest);
|
return QuestManager.Instance!.GetAvailableQuests().Any(q => q.Key == _onAvailableQuest);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,5 +3,5 @@ class_name DialogicStartSpecific
|
|||||||
|
|
||||||
@export var timeline : String
|
@export var timeline : String
|
||||||
|
|
||||||
func start():
|
func open():
|
||||||
Dialogic.start(timeline)
|
Dialogic.start(timeline)
|
||||||
|
|||||||
Reference in New Issue
Block a user