added some doc + some global configs
This commit is contained in:
parent
9e07c48fd4
commit
ef6b345a03
@ -12,7 +12,6 @@ GameObject:
|
|||||||
- component: {fileID: 3028288566889208750}
|
- component: {fileID: 3028288566889208750}
|
||||||
- component: {fileID: 3028288566889208749}
|
- component: {fileID: 3028288566889208749}
|
||||||
- component: {fileID: -245230096461627285}
|
- component: {fileID: -245230096461627285}
|
||||||
- component: {fileID: 5626804684391367242}
|
|
||||||
m_Layer: 0
|
m_Layer: 0
|
||||||
m_Name: LevelManager
|
m_Name: LevelManager
|
||||||
m_TagString: Untagged
|
m_TagString: Untagged
|
||||||
@ -47,6 +46,7 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: c8f415d45fd9659408ac8c5ce2e96aba, type: 3}
|
m_Script: {fileID: 11500000, guid: c8f415d45fd9659408ac8c5ce2e96aba, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
|
loadOnStart: 0
|
||||||
firstLevel: {fileID: 11400000, guid: a6e34739c9325da4cac4fbaea30d052c, type: 2}
|
firstLevel: {fileID: 11400000, guid: a6e34739c9325da4cac4fbaea30d052c, type: 2}
|
||||||
--- !u!114 &3028288566889208749
|
--- !u!114 &3028288566889208749
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
@ -120,16 +120,3 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: 37c0aa967043d974783120d6ea9b136c, type: 3}
|
m_Script: {fileID: 11500000, guid: 37c0aa967043d974783120d6ea9b136c, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
--- !u!114 &5626804684391367242
|
|
||||||
MonoBehaviour:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 3028288566889208744}
|
|
||||||
m_Enabled: 1
|
|
||||||
m_EditorHideFlags: 0
|
|
||||||
m_Script: {fileID: 11500000, guid: c8f878516c4a3324aa1a9672f8b336c9, type: 3}
|
|
||||||
m_Name:
|
|
||||||
m_EditorClassIdentifier:
|
|
||||||
_current: {fileID: 11400000, guid: 132e291fc51a8f445b1183b11a5d6b39, type: 2}
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -2582,6 +2582,64 @@ GameObject:
|
|||||||
m_CorrespondingSourceObject: {fileID: 1893888152770301340, guid: eb25bde5e3c72d34fbc9095e2c83cdb4, type: 3}
|
m_CorrespondingSourceObject: {fileID: 1893888152770301340, guid: eb25bde5e3c72d34fbc9095e2c83cdb4, type: 3}
|
||||||
m_PrefabInstance: {fileID: 1878632746}
|
m_PrefabInstance: {fileID: 1878632746}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
--- !u!1 &2015431890
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 2015431891}
|
||||||
|
- component: {fileID: 2015431892}
|
||||||
|
- component: {fileID: 2015431893}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: GlobalConfig
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!4 &2015431891
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2015431890}
|
||||||
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
|
m_LocalPosition: {x: -2.6812747, y: -2.3953135, z: 0.25616607}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 0}
|
||||||
|
m_RootOrder: 4
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
--- !u!114 &2015431892
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2015431890}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: c8f878516c4a3324aa1a9672f8b336c9, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
_current: {fileID: 11400000, guid: 132e291fc51a8f445b1183b11a5d6b39, type: 2}
|
||||||
|
--- !u!114 &2015431893
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2015431890}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: fa9f587ee4cf938499416afd7af15106, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
--- !u!1001 &1893888154391728751
|
--- !u!1001 &1893888154391728751
|
||||||
PrefabInstance:
|
PrefabInstance:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
|||||||
9
Assets/Scripts/General/DontDestroy.cs
Normal file
9
Assets/Scripts/General/DontDestroy.cs
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
public class DontDestroy : MonoBehaviour
|
||||||
|
{
|
||||||
|
void Awake()
|
||||||
|
{
|
||||||
|
DontDestroyOnLoad(gameObject);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,5 +1,5 @@
|
|||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: 389cc3c423055324fb8d7de50f62f709
|
guid: fa9f587ee4cf938499416afd7af15106
|
||||||
MonoImporter:
|
MonoImporter:
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
@ -9,9 +9,9 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
public static class Extensions
|
public static class Extensions
|
||||||
{
|
{
|
||||||
public static async Task WaitWhile(Func<bool> untilTrue)
|
public static async Task WaitWhile(Func<bool> toKeepTrue)
|
||||||
{
|
{
|
||||||
while (untilTrue?.Invoke() == false)
|
while (toKeepTrue?.Invoke() == true)
|
||||||
{
|
{
|
||||||
await Task.Yield();
|
await Task.Yield();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,6 +2,7 @@ using UnityEngine;
|
|||||||
|
|
||||||
public class GlobalConfig : SingletonBehaviour<GlobalConfig>
|
public class GlobalConfig : SingletonBehaviour<GlobalConfig>
|
||||||
{
|
{
|
||||||
|
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
private GlobalConfigFile _current;
|
private GlobalConfigFile _current;
|
||||||
public GlobalConfigFile Current
|
public GlobalConfigFile Current
|
||||||
|
|||||||
@ -30,4 +30,9 @@ public class GlobalConfigFile : ScriptableObject
|
|||||||
public bool useRandomHarvestDuration = false;
|
public bool useRandomHarvestDuration = false;
|
||||||
public int randomHarvestDurationMinimum = 0;
|
public int randomHarvestDurationMinimum = 0;
|
||||||
public int randomHarvestDurationMaximum = 0;
|
public int randomHarvestDurationMaximum = 0;
|
||||||
|
|
||||||
|
[Header("loading screen")]
|
||||||
|
public float loadingAddedTime = 3;
|
||||||
|
public float baseTileSpawnSpeed = 12;
|
||||||
|
public float tileSpawnAcceleration = 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,6 +15,6 @@ public class SingletonBehaviour<T> : MonoBehaviour where T : SingletonBehaviour<
|
|||||||
protected virtual void Awake()
|
protected virtual void Awake()
|
||||||
{
|
{
|
||||||
if (!Instance) Instance = this as T;
|
if (!Instance) Instance = this as T;
|
||||||
else Destroy(gameObject);
|
else Destroy(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -34,10 +34,21 @@ namespace GatherAndDefend.LevelEditor
|
|||||||
|
|
||||||
public string Key => _key;
|
public string Key => _key;
|
||||||
|
|
||||||
public async Task LoadToTilemap(Tilemap reference, PlacementAnimationHandler placementAnimation = null, Reference<bool> allTilesSpawned = default, Func<float> tileSpawnAcceleration = default)
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="reference">the current tilemap</param>
|
||||||
|
/// <param name="placementAnimation">the tiles falling on the tilemap</param>
|
||||||
|
/// <param name="allTilesSpawned">a reference value that is used in caller method to detect when all tiles have been spawned</param>
|
||||||
|
/// <param name="tileSpawnAcceleration">a delegate which speeds up the spawning of the tiles over time</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task LoadToTilemap(Tilemap reference, PlacementAnimationHandler placementAnimation = null, Action allTilesSpawned = default, Func<float> tileSpawnAcceleration = default)
|
||||||
{
|
{
|
||||||
|
// if the function we receive is null, we just make it constant 1
|
||||||
if (tileSpawnAcceleration == default) tileSpawnAcceleration = () => 1;
|
if (tileSpawnAcceleration == default) tileSpawnAcceleration = () => 1;
|
||||||
|
|
||||||
const int tilesPerSecond = 15;
|
const int tilesPerSecond = 15;
|
||||||
|
|
||||||
reference.transform.localPosition = _position;
|
reference.transform.localPosition = _position;
|
||||||
reference.transform.localScale = _scale;
|
reference.transform.localScale = _scale;
|
||||||
|
|
||||||
@ -51,13 +62,14 @@ namespace GatherAndDefend.LevelEditor
|
|||||||
collision.isTrigger = _isTrigger;
|
collision.isTrigger = _isTrigger;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//all tiles are loaded after their animation is over. use a task to asyncroneously load them and keep control over the flow
|
||||||
var tasks = new List<Task>();
|
var tasks = new List<Task>();
|
||||||
foreach (TileData data in _tiles)
|
foreach (TileData data in _tiles)
|
||||||
{
|
{
|
||||||
tasks.Add(placementAnimation(data.Position, data.Tile, () => reference.SetTile(data.Position, data.Tile)));
|
tasks.Add(placementAnimation(data.Position, data.Tile, () => reference.SetTile(data.Position, data.Tile)));
|
||||||
await Task.Delay((int)(1000f / (tilesPerSecond * tileSpawnAcceleration())));
|
await Task.Delay((int)(1000f / (tilesPerSecond * tileSpawnAcceleration())));
|
||||||
}
|
}
|
||||||
if (allTilesSpawned != null) allTilesSpawned.Value = true;
|
allTilesSpawned?.Invoke();
|
||||||
await Task.WhenAll(tasks);
|
await Task.WhenAll(tasks);
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@ -143,14 +143,16 @@ public class LevelManager : Singleton<LevelManager>
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// permet de loader un scriptable object de niveau
|
/// loads a Level scriptable object
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="level">le niveau à loader</param>
|
/// <param name="level">the level to load</param>
|
||||||
/// <param name="shouldClear">est ce qu'on veut effacer ce qui est déjà là?</param>
|
/// <param name="shouldClear">do we want to clear what's already there before loading?</param>
|
||||||
|
/// <param name="placementAnimation">the tiles falling from the top of the screen</param>
|
||||||
public async Task LoadLevel(Level level, bool shouldClear = false, PlacementAnimationHandler placementAnimation = null)
|
public async Task LoadLevel(Level level, bool shouldClear = false, PlacementAnimationHandler placementAnimation = null)
|
||||||
{
|
{
|
||||||
float tileSpawnAcceleration = 1;
|
float accelerationOfAcceleration = GlobalConfig.Instance.Current.tileSpawnAcceleration;
|
||||||
float tileSpawnAccelerationFunc() => (tileSpawnAcceleration += Time.deltaTime);
|
float tileCurrentAcceleration = 1;
|
||||||
|
float tileSpawnAccelerationFunc() => (tileCurrentAcceleration += accelerationOfAcceleration * Time.deltaTime);
|
||||||
|
|
||||||
if (shouldClear)
|
if (shouldClear)
|
||||||
{
|
{
|
||||||
@ -181,14 +183,15 @@ public class LevelManager : Singleton<LevelManager>
|
|||||||
//generate all tilemaps
|
//generate all tilemaps
|
||||||
foreach (TilemapData tilemapData in _currentLevel)
|
foreach (TilemapData tilemapData in _currentLevel)
|
||||||
{
|
{
|
||||||
|
bool allTilesSpawned = false;
|
||||||
|
System.Action OnAllTilesSpawned = () => allTilesSpawned = true;
|
||||||
var tilemap = new GameObject(tilemapData.Key).AddComponent<Tilemap>();
|
var tilemap = new GameObject(tilemapData.Key).AddComponent<Tilemap>();
|
||||||
tilemap.tileAnchor = Vector3.zero;
|
tilemap.tileAnchor = Vector3.zero;
|
||||||
tilemap.gameObject.AddComponent<TilemapRenderer>();
|
tilemap.gameObject.AddComponent<TilemapRenderer>();
|
||||||
tilemap.transform.SetParent(grid.transform);
|
tilemap.transform.SetParent(grid.transform);
|
||||||
|
|
||||||
Reference<bool> allTileSpawned = false;
|
tasks.Add(tilemapData.LoadToTilemap(tilemap, placementAnimation, OnAllTilesSpawned, tileSpawnAccelerationFunc));
|
||||||
tasks.Add(tilemapData.LoadToTilemap(tilemap, placementAnimation, allTileSpawned, tileSpawnAccelerationFunc));
|
await Extensions.WaitWhile(() => !allTilesSpawned);
|
||||||
await Extensions.WaitWhile(() => allTileSpawned);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
await Task.WhenAll(tasks);
|
await Task.WhenAll(tasks);
|
||||||
@ -197,10 +200,11 @@ public class LevelManager : Singleton<LevelManager>
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// permet de loader un scriptable object de niveau
|
/// load a Level scriptable object using its name
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="levelName">le nom du niveau à loader</param>
|
/// <param name="levelName">the name of the loaded Level</param>
|
||||||
/// <param name="shouldClear">est ce qu'on veut effacer ce qui est déjà là?</param>
|
/// <param name="shouldClear">should we clear what's already there?</param>
|
||||||
|
/// <param name="placementAnimation">the tiles falling animation</param>
|
||||||
public async Task LoadLevel(string levelName, bool shouldClear = false, PlacementAnimationHandler placementAnimation = null)
|
public async Task LoadLevel(string levelName, bool shouldClear = false, PlacementAnimationHandler placementAnimation = null)
|
||||||
{
|
{
|
||||||
if (shouldClear)
|
if (shouldClear)
|
||||||
|
|||||||
@ -5,6 +5,10 @@ using UnityEngine.Tilemaps;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
|
/// <param name="position">The position the tile should be placed on</param>
|
||||||
|
/// <param name="tile">the tile we should place</param>
|
||||||
|
/// <param name="tilePlacement">the action of placing the tile on the tilemap</param>
|
||||||
|
/// <returns></returns>
|
||||||
public delegate Task PlacementAnimationHandler(Vector3 position, TileBase tile, Action tilePlacement);
|
public delegate Task PlacementAnimationHandler(Vector3 position, TileBase tile, Action tilePlacement);
|
||||||
public class LevelManagerScript : SingletonBehaviour<LevelManagerScript>
|
public class LevelManagerScript : SingletonBehaviour<LevelManagerScript>
|
||||||
{
|
{
|
||||||
@ -13,6 +17,7 @@ public class LevelManagerScript : SingletonBehaviour<LevelManagerScript>
|
|||||||
public Level firstLevel;
|
public Level firstLevel;
|
||||||
async void Start()
|
async void Start()
|
||||||
{
|
{
|
||||||
|
//only when the level is loaded do we start updating
|
||||||
LevelManager.Instance.LevelLoaded += Instance_LevelLoaded;
|
LevelManager.Instance.LevelLoaded += Instance_LevelLoaded;
|
||||||
if (loadOnStart && firstLevel)
|
if (loadOnStart && firstLevel)
|
||||||
{
|
{
|
||||||
@ -32,17 +37,28 @@ public class LevelManagerScript : SingletonBehaviour<LevelManagerScript>
|
|||||||
|
|
||||||
private void Instance_LevelLoaded(Level level)
|
private void Instance_LevelLoaded(Level level)
|
||||||
{
|
{
|
||||||
|
//only when the level is loaded do we start updating
|
||||||
updateAction = LevelManager.Instance.UpdateLevel;
|
updateAction = LevelManager.Instance.UpdateLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// the tile falls from the top of the screen, up to it's position on the tilemap
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="position">where it should land</param>
|
||||||
|
/// <param name="tile">what the tile represents</param>
|
||||||
|
/// <param name="putTileOnTilemap">the action of actually placing the tile</param>
|
||||||
|
/// <returns></returns>
|
||||||
public static async Task PlacementAnimation(Vector3 position, TileBase tile, System.Action putTileOnTilemap)
|
public static async Task PlacementAnimation(Vector3 position, TileBase tile, System.Action putTileOnTilemap)
|
||||||
{
|
{
|
||||||
|
const string layer = "Unit";
|
||||||
float speed = 0;
|
float speed = 0;
|
||||||
float acceleration = -9.81f;
|
float acceleration = -9.81f;
|
||||||
|
|
||||||
|
//create the falling GameObject that will placehold for the tile
|
||||||
var tilePlaceholder = new GameObject("tile");
|
var tilePlaceholder = new GameObject("tile");
|
||||||
var rend = tilePlaceholder.AddComponent<SpriteRenderer>();
|
var rend = tilePlaceholder.AddComponent<SpriteRenderer>();
|
||||||
rend.sortingOrder = 10;
|
rend.sortingOrder = 10;
|
||||||
rend.sortingLayerName = "Unit";
|
rend.sortingLayerName = layer;
|
||||||
|
|
||||||
if (tile is LevelTile)
|
if (tile is LevelTile)
|
||||||
{
|
{
|
||||||
@ -53,6 +69,7 @@ public class LevelManagerScript : SingletonBehaviour<LevelManagerScript>
|
|||||||
rend.sprite = (tile as Tile).sprite;
|
rend.sprite = (tile as Tile).sprite;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//position the tile over the board (past the camera's FOV)
|
||||||
tilePlaceholder.transform.position = position + Vector3.up * Camera.main.orthographicSize * 2;
|
tilePlaceholder.transform.position = position + Vector3.up * Camera.main.orthographicSize * 2;
|
||||||
|
|
||||||
var delta = tilePlaceholder.transform.position - position;
|
var delta = tilePlaceholder.transform.position - position;
|
||||||
@ -61,10 +78,12 @@ public class LevelManagerScript : SingletonBehaviour<LevelManagerScript>
|
|||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
|
//if the placeholder was destroyed, stop
|
||||||
if (!tilePlaceholder) break;
|
if (!tilePlaceholder) break;
|
||||||
|
|
||||||
|
//make the placeholder fall and check if we went past the target position
|
||||||
speed += acceleration * Time.deltaTime;
|
speed += acceleration * Time.deltaTime;
|
||||||
tilePlaceholder.transform.position += direction * Time.deltaTime * speed;
|
tilePlaceholder.transform.position += speed * Time.deltaTime * direction;
|
||||||
var newDelta = tilePlaceholder.transform.position - position;
|
var newDelta = tilePlaceholder.transform.position - position;
|
||||||
var newSign = newDelta.y / Mathf.Abs(newDelta.y);
|
var newSign = newDelta.y / Mathf.Abs(newDelta.y);
|
||||||
|
|
||||||
@ -73,6 +92,7 @@ public class LevelManagerScript : SingletonBehaviour<LevelManagerScript>
|
|||||||
await Task.Yield();
|
await Task.Yield();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//place the tile and destroy the placeholder
|
||||||
putTileOnTilemap.Invoke();
|
putTileOnTilemap.Invoke();
|
||||||
Destroy(tilePlaceholder);
|
Destroy(tilePlaceholder);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -14,22 +14,25 @@ public class LoadingManager : MonoBehaviour
|
|||||||
|
|
||||||
private LoadingScreen loadingScreen;
|
private LoadingScreen loadingScreen;
|
||||||
|
|
||||||
public float testAddedTime = 5;
|
|
||||||
void Start()
|
void Start()
|
||||||
{
|
{
|
||||||
loadingScreen = GetComponent<LoadingScreen>();
|
loadingScreen = GetComponent<LoadingScreen>();
|
||||||
loadingScreen.ScreenActivated += StartLoadingGameScene;
|
loadingScreen.ScreenActivated += LoadTargetSceneAndCloseOthers;
|
||||||
loadingScreen.ShowLoadingScreen();
|
loadingScreen.ShowLoadingScreen();
|
||||||
}
|
}
|
||||||
private void StartLoadingGameScene()
|
|
||||||
|
/// <summary>
|
||||||
|
/// loads the target scene after given time
|
||||||
|
/// </summary>
|
||||||
|
private void LoadTargetSceneAndCloseOthers()
|
||||||
{
|
{
|
||||||
StartCoroutine(LoadSceneAfterTime());
|
StartCoroutine(LoadSceneAfterTime());
|
||||||
|
|
||||||
IEnumerator LoadSceneAfterTime()
|
IEnumerator LoadSceneAfterTime()
|
||||||
{
|
{
|
||||||
yield return new WaitForSeconds(testAddedTime);
|
yield return new WaitForSeconds(GlobalConfig.Instance.Current.loadingAddedTime);
|
||||||
|
|
||||||
loadingScreen.ScreenActivated -= StartLoadingGameScene;
|
loadingScreen.ScreenActivated -= LoadTargetSceneAndCloseOthers;
|
||||||
SceneManager.sceneLoaded += StartHidingLoadingScreen;
|
SceneManager.sceneLoaded += StartHidingLoadingScreen;
|
||||||
|
|
||||||
var sceneToLoad = PlayerPrefs.GetString(SceneToLoad);
|
var sceneToLoad = PlayerPrefs.GetString(SceneToLoad);
|
||||||
@ -45,12 +48,22 @@ public class LoadingManager : MonoBehaviour
|
|||||||
SceneManager.LoadScene(sceneToLoad, LoadSceneMode.Additive);
|
SceneManager.LoadScene(sceneToLoad, LoadSceneMode.Additive);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// hide loading screen after target scene has finished loading
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="arg0">unused</param>
|
||||||
|
/// <param name="arg1">unused</param>
|
||||||
private void StartHidingLoadingScreen(Scene arg0, LoadSceneMode arg1)
|
private void StartHidingLoadingScreen(Scene arg0, LoadSceneMode arg1)
|
||||||
{
|
{
|
||||||
SceneManager.sceneLoaded -= StartHidingLoadingScreen;
|
SceneManager.sceneLoaded -= StartHidingLoadingScreen;
|
||||||
loadingScreen.ScreenDeactivated += StartLoadingLevel;
|
loadingScreen.ScreenDeactivated += StartLoadingLevel;
|
||||||
loadingScreen.HideLoadingScreen();
|
loadingScreen.HideLoadingScreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// when loading screen is hidden, we load the level if we have a level to load (might not, if we have loaded another scene than the Game scene)
|
||||||
|
/// </summary>
|
||||||
private async void StartLoadingLevel()
|
private async void StartLoadingLevel()
|
||||||
{
|
{
|
||||||
loadingScreen.ScreenDeactivated -= StartLoadingLevel;
|
loadingScreen.ScreenDeactivated -= StartLoadingLevel;
|
||||||
@ -68,6 +81,11 @@ public class LoadingManager : MonoBehaviour
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// close the loading screen scene and start playing! w00t w00t
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="level"></param>
|
||||||
private void UnloadLoadingScreenScene(GatherAndDefend.LevelEditor.Level level)
|
private void UnloadLoadingScreenScene(GatherAndDefend.LevelEditor.Level level)
|
||||||
{
|
{
|
||||||
LevelManager.Instance.LevelLoaded -= UnloadLoadingScreenScene;
|
LevelManager.Instance.LevelLoaded -= UnloadLoadingScreenScene;
|
||||||
|
|||||||
@ -1,55 +0,0 @@
|
|||||||
using UnityEditor;
|
|
||||||
using UnityEngine;
|
|
||||||
|
|
||||||
|
|
||||||
public class SceneAttribute : PropertyAttribute { }
|
|
||||||
|
|
||||||
[CustomPropertyDrawer(typeof(SceneAttribute))]
|
|
||||||
public class SceneDrawer : PropertyDrawer
|
|
||||||
{
|
|
||||||
|
|
||||||
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (property.propertyType == SerializedPropertyType.String)
|
|
||||||
{
|
|
||||||
var sceneObject = GetSceneObject(property.stringValue);
|
|
||||||
var scene = EditorGUI.ObjectField(position, label, sceneObject, typeof(SceneAsset), true);
|
|
||||||
if (scene == null)
|
|
||||||
{
|
|
||||||
property.stringValue = "";
|
|
||||||
}
|
|
||||||
else if (scene.name != property.stringValue)
|
|
||||||
{
|
|
||||||
var sceneObj = GetSceneObject(scene.name);
|
|
||||||
if (sceneObj == null)
|
|
||||||
{
|
|
||||||
Debug.LogWarning("The scene " + scene.name + " cannot be used. To use this scene add it to the build settings for the project");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
property.stringValue = scene.name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
EditorGUI.LabelField(position, label.text, "Use [Scene] with strings.");
|
|
||||||
}
|
|
||||||
protected SceneAsset GetSceneObject(string sceneObjectName)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(sceneObjectName))
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var editorScene in EditorBuildSettings.scenes)
|
|
||||||
{
|
|
||||||
if (editorScene.path.IndexOf(sceneObjectName) != -1)
|
|
||||||
{
|
|
||||||
return AssetDatabase.LoadAssetAtPath(editorScene.path, typeof(SceneAsset)) as SceneAsset;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Debug.LogWarning("Scene [" + sceneObjectName + "] cannot be used. Add this scene to the 'Scenes in the Build' in build settings.");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
x
Reference in New Issue
Block a user