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,42 @@
1
+ //Author: Benjamin "Sweden" Jillson : Discord: sweden_gaming For Project Eden's Garden
2
+ using DREditor.EventObjects;
3
+ using DREditor.Services;
4
+ using TMPro;
5
+ using UnityEngine;
6
+ using UnityEngine.Scripting.APIUpdating;
7
+
8
+ namespace DREditor.Progressing.Handling
9
+ {
10
+ /// <summary>
11
+ ///
12
+ /// </summary>
13
+ [ClassHeader("")]
14
+ [MovedFrom(true, "DREditor.Progression.Handling", "DREditor.Progression.Handling")]
15
+ public class ChapterTitleDisplayer : MonoBehaviour
16
+ {
17
+ /// <summary>
18
+ ///
19
+ /// </summary>
20
+ [Tooltip("")]
21
+ [SerializeField] protected IntWithEvent currentChapterIndex = null;
22
+
23
+ /// <summary>
24
+ ///
25
+ /// </summary>
26
+ [Tooltip("")]
27
+ [SerializeField] protected TextMeshProUGUI title = null;
28
+
29
+
30
+ protected virtual void OnEnable() => currentChapterIndex.AddListener(UpdateTitle);
31
+
32
+ protected virtual void OnDisable() => currentChapterIndex.RemoveListener(UpdateTitle);
33
+
34
+ protected virtual void Start() => UpdateTitle();
35
+
36
+ /// <summary>
37
+ ///
38
+ /// </summary>
39
+ protected virtual void UpdateTitle(int index = 0)
40
+ => title.text = ServiceLocator.GetService<ProgressionManagerBase>().GetCurrentChapter().title;
41
+ }
42
+ }
@@ -0,0 +1,11 @@
1
+ fileFormatVersion: 2
2
+ guid: 31435d5523cb8a6459c9ed475148077f
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,17 @@
1
+ {
2
+ "name": "DREditor.Progressing.Handling",
3
+ "rootNamespace": "",
4
+ "references": [
5
+ "Unity.TextMeshPro",
6
+ "DREditor"
7
+ ],
8
+ "includePlatforms": [],
9
+ "excludePlatforms": [],
10
+ "allowUnsafeCode": false,
11
+ "overrideReferences": false,
12
+ "precompiledReferences": [],
13
+ "autoReferenced": true,
14
+ "defineConstraints": [],
15
+ "versionDefines": [],
16
+ "noEngineReferences": false
17
+ }
@@ -0,0 +1,7 @@
1
+ fileFormatVersion: 2
2
+ guid: ad666efc806c0494b8de19a3eac53e09
3
+ AssemblyDefinitionImporter:
4
+ externalObjects: {}
5
+ userData:
6
+ assetBundleName:
7
+ assetBundleVariant:
@@ -0,0 +1,79 @@
1
+ //Author: Benjamin "Sweden" Jillson : Discord: sweden_gaming For Project Eden's Garden
2
+ using DREditor.Dialogues;
3
+ using DREditor.Services;
4
+ using UnityEngine.Scripting.APIUpdating;
5
+
6
+ namespace DREditor.Progressing.Handling
7
+ {
8
+ /// <summary>
9
+ ///
10
+ /// </summary>
11
+ [MovedFrom(true, "DREditor.Progression.Handling", "DREditor.Progression.Handling")]
12
+ public static class FlagTriggerExtensions
13
+ {
14
+ // If Particle Progression is working normally this code can be deleted.
15
+ //public static bool ContainsFlagTriggerFor(this Dialogue dialogue, int chap, int objName)
16
+ //{
17
+ // if (dialogue.FlagTrigger != null &&
18
+ // dialogue.FlagTrigger.Enabled &&
19
+ // dialogue.FlagTrigger.Objective == objName &&
20
+ // dialogue.FlagTrigger.Chapter == chap)
21
+ // return true;
22
+ // else if (dialogue != null && dialogue.DirectTo != null && dialogue.DirectTo.Enabled)
23
+ // return dialogue.DirectTo.NewDialogue.ContainsFlagTriggerFor(chap, objName);
24
+
25
+ // return false;
26
+ //}
27
+
28
+ /// <summary>
29
+ ///
30
+ /// </summary>
31
+ /// <param name="dialogue"></param>
32
+ /// <returns></returns>
33
+ public static bool HasUnTriggeredRequiredFlags<T>(this DialogueBase<T> dialogue)
34
+ {
35
+ if (dialogue != null && dialogue.FlagTrigger != null && dialogue.FlagTrigger.Enabled)
36
+ foreach (var index in dialogue.FlagTrigger.Flags)
37
+ if (HasUnTriggeredRequiredFlag(dialogue, index))
38
+ return true;
39
+
40
+ return false;
41
+ }
42
+
43
+ /// <summary>
44
+ ///
45
+ /// </summary>
46
+ /// <param name="dialogue"></param>
47
+ /// <param name="index"></param>
48
+ /// <returns></returns>
49
+ public static bool HasUnTriggeredRequiredFlag<T>(DialogueBase<T> dialogue, int index)
50
+ {
51
+ if (!dialogue.FlagTrigger.FlagIsOptional(index) && !dialogue.FlagTrigger.FlagHasBeenTriggered(index))
52
+ return true;
53
+ else if (dialogue.DirectTo != null && dialogue.DirectTo.Enabled)
54
+ return dialogue.DirectTo.NewDialogue.HasUnTriggeredRequiredFlags();
55
+
56
+ return false;
57
+ }
58
+
59
+ /// <summary>
60
+ ///
61
+ /// </summary>
62
+ /// <param name="trigger"></param>
63
+ /// <param name="flagIndex"></param>
64
+ /// <returns></returns>
65
+ public static bool FlagHasBeenTriggered(this TriggerFlag trigger, int flagIndex)
66
+ => ServiceLocator.GetService<FlagTriggerHandlerBase>()
67
+ .GetFlagFromIndexes(trigger.Chapter, trigger.Objective, flagIndex).triggered;
68
+
69
+ /// <summary>
70
+ ///
71
+ /// </summary>
72
+ /// <param name="trigger"></param>
73
+ /// <param name="flagIndex"></param>
74
+ /// <returns></returns>
75
+ public static bool FlagIsOptional(this TriggerFlag trigger, int flagIndex)
76
+ => ServiceLocator.GetService<FlagTriggerHandlerBase>()
77
+ .GetFlagFromIndexes(trigger.Chapter, trigger.Objective, flagIndex).optional;
78
+ }
79
+ }
@@ -0,0 +1,11 @@
1
+ fileFormatVersion: 2
2
+ guid: 78bc4969706a5654798c138c13bb09a1
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,237 @@
1
+ //Author: Benjamin "Sweden" Jillson : Discord: sweden_gaming For Project Eden's Garden
2
+ using DREditor.EventObjects;
3
+ using DREditor.Services;
4
+ using System;
5
+ using System.Collections;
6
+ using System.Collections.Generic;
7
+ using UnityEngine;
8
+ using UnityEngine.Scripting.APIUpdating;
9
+ using UnityEngine.Serialization;
10
+
11
+ namespace DREditor.Progressing.Handling
12
+ {
13
+ /// <summary>
14
+ ///
15
+ /// </summary>
16
+ [ClassHeader(nameof(FlagTriggerHandlerBase) +
17
+ "\n\n")]
18
+ [MovedFrom(true, "DREditor.Progression.Handling", "DREditor.Progression.Handling")]
19
+ public class FlagTriggerHandler : FlagTriggerHandlerBase
20
+ {
21
+ /// <summary>
22
+ ///
23
+ /// </summary>
24
+ [Tooltip("")]
25
+ [FormerlySerializedAs("database")]
26
+ [SerializeField] protected ProgressionDatabase progressionDatabase = null;
27
+
28
+ /// <summary>
29
+ ///
30
+ /// </summary>
31
+ [Tooltip("")]
32
+ [SerializeField] protected ProgressionFlagHandler flagHandler = null;
33
+
34
+ /// <summary>
35
+ ///
36
+ /// </summary>
37
+ [Tooltip("")]
38
+ [SerializeField] protected IntWithEvent currentChapterIndex = null;
39
+
40
+ /// <summary>
41
+ ///
42
+ /// </summary>
43
+ [Tooltip("")]
44
+ [SerializeField] protected StringWithEvent flagTriggered = null;
45
+
46
+ /// <summary>
47
+ ///
48
+ /// </summary>
49
+ [Tooltip("")]
50
+ [SerializeField] protected BoolWithEvent requiredFlagsTriggered = null;
51
+
52
+ /// <summary>
53
+ ///
54
+ /// </summary>
55
+ [Tooltip("")]
56
+ [SerializeField] protected SceneEventListener loadProgressionData = null;
57
+
58
+
59
+ /// <summary>
60
+ ///
61
+ /// </summary>
62
+ protected ProgressionManagerBase manager = null;
63
+
64
+ protected virtual void OnEnable() => loadProgressionData.Response.AddListener(Load);
65
+
66
+ protected virtual void OnDisable() => loadProgressionData.Response.RemoveListener(Load);
67
+
68
+ /// <summary>
69
+ ///
70
+ /// </summary>
71
+ protected virtual void Load() => StartCoroutine(DelayLoad());
72
+
73
+ /// <summary>
74
+ ///
75
+ /// </summary>
76
+ /// <remarks>
77
+ ///
78
+ /// </remarks>
79
+ protected virtual IEnumerator DelayLoad()
80
+ {
81
+ yield return null;
82
+
83
+ requiredFlagsTriggered.SetValue(CompletedRequiredFlags());
84
+ }
85
+
86
+
87
+ protected virtual void Start() => manager = ServiceLocator.GetService<ProgressionManagerBase>();
88
+
89
+ /// <inheritdoc/>
90
+ public override void TriggerFlag(int chapterIndex, int objectiveIndex, List<int> flagIndexes)
91
+ {
92
+ try
93
+ {
94
+ bool onCurrentChapter = chapterIndex == currentChapterIndex.Value;
95
+
96
+ Objective targetObjective = progressionDatabase.Chapters[chapterIndex].Objectives[objectiveIndex];
97
+
98
+ bool targetIsCurrentObjective = targetObjective.Description == manager.currentObjective.Description;
99
+
100
+ if (onCurrentChapter && targetIsCurrentObjective)
101
+ TriggerFlagsInCurrentObjective(flagIndexes);
102
+ else
103
+ TriggerFlagsInHistory(chapterIndex, objectiveIndex, flagIndexes);
104
+ }
105
+ catch (Exception exception)
106
+ {
107
+ UnityEngine.Debug.LogWarning("ALERT: A CRITICAL ERROR HAS OCCURED TRIGGERING A PROGRESSION FLAG " +
108
+ "\n PLEASE CHECK THE DIALOGUE ASSET TO FIX OR FIND THE ISSUE.");
109
+
110
+ UnityEngine.Debug.LogWarning(exception);
111
+ }
112
+ }
113
+
114
+ public override void TriggerFlag(List<int> flagIndexes)
115
+ {
116
+ var activeObjective = progressionDatabase.Chapters[currentChapterIndex.Value].GetObjective(manager.currentObjective.Description);
117
+
118
+ int objectiveIndex = progressionDatabase.Chapters[currentChapterIndex.Value].Objectives.IndexOf(activeObjective);
119
+
120
+ TriggerFlag(currentChapterIndex.Value, objectiveIndex, flagIndexes);
121
+ }
122
+
123
+ /// <summary>
124
+ ///
125
+ /// </summary>
126
+ /// <param name="flagIndexes"></param>
127
+ protected virtual void TriggerFlagsInCurrentObjective(List<int> flagIndexes)
128
+ {
129
+ Objective objective = manager.currentObjective;
130
+
131
+ for (int i = 0; i < flagIndexes.Count; i++)
132
+ {
133
+ if (flagIndexes[i] > objective.Flags.Count)
134
+ {
135
+ flagHandler.RepairObjective(ref manager.currentObjective);
136
+
137
+ objective = manager.currentObjective;
138
+ }
139
+
140
+ objective.Flags[flagIndexes[i]].SetTriggered(true);
141
+
142
+ flagTriggered.SetValue(objective.Flags[flagIndexes[i]].name);
143
+
144
+ requiredFlagsTriggered.SetValue(CompletedRequiredFlags());
145
+ }
146
+ }
147
+
148
+ /// <summary>
149
+ ///
150
+ /// </summary>
151
+ /// <param name="chapterIndex"></param>
152
+ /// <param name="objectiveIndex"></param>
153
+ /// <param name="flagIndexes"></param>
154
+ protected virtual void TriggerFlagsInHistory(int chapterIndex, int objectiveIndex, List<int> flagIndexes)
155
+ {
156
+ Objective targetObjective = progressionDatabase.Chapters[chapterIndex].Objectives[objectiveIndex];
157
+
158
+ for (int i = 0; i < flagIndexes.Count; i++)
159
+ flagHandler.GetFlag(targetObjective.Flags[flagIndexes[i]].name, targetObjective).SetTriggered(true);
160
+ }
161
+
162
+ /// <inheritdoc/>
163
+ public override bool IsFlagTriggered(string flagName) => flagHandler.GetFlag(flagName, manager.currentObjective).triggered;
164
+
165
+ /// <inheritdoc/>
166
+ public override bool EvaluateVariable(int chapter, int objective, List<int> flags, List<int> falseFlags = null)
167
+ {
168
+ bool checkingCurrentObjective =
169
+ progressionDatabase.Chapters[chapter].Objectives[objective].Description == manager.currentObjective.Description;
170
+
171
+ Objective evaluateObjective = checkingCurrentObjective ?
172
+ manager.currentObjective : ServiceLocator.GetService<IHistory>().GetHistoryObjective(chapter, objective);
173
+
174
+ return EvaluateVariableFlags(evaluateObjective, flags, falseFlags);
175
+ }
176
+
177
+ /// <summary>
178
+ ///
179
+ /// </summary>
180
+ /// <param name="objective"></param>
181
+ /// <param name="flags"></param>
182
+ /// <param name="falseFlags"></param>
183
+ /// <returns></returns>
184
+ protected virtual bool EvaluateVariableFlags(Objective objective, List<int> flags, List<int> falseFlags = null)
185
+ {
186
+ for (int i = 0; i < flags.Count; i++)
187
+ if (!objective.Flags[flags[i]].triggered)
188
+ return false;
189
+
190
+ if (falseFlags != null)
191
+ for (int i = 0; i < falseFlags.Count; i++)
192
+ if (objective.Flags[falseFlags[i]].triggered)
193
+ return false;
194
+
195
+ return true;
196
+ }
197
+
198
+ /// <inheritdoc/>
199
+ public override void TriggerAllRequiredFlags()
200
+ {
201
+ List<int> flagIndexes = new();
202
+
203
+ for (int i = 0; i < manager.currentObjective.Flags.Count; i++)
204
+ if (!manager.currentObjective.Flags[i].optional && !manager.currentObjective.Flags[i].triggered)
205
+ flagIndexes.Add(i);
206
+
207
+ TriggerFlag(flagIndexes);
208
+ }
209
+
210
+ /// <inheritdoc/>
211
+ protected override bool CompletedRequiredFlags()
212
+ {
213
+ int check = 0;
214
+
215
+ foreach (ProgressionFlag flag in manager.currentObjective.Flags)
216
+ if (flag.triggered && !flag.optional)
217
+ check++;
218
+
219
+ return check == manager.currentObjective.GetRequiredFlagCount();
220
+ }
221
+
222
+ /// <inheritdoc/>
223
+ public override ProgressionFlag GetFlagFromIndexes(int chapter, int objective, int flag)
224
+ {
225
+ bool onCurrentChapter = chapter == currentChapterIndex.Value;
226
+
227
+ string sentObjectiveName = progressionDatabase.Chapters[currentChapterIndex.Value].Objectives[objective].Description;
228
+
229
+ bool onCurrentObjective = sentObjectiveName == manager.currentObjective.Description;
230
+
231
+ if (onCurrentChapter && onCurrentObjective)
232
+ return manager.currentObjective.Flags[flag];
233
+ else
234
+ return ServiceLocator.GetService<IHistory>().GetFlagFromIndexes(chapter, objective, flag);
235
+ }
236
+ }
237
+ }
@@ -0,0 +1,11 @@
1
+ fileFormatVersion: 2
2
+ guid: 06bf5abf1420c094487f9bde160bca49
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,66 @@
1
+ //Author: Benjamin "Sweden" Jillson : Discord: sweden_gaming For Project Eden's Garden
2
+ using DREditor.Services;
3
+ using System.Collections.Generic;
4
+ using UnityEngine.Scripting.APIUpdating;
5
+
6
+ namespace DREditor.Progressing.Handling
7
+ {
8
+ /// <summary>
9
+ ///
10
+ /// </summary>
11
+ [MovedFrom(true, "DREditor.Progression.Handling", "DREditor.Progression.Handling")]
12
+ public abstract class FlagTriggerHandlerBase : ServiceHolder<FlagTriggerHandlerBase>
13
+ {
14
+ /// <summary>
15
+ ///
16
+ /// </summary>
17
+ /// <param name="chapterIndex"></param>
18
+ /// <param name="objectiveIndex"></param>
19
+ /// <param name="flagIndexes"></param>
20
+ public abstract void TriggerFlag(int chapterIndex, int objectiveIndex, List<int> flagIndexes);
21
+
22
+ /// <summary>
23
+ ///
24
+ /// </summary>
25
+ /// <param name="flagIndexes"></param>
26
+ public abstract void TriggerFlag(List<int> flagIndexes);
27
+
28
+ /// <summary>
29
+ ///
30
+ /// </summary>
31
+ /// <param name="flagName"></param>
32
+ /// <returns></returns>
33
+ public abstract bool IsFlagTriggered(string flagName);
34
+
35
+ /// <summary>
36
+ ///
37
+ /// </summary>
38
+ /// <param name="chapter"></param>
39
+ /// <param name="objective"></param>
40
+ /// <param name="flags"></param>
41
+ /// <param name="falseFlags"></param>
42
+ /// <returns></returns>
43
+ public abstract bool EvaluateVariable(int chapter, int objective, List<int> flags, List<int> falseFlags = null);
44
+
45
+ /// <summary>
46
+ ///
47
+ /// </summary>
48
+ /// <returns></returns>
49
+ protected abstract bool CompletedRequiredFlags();
50
+
51
+ /// <summary>
52
+ ///
53
+ /// </summary>
54
+ /// <param name="chapter"></param>
55
+ /// <param name="objective"></param>
56
+ /// <param name="flag"></param>
57
+ /// <returns></returns>
58
+ public abstract ProgressionFlag GetFlagFromIndexes(int chapter, int objective, int flag);
59
+
60
+ /// <summary>
61
+ ///
62
+ /// </summary>
63
+ /// <remarks></remarks>
64
+ public abstract void TriggerAllRequiredFlags();
65
+ }
66
+ }
@@ -0,0 +1,11 @@
1
+ fileFormatVersion: 2
2
+ guid: 9a1e2d255b9f44b45b88dd255e4f62ca
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,159 @@
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 DREditor.Utility;
6
+ using System.Collections.Generic;
7
+ using UnityEngine;
8
+ using UnityEngine.Scripting.APIUpdating;
9
+
10
+ namespace DREditor.Progressing.Handling
11
+ {
12
+ /// <summary>
13
+ ///
14
+ /// </summary>
15
+ [MovedFrom(true, "DREditor.Progression.Handling", "DREditor.Progression.Handling")]
16
+ public abstract class HistoricalManagerBase<T, T2> : ServiceHolder<T2>,
17
+ IDRESaveable, IDRELoadableManager, IDRELoadable, ILoadOnChapterSelect
18
+ where T2 : class
19
+ {
20
+ /// <summary>
21
+ ///
22
+ /// </summary>
23
+ [Header("")]
24
+ [Divider]
25
+ [Tooltip("")]
26
+ [SerializeField] protected SceneEventListener loadProgressionData = null;
27
+
28
+ /// <summary>
29
+ ///
30
+ /// </summary>
31
+ [Tooltip("")]
32
+ [SerializeField] protected SceneEventListener newGameSelected = null;
33
+
34
+
35
+ /// <summary>
36
+ ///
37
+ /// </summary>
38
+ [Header("")]
39
+ [Divider]
40
+ [Tooltip("")]
41
+ [SerializeField] protected string progressionKey = "ProgressionData";
42
+
43
+ /// <summary>
44
+ ///
45
+ /// </summary>
46
+ [Tooltip("")]
47
+ [SelectType]
48
+ [SerializeReference] protected T historicalData;
49
+
50
+
51
+ /// <summary>
52
+ ///
53
+ /// </summary>
54
+ protected Dictionary<string, object> saveDatas;
55
+
56
+
57
+ protected override void InitializeService()
58
+ {
59
+ base.InitializeService();
60
+
61
+ if (ServiceLocator.HasService(out T2 activeManager) && this as T2 == activeManager)
62
+ ServiceLocator.Register<T>(historicalData);
63
+ }
64
+
65
+ protected override void OnDestroy()
66
+ {
67
+ base.OnDestroy();
68
+
69
+ if (ServiceLocator.HasService(out T activeHistory) && activeHistory.Equals(historicalData))
70
+ ServiceLocator.Unregister<T>(historicalData);
71
+ }
72
+
73
+
74
+ public virtual void Load(Dictionary<string, object> saveDatas) => this.saveDatas = saveDatas;
75
+
76
+
77
+ protected virtual void OnEnable()
78
+ {
79
+ loadProgressionData.AddListener(OnLoadProgressionDataInvoked);
80
+
81
+ newGameSelected.AddListener(OnNewGameSelected);
82
+ }
83
+
84
+ protected virtual void OnDisable()
85
+ {
86
+ loadProgressionData.RemoveListener(OnLoadProgressionDataInvoked);
87
+
88
+ newGameSelected.RemoveListener(OnNewGameSelected);
89
+ }
90
+
91
+ /// <summary>
92
+ ///
93
+ /// </summary>
94
+ protected virtual void OnLoadProgressionDataInvoked() => LoadRegisterData(GetSaveData(saveDatas));
95
+
96
+ /// <summary>
97
+ ///
98
+ /// </summary>
99
+ /// <returns></returns>
100
+ protected virtual T GetSaveData(Dictionary<string, object> saveDatas) =>
101
+ (T)saveDatas.GetGeneric(progressionKey, historicalData.GetType());
102
+
103
+ /// <summary>
104
+ ///
105
+ /// </summary>
106
+ protected virtual void OnNewGameSelected()
107
+ {
108
+ if (ServiceLocator.GetService<T>() is IClearableOnNewGameSelected clearable)
109
+ clearable?.Clear();
110
+ }
111
+
112
+
113
+ public virtual void Save(Dictionary<string, object> saveDatas) =>
114
+ saveDatas.Set(progressionKey, GetInstanceData());
115
+
116
+ /// <summary>
117
+ ///
118
+ /// </summary>
119
+ /// <returns></returns>
120
+ protected virtual object GetInstanceData() => historicalData;
121
+
122
+
123
+ public virtual void LoadManager(Dictionary<string, object> saveDatas, bool inChapterSelect) =>
124
+ LoadRegisterData(GetSaveData(saveDatas).DeepCopy());
125
+
126
+ /// <summary>
127
+ ///
128
+ /// </summary>
129
+ /// <param name="historicalData"></param>
130
+ protected virtual void LoadRegisterData(T historicalData)
131
+ {
132
+ if (historicalData == null)
133
+ return;
134
+
135
+ ServiceLocator.Unregister<T>();
136
+
137
+ this.historicalData = historicalData;
138
+
139
+ ServiceLocator.Register<T>(this.historicalData);
140
+ }
141
+
142
+
143
+ public virtual void CarryOverOnChapterSelect(Dictionary<string, object> oldSaveDatas, Dictionary<string, object> newSaveDatas)
144
+ {
145
+ if (GetSaveData(oldSaveDatas) is IPersistentData loadedData && GetSaveData(newSaveDatas) is IPersistentData newData)
146
+ newData?.CarryOver(loadedData);
147
+ else
148
+ OnCarryingOverFailed(oldSaveDatas, newSaveDatas);
149
+ }
150
+
151
+ /// <summary>
152
+ ///
153
+ /// </summary>
154
+ /// <param name="oldSaveDatas"></param>
155
+ /// <param name="newSaveDatas"></param>
156
+ protected virtual void OnCarryingOverFailed(Dictionary<string, object> oldSaveDatas, Dictionary<string, object> newSaveDatas) =>
157
+ UnityEngine.Debug.LogWarning($"ANALYSIS: Either the new or loaded progression data were not of type: {nameof(IPersistentData)}.");
158
+ }
159
+ }
@@ -0,0 +1,2 @@
1
+ fileFormatVersion: 2
2
+ guid: bf5f735cd2a867349b4f1776ca593538