Implemented first demo quest line #15
@@ -9,7 +9,7 @@ var quest_resource: String
|
||||
func _execute() -> void:
|
||||
var resource = ResourceLoader.load(quest_resource)
|
||||
QuestManager.ChangeQuestStatus(resource,QuestEventUtils.QuestStatus.AVAILABLE)
|
||||
QuestManager.SetFollowQuest(resource)
|
||||
QuestManager.SetActiveQuest(resource)
|
||||
finish() # called to continue with the next event
|
||||
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ var quest_resource: String
|
||||
func _execute() -> void:
|
||||
var resource = ResourceLoader.load(quest_resource)
|
||||
QuestManager.ChangeQuestStatus(resource,QuestEventUtils.QuestStatus.DONE)
|
||||
QuestManager.SetFollowQuest(null)
|
||||
QuestManager.SetActiveQuest(null)
|
||||
finish() # called to continue with the next event
|
||||
|
||||
|
||||
|
||||
@@ -23,9 +23,9 @@ func _execute() -> void:
|
||||
|
||||
var result: bool
|
||||
if compare_status == QuestEventUtils.QuestStatusOrActive.ACTIVE:
|
||||
result = QuestManager.GetFollowQuest() == resource
|
||||
result = QuestManager.GetActiveQuest() == resource
|
||||
elif compare_status == QuestEventUtils.QuestStatusOrActive.NOT_ACTIVE:
|
||||
result = QuestManager.GetFollowQuest() != resource
|
||||
result = QuestManager.GetActiveQuest() != resource
|
||||
else:
|
||||
result = QuestManager.GetQuestStatus(resource).status == compare_status
|
||||
|
||||
|
||||
@@ -2381,17 +2381,17 @@ script = ExtResource("40_w3jkj")
|
||||
script = ExtResource("66_2065p")
|
||||
questResource = ExtResource("67_tm0yg")
|
||||
toStatus = 1
|
||||
makeCurrent = true
|
||||
makeActive = true
|
||||
|
||||
[node name="ToolsCollectedTrigger" type="Node" parent="SpeicialQuestTrigger"]
|
||||
script = ExtResource("68_hux6i")
|
||||
_itemsToContain = Array[Resource]([SubResource("Resource_y820s"), SubResource("Resource_50loj")])
|
||||
_onActiveQuest = ExtResource("68_lbnqo")
|
||||
_onAvailableQuest = ExtResource("68_lbnqo")
|
||||
_toNextQuest = ExtResource("69_l4wxt")
|
||||
|
||||
[node name="FieldWorkTrigger" type="Node" parent="SpeicialQuestTrigger"]
|
||||
script = ExtResource("74_fv1t2")
|
||||
_onActiveQuest = ExtResource("75_l7ekk")
|
||||
_onAvailableQuest = ExtResource("75_l7ekk")
|
||||
_toNextQuest = ExtResource("76_xcwle")
|
||||
|
||||
[node name="StartDialog" type="Node" parent="SpeicialQuestTrigger/FieldWorkTrigger"]
|
||||
|
||||
@@ -2186,7 +2186,7 @@ script = ExtResource("56_bjj0f")
|
||||
script = ExtResource("55_ub0r7")
|
||||
questResource = ExtResource("56_q833x")
|
||||
toStatus = 1
|
||||
makeCurrent = true
|
||||
makeActive = true
|
||||
|
||||
[connection signal="body_entered" from="Fight1/FightStarter/TriggerArea" to="Fight1/FightStarter" method="Start"]
|
||||
[connection signal="FightEnded" from="Fight1/FightBaseScene" to="YSorted/Vesna" method="show"]
|
||||
|
||||
@@ -563,7 +563,7 @@ script = ExtResource("17_k0k8c")
|
||||
script = ExtResource("21_blyw3")
|
||||
questResource = ExtResource("22_yd2gv")
|
||||
toStatus = 1
|
||||
makeCurrent = true
|
||||
makeActive = true
|
||||
|
||||
[node name="Camera2D" type="Camera2D" parent="." node_paths=PackedStringArray("_followNode")]
|
||||
position = Vector2(-1534, -26)
|
||||
|
||||
@@ -18,7 +18,7 @@ text = "Start Quest 1"
|
||||
script = ExtResource("1_wnfrg")
|
||||
questResource = ExtResource("2_nud5h")
|
||||
toStatus = 1
|
||||
makeCurrent = true
|
||||
makeActive = true
|
||||
|
||||
[node name="Button2" type="Button" parent="."]
|
||||
offset_left = 460.0
|
||||
@@ -43,7 +43,7 @@ text = "Start Quest 2"
|
||||
script = ExtResource("1_wnfrg")
|
||||
questResource = ExtResource("3_tb5fn")
|
||||
toStatus = 1
|
||||
makeCurrent = true
|
||||
makeActive = true
|
||||
|
||||
[node name="Button4" type="Button" parent="."]
|
||||
offset_left = 460.0
|
||||
|
||||
@@ -41,7 +41,7 @@ text = "Active"
|
||||
script = ExtResource("3_sx4ix")
|
||||
questResource = ExtResource("4_qyyck")
|
||||
toStatus = 1
|
||||
makeCurrent = true
|
||||
makeActive = true
|
||||
|
||||
[node name="Done" type="Button" parent="CanvasLayer2/VBoxContainer/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -17,10 +17,10 @@ public partial class QuestLog : Control
|
||||
|
||||
public QuestResource? currentDetailQuest
|
||||
{
|
||||
get => QuestManager.Instance!.GetFollowQuest();
|
||||
get => QuestManager.Instance!.GetActiveQuest();
|
||||
set
|
||||
{
|
||||
QuestManager.Instance!.SetFollowQuest(value); // TODO: fix setup
|
||||
QuestManager.Instance!.SetActiveQuest(value); // TODO: fix setup
|
||||
EmitSignalDetailQuestChanged(this);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ public partial class QuestManager : Node
|
||||
public static QuestManager? Instance { get; private set; }
|
||||
|
||||
[Signal]
|
||||
public delegate void QuestBecomesActiveEventHandler(QuestResource questResource);
|
||||
public delegate void QuestBecomesAvailableEventHandler(QuestResource questResource);
|
||||
|
||||
[Signal]
|
||||
public delegate void QuestsChangedEventHandler();
|
||||
@@ -26,7 +26,7 @@ public partial class QuestManager : Node
|
||||
|
||||
private Godot.Collections.Dictionary<QuestResource, QuestStatus> _questStatus = new();
|
||||
|
||||
private QuestResource? _followQuest;
|
||||
private QuestResource? _activeQuest;
|
||||
|
||||
|
||||
public void ChangeQuestStatus(QuestResource questResource, QuestStatus.Status newStatus)
|
||||
@@ -40,11 +40,11 @@ public partial class QuestManager : Node
|
||||
value.status = newStatus;
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
@@ -67,15 +67,15 @@ public partial class QuestManager : Node
|
||||
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();
|
||||
EmitSignalDialogicActiveQuest(_followQuest?.id ?? "none");
|
||||
EmitSignalDialogicActiveQuest(_activeQuest?.id ?? "none");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ public partial class QuestMessagePopup : Control
|
||||
|
||||
private void NewActiveQuest()
|
||||
{
|
||||
var shownQuest = QuestManager.Instance!.GetFollowQuest();
|
||||
var shownQuest = QuestManager.Instance!.GetActiveQuest();
|
||||
if (_currentlyShown == shownQuest)
|
||||
return;
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ public partial class QuestResource : Resource
|
||||
{
|
||||
[Export]
|
||||
public string id = "";
|
||||
[Export]
|
||||
[Export(PropertyHint.MultilineText)]
|
||||
public string title = "";
|
||||
[Export(PropertyHint.MultilineText)]
|
||||
public string description = "";
|
||||
|
||||
@@ -7,7 +7,7 @@ public partial class QuestStatus : GodotObject
|
||||
public enum Status
|
||||
|
Jonathan marked this conversation as resolved
|
||||
{
|
||||
Hidden = 0,
|
||||
Active = 1,
|
||||
Available = 1,
|
||||
Done = 2,
|
||||
Canceled = 3,
|
||||
|
Jonathan marked this conversation as resolved
kziolkowski
commented
Typo: Cancelled Typo: Cancelled
Jonathan
commented
Geht beides. Das eine ist mehr britisch, das andere mehr amerikanisch. https://www.merriam-webster.com/grammar/canceled-or-cancelled Geht beides. Das eine ist mehr britisch, das andere mehr amerikanisch.
https://www.merriam-webster.com/grammar/canceled-or-cancelled
|
||||
}
|
||||
|
||||
@@ -8,15 +8,15 @@ using Godot.Collections;
|
||||
public partial class QuestTestingScript : Node
|
||||
{
|
||||
[Export(PropertyHint.ArrayType)]
|
||||
private Array<QuestResource>? _questsToActivate;
|
||||
private Array<QuestResource>? _questsToMakeAvailable;
|
||||
|
||||
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,30 +4,28 @@ using Babushka.scripts.CSharp.Common.Quest;
|
||||
|
||||
public partial class QuestTrigger : Node
|
||||
{
|
||||
[Export]
|
||||
public QuestResource? questResource;
|
||||
[Export] public QuestResource? questResource;
|
||||
|
||||
[Export]
|
||||
public QuestStatus.Status toStatus;
|
||||
[Export] public QuestStatus.Status toStatus;
|
||||
|
||||
[Export]
|
||||
private bool makeCurrent = false;
|
||||
[Export] private bool makeActive = false;
|
||||
|
||||
public void Trigger()
|
||||
{
|
||||
GD.Print("trigger");
|
||||
|
||||
if(questResource== null)
|
||||
|
||||
if (questResource == null)
|
||||
throw new Exception("QuestResource is not set on QuestTrigger node.");
|
||||
|
||||
if(QuestManager.Instance == null)
|
||||
throw new Exception("QuestManager instance is not available. Make sure it is initialized before calling Trigger.");
|
||||
|
||||
|
||||
if (QuestManager.Instance == null)
|
||||
throw new Exception(
|
||||
"QuestManager instance is not available. Make sure it is initialized before calling Trigger.");
|
||||
|
||||
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>
|
||||
public abstract partial class QuestFulfillmentBase : Node
|
||||
{
|
||||
[Export] private QuestResource _onActiveQuest;
|
||||
[Export] private QuestResource _toNextQuest;
|
||||
[Export] private QuestResource _onAvailableQuest = null!;
|
||||
[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;
|
||||
|
Jonathan marked this conversation as resolved
kziolkowski
commented
Hatten wir uns nicht auf ein anderes Wording geeinigt oder hat es einen Grund, warum es jetzt wieder 'Active' und 'Follow' heißt? Hatten wir uns nicht auf ein anderes Wording geeinigt oder hat es einen Grund, warum es jetzt wieder 'Active' und 'Follow' heißt?
|
||||
[Export] private bool _whenFulfilledSetNextQuestToFollow = true;
|
||||
|
||||
[Signal] private delegate void OnFulfilledEventHandler();
|
||||
|
||||
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)
|
||||
{
|
||||
QuestManager.Instance!.ChangeQuestStatus(_toNextQuest, QuestStatus.Status.Active);
|
||||
}
|
||||
if (_whenFulfilledSetNextQuestToFollow)
|
||||
{
|
||||
QuestManager.Instance!.SetFollowQuest(_toNextQuest);
|
||||
QuestManager.Instance!.SetActiveQuest(_toNextQuest);
|
||||
}
|
||||
|
||||
EmitSignalOnFulfilled();
|
||||
@@ -40,6 +40,6 @@ public abstract partial class QuestFulfillmentBase : Node
|
||||
|
||||
protected bool IsQuestActive()
|
||||
{
|
||||
return QuestManager.Instance!.GetActiveQuests().Any(q => q.Key == _onActiveQuest);
|
||||
return QuestManager.Instance!.GetAvailableQuests().Any(q => q.Key == _onAvailableQuest);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user
Was ist mit 'Available' passiert?