net.dreditor.roomloading 0.1.6 → 0.1.8
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.
- package/.attestation.p7m +0 -0
- package/CheckThreeDModeDuringLoad.cs +63 -63
- package/CheckThreeDModeDuringLoad.cs.meta +11 -11
- package/DRERoomTransition.cs +115 -115
- package/DRERoomTransition.cs.meta +11 -11
- package/DREStartAloneScene.cs +178 -178
- package/DREStartAloneScene.cs.meta +11 -11
- package/DREditor.RoomLoading.asmdef +23 -23
- package/DREditor.RoomLoading.asmdef.meta +7 -7
- package/DialogueRoomLoader.cs +187 -187
- package/DialogueRoomLoader.cs.meta +11 -11
- package/FadeOnEndTransitionFromSave.cs +204 -204
- package/FadeOnEndTransitionFromSave.cs.meta +11 -11
- package/FadeOutGeneratePastOnDebugTest.cs +96 -96
- package/FadeOutGeneratePastOnDebugTest.cs.meta +11 -11
- package/FadeOutOnRoomLoad.cs +74 -74
- package/FadeOutOnRoomLoad.cs.meta +11 -11
- package/FreezeColorRoomTransition.cs +185 -185
- package/FreezeColorRoomTransition.cs.meta +11 -11
- package/IPostTransitionRoutine.cs +17 -17
- package/IPostTransitionRoutine.cs.meta +11 -11
- package/IRoomLoadResolver.cs +14 -14
- package/IRoomLoadResolver.cs.meta +11 -11
- package/IRoomLoadRoutine.cs +16 -16
- package/IRoomLoadRoutine.cs.meta +11 -11
- package/IRoomTransition.cs +38 -38
- package/IRoomTransition.cs.meta +11 -11
- package/ITeleporter.cs +23 -23
- package/ITeleporter.cs.meta +11 -11
- package/InstanceManagerBase.cs +130 -130
- package/InstanceManagerBase.cs.meta +11 -11
- package/KeepStateAfterObjective.cs +73 -73
- package/KeepStateAfterObjective.cs.meta +11 -11
- package/MoveEndOnDialogueFinish.cs +130 -130
- package/MoveEndOnDialogueFinish.cs.meta +11 -11
- package/PastPointData.cs +43 -43
- package/PastPointData.cs.meta +11 -11
- package/PrepareTPFDOnLoadingRoom.cs +67 -67
- package/PrepareTPFDOnLoadingRoom.cs.meta +11 -11
- package/ResolveRoomLoadStates.cs +94 -94
- package/ResolveRoomLoadStates.cs.meta +11 -11
- package/RoomChanger.cs +264 -264
- package/RoomChanger.cs.meta +11 -11
- package/RoomChangerBase.cs +84 -84
- package/RoomChangerBase.cs.meta +11 -11
- package/RoomChangerLoader.cs +89 -89
- package/RoomChangerLoader.cs.meta +11 -11
- package/RoomLoadComponent.cs +12 -12
- package/RoomLoadComponent.cs.meta +11 -11
- package/RoomLoadFinisher.cs +80 -80
- package/RoomLoadFinisher.cs.meta +11 -11
- package/RoomLoadOptionsAsset.cs +44 -44
- package/RoomLoadOptionsAsset.cs.meta +11 -11
- package/RoomLoader.cs +264 -264
- package/RoomLoader.cs.meta +11 -11
- package/RoomLoaderBase.cs +86 -86
- package/RoomLoaderBase.cs.meta +11 -11
- package/RoomLoaderDebugger.cs +150 -150
- package/RoomLoaderDebugger.cs.meta +11 -11
- package/RoomLoaderHolder.cs +9 -9
- package/RoomLoaderHolder.cs.meta +11 -11
- package/{Samples → Samples~}/BlackTransitionOnlyOption.asset +18 -18
- package/{Samples → Samples~}/BlackTransitionOnlyOption.asset.meta +8 -8
- package/{Samples → Samples~}/BlackTransitionToInvestigationOption.asset +18 -18
- package/{Samples → Samples~}/BlackTransitionToInvestigationOption.asset.meta +8 -8
- package/{Samples → Samples~}/Check_ThreeD_Mode_During_Load.prefab +49 -49
- package/{Samples → Samples~}/Check_ThreeD_Mode_During_Load.prefab.meta +7 -7
- package/{Samples → Samples~}/DRE_Start_Alone_Scene.prefab +148 -148
- package/{Samples → Samples~}/DRE_Start_Alone_Scene.prefab.meta +7 -7
- package/{Samples → Samples~}/Dialogue_Room_Loader.prefab +55 -55
- package/{Samples → Samples~}/Dialogue_Room_Loader.prefab.meta +7 -7
- package/{Samples → Samples~}/FadeOutBlackTransitionOption.asset +18 -18
- package/{Samples → Samples~}/FadeOutBlackTransitionOption.asset.meta +8 -8
- package/{Samples → Samples~}/Fade_On_End_Transition_From_Save.prefab +145 -145
- package/{Samples → Samples~}/Fade_On_End_Transition_From_Save.prefab.meta +7 -7
- package/{Samples → Samples~}/Fade_Out_Generate_Past_On_Debug_Test.prefab +139 -139
- package/{Samples → Samples~}/Fade_Out_Generate_Past_On_Debug_Test.prefab.meta +7 -7
- package/{Samples → Samples~}/Fade_Out_On_Room_Load.prefab +137 -137
- package/{Samples → Samples~}/Fade_Out_On_Room_Load.prefab.meta +7 -7
- package/{Samples → Samples~}/Freeze_Transition_Canvas.prefab +300 -300
- package/{Samples → Samples~}/Freeze_Transition_Canvas.prefab.meta +7 -7
- package/{Samples → Samples~}/IsLoadingToRoom.asset +19 -19
- package/{Samples → Samples~}/IsLoadingToRoom.asset.meta +8 -8
- package/{Samples → Samples~}/Move_End_On_Dialogue_Finish.prefab +52 -52
- package/{Samples → Samples~}/Move_End_On_Dialogue_Finish.prefab.meta +7 -7
- package/{Samples → Samples~}/OnFadingOutOfLoading.asset +15 -15
- package/{Samples → Samples~}/OnFadingOutOfLoading.asset.meta +8 -8
- package/{Samples → Samples~}/OnFinishedLoadingRoom.asset +14 -14
- package/{Samples → Samples~}/OnFinishedLoadingRoom.asset.meta +8 -8
- package/{Samples → Samples~}/OnLoadingThreeDRoom.asset +14 -14
- package/{Samples → Samples~}/OnLoadingThreeDRoom.asset.meta +8 -8
- package/{Samples → Samples~}/OnLoadingThreeDRoomListener.prefab +51 -51
- package/{Samples → Samples~}/OnLoadingThreeDRoomListener.prefab.meta +7 -7
- package/{Samples → Samples~}/On_Finished_Loading_Room_Listener.prefab +51 -51
- package/{Samples → Samples~}/On_Finished_Loading_Room_Listener.prefab.meta +7 -7
- package/{Samples → Samples~}/On_Finished_Loading_Room_No_Dialogue_Listener.prefab +51 -51
- package/{Samples → Samples~}/On_Finished_Loading_Room_No_Dialogue_Listener.prefab.meta +7 -7
- package/{Samples → Samples~}/On_Finished_Room_Transitions_Listener.prefab +51 -51
- package/{Samples → Samples~}/On_Finished_Room_Transitions_Listener.prefab.meta +7 -7
- package/{Samples → Samples~}/On_Loading_Room_Listener.prefab +51 -51
- package/{Samples → Samples~}/On_Loading_Room_Listener.prefab.meta +7 -7
- package/{Samples → Samples~}/On_Started_Changing_Room_Listener.prefab +51 -51
- package/{Samples → Samples~}/On_Started_Changing_Room_Listener.prefab.meta +7 -7
- package/{Samples → Samples~}/Prepare_TPFD_On_Room_Loading.prefab +142 -142
- package/{Samples → Samples~}/Prepare_TPFD_On_Room_Loading.prefab.meta +7 -7
- package/{Samples → Samples~}/Resolve_Room_Load_States.prefab +54 -54
- package/{Samples → Samples~}/Resolve_Room_Load_States.prefab.meta +7 -7
- package/{Samples → Samples~}/Room_Changer.prefab +143 -143
- package/{Samples → Samples~}/Room_Changer.prefab.meta +7 -7
- package/{Samples → Samples~}/Room_Changer_Loader.prefab +53 -53
- package/{Samples → Samples~}/Room_Changer_Loader.prefab.meta +7 -7
- package/{Samples → Samples~}/Room_Instance_Manager.prefab +78 -78
- package/{Samples → Samples~}/Room_Instance_Manager.prefab.meta +7 -7
- package/{Samples → Samples~}/Room_Load_Finisher.prefab +139 -139
- package/{Samples → Samples~}/Room_Load_Finisher.prefab.meta +7 -7
- package/{Samples → Samples~}/Room_Loader.prefab +584 -584
- package/{Samples → Samples~}/Room_Loader.prefab.meta +7 -7
- package/{Samples → Samples~}/Room_Loader_Event_Listeners.prefab +337 -337
- package/{Samples → Samples~}/Room_Loader_Event_Listeners.prefab.meta +7 -7
- package/{Samples → Samples~}/Room_Loading_System_ETemplate.prefab +398 -398
- package/{Samples → Samples~}/Room_Loading_System_ETemplate.prefab.meta +7 -7
- package/{Samples → Samples~}/SkipActivateControls.asset +19 -19
- package/{Samples → Samples~}/SkipActivateControls.asset.meta +8 -8
- package/{Samples → Samples~}/Skip_Controls_When_Loaded.prefab +156 -156
- package/{Samples → Samples~}/Skip_Controls_When_Loaded.prefab.meta +7 -7
- package/{Samples → Samples~}/TPFD_Room_Loader.prefab +215 -215
- package/{Samples → Samples~}/TPFD_Room_Loader.prefab.meta +7 -7
- package/{Samples → Samples~}/TeleportTransitionOptions.asset +18 -18
- package/{Samples → Samples~}/TeleportTransitionOptions.asset.meta +8 -8
- package/{Samples → Samples~}/Teleport_Room_Manager.prefab +84 -84
- package/{Samples → Samples~}/Teleport_Room_Manager.prefab.meta +7 -7
- package/{Samples → Samples~}/UI_Visibility_On_Scene_Events.prefab +316 -316
- package/{Samples → Samples~}/UI_Visibility_On_Scene_Events.prefab.meta +7 -7
- package/SkipControlsWhenLoaded.cs +65 -65
- package/SkipControlsWhenLoaded.cs.meta +11 -11
- package/TPFDRoomAnimation.cs +83 -83
- package/TPFDRoomAnimation.cs.meta +11 -11
- package/TPFDRoomLoader.cs +92 -92
- package/TPFDRoomLoader.cs.meta +11 -11
- package/TeleportRoomManager.cs +113 -113
- package/TeleportRoomManager.cs.meta +11 -11
- package/package.json +45 -40
- package/package.json.meta +7 -7
- package/Samples.meta +0 -8
package/RoomChanger.cs
CHANGED
|
@@ -1,265 +1,265 @@
|
|
|
1
|
-
//Author: Benjamin "Sweden" Jillson : Discord: sweden_gaming For Project Eden's Garden
|
|
2
|
-
using DREditor.EventObjects;
|
|
3
|
-
using DREditor.Fading;
|
|
4
|
-
using DREditor.Gates;
|
|
5
|
-
using DREditor.Progressing.Handling;
|
|
6
|
-
using DREditor.Services;
|
|
7
|
-
using System;
|
|
8
|
-
using System.Collections;
|
|
9
|
-
using UnityEngine;
|
|
10
|
-
using UnityEngine.EventSystems;
|
|
11
|
-
using UnityEngine.SceneManagement;
|
|
12
|
-
|
|
13
|
-
namespace DREditor.RoomLoading
|
|
14
|
-
{
|
|
15
|
-
/// <summary>
|
|
16
|
-
///
|
|
17
|
-
/// </summary>
|
|
18
|
-
[ClassHeader(nameof(ServiceHolder<RoomChangerBase>) + " for type: " + nameof(RoomChangerBase) +
|
|
19
|
-
"\n\n")]
|
|
20
|
-
public class RoomChanger : RoomChangerBase
|
|
21
|
-
{
|
|
22
|
-
/// <summary>
|
|
23
|
-
///
|
|
24
|
-
/// </summary>
|
|
25
|
-
[Header("")]
|
|
26
|
-
[Divider]
|
|
27
|
-
[Tooltip("")]
|
|
28
|
-
[SerializeField] protected BoolWithEvent inLoading = null;
|
|
29
|
-
|
|
30
|
-
/// <summary>
|
|
31
|
-
///
|
|
32
|
-
/// </summary>
|
|
33
|
-
[Tooltip("")]
|
|
34
|
-
[SerializeField] protected IntWithEvent currentState = null;
|
|
35
|
-
|
|
36
|
-
/// <summary>
|
|
37
|
-
///
|
|
38
|
-
/// </summary>
|
|
39
|
-
[Tooltip("")]
|
|
40
|
-
[SerializeField] protected IntWithEvent currentChapterIndex = null;
|
|
41
|
-
|
|
42
|
-
/// <summary>
|
|
43
|
-
///
|
|
44
|
-
/// </summary>
|
|
45
|
-
[Tooltip("")]
|
|
46
|
-
[SerializeField] protected BoolWithEvent objectiveKeepsInstanceData = null;
|
|
47
|
-
|
|
48
|
-
/// <summary>
|
|
49
|
-
///
|
|
50
|
-
/// </summary>
|
|
51
|
-
[Tooltip("")]
|
|
52
|
-
[SerializeField] protected SceneEvent moveToNextNaturalObjective = null;
|
|
53
|
-
|
|
54
|
-
/// <summary>
|
|
55
|
-
///
|
|
56
|
-
/// </summary>
|
|
57
|
-
[Tooltip("")]
|
|
58
|
-
[SerializeField] protected BoolWithEvent requiredFlagsTriggered = null;
|
|
59
|
-
|
|
60
|
-
/// <summary>
|
|
61
|
-
///
|
|
62
|
-
/// </summary>
|
|
63
|
-
[Tooltip("")]
|
|
64
|
-
[SerializeField] protected StringWithEvent currentObjectiveName = null;
|
|
65
|
-
|
|
66
|
-
/// <summary>
|
|
67
|
-
///
|
|
68
|
-
/// </summary>
|
|
69
|
-
[Tooltip("")]
|
|
70
|
-
[SerializeField] protected TransformWithEvent playerSpawnPoint = null;
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
/// <summary>
|
|
74
|
-
///
|
|
75
|
-
/// </summary>
|
|
76
|
-
[Header("")]
|
|
77
|
-
[Divider]
|
|
78
|
-
[Tooltip("")]
|
|
79
|
-
[SerializeField] protected float hideUIWaitTime = 0.5f;
|
|
80
|
-
|
|
81
|
-
/// <summary>
|
|
82
|
-
///
|
|
83
|
-
/// </summary>
|
|
84
|
-
[Tooltip("")]
|
|
85
|
-
[SerializeField] protected float fadeToBlackOptionTime = 0.5f;
|
|
86
|
-
|
|
87
|
-
/// <summary>
|
|
88
|
-
///
|
|
89
|
-
/// </summary>
|
|
90
|
-
[Tooltip("")]
|
|
91
|
-
[SerializeField] protected int investigationStateIndex = 2;
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
/// <inheritdoc/>
|
|
95
|
-
public override void ChangeRoom(Gate destination, ScriptableObject options = null)
|
|
96
|
-
=> StartCoroutine(ChangeRoomRoutine(destination, (RoomLoadOptionsAsset)options));
|
|
97
|
-
|
|
98
|
-
/// <summary>
|
|
99
|
-
///
|
|
100
|
-
/// </summary>
|
|
101
|
-
/// <param name="destination"></param>
|
|
102
|
-
/// <param name="options"></param>
|
|
103
|
-
protected virtual IEnumerator ChangeRoomRoutine(Gate destination, RoomLoadOptionsAsset options = null)
|
|
104
|
-
{
|
|
105
|
-
UnityEngine.Debug.Log($"REPORT: {ToString()}: Starting room change.");
|
|
106
|
-
|
|
107
|
-
this.options = options;
|
|
108
|
-
|
|
109
|
-
onStartedChangingRoom.Raise();
|
|
110
|
-
|
|
111
|
-
EventSystem.current.SetSelectedGameObject(null);
|
|
112
|
-
|
|
113
|
-
SetDestination(destination);
|
|
114
|
-
|
|
115
|
-
CheckChangeObjective();
|
|
116
|
-
|
|
117
|
-
yield return new WaitForSecondsRealtime(hideUIWaitTime);
|
|
118
|
-
|
|
119
|
-
inLoading.SetValue(true); // At this point the changing room process has started.
|
|
120
|
-
|
|
121
|
-
yield return EvaluateStartTransition();
|
|
122
|
-
|
|
123
|
-
AssignDestinationPosition();
|
|
124
|
-
|
|
125
|
-
yield return ChangeRoomScene();
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/// <summary>
|
|
129
|
-
///
|
|
130
|
-
/// </summary>
|
|
131
|
-
protected virtual void CheckChangeObjective()
|
|
132
|
-
{
|
|
133
|
-
Gate progressionGate = (Gate)ServiceLocator.GetService<ProgressionManagerBase>().currentObjective.ProgressionGate;
|
|
134
|
-
|
|
135
|
-
if (requiredFlagsTriggered.Value && (progressionGate == null || progressionGate == destination))
|
|
136
|
-
ChangeObjectiveCheckInstanceData();
|
|
137
|
-
else
|
|
138
|
-
SaveInstanceOfLeavingRoom();
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
/// <summary>
|
|
142
|
-
///
|
|
143
|
-
/// </summary>
|
|
144
|
-
protected virtual void ChangeObjectiveCheckInstanceData()
|
|
145
|
-
{
|
|
146
|
-
UnityEngine.Debug.Log($"REPORT: {ToString()}: Game has recognized to change the objective.");
|
|
147
|
-
|
|
148
|
-
if (!objectiveKeepsInstanceData.Value)
|
|
149
|
-
ServiceLocator.GetService<InstanceManagerBase>().ClearRoomData();
|
|
150
|
-
else
|
|
151
|
-
SaveInstanceOfLeavingRoom();
|
|
152
|
-
|
|
153
|
-
moveToNextNaturalObjective.Raise();
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
/// <summary>
|
|
157
|
-
///
|
|
158
|
-
/// </summary>
|
|
159
|
-
protected virtual void SaveInstanceOfLeavingRoom()
|
|
160
|
-
{
|
|
161
|
-
try
|
|
162
|
-
{
|
|
163
|
-
if (ServiceLocator.HasService<InstanceManagerBase>())
|
|
164
|
-
ServiceLocator.GetService<InstanceManagerBase>().SaveRoomInstance(SceneManager.GetActiveScene().name);
|
|
165
|
-
else
|
|
166
|
-
UnityEngine.Debug.LogWarning($"ALERT: {ToString()}: There is no RoomInstanceManager in the scene.");
|
|
167
|
-
}
|
|
168
|
-
catch (Exception exception)
|
|
169
|
-
{
|
|
170
|
-
UnityEngine.Debug.LogWarning($"ALERT: {ToString()}: The Room could not be saved because an error occurred" +
|
|
171
|
-
$" saving the room instance.");
|
|
172
|
-
|
|
173
|
-
UnityEngine.Debug.LogWarning(exception);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
/// <summary>
|
|
178
|
-
///
|
|
179
|
-
/// </summary>
|
|
180
|
-
protected virtual IEnumerator EvaluateStartTransition()
|
|
181
|
-
{
|
|
182
|
-
bool abscentOptionsOrBlackTransition = options == null || !options.blackTransition;
|
|
183
|
-
|
|
184
|
-
if (abscentOptionsOrBlackTransition)
|
|
185
|
-
yield return ServiceLocator.GetService<IRoomTransition>().StartTransitionRoutine();
|
|
186
|
-
else if (options != null && options.blackTransition)
|
|
187
|
-
yield return ServiceLocator.GetService<GlobalFade>().FadeToRoutine(fadeToBlackOptionTime);
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
/// <summary>
|
|
191
|
-
///
|
|
192
|
-
/// </summary>
|
|
193
|
-
public override void AssignDestinationPosition()
|
|
194
|
-
{
|
|
195
|
-
if (options != null && options.toWaypoint > -1 && options.toWaypoint < destination.fastTravelMarkers.Count)
|
|
196
|
-
SetSpawnAtWaypoint();
|
|
197
|
-
else
|
|
198
|
-
SetSpawnAtFromGate();
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
/// <summary>
|
|
202
|
-
///
|
|
203
|
-
/// </summary>
|
|
204
|
-
protected virtual void SetSpawnAtWaypoint()
|
|
205
|
-
{
|
|
206
|
-
Waypoint waypoint = destination.fastTravelMarkers[options.toWaypoint];
|
|
207
|
-
|
|
208
|
-
SetSpawnPositionAndRotation(waypoint.position, waypoint.rotation);
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
/// <summary>
|
|
212
|
-
///
|
|
213
|
-
/// </summary>
|
|
214
|
-
protected virtual void SetSpawnAtFromGate()
|
|
215
|
-
{
|
|
216
|
-
GateFrom fromG = destination.GetFromLocation(SceneManager.GetActiveScene().name);
|
|
217
|
-
|
|
218
|
-
if (fromG != null)
|
|
219
|
-
SetSpawnPositionAndRotation(fromG.position, fromG.rotation);
|
|
220
|
-
else
|
|
221
|
-
SetSpawnPositionAndRotation(Vector3.zero, Vector3.zero);
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
/// <summary>
|
|
225
|
-
///
|
|
226
|
-
/// </summary>
|
|
227
|
-
/// <param name="position"></param>
|
|
228
|
-
/// <param name="rotation"></param>
|
|
229
|
-
protected virtual void SetSpawnPositionAndRotation(Vector3 position, Vector3 rotation)
|
|
230
|
-
=> playerSpawnPoint.SetValue(new(position, Quaternion.Euler(rotation)));
|
|
231
|
-
|
|
232
|
-
/// <summary>
|
|
233
|
-
///
|
|
234
|
-
/// </summary>
|
|
235
|
-
protected virtual IEnumerator ChangeRoomScene()
|
|
236
|
-
{
|
|
237
|
-
string destinationSceneName = EvaluateDestinationScene();
|
|
238
|
-
|
|
239
|
-
AsyncOperation asyncOperation = SceneManager.LoadSceneAsync(destinationSceneName);
|
|
240
|
-
|
|
241
|
-
UnityEngine.Debug.Log($"REPORT: {ToString()}: CHANGING SCENE TO: " + destinationSceneName);
|
|
242
|
-
|
|
243
|
-
while (!asyncOperation.isDone)
|
|
244
|
-
{
|
|
245
|
-
UnityEngine.Debug.Log($"REPORT: {ToString()}: Load progress: " + asyncOperation.progress);
|
|
246
|
-
|
|
247
|
-
yield return null;
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
/// <summary>
|
|
252
|
-
///
|
|
253
|
-
/// </summary>
|
|
254
|
-
/// <returns></returns>
|
|
255
|
-
protected virtual string EvaluateDestinationScene()
|
|
256
|
-
{
|
|
257
|
-
if ((options != null && options.toInvestigation) || currentState.Value == investigationStateIndex)
|
|
258
|
-
return destination.GetInvestigationRoom(currentChapterIndex.Value);
|
|
259
|
-
else if (destination.GetVariantScene(currentChapterIndex.Value, currentObjectiveName.Value) is string validScene)
|
|
260
|
-
return validScene;
|
|
261
|
-
else
|
|
262
|
-
return destination.ToAreaName;
|
|
263
|
-
}
|
|
264
|
-
}
|
|
1
|
+
//Author: Benjamin "Sweden" Jillson : Discord: sweden_gaming For Project Eden's Garden
|
|
2
|
+
using DREditor.EventObjects;
|
|
3
|
+
using DREditor.Fading;
|
|
4
|
+
using DREditor.Gates;
|
|
5
|
+
using DREditor.Progressing.Handling;
|
|
6
|
+
using DREditor.Services;
|
|
7
|
+
using System;
|
|
8
|
+
using System.Collections;
|
|
9
|
+
using UnityEngine;
|
|
10
|
+
using UnityEngine.EventSystems;
|
|
11
|
+
using UnityEngine.SceneManagement;
|
|
12
|
+
|
|
13
|
+
namespace DREditor.RoomLoading
|
|
14
|
+
{
|
|
15
|
+
/// <summary>
|
|
16
|
+
///
|
|
17
|
+
/// </summary>
|
|
18
|
+
[ClassHeader(nameof(ServiceHolder<RoomChangerBase>) + " for type: " + nameof(RoomChangerBase) +
|
|
19
|
+
"\n\n")]
|
|
20
|
+
public class RoomChanger : RoomChangerBase
|
|
21
|
+
{
|
|
22
|
+
/// <summary>
|
|
23
|
+
///
|
|
24
|
+
/// </summary>
|
|
25
|
+
[Header("")]
|
|
26
|
+
[Divider]
|
|
27
|
+
[Tooltip("")]
|
|
28
|
+
[SerializeField] protected BoolWithEvent inLoading = null;
|
|
29
|
+
|
|
30
|
+
/// <summary>
|
|
31
|
+
///
|
|
32
|
+
/// </summary>
|
|
33
|
+
[Tooltip("")]
|
|
34
|
+
[SerializeField] protected IntWithEvent currentState = null;
|
|
35
|
+
|
|
36
|
+
/// <summary>
|
|
37
|
+
///
|
|
38
|
+
/// </summary>
|
|
39
|
+
[Tooltip("")]
|
|
40
|
+
[SerializeField] protected IntWithEvent currentChapterIndex = null;
|
|
41
|
+
|
|
42
|
+
/// <summary>
|
|
43
|
+
///
|
|
44
|
+
/// </summary>
|
|
45
|
+
[Tooltip("")]
|
|
46
|
+
[SerializeField] protected BoolWithEvent objectiveKeepsInstanceData = null;
|
|
47
|
+
|
|
48
|
+
/// <summary>
|
|
49
|
+
///
|
|
50
|
+
/// </summary>
|
|
51
|
+
[Tooltip("")]
|
|
52
|
+
[SerializeField] protected SceneEvent moveToNextNaturalObjective = null;
|
|
53
|
+
|
|
54
|
+
/// <summary>
|
|
55
|
+
///
|
|
56
|
+
/// </summary>
|
|
57
|
+
[Tooltip("")]
|
|
58
|
+
[SerializeField] protected BoolWithEvent requiredFlagsTriggered = null;
|
|
59
|
+
|
|
60
|
+
/// <summary>
|
|
61
|
+
///
|
|
62
|
+
/// </summary>
|
|
63
|
+
[Tooltip("")]
|
|
64
|
+
[SerializeField] protected StringWithEvent currentObjectiveName = null;
|
|
65
|
+
|
|
66
|
+
/// <summary>
|
|
67
|
+
///
|
|
68
|
+
/// </summary>
|
|
69
|
+
[Tooltip("")]
|
|
70
|
+
[SerializeField] protected TransformWithEvent playerSpawnPoint = null;
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
/// <summary>
|
|
74
|
+
///
|
|
75
|
+
/// </summary>
|
|
76
|
+
[Header("")]
|
|
77
|
+
[Divider]
|
|
78
|
+
[Tooltip("")]
|
|
79
|
+
[SerializeField] protected float hideUIWaitTime = 0.5f;
|
|
80
|
+
|
|
81
|
+
/// <summary>
|
|
82
|
+
///
|
|
83
|
+
/// </summary>
|
|
84
|
+
[Tooltip("")]
|
|
85
|
+
[SerializeField] protected float fadeToBlackOptionTime = 0.5f;
|
|
86
|
+
|
|
87
|
+
/// <summary>
|
|
88
|
+
///
|
|
89
|
+
/// </summary>
|
|
90
|
+
[Tooltip("")]
|
|
91
|
+
[SerializeField] protected int investigationStateIndex = 2;
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
/// <inheritdoc/>
|
|
95
|
+
public override void ChangeRoom(Gate destination, ScriptableObject options = null)
|
|
96
|
+
=> StartCoroutine(ChangeRoomRoutine(destination, (RoomLoadOptionsAsset)options));
|
|
97
|
+
|
|
98
|
+
/// <summary>
|
|
99
|
+
///
|
|
100
|
+
/// </summary>
|
|
101
|
+
/// <param name="destination"></param>
|
|
102
|
+
/// <param name="options"></param>
|
|
103
|
+
protected virtual IEnumerator ChangeRoomRoutine(Gate destination, RoomLoadOptionsAsset options = null)
|
|
104
|
+
{
|
|
105
|
+
UnityEngine.Debug.Log($"REPORT: {ToString()}: Starting room change.");
|
|
106
|
+
|
|
107
|
+
this.options = options;
|
|
108
|
+
|
|
109
|
+
onStartedChangingRoom.Raise();
|
|
110
|
+
|
|
111
|
+
EventSystem.current.SetSelectedGameObject(null);
|
|
112
|
+
|
|
113
|
+
SetDestination(destination);
|
|
114
|
+
|
|
115
|
+
CheckChangeObjective();
|
|
116
|
+
|
|
117
|
+
yield return new WaitForSecondsRealtime(hideUIWaitTime);
|
|
118
|
+
|
|
119
|
+
inLoading.SetValue(true); // At this point the changing room process has started.
|
|
120
|
+
|
|
121
|
+
yield return EvaluateStartTransition();
|
|
122
|
+
|
|
123
|
+
AssignDestinationPosition();
|
|
124
|
+
|
|
125
|
+
yield return ChangeRoomScene();
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/// <summary>
|
|
129
|
+
///
|
|
130
|
+
/// </summary>
|
|
131
|
+
protected virtual void CheckChangeObjective()
|
|
132
|
+
{
|
|
133
|
+
Gate progressionGate = (Gate)ServiceLocator.GetService<ProgressionManagerBase>().currentObjective.ProgressionGate;
|
|
134
|
+
|
|
135
|
+
if (requiredFlagsTriggered.Value && (progressionGate == null || progressionGate == destination))
|
|
136
|
+
ChangeObjectiveCheckInstanceData();
|
|
137
|
+
else
|
|
138
|
+
SaveInstanceOfLeavingRoom();
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/// <summary>
|
|
142
|
+
///
|
|
143
|
+
/// </summary>
|
|
144
|
+
protected virtual void ChangeObjectiveCheckInstanceData()
|
|
145
|
+
{
|
|
146
|
+
UnityEngine.Debug.Log($"REPORT: {ToString()}: Game has recognized to change the objective.");
|
|
147
|
+
|
|
148
|
+
if (!objectiveKeepsInstanceData.Value)
|
|
149
|
+
ServiceLocator.GetService<InstanceManagerBase>().ClearRoomData();
|
|
150
|
+
else
|
|
151
|
+
SaveInstanceOfLeavingRoom();
|
|
152
|
+
|
|
153
|
+
moveToNextNaturalObjective.Raise();
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/// <summary>
|
|
157
|
+
///
|
|
158
|
+
/// </summary>
|
|
159
|
+
protected virtual void SaveInstanceOfLeavingRoom()
|
|
160
|
+
{
|
|
161
|
+
try
|
|
162
|
+
{
|
|
163
|
+
if (ServiceLocator.HasService<InstanceManagerBase>())
|
|
164
|
+
ServiceLocator.GetService<InstanceManagerBase>().SaveRoomInstance(SceneManager.GetActiveScene().name);
|
|
165
|
+
else
|
|
166
|
+
UnityEngine.Debug.LogWarning($"ALERT: {ToString()}: There is no RoomInstanceManager in the scene.");
|
|
167
|
+
}
|
|
168
|
+
catch (Exception exception)
|
|
169
|
+
{
|
|
170
|
+
UnityEngine.Debug.LogWarning($"ALERT: {ToString()}: The Room could not be saved because an error occurred" +
|
|
171
|
+
$" saving the room instance.");
|
|
172
|
+
|
|
173
|
+
UnityEngine.Debug.LogWarning(exception);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/// <summary>
|
|
178
|
+
///
|
|
179
|
+
/// </summary>
|
|
180
|
+
protected virtual IEnumerator EvaluateStartTransition()
|
|
181
|
+
{
|
|
182
|
+
bool abscentOptionsOrBlackTransition = options == null || !options.blackTransition;
|
|
183
|
+
|
|
184
|
+
if (abscentOptionsOrBlackTransition)
|
|
185
|
+
yield return ServiceLocator.GetService<IRoomTransition>().StartTransitionRoutine();
|
|
186
|
+
else if (options != null && options.blackTransition)
|
|
187
|
+
yield return ServiceLocator.GetService<GlobalFade>().FadeToRoutine(fadeToBlackOptionTime);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/// <summary>
|
|
191
|
+
///
|
|
192
|
+
/// </summary>
|
|
193
|
+
public override void AssignDestinationPosition()
|
|
194
|
+
{
|
|
195
|
+
if (options != null && options.toWaypoint > -1 && options.toWaypoint < destination.fastTravelMarkers.Count)
|
|
196
|
+
SetSpawnAtWaypoint();
|
|
197
|
+
else
|
|
198
|
+
SetSpawnAtFromGate();
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/// <summary>
|
|
202
|
+
///
|
|
203
|
+
/// </summary>
|
|
204
|
+
protected virtual void SetSpawnAtWaypoint()
|
|
205
|
+
{
|
|
206
|
+
Waypoint waypoint = destination.fastTravelMarkers[options.toWaypoint];
|
|
207
|
+
|
|
208
|
+
SetSpawnPositionAndRotation(waypoint.position, waypoint.rotation);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/// <summary>
|
|
212
|
+
///
|
|
213
|
+
/// </summary>
|
|
214
|
+
protected virtual void SetSpawnAtFromGate()
|
|
215
|
+
{
|
|
216
|
+
GateFrom fromG = destination.GetFromLocation(SceneManager.GetActiveScene().name);
|
|
217
|
+
|
|
218
|
+
if (fromG != null)
|
|
219
|
+
SetSpawnPositionAndRotation(fromG.position, fromG.rotation);
|
|
220
|
+
else
|
|
221
|
+
SetSpawnPositionAndRotation(Vector3.zero, Vector3.zero);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/// <summary>
|
|
225
|
+
///
|
|
226
|
+
/// </summary>
|
|
227
|
+
/// <param name="position"></param>
|
|
228
|
+
/// <param name="rotation"></param>
|
|
229
|
+
protected virtual void SetSpawnPositionAndRotation(Vector3 position, Vector3 rotation)
|
|
230
|
+
=> playerSpawnPoint.SetValue(new(position, Quaternion.Euler(rotation)));
|
|
231
|
+
|
|
232
|
+
/// <summary>
|
|
233
|
+
///
|
|
234
|
+
/// </summary>
|
|
235
|
+
protected virtual IEnumerator ChangeRoomScene()
|
|
236
|
+
{
|
|
237
|
+
string destinationSceneName = EvaluateDestinationScene();
|
|
238
|
+
|
|
239
|
+
AsyncOperation asyncOperation = SceneManager.LoadSceneAsync(destinationSceneName);
|
|
240
|
+
|
|
241
|
+
UnityEngine.Debug.Log($"REPORT: {ToString()}: CHANGING SCENE TO: " + destinationSceneName);
|
|
242
|
+
|
|
243
|
+
while (!asyncOperation.isDone)
|
|
244
|
+
{
|
|
245
|
+
UnityEngine.Debug.Log($"REPORT: {ToString()}: Load progress: " + asyncOperation.progress);
|
|
246
|
+
|
|
247
|
+
yield return null;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/// <summary>
|
|
252
|
+
///
|
|
253
|
+
/// </summary>
|
|
254
|
+
/// <returns></returns>
|
|
255
|
+
protected virtual string EvaluateDestinationScene()
|
|
256
|
+
{
|
|
257
|
+
if ((options != null && options.toInvestigation) || currentState.Value == investigationStateIndex)
|
|
258
|
+
return destination.GetInvestigationRoom(currentChapterIndex.Value);
|
|
259
|
+
else if (destination.GetVariantScene(currentChapterIndex.Value, currentObjectiveName.Value) is string validScene)
|
|
260
|
+
return validScene;
|
|
261
|
+
else
|
|
262
|
+
return destination.ToAreaName;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
265
|
}
|
package/RoomChanger.cs.meta
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
fileFormatVersion: 2
|
|
2
|
-
guid: 2a045506467a1c04b84b8205d72734f2
|
|
3
|
-
MonoImporter:
|
|
4
|
-
externalObjects: {}
|
|
5
|
-
serializedVersion: 2
|
|
6
|
-
defaultReferences: []
|
|
7
|
-
executionOrder: 0
|
|
8
|
-
icon: {instanceID: 0}
|
|
9
|
-
userData:
|
|
10
|
-
assetBundleName:
|
|
11
|
-
assetBundleVariant:
|
|
1
|
+
fileFormatVersion: 2
|
|
2
|
+
guid: 2a045506467a1c04b84b8205d72734f2
|
|
3
|
+
MonoImporter:
|
|
4
|
+
externalObjects: {}
|
|
5
|
+
serializedVersion: 2
|
|
6
|
+
defaultReferences: []
|
|
7
|
+
executionOrder: 0
|
|
8
|
+
icon: {instanceID: 0}
|
|
9
|
+
userData:
|
|
10
|
+
assetBundleName:
|
|
11
|
+
assetBundleVariant:
|