net.dreditor.progressing.handling 0.0.0-stage → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/ChapterTitleDisplayer.cs +42 -0
  2. package/ChapterTitleDisplayer.cs.meta +11 -0
  3. package/DREditor.Progressing.Handling.asmdef +17 -0
  4. package/DREditor.Progressing.Handling.asmdef.meta +7 -0
  5. package/FlagTriggerExtensions.cs +79 -0
  6. package/FlagTriggerExtensions.cs.meta +11 -0
  7. package/FlagTriggerHandler.cs +237 -0
  8. package/FlagTriggerHandler.cs.meta +11 -0
  9. package/FlagTriggerHandlerBase.cs +66 -0
  10. package/FlagTriggerHandlerBase.cs.meta +11 -0
  11. package/HistoricalManagerBase.cs +159 -0
  12. package/HistoricalManagerBase.cs.meta +2 -0
  13. package/IHistory.cs +101 -0
  14. package/IHistory.cs.meta +2 -0
  15. package/ProgressionData.cs +181 -0
  16. package/ProgressionData.cs.meta +11 -0
  17. package/ProgressionDebugger.cs +186 -0
  18. package/ProgressionDebugger.cs.meta +11 -0
  19. package/ProgressionFlagHandler.cs +167 -0
  20. package/ProgressionFlagHandler.cs.meta +11 -0
  21. package/ProgressionHistoryManager.cs +34 -0
  22. package/ProgressionHistoryManager.cs.meta +11 -0
  23. package/ProgressionInfo.cs +54 -0
  24. package/ProgressionInfo.cs.meta +11 -0
  25. package/ProgressionLoader.cs +129 -0
  26. package/ProgressionLoader.cs.meta +11 -0
  27. package/ProgressionManager.cs +286 -0
  28. package/ProgressionManager.cs.meta +11 -0
  29. package/ProgressionManagerBase.cs +132 -0
  30. package/ProgressionManagerBase.cs.meta +11 -0
  31. package/ProgressionSaver.cs +49 -0
  32. package/ProgressionSaver.cs.meta +11 -0
  33. package/Samples/CurrentChapterIndex.asset +21 -0
  34. package/Samples/CurrentChapterIndex.asset.meta +8 -0
  35. package/Samples/CurrentObjectiveIndex.asset +19 -0
  36. package/Samples/CurrentObjectiveIndex.asset.meta +8 -0
  37. package/Samples/CurrentObjectiveName.asset +19 -0
  38. package/Samples/CurrentObjectiveName.asset.meta +8 -0
  39. package/Samples/FlagTriggered.asset +19 -0
  40. package/Samples/FlagTriggered.asset.meta +8 -0
  41. package/Samples/Flag_Trigger_Handler.prefab +194 -0
  42. package/Samples/Flag_Trigger_Handler.prefab.meta +7 -0
  43. package/Samples/LoadProgressionData.asset +14 -0
  44. package/Samples/LoadProgressionData.asset.meta +8 -0
  45. package/Samples/MoveToNextNaturalObjective.asset +14 -0
  46. package/Samples/MoveToNextNaturalObjective.asset.meta +8 -0
  47. package/Samples/MoveToObjective.asset +19 -0
  48. package/Samples/MoveToObjective.asset.meta +8 -0
  49. package/Samples/ObjectiveKeepsInstanceData.asset +19 -0
  50. package/Samples/ObjectiveKeepsInstanceData.asset.meta +8 -0
  51. package/Samples/OnGeneratePastData.asset +14 -0
  52. package/Samples/OnGeneratePastData.asset.meta +8 -0
  53. package/Samples/OnLastObjective.asset +19 -0
  54. package/Samples/OnLastObjective.asset.meta +8 -0
  55. package/Samples/Progression_Debugger.prefab +73 -0
  56. package/Samples/Progression_Debugger.prefab.meta +7 -0
  57. package/Samples/Progression_Flag_Handler.prefab +47 -0
  58. package/Samples/Progression_Flag_Handler.prefab.meta +7 -0
  59. package/Samples/Progression_History_Manager.prefab +107 -0
  60. package/Samples/Progression_History_Manager.prefab.meta +7 -0
  61. package/Samples/Progression_Loader.prefab +76 -0
  62. package/Samples/Progression_Loader.prefab.meta +7 -0
  63. package/Samples/Progression_Manager_ETemplate.prefab +603 -0
  64. package/Samples/Progression_Manager_ETemplate.prefab.meta +7 -0
  65. package/Samples/Progression_Saver.prefab +51 -0
  66. package/Samples/Progression_Saver.prefab.meta +7 -0
  67. package/Samples/RequiredFlagsTriggered.asset +19 -0
  68. package/Samples/RequiredFlagsTriggered.asset.meta +8 -0
  69. package/Samples/TriggerAllRequiredFlags.asset +14 -0
  70. package/Samples/TriggerAllRequiredFlags.asset.meta +8 -0
  71. package/Samples.meta +8 -0
  72. package/package.json +35 -6
  73. package/package.json.meta +7 -0
  74. package/README.md +0 -3
@@ -0,0 +1,34 @@
1
+ //Author: Benjamin "Sweden" Jillson : Discord: sweden_gaming For Project Eden's Garden
2
+ using DREditor.EventObjects;
3
+ using DREditor.Saving;
4
+ using UnityEngine;
5
+ using UnityEngine.Scripting.APIUpdating;
6
+
7
+ namespace DREditor.Progressing.Handling
8
+ {
9
+ /// <summary>
10
+ ///
11
+ /// </summary>
12
+ [ClassHeader(nameof(HistoricalManagerBase<IHistory, ProgressionHistoryManager>) + " SERVICE for type: " + nameof(IHistory) +
13
+ "\n" + nameof(IDRESaveable) + ", " + nameof(IDRELoadableManager) + ", " +
14
+ nameof(IDRELoadable) + ", " + nameof(ILoadOnChapterSelect) +
15
+ "\n\n")]
16
+ [MovedFrom(true, "DREditor.Progression.Handling", "DREditor.Progression.Handling")]
17
+ public class ProgressionHistoryManager : HistoricalManagerBase<IHistory, ProgressionHistoryManager>
18
+ {
19
+ /// <summary>
20
+ ///
21
+ /// </summary>
22
+ [Tooltip("")]
23
+ [SerializeField] protected IntWithEvent currentChapterIndex = null;
24
+
25
+
26
+ /// <inheritdoc/>
27
+ protected override object GetInstanceData()
28
+ {
29
+ historicalData.SetChapterIndex(currentChapterIndex.Value);
30
+
31
+ return base.GetInstanceData();
32
+ }
33
+ }
34
+ }
@@ -0,0 +1,11 @@
1
+ fileFormatVersion: 2
2
+ guid: 6a63ff1dbb51fd34fa4e1eb6822643bd
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -0,0 +1,54 @@
1
+ //Author: Benjamin "Sweden" Jillson : Discord: sweden_gaming For Project Eden's Garden
2
+ using System.Collections.Generic;
3
+ using UnityEngine;
4
+ using UnityEngine.Scripting.APIUpdating;
5
+
6
+ namespace DREditor.Progressing.Handling
7
+ {
8
+ /// <summary>
9
+ ///
10
+ /// </summary>
11
+ [System.Serializable]
12
+ [MovedFrom(true, "DREditor.Progression.Handling", "DREditor.Progression.Handling")]
13
+ public class ProgressionInfo
14
+ {
15
+ /// <summary>
16
+ ///
17
+ /// </summary>
18
+ [Tooltip("")]
19
+ public List<Objective> objectives = new();
20
+
21
+
22
+ /// <summary>
23
+ ///
24
+ /// </summary>
25
+ /// <param name="objectives"></param>
26
+ public virtual void SetObjectiveHistory(List<Objective> objectives) => this.objectives = objectives;
27
+
28
+ /// <summary>
29
+ ///
30
+ /// </summary>
31
+ /// <param name="objective"></param>
32
+ public virtual void Add(Objective objective)
33
+ {
34
+ if (ContainsObjective(objective.Description))
35
+ return;
36
+
37
+ objectives.Add(objective);
38
+ }
39
+
40
+ /// <summary>
41
+ ///
42
+ /// </summary>
43
+ /// <param name="objectiveName"></param>
44
+ /// <returns></returns>
45
+ public virtual bool ContainsObjective(string objectiveName)
46
+ {
47
+ for (int i = 0; i < objectives.Count; i++)
48
+ if (objectives[i].Description == objectiveName)
49
+ return true;
50
+
51
+ return false;
52
+ }
53
+ }
54
+ }
@@ -0,0 +1,11 @@
1
+ fileFormatVersion: 2
2
+ guid: 1b71777b6ad24074aa85f533f150c712
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -0,0 +1,129 @@
1
+ //Author: Benjamin "Sweden" Jillson : Discord: sweden_gaming For Project Eden's Garden
2
+ using DREditor.EventObjects;
3
+ using DREditor.Saving;
4
+ using DREditor.Services;
5
+ using System.Collections.Generic;
6
+ using UnityEngine;
7
+ using UnityEngine.Scripting.APIUpdating;
8
+ using UnityEngine.Serialization;
9
+
10
+ namespace DREditor.Progressing.Handling
11
+ {
12
+ /// <summary>
13
+ ///
14
+ /// </summary>
15
+ [ClassHeader(nameof(SceneEventListener) + ", " + nameof(IDRELoadable) +
16
+ "\n\n")]
17
+ [MovedFrom(true, "DREditor.Progression.Handling", "DREditor.Progression.Handling")]
18
+ public class ProgressionLoader : SceneEventListener, IDRELoadable
19
+ {
20
+ /// <summary>
21
+ ///
22
+ /// </summary>
23
+ [Tooltip("")]
24
+ [FormerlySerializedAs("database")]
25
+ [SerializeField] protected ProgressionDatabase progressionDatabase = null;
26
+
27
+ /// <summary>
28
+ ///
29
+ /// </summary>
30
+ [Tooltip("")]
31
+ [SerializeField] protected IntWithEvent currentChapterIndex = null;
32
+
33
+
34
+ /// <summary>
35
+ ///
36
+ /// </summary>
37
+ [Header("")]
38
+ [Divider]
39
+ [Tooltip("")]
40
+ [SerializeField] protected string chapterKey = "chapter";
41
+
42
+ /// <summary>
43
+ ///
44
+ /// </summary>
45
+ [Tooltip("")]
46
+ [SerializeField] protected string objectiveKey = "CurrentObjective";
47
+
48
+
49
+ /// <summary>
50
+ ///
51
+ /// </summary>
52
+ protected Dictionary<string, object> saveDatas;
53
+
54
+ /// <summary>
55
+ ///
56
+ /// </summary>
57
+ protected ProgressionManagerBase manager = null;
58
+
59
+
60
+
61
+ protected virtual void Start() => manager = ServiceLocator.GetService<ProgressionManagerBase>();
62
+
63
+
64
+ /// <inheritdoc/>
65
+ public virtual void Load(Dictionary<string, object> saveDatas) => this.saveDatas = saveDatas;
66
+
67
+ /// <inheritdoc/>
68
+ protected override void OnResponseInvoked()
69
+ {
70
+ base.OnResponseInvoked();
71
+
72
+ LoadOnSceneEvent();
73
+ }
74
+
75
+ /// <summary>
76
+ ///
77
+ /// </summary>
78
+ protected virtual void LoadOnSceneEvent()
79
+ {
80
+ currentChapterIndex.SetValue(saveDatas.Get<int>(chapterKey));
81
+
82
+ manager.SetCurrentChapter(progressionDatabase.Chapters[currentChapterIndex.Value]);
83
+
84
+
85
+ Objective saveObjective = saveDatas.Get<Objective>(objectiveKey);
86
+
87
+ manager.SetCurrentObjective(saveObjective);
88
+
89
+
90
+ LoadBaseObjective(saveObjective);
91
+ }
92
+
93
+ /// <summary>
94
+ ///
95
+ /// </summary>
96
+ /// <param name="saveObjective"></param>
97
+ protected void LoadBaseObjective(Objective saveObjective)
98
+ {
99
+ Objective baseObjective = progressionDatabase.GetObjective(manager.currentObjective.Description);
100
+
101
+ if (baseObjective == null)
102
+ {
103
+ UnityEngine.Debug.LogWarning($"REPORT: {ToString()}: " +
104
+ $"Attempting to Repair the Objective since it's not found in any chapter.");
105
+
106
+ int finishedObjectives = ServiceLocator.GetService<IHistory>().GetAmountOfFinishedObjectives();
107
+
108
+ baseObjective = progressionDatabase
109
+ .GetObjective(progressionDatabase.Chapters[currentChapterIndex.Value].Objectives[finishedObjectives].Description);
110
+
111
+ manager.ResetCurrentObjective(baseObjective, saveObjective);
112
+ }
113
+ else if (saveObjective.KeepInstanceData != baseObjective.KeepInstanceData || FlagCountUpdated(baseObjective, saveObjective))
114
+ manager.ResetCurrentObjective(baseObjective, saveObjective);
115
+
116
+ if (baseObjective != null && baseObjective.ProgressionGate != null)
117
+ manager.currentObjective.SetProgressionGate(baseObjective.ProgressionGate);
118
+ }
119
+
120
+ /// <summary>
121
+ ///
122
+ /// </summary>
123
+ /// <param name="baseObjective"></param>
124
+ /// <param name="saveObjective"></param>
125
+ /// <returns></returns>
126
+ protected virtual bool FlagCountUpdated(Objective baseObjective, Objective saveObjective) =>
127
+ baseObjective.Description == saveObjective.Description && baseObjective.Flags.Count != saveObjective.Flags.Count;
128
+ }
129
+ }
@@ -0,0 +1,11 @@
1
+ fileFormatVersion: 2
2
+ guid: 55174aafe59ceec42b3c3ed1f36a2684
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -0,0 +1,286 @@
1
+ //Author: Benjamin "Sweden" Jillson : Discord: sweden_gaming For Project Eden's Garden
2
+ using DREditor.EventObjects;
3
+ using DREditor.Services;
4
+ using UnityEngine;
5
+ using UnityEngine.Scripting.APIUpdating;
6
+
7
+ namespace DREditor.Progressing.Handling
8
+ {
9
+ /// <summary>
10
+ ///
11
+ /// </summary>
12
+ [ClassHeader(nameof(ServiceHolder<ProgressionManagerBase>) + " for type: " + nameof(ProgressionManagerBase) +
13
+ "\n\n")]
14
+ [MovedFrom(true, "DREditor.Progression.Handling", "DREditor.Progression.Handling")]
15
+ public class ProgressionManager : ProgressionManagerBase
16
+ {
17
+ /// <summary>
18
+ ///
19
+ /// </summary>
20
+ [Header("")]
21
+ [Divider]
22
+ [Tooltip("")]
23
+ [SerializeField] protected IntWithEvent currentChapterIndex = null;
24
+
25
+ /// <summary>
26
+ ///
27
+ /// </summary>
28
+ [Tooltip("")]
29
+ [SerializeField] protected IntWithEvent currentObjectiveIndex = null;
30
+
31
+ /// <summary>
32
+ ///
33
+ /// </summary>
34
+ [Tooltip("")]
35
+ [SerializeField] protected BoolWithEvent onLastObjective = null;
36
+
37
+ /// <summary>
38
+ ///
39
+ /// </summary>
40
+ [Tooltip("")]
41
+ [SerializeField] protected BoolWithEvent objectiveKeepsInstanceData = null;
42
+
43
+ /// <summary>
44
+ ///
45
+ /// </summary>
46
+ [Tooltip("")]
47
+ [SerializeField] protected BoolWithEvent requiredFlagsTriggered = null;
48
+
49
+ /// <summary>
50
+ ///
51
+ /// </summary>
52
+ [Tooltip("")]
53
+ [SerializeField] protected StringWithEvent currentObjectiveName = null;
54
+
55
+ /// <summary>
56
+ ///
57
+ /// </summary>
58
+ [Tooltip("")]
59
+ [SerializeField] protected StringWithEvent moveToObjective = null;
60
+
61
+ /// <summary>
62
+ ///
63
+ /// </summary>
64
+ [Tooltip("")]
65
+ [SerializeField] protected SceneEventListener newGameSelected = null;
66
+
67
+ /// <summary>
68
+ ///
69
+ /// </summary>
70
+ [Tooltip("")]
71
+ [SerializeField] protected SceneEventListener startedNewGame = null;
72
+
73
+ /// <summary>
74
+ ///
75
+ /// </summary>
76
+ [Tooltip("")]
77
+ [SerializeField] protected SceneEventListener moveToNextNaturalObjective = null;
78
+
79
+
80
+ /// <summary>
81
+ ///
82
+ /// </summary>
83
+ protected virtual void OnEnable() => SubscribeToEvents();
84
+
85
+ /// <summary>
86
+ ///
87
+ /// </summary>
88
+ protected virtual void OnDisable() => UnsubscribeToEvents();
89
+
90
+ /// <summary>
91
+ ///
92
+ /// </summary>
93
+ protected virtual void SubscribeToEvents()
94
+ {
95
+ moveToNextNaturalObjective.Response.AddListener(MoveToNextNaturalObjective);
96
+
97
+ newGameSelected.Response.AddListener(ResetProgression);
98
+
99
+ startedNewGame.Response.AddListener(ResetProgression);
100
+
101
+ moveToObjective.AddListener(MoveToObjective);
102
+
103
+ currentChapterIndex.AddListener(SetCurrentChapterByIndex);
104
+ }
105
+
106
+ /// <summary>
107
+ ///
108
+ /// </summary>
109
+ protected virtual void UnsubscribeToEvents()
110
+ {
111
+ moveToNextNaturalObjective.Response.RemoveListener(MoveToNextNaturalObjective);
112
+
113
+ newGameSelected.Response.RemoveListener(ResetProgression);
114
+
115
+ startedNewGame.Response.RemoveListener(ResetProgression);
116
+
117
+ moveToObjective.RemoveListener(MoveToObjective);
118
+
119
+ currentChapterIndex.RemoveListener(SetCurrentChapterByIndex);
120
+ }
121
+
122
+ /// <summary>
123
+ ///
124
+ /// </summary>
125
+ /// <param name="index"></param>
126
+ /// <remarks>
127
+ ///
128
+ /// </remarks>
129
+ protected virtual void SetCurrentChapterByIndex(int index) => SetCurrentChapter(progressionDatabase.Chapters[index]);
130
+
131
+ /// <inheritdoc/>
132
+ public override bool PassedPoint(int chapter, string objectiveName)
133
+ {
134
+ if (currentChapterIndex.Value > chapter)
135
+ return true;
136
+
137
+ if (currentChapterIndex.Value < chapter)
138
+ return false;
139
+
140
+ return ServiceLocator.GetService<IHistory>().ContainsObjective(objectiveName);
141
+ }
142
+
143
+ /// <inheritdoc/>
144
+ public override void SetCurrentChapter(Chapter chapter)
145
+ {
146
+ base.SetCurrentChapter(chapter);
147
+
148
+ currentChapterIndex.SetValue(progressionDatabase.Chapters.IndexOf(chapter));
149
+
150
+ UnityEngine.Debug.Log($"REPORT: {nameof(ProgressionManager)}: The Chapter index has changed to {chapter}.");
151
+ }
152
+
153
+ /// <inheritdoc/>
154
+ public override void SetCurrentObjective(Objective objective)
155
+ {
156
+ base.SetCurrentObjective(objective);
157
+
158
+ bool isFinalObjective = currentObjective.Description == currentChapter.Objectives[^1].Description;
159
+
160
+ onLastObjective.SetValue(isFinalObjective);
161
+
162
+ currentObjectiveIndex.SetValue(currentChapter.Objectives.IndexOf(currentObjective));
163
+
164
+ currentObjectiveName.SetValue(currentObjective.Description);
165
+
166
+ objectiveKeepsInstanceData.SetValue(progressionDatabase.GetObjective(currentObjective.Description).KeepInstanceData);
167
+
168
+ requiredFlagsTriggered.SetValue(false);
169
+ }
170
+
171
+ /// <summary>
172
+ ///
173
+ /// </summary>
174
+ protected virtual void ResetProgression()
175
+ {
176
+ SetCurrentChapter(progressionDatabase.Chapters[0]);
177
+
178
+ currentChapterIndex.SetValue(0);
179
+
180
+ SetCurrentObjective((Objective)currentChapter.Objectives[0].Clone());
181
+
182
+ ServiceLocator.GetService<IHistory>().Clear();
183
+
184
+ UnityEngine.Debug.Log($"REPORT: {nameof(ProgressionManager)}: Progression Reset.");
185
+ }
186
+
187
+ /// <summary>
188
+ ///
189
+ /// </summary>
190
+ /// <param name="objective"></param>
191
+ /// <returns></returns>
192
+ protected virtual Objective GetNextObjective(Objective objective)
193
+ {
194
+ for (int i = 0; i < currentChapter.Objectives.Count; i++)
195
+ {
196
+ Objective iteratedObjective = currentChapter.Objectives[i];
197
+
198
+ if (iteratedObjective.Description == objective.Description)
199
+ {
200
+ if (i + 1 < currentChapter.Objectives.Count)
201
+ return currentChapter.Objectives[i + 1];
202
+ else
203
+ {
204
+ MoveToNextChapter();
205
+
206
+ return currentChapter.Objectives[0];
207
+ }
208
+ }
209
+ }
210
+
211
+ UnityEngine.Debug.Log($"REPORT: {ToString()}: GetNextObjective Evaluated Null");
212
+
213
+ return null;
214
+ }
215
+
216
+ /// <summary>
217
+ ///
218
+ /// </summary>
219
+ protected virtual void MoveToNextChapter()
220
+ {
221
+ for (int i = 0; i < progressionDatabase.Chapters.Count; i++)
222
+ if (progressionDatabase.Chapters[i] == currentChapter && (i + 1) < progressionDatabase.Chapters.Count)
223
+ SetCurrentChapter(progressionDatabase.Chapters[i + 1]);
224
+ }
225
+
226
+ /// <summary>
227
+ ///
228
+ /// </summary>
229
+ /// <param name="objectiveName"></param>
230
+ protected virtual void MoveToObjective(string objectiveName)
231
+ {
232
+ if (string.IsNullOrEmpty(objectiveName))
233
+ return;
234
+
235
+ ServiceLocator.GetService<IHistory>().Add(currentChapterIndex.Value, currentObjective);
236
+
237
+ Objective objective = progressionDatabase.GetObjective(objectiveName);
238
+
239
+ if (objective == null)
240
+ {
241
+ UnityEngine.Debug.LogError($"ALERT: {ToString()}: " +
242
+ $"The Move to Objective called name does not match any valid objectives, " +
243
+ $"for: " + objectiveName + " . Please make sure the string is spelled correctly and has correct case.");
244
+
245
+ return;
246
+ }
247
+ else
248
+ {
249
+ ServiceLocator.GetService<IHistory>().SetPreviousObjective((Objective)currentObjective.Clone());
250
+
251
+ SetCurrentObjective((Objective)objective.Clone());
252
+ }
253
+ }
254
+
255
+ /// <summary>
256
+ ///
257
+ /// </summary>
258
+ protected virtual void MoveToNextNaturalObjective()
259
+ {
260
+ bool isFTEObjective = currentChapter.GetObjective(currentObjective.Description) == null;
261
+
262
+ if (isFTEObjective)
263
+ SetCurrentObjective((Objective)GetNextObjective(ServiceLocator.GetService<IHistory>().GetLastObjective()).Clone());
264
+ else
265
+ ChangeObjective();
266
+ }
267
+
268
+ /// <summary>
269
+ ///
270
+ /// </summary>
271
+ protected virtual void ChangeObjective()
272
+ {
273
+ UnityEngine.Debug.Log($"REPORT: {nameof(ProgressionManager)}: Changing objective from current objective: "
274
+ + currentObjective.Description);
275
+
276
+ ServiceLocator.GetService<IHistory>().Add(currentChapterIndex.Value, currentObjective);
277
+
278
+ string overrideFlagObjectiveName = currentObjective.GetOverrideFlag();
279
+
280
+ if (!string.IsNullOrEmpty(overrideFlagObjectiveName))
281
+ SetCurrentObjective((Objective)progressionDatabase.GetObjective(overrideFlagObjectiveName).Clone());
282
+ else
283
+ SetCurrentObjective((Objective)GetNextObjective(currentObjective).Clone());
284
+ }
285
+ }
286
+ }
@@ -0,0 +1,11 @@
1
+ fileFormatVersion: 2
2
+ guid: 5847fb198f3b4344abce3a75ffe46903
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -0,0 +1,132 @@
1
+ //Author: Benjamin "Sweden" Jillson : Discord: sweden_gaming For Project Eden's Garden
2
+ using DREditor.Services;
3
+ using UnityEngine;
4
+ using UnityEngine.Scripting.APIUpdating;
5
+ using UnityEngine.Serialization;
6
+
7
+ namespace DREditor.Progressing.Handling
8
+ {
9
+ /// <summary>
10
+ ///
11
+ /// </summary>
12
+ [MovedFrom(true, "DREditor.Progression.Handling", "DREditor.Progression.Handling")]
13
+ public abstract class ProgressionManagerBase : ServiceHolder<ProgressionManagerBase>
14
+ {
15
+ /// <summary>
16
+ ///
17
+ /// </summary>
18
+ [Tooltip("")]
19
+ [FormerlySerializedAs("database")]
20
+ [SerializeField] protected ProgressionDatabase progressionDatabase = null;
21
+
22
+
23
+ /// <summary>
24
+ ///
25
+ /// </summary>
26
+ [Header("")]
27
+ [Divider]
28
+ [Tooltip("")]
29
+ [SerializeField] protected Chapter currentChapter = null;
30
+
31
+ /// <summary>
32
+ ///
33
+ /// </summary>
34
+ [Tooltip("")]
35
+ public Objective currentObjective = null;
36
+
37
+
38
+ /// <summary>
39
+ ///
40
+ /// </summary>
41
+ protected virtual void Start()
42
+ {
43
+ InitializeCurrentChapter();
44
+
45
+ CleanChapterAsset();
46
+ }
47
+
48
+ /// <summary>
49
+ ///
50
+ /// </summary>
51
+ protected virtual void InitializeCurrentChapter()
52
+ {
53
+ if (CurrentChapterCanBeAssigned())
54
+ currentChapter = progressionDatabase.Chapters[0];
55
+ else
56
+ UnityEngine.Debug.LogError("ALERT: You must have a valid progression database with a chapter and objective assigned!");
57
+ }
58
+
59
+ /// <summary>
60
+ ///
61
+ /// </summary>
62
+ /// <returns></returns>
63
+ protected virtual bool CurrentChapterCanBeAssigned() =>
64
+ progressionDatabase != null && progressionDatabase.Chapters.Count > 0 && progressionDatabase.Chapters[0] != null && currentChapter == null;
65
+
66
+ /// <summary>
67
+ ///
68
+ /// </summary>
69
+ protected virtual void CleanChapterAsset()
70
+ {
71
+ if (currentChapter == null)
72
+ return;
73
+
74
+ foreach (Objective objective in currentChapter.Objectives)
75
+ foreach (ProgressionFlag flag in objective.Flags)
76
+ flag.SetTriggered(false);
77
+ }
78
+
79
+ /// <summary>
80
+ ///
81
+ /// </summary>
82
+ /// <returns></returns>
83
+ public virtual Chapter GetCurrentChapter() => currentChapter;
84
+
85
+ /// <summary>
86
+ ///
87
+ /// </summary>
88
+ /// <param name="chapter"></param>
89
+ /// <param name="objectiveName"></param>
90
+ /// <returns></returns>
91
+ public abstract bool PassedPoint(int chapter, string objectiveName);
92
+
93
+ /// <summary>
94
+ ///
95
+ /// </summary>
96
+ /// <param name="chapter"></param>
97
+ public virtual void SetCurrentChapter(Chapter chapter) => currentChapter = chapter;
98
+
99
+ /// <summary>
100
+ ///
101
+ /// </summary>
102
+ /// <param name="objective"></param>
103
+ /// <remarks>
104
+ ///
105
+ /// </remarks>
106
+ public virtual void SetCurrentObjective(Objective objective) => currentObjective = (Objective)objective.Clone();
107
+
108
+ /// <summary>
109
+ ///
110
+ /// </summary>
111
+ /// <param name="baseObjective"></param>
112
+ /// <param name="saveObjective"></param>
113
+ /// <remarks></remarks>
114
+ public virtual void ResetCurrentObjective(Objective baseObjective, Objective saveObjective)
115
+ {
116
+ SetCurrentObjective((Objective)baseObjective.Clone());
117
+
118
+ CopyFlagTriggers(saveObjective);
119
+ }
120
+
121
+ /// <summary>
122
+ ///
123
+ /// </summary>
124
+ /// <param name="saveObjective"></param>
125
+ /// <remarks></remarks>
126
+ protected virtual void CopyFlagTriggers(Objective saveObjective)
127
+ {
128
+ for (int i = 0; i < saveObjective.Flags.Count && i < currentObjective.Flags.Count; i++)
129
+ currentObjective.Flags[i].SetTriggered(saveObjective.Flags[i].triggered);
130
+ }
131
+ }
132
+ }