Skip to content

Commit 7f32a56

Browse files
committed
Simplify addressable scene loader contracts
1 parent d5d2ac1 commit 7f32a56

File tree

88 files changed

+642
-471
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

88 files changed

+642
-471
lines changed
Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,18 @@
11
#if ENABLE_ADDRESSABLES
22
/**
3-
* AddressableSceneLoader.cs
3+
* IAddressableUnloadSceneInfo.cs
44
* Created by: João Borks [joao.borks@gmail.com]
55
* Created on: 8/24/2022 (en-US)
66
*/
77

8-
using UnityEngine.AddressableAssets;
98
using UnityEngine.ResourceManagement.AsyncOperations;
109
using UnityEngine.ResourceManagement.ResourceProviders;
11-
using UnityEngine.SceneManagement;
1210

1311
namespace MyUnityTools.SceneLoading.AddressablesSupport
1412
{
15-
/// <summary>
16-
/// Interface to standardize addressable scene information.
17-
/// Can be created with either the target scene's <see cref="AssetReference"/> (<see cref="AddressableLoadSceneInfoAsset"/>) or the scene's runtime key (<see cref="AddressableLoadSceneInfoKey"/>).
18-
/// </summary>
1913
public interface IAddressableLoadSceneInfo
2014
{
21-
/// <summary>
22-
/// Loads the provided scene asynchronously.
23-
/// Internally calls <see cref="Addressables.LoadSceneAsync(object, LoadSceneMode, bool, int)"/>.
24-
/// </summary>
25-
/// <returns>The load <see cref="AsyncOperationHandle{TObject}"/>.</returns>
26-
AsyncOperationHandle<SceneInstance> LoadSceneAsync();
15+
AsyncOperationHandle<SceneInstance> UnloadSceneAsync(IAddressableSceneManager sceneManager);
2716
}
2817
}
2918
#endif

Runtime/Interfaces/IAddressableLoadSceneInfo.cs.meta

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#if ENABLE_ADDRESSABLES
2+
/**
3+
* IAddressableLoadSceneReference.cs
4+
* Created by: João Borks [joao.borks@gmail.com]
5+
* Created on: 8/24/2022 (en-US)
6+
*/
7+
8+
using UnityEngine.AddressableAssets;
9+
using UnityEngine.ResourceManagement.AsyncOperations;
10+
using UnityEngine.ResourceManagement.ResourceProviders;
11+
using UnityEngine.SceneManagement;
12+
13+
namespace MyUnityTools.SceneLoading.AddressablesSupport
14+
{
15+
/// <summary>
16+
/// Interface to standardize addressable scene information.
17+
/// Can be created with either the target scene's <see cref="AssetReference"/> (<see cref="AddressableLoadSceneReferenceAsset"/>) or the scene's runtime key (<see cref="AddressableLoadSceneReferenceKey"/>).
18+
/// </summary>
19+
public interface IAddressableLoadSceneReference
20+
{
21+
/// <summary>
22+
/// Loads the provided scene asynchronously.
23+
/// Internally calls <see cref="Addressables.LoadSceneAsync(object, LoadSceneMode, bool, int)"/>.
24+
/// </summary>
25+
/// <returns>The load <see cref="AsyncOperationHandle{TObject}"/>.</returns>
26+
AsyncOperationHandle<SceneInstance> LoadSceneAsync(IAddressableSceneManager sceneManager);
27+
}
28+
}
29+
#endif

Runtime/Interfaces/IAddressableLoadSceneReference.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Runtime/Interfaces/IAddressableSceneLoader.cs

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,25 +5,17 @@
55
* Created on: 8/23/2022 (en-US)
66
*/
77

8-
using UnityEngine.ResourceManagement.AsyncOperations;
9-
using UnityEngine.ResourceManagement.ResourceProviders;
10-
118
namespace MyUnityTools.SceneLoading.AddressablesSupport
129
{
1310
public interface IAddressableSceneLoader
1411
{
15-
void TransitionToScene(IAddressableLoadSceneInfo sceneInfo);
12+
IAddressableSceneManager SceneManager { get; }
1613

17-
void SwitchToScene(IAddressableLoadSceneInfo sceneInfo);
14+
void TransitionToScene(IAddressableLoadSceneReference targetSceneReference, IAddressableLoadSceneReference intermediateSceneReference = null);
1815

19-
void LoadScene(IAddressableLoadSceneInfo sceneInfo, bool setActive = false);
16+
void LoadScene(IAddressableLoadSceneReference sceneReference, bool setActive = false);
2017

21-
void UnloadScene(AsyncOperationHandle<SceneInstance> sceneHandle);
22-
void UnloadScene(SceneInstance scene);
23-
void UnloadScene(string sceneName);
24-
25-
AsyncOperationHandle<SceneInstance> GetLoadedSceneHandle(SceneInstance sceneInstance);
26-
AsyncOperationHandle<SceneInstance> GetLoadedSceneHandle(string sceneName);
18+
void UnloadScene(IAddressableLoadSceneInfo sceneInfo);
2719
}
2820
}
2921
#endif

Runtime/Interfaces/IAddressableSceneLoaderAsync.cs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,17 @@
66
*/
77

88
using System.Threading.Tasks;
9-
using UnityEngine.ResourceManagement.AsyncOperations;
109
using UnityEngine.ResourceManagement.ResourceProviders;
1110

1211
namespace MyUnityTools.SceneLoading.AddressablesSupport
1312
{
1413
public interface IAddressableSceneLoaderAsync : IAddressableSceneLoader
1514
{
16-
Task<SceneInstance> TransitionToSceneAsync(IAddressableLoadSceneInfo sceneInfo);
17-
18-
Task<SceneInstance> SwitchToSceneAsync(IAddressableLoadSceneInfo sceneInfo);
15+
Task<SceneInstance> TransitionToSceneAsync(IAddressableLoadSceneReference targetSceneReference, IAddressableLoadSceneReference intermediateSceneReference = null);
1916

20-
Task<SceneInstance> LoadSceneAsync(IAddressableLoadSceneInfo sceneInfo, bool setActive = false);
17+
Task<SceneInstance> LoadSceneAsync(IAddressableLoadSceneReference sceneReference, bool setActive = false);
2118

22-
Task UnloadSceneAsync(AsyncOperationHandle<SceneInstance> sceneHandle);
23-
Task UnloadSceneAsync(SceneInstance scene);
24-
Task UnloadSceneAsync(string sceneName);
19+
Task UnloadSceneAsync(IAddressableLoadSceneInfo sceneInfo);
2520
}
2621
}
2722
#endif

Runtime/Interfaces/IAddressableSceneLoaderUniTask.cs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,17 @@
66
*/
77

88
using Cysharp.Threading.Tasks;
9-
using UnityEngine.ResourceManagement.AsyncOperations;
109
using UnityEngine.ResourceManagement.ResourceProviders;
1110

1211
namespace MyUnityTools.SceneLoading.AddressablesSupport.UniTaskSupport
1312
{
1413
public interface IAddressableSceneLoaderUniTask : IAddressableSceneLoader
1514
{
16-
UniTask<SceneInstance> TransitionToSceneAsync(IAddressableLoadSceneInfo sceneInfo);
15+
UniTask<SceneInstance> TransitionToSceneAsync(IAddressableLoadSceneReference targetSceneReference, IAddressableLoadSceneReference intermediateSceneReference = null);
1716

18-
UniTask<SceneInstance> SwitchToSceneAsync(IAddressableLoadSceneInfo sceneInfo);
17+
UniTask<SceneInstance> LoadSceneAsync(IAddressableLoadSceneReference sceneReference, bool setActive = false);
1918

20-
UniTask<SceneInstance> LoadSceneAsync(IAddressableLoadSceneInfo sceneInfo, bool setActive = false);
21-
22-
UniTask UnloadSceneAsync(AsyncOperationHandle<SceneInstance> sceneHandle);
23-
UniTask UnloadSceneAsync(SceneInstance scene);
24-
UniTask UnloadSceneAsync(string sceneName);
19+
UniTask UnloadSceneAsync(IAddressableLoadSceneInfo sceneInfo);
2520
}
2621
}
2722
#endif
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#if ENABLE_ADDRESSABLES
2+
/**
3+
* IAddressableSceneManager.cs
4+
* Created by: João Borks [joao.borks@gmail.com]
5+
* Created on: 8/29/2022 (en-US)
6+
*/
7+
8+
using UnityEngine.AddressableAssets;
9+
using UnityEngine.ResourceManagement.AsyncOperations;
10+
using UnityEngine.ResourceManagement.ResourceProviders;
11+
12+
namespace MyUnityTools.SceneLoading.AddressablesSupport
13+
{
14+
public interface IAddressableSceneManager
15+
{
16+
void SetActiveSceneHandle(AsyncOperationHandle<SceneInstance> sceneHandle);
17+
18+
AsyncOperationHandle<SceneInstance> GetActiveSceneHandle();
19+
20+
AsyncOperationHandle<SceneInstance> LoadSceneAsync(AssetReference sceneReference);
21+
AsyncOperationHandle<SceneInstance> LoadSceneAsync(string runtimeKey);
22+
23+
AsyncOperationHandle<SceneInstance> UnloadSceneAsync(AsyncOperationHandle<SceneInstance> sceneHandle);
24+
AsyncOperationHandle<SceneInstance> UnloadSceneAsync(SceneInstance scene);
25+
AsyncOperationHandle<SceneInstance> UnloadSceneAsync(string sceneName);
26+
27+
AsyncOperationHandle<SceneInstance> GetLoadedSceneHandle(SceneInstance sceneInstance);
28+
AsyncOperationHandle<SceneInstance> GetLoadedSceneHandle(string sceneName);
29+
}
30+
}
31+
#endif

Runtime/Interfaces/IAddressableSceneManager.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Runtime/Interfaces/ILoadSceneInfo.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public interface ILoadSceneInfo
3333
/// Gets a runtime struct representing the loaded scene.
3434
/// Used to pass as a parameter when calling <see cref="SceneManager.SetActiveScene(Scene)"/>.
3535
/// </summary>
36-
/// <returns>The loaded scene struct, or an invalid scene if it hasn't been loaded.</returns>
36+
/// <returns>The loaded scene struct, or an invalid scene (<see cref="Scene.IsValid"/> returns false) if it hasn't been loaded.</returns>
3737
Scene GetScene();
3838
}
3939
}

0 commit comments

Comments
 (0)