make transition fool proof

problème :
Il y avait plusieurs manières de faire planter le loading screen en appuyant sur des boutons

changements:
- turn off buttons when loading screen is active
- turn on buttons when loading screen is not active
- add event aggregator class to project and migrate every event to it
- fix bugs and regressions
This commit is contained in:
Felix Boucher 2023-10-09 22:21:06 -04:00
parent f9a54513cd
commit 8adc563d47
33 changed files with 1613 additions and 650 deletions

View File

@ -103,7 +103,7 @@ Important considerations :
targ.Level = map;
_infoText = string.Empty;
}
private async void Load()
private void Load()
{
var targ = (LevelEditor)target;
if (!targ.Level)
@ -123,7 +123,7 @@ Important considerations :
tilemap.tileAnchor = Vector3.zero;
tilemap.gameObject.AddComponent<TilemapRenderer>();
tilemap.transform.SetParent(targ.transform);
await tilemapData.LoadToTilemap(tilemap);
tilemapData.LoadToTilemapEditor(tilemap);
}
_infoText = string.Empty;
EditorSceneManager.MarkAllScenesDirty();

View File

@ -188,4 +188,4 @@ MonoBehaviour:
_renderLayer: Default
_position: {x: 0, y: 0}
_scale: {x: 1, y: 1}
_waveConfig: {fileID: 11400000, guid: 21b0f85f7c746974db1e72f2df646f5d, type: 2}
_waveConfig: {fileID: 0}

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 8c9cfa26abfee488c85f1582747f6a02
guid: 435ced5e4c7807f409bbc420fc6b95ad
DefaultImporter:
externalObjects: {}
userData:

View File

@ -241,7 +241,7 @@ Transform:
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &857764657
--- !u!1 &492460954
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@ -249,9 +249,9 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 857764658}
- component: {fileID: 857764660}
- component: {fileID: 857764659}
- component: {fileID: 492460955}
- component: {fileID: 492460957}
- component: {fileID: 492460956}
m_Layer: 6
m_Name: Spawners
m_TagString: Untagged
@ -259,13 +259,13 @@ GameObject:
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &857764658
--- !u!4 &492460955
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 857764657}
m_GameObject: {fileID: 492460954}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 0}
@ -274,13 +274,13 @@ Transform:
m_Father: {fileID: 1827197199}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!483693784 &857764659
--- !u!483693784 &492460956
TilemapRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 857764657}
m_GameObject: {fileID: 492460954}
m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 0
@ -316,22 +316,32 @@ TilemapRenderer:
m_SortingLayer: 0
m_SortingOrder: 2
m_ChunkSize: {x: 32, y: 32, z: 32}
m_ChunkCullingBounds: {x: 0, y: 0, z: 0}
m_ChunkCullingBounds: {x: 0.22500002, y: 0.22500002, z: 0}
m_MaxChunkCount: 16
m_MaxFrameAge: 16
m_SortOrder: 0
m_Mode: 0
m_DetectChunkCullingBounds: 0
m_MaskInteraction: 0
--- !u!1839735485 &857764660
--- !u!1839735485 &492460957
Tilemap:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 857764657}
m_GameObject: {fileID: 492460954}
m_Enabled: 1
m_Tiles:
- first: {x: -1, y: -3, z: 0}
second:
serializedVersion: 2
m_TileIndex: 0
m_TileSpriteIndex: 0
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -1, y: -2, z: 0}
second:
serializedVersion: 2
@ -342,11 +352,41 @@ Tilemap:
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -1, y: -1, z: 0}
second:
serializedVersion: 2
m_TileIndex: 0
m_TileSpriteIndex: 0
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -1, y: 0, z: 0}
second:
serializedVersion: 2
m_TileIndex: 0
m_TileSpriteIndex: 0
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -1, y: 1, z: 0}
second:
serializedVersion: 2
m_TileIndex: 0
m_TileSpriteIndex: 0
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -1, y: 2, z: 0}
second:
serializedVersion: 2
m_TileIndex: 1
m_TileSpriteIndex: 1
m_TileIndex: 0
m_TileSpriteIndex: 0
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
@ -354,17 +394,17 @@ Tilemap:
m_AllTileFlags: 0
m_AnimatedTiles: {}
m_TileAssetArray:
- m_RefCount: 0
m_Data: {fileID: 0}
- m_RefCount: 2
- m_RefCount: 5
m_Data: {fileID: 11400000, guid: 4002377ed7e87b34699f126f2b10c703, type: 2}
- m_RefCount: 1
m_Data: {fileID: 11400000, guid: 15606c8c503e8164fb69178aa7016f58, type: 2}
m_TileSpriteArray:
- m_RefCount: 0
m_Data: {fileID: 0}
- m_RefCount: 2
- m_RefCount: 5
m_Data: {fileID: 21300000, guid: b85a4b2ec6433d04895612d791edc260, type: 3}
- m_RefCount: 1
m_Data: {fileID: 21300000, guid: 8354a544f4ca3514e87d40d2de9afaee, type: 3}
m_TileMatrixArray:
- m_RefCount: 2
- m_RefCount: 6
m_Data:
e00: 1
e01: 0
@ -383,13 +423,13 @@ Tilemap:
e32: 0
e33: 1
m_TileColorArray:
- m_RefCount: 2
- m_RefCount: 6
m_Data: {r: 1, g: 1, b: 1, a: 1}
m_TileObjectToInstantiateArray: []
m_AnimationFrameRate: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Origin: {x: -10, y: -4, z: 0}
m_Size: {x: 21, y: 7, z: 1}
m_Origin: {x: -1, y: -3, z: 0}
m_Size: {x: 1, y: 6, z: 1}
m_TileAnchor: {x: 0, y: 0, z: 0}
m_TileOrientation: 0
m_TileOrientationMatrix:
@ -409,7 +449,7 @@ Tilemap:
e31: 0
e32: 0
e33: 1
--- !u!1 &1078808412
--- !u!1 &783540099
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@ -417,9 +457,9 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1078808413}
- component: {fileID: 1078808415}
- component: {fileID: 1078808414}
- component: {fileID: 783540100}
- component: {fileID: 783540102}
- component: {fileID: 783540101}
m_Layer: 0
m_Name: Background
m_TagString: Untagged
@ -427,13 +467,13 @@ GameObject:
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1078808413
--- !u!4 &783540100
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1078808412}
m_GameObject: {fileID: 783540099}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 0}
@ -442,13 +482,13 @@ Transform:
m_Father: {fileID: 1827197199}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!483693784 &1078808414
--- !u!483693784 &783540101
TilemapRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1078808412}
m_GameObject: {fileID: 783540099}
m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 0
@ -491,13 +531,13 @@ TilemapRenderer:
m_Mode: 0
m_DetectChunkCullingBounds: 0
m_MaskInteraction: 0
--- !u!1839735485 &1078808415
--- !u!1839735485 &783540102
Tilemap:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1078808412}
m_GameObject: {fileID: 783540099}
m_Enabled: 1
m_Tiles:
- first: {x: -10, y: -3, z: 0}
@ -1132,444 +1172,8 @@ Tilemap:
m_TileObjectToInstantiateArray: []
m_AnimationFrameRate: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Origin: {x: -10, y: -4, z: 0}
m_Size: {x: 21, y: 7, z: 1}
m_TileAnchor: {x: 0, y: 0, z: 0}
m_TileOrientation: 0
m_TileOrientationMatrix:
e00: 1
e01: 0
e02: 0
e03: 0
e10: 0
e11: 1
e12: 0
e13: 0
e20: 0
e21: 0
e22: 1
e23: 0
e30: 0
e31: 0
e32: 0
e33: 1
--- !u!1 &1408727360
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1408727361}
- component: {fileID: 1408727363}
- component: {fileID: 1408727362}
m_Layer: 0
m_Name: Entities
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1408727361
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1408727360}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 0}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1827197199}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!483693784 &1408727362
TilemapRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1408727360}
m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 0
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 0
m_ReflectionProbeUsage: 0
m_RayTracingMode: 0
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 0
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 1
m_ChunkSize: {x: 32, y: 32, z: 32}
m_ChunkCullingBounds: {x: 0, y: 0, z: 0}
m_MaxChunkCount: 16
m_MaxFrameAge: 16
m_SortOrder: 0
m_Mode: 0
m_DetectChunkCullingBounds: 0
m_MaskInteraction: 0
--- !u!1839735485 &1408727363
Tilemap:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1408727360}
m_Enabled: 1
m_Tiles:
- first: {x: -8, y: -3, z: 0}
second:
serializedVersion: 2
m_TileIndex: 2
m_TileSpriteIndex: 2
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -6, y: -3, z: 0}
second:
serializedVersion: 2
m_TileIndex: 2
m_TileSpriteIndex: 2
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -4, y: -3, z: 0}
second:
serializedVersion: 2
m_TileIndex: 2
m_TileSpriteIndex: 2
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -2, y: -3, z: 0}
second:
serializedVersion: 2
m_TileIndex: 2
m_TileSpriteIndex: 2
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -10, y: -2, z: 0}
second:
serializedVersion: 2
m_TileIndex: 1
m_TileSpriteIndex: 1
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -7, y: -1, z: 0}
second:
serializedVersion: 2
m_TileIndex: 3
m_TileSpriteIndex: 3
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -6, y: -1, z: 0}
second:
serializedVersion: 2
m_TileIndex: 3
m_TileSpriteIndex: 3
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -5, y: -1, z: 0}
second:
serializedVersion: 2
m_TileIndex: 3
m_TileSpriteIndex: 3
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -4, y: -1, z: 0}
second:
serializedVersion: 2
m_TileIndex: 3
m_TileSpriteIndex: 3
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -3, y: -1, z: 0}
second:
serializedVersion: 2
m_TileIndex: 3
m_TileSpriteIndex: 3
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -2, y: -1, z: 0}
second:
serializedVersion: 2
m_TileIndex: 3
m_TileSpriteIndex: 3
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -1, y: -1, z: 0}
second:
serializedVersion: 2
m_TileIndex: 3
m_TileSpriteIndex: 3
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -10, y: 0, z: 0}
second:
serializedVersion: 2
m_TileIndex: 1
m_TileSpriteIndex: 1
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -7, y: 0, z: 0}
second:
serializedVersion: 2
m_TileIndex: 3
m_TileSpriteIndex: 3
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -6, y: 0, z: 0}
second:
serializedVersion: 2
m_TileIndex: 3
m_TileSpriteIndex: 3
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -5, y: 0, z: 0}
second:
serializedVersion: 2
m_TileIndex: 3
m_TileSpriteIndex: 3
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -4, y: 0, z: 0}
second:
serializedVersion: 2
m_TileIndex: 3
m_TileSpriteIndex: 3
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -3, y: 0, z: 0}
second:
serializedVersion: 2
m_TileIndex: 3
m_TileSpriteIndex: 3
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -2, y: 0, z: 0}
second:
serializedVersion: 2
m_TileIndex: 3
m_TileSpriteIndex: 3
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -1, y: 0, z: 0}
second:
serializedVersion: 2
m_TileIndex: 3
m_TileSpriteIndex: 3
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -7, y: 1, z: 0}
second:
serializedVersion: 2
m_TileIndex: 3
m_TileSpriteIndex: 3
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -6, y: 1, z: 0}
second:
serializedVersion: 2
m_TileIndex: 3
m_TileSpriteIndex: 3
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -5, y: 1, z: 0}
second:
serializedVersion: 2
m_TileIndex: 3
m_TileSpriteIndex: 3
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -4, y: 1, z: 0}
second:
serializedVersion: 2
m_TileIndex: 3
m_TileSpriteIndex: 3
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -3, y: 1, z: 0}
second:
serializedVersion: 2
m_TileIndex: 3
m_TileSpriteIndex: 3
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -2, y: 1, z: 0}
second:
serializedVersion: 2
m_TileIndex: 3
m_TileSpriteIndex: 3
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -1, y: 1, z: 0}
second:
serializedVersion: 2
m_TileIndex: 3
m_TileSpriteIndex: 3
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -10, y: 2, z: 0}
second:
serializedVersion: 2
m_TileIndex: 1
m_TileSpriteIndex: 1
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
m_AnimatedTiles: {}
m_TileAssetArray:
- m_RefCount: 0
m_Data: {fileID: 0}
- m_RefCount: 3
m_Data: {fileID: 11400000, guid: e0d57b3c128ba1447920637cdb289530, type: 2}
- m_RefCount: 4
m_Data: {fileID: 11400000, guid: e0b1d2d816ae5624c99b09a2bebb2a39, type: 2}
- m_RefCount: 21
m_Data: {fileID: 11400000, guid: e74655ccbd41a2b46b1ec9615aba0301, type: 2}
m_TileSpriteArray:
- m_RefCount: 0
m_Data: {fileID: 0}
- m_RefCount: 3
m_Data: {fileID: 21300000, guid: f67e7f54162405141b42d32ef8df76ad, type: 3}
- m_RefCount: 4
m_Data: {fileID: 21300000, guid: 5c630d8b4d37f5d4f974d38f670ad5c1, type: 3}
- m_RefCount: 21
m_Data: {fileID: 21300000, guid: 6298844400e212d40bce870425ac2a5b, type: 3}
m_TileMatrixArray:
- m_RefCount: 28
m_Data:
e00: 1
e01: 0
e02: 0
e03: 0
e10: 0
e11: 1
e12: 0
e13: 0
e20: 0
e21: 0
e22: 1
e23: 0
e30: 0
e31: 0
e32: 0
e33: 1
m_TileColorArray:
- m_RefCount: 28
m_Data: {r: 1, g: 1, b: 1, a: 1}
m_TileObjectToInstantiateArray: []
m_AnimationFrameRate: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Origin: {x: -11, y: -4, z: 0}
m_Size: {x: 15, y: 7, z: 1}
m_Origin: {x: -10, y: -3, z: 0}
m_Size: {x: 10, y: 6, z: 1}
m_TileAnchor: {x: 0, y: 0, z: 0}
m_TileOrientation: 0
m_TileOrientationMatrix:
@ -1603,7 +1207,7 @@ PrefabInstance:
- target: {fileID: 3028288566889208750, guid: 02daecb0115395844b4932445d039051, type: 3}
propertyPath: firstLevel
value:
objectReference: {fileID: 11400000, guid: f5a11cb6d0d324b47b493042c7615112, type: 2}
objectReference: {fileID: 0}
- target: {fileID: 3028288566889208751, guid: 02daecb0115395844b4932445d039051, type: 3}
propertyPath: m_RootOrder
value: 2
@ -1692,9 +1296,9 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 1078808413}
- {fileID: 1408727361}
- {fileID: 857764658}
- {fileID: 783540100}
- {fileID: 2034898634}
- {fileID: 492460955}
m_Father: {fileID: 0}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@ -1712,3 +1316,231 @@ MonoBehaviour:
m_EditorClassIdentifier:
_path: {fileID: 102900000, guid: c9341b1bdc1103b4e832cf62d29e5471, type: 3}
_level: {fileID: 11400000, guid: f5a11cb6d0d324b47b493042c7615112, type: 2}
--- !u!1 &2034898633
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2034898634}
- component: {fileID: 2034898636}
- component: {fileID: 2034898635}
m_Layer: 0
m_Name: Entities
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &2034898634
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2034898633}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 0}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1827197199}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!483693784 &2034898635
TilemapRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2034898633}
m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 0
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 0
m_ReflectionProbeUsage: 0
m_RayTracingMode: 0
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 0
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 1
m_ChunkSize: {x: 32, y: 32, z: 32}
m_ChunkCullingBounds: {x: 0.13499999, y: 0.19, z: 0}
m_MaxChunkCount: 16
m_MaxFrameAge: 16
m_SortOrder: 0
m_Mode: 0
m_DetectChunkCullingBounds: 0
m_MaskInteraction: 0
--- !u!1839735485 &2034898636
Tilemap:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2034898633}
m_Enabled: 1
m_Tiles:
- first: {x: -10, y: -3, z: 0}
second:
serializedVersion: 2
m_TileIndex: 0
m_TileSpriteIndex: 0
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -9, y: -3, z: 0}
second:
serializedVersion: 2
m_TileIndex: 0
m_TileSpriteIndex: 0
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -10, y: -2, z: 0}
second:
serializedVersion: 2
m_TileIndex: 0
m_TileSpriteIndex: 0
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -9, y: -2, z: 0}
second:
serializedVersion: 2
m_TileIndex: 0
m_TileSpriteIndex: 0
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -10, y: -1, z: 0}
second:
serializedVersion: 2
m_TileIndex: 0
m_TileSpriteIndex: 0
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -9, y: -1, z: 0}
second:
serializedVersion: 2
m_TileIndex: 0
m_TileSpriteIndex: 0
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -6, y: 2, z: 0}
second:
serializedVersion: 2
m_TileIndex: 1
m_TileSpriteIndex: 1
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
- first: {x: -5, y: 2, z: 0}
second:
serializedVersion: 2
m_TileIndex: 1
m_TileSpriteIndex: 1
m_TileMatrixIndex: 0
m_TileColorIndex: 0
m_TileObjectToInstantiateIndex: 65535
dummyAlignment: 0
m_AllTileFlags: 0
m_AnimatedTiles: {}
m_TileAssetArray:
- m_RefCount: 6
m_Data: {fileID: 11400000, guid: e0b1d2d816ae5624c99b09a2bebb2a39, type: 2}
- m_RefCount: 2
m_Data: {fileID: 11400000, guid: e0d57b3c128ba1447920637cdb289530, type: 2}
m_TileSpriteArray:
- m_RefCount: 6
m_Data: {fileID: 21300000, guid: 43582b3c6b60fd144bc56d8ab3b14349, type: 3}
- m_RefCount: 2
m_Data: {fileID: 21300000, guid: 6298844400e212d40bce870425ac2a5b, type: 3}
m_TileMatrixArray:
- m_RefCount: 8
m_Data:
e00: 1
e01: 0
e02: 0
e03: 0
e10: 0
e11: 1
e12: 0
e13: 0
e20: 0
e21: 0
e22: 1
e23: 0
e30: 0
e31: 0
e32: 0
e33: 1
m_TileColorArray:
- m_RefCount: 8
m_Data: {r: 1, g: 1, b: 1, a: 1}
m_TileObjectToInstantiateArray: []
m_AnimationFrameRate: 1
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Origin: {x: -10, y: -3, z: 0}
m_Size: {x: 10, y: 6, z: 1}
m_TileAnchor: {x: 0, y: 0, z: 0}
m_TileOrientation: 0
m_TileOrientationMatrix:
e00: 1
e01: 0
e02: 0
e03: 0
e10: 0
e11: 1
e12: 0
e13: 0
e20: 0
e21: 0
e22: 1
e23: 0
e30: 0
e31: 0
e32: 0
e33: 1

View File

@ -251,7 +251,7 @@ RectTransform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 444904903}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalPosition: {x: 0, y: 0, z: 8.84}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
@ -273,7 +273,7 @@ CanvasGroup:
m_Enabled: 1
m_Alpha: 0
m_Interactable: 0
m_BlocksRaycasts: 0
m_BlocksRaycasts: 1
m_IgnoreParentGroups: 1
--- !u!114 &444904906
MonoBehaviour:
@ -339,7 +339,7 @@ RectTransform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1991489725}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalPosition: {x: 0, y: 0, z: 5}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
@ -386,5 +386,3 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: aef75be033508a4498fa7f546d6ebef2, type: 3}
m_Name:
m_EditorClassIdentifier:
_gameScene: Game
_sceneSelection: LevelSelect

View File

@ -4,6 +4,8 @@ using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using GatherAndDefend.Events;
using static LevelManager;
[RequireComponent(typeof(Button))]
public abstract class UnitPlacementButton : MonoBehaviour, IPointerDownHandler
@ -28,13 +30,30 @@ public abstract class UnitPlacementButton : MonoBehaviour, IPointerDownHandler
[SerializeField]
private TMP_Text _rockLabel;
private bool _canSpawn = false;
protected virtual void Start()
{
{
_button = GetComponent<Button>();
_button.enabled = false;
EventAggregator.Instance.GetEvent<LevelLoadedEvent>().Attach(OnLevelLoaded);
EventAggregator.Instance.GetEvent<ExitingLevelEvent>().Attach(DeactivateButton);
}
private void OnLevelLoaded(GatherAndDefend.LevelEditor.Level level)
{
_canSpawn = true;
EventAggregator.Instance.GetEvent<LevelLoadedEvent>().Detach(OnLevelLoaded);
}
void DeactivateButton()
{
EventAggregator.Instance.GetEvent<ExitingLevelEvent>().Detach(DeactivateButton);
_canSpawn = false;
}
protected virtual void Update()
{
_button.interactable = ResourceManager.Instance.EnoughFor(_rock, _wood, _food);
_button.interactable = ResourceManager.Instance.EnoughFor(_rock, _wood, _food) && _button.enabled && _canSpawn;
SetTextFor(_foodLabel, _food);
SetTextFor(_rockLabel, _rock);
SetTextFor(_woodLabel, _wood);

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: b232aec3472e8a7408e34c6ae8608d4a
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,28 @@
using System.Collections.Generic;
namespace GatherAndDefend.Events
{
/// <summary>
/// makes it possible to add custom and centralized event observables<br/>
/// </summary>
public class EventAggregator : Singleton<EventAggregator>
{
private List<EventBase> events = new List<EventBase>();
/// <summary>
/// returns an event observable of given type. Creates it if non-existent
/// </summary>
/// <typeparam name="T">the type of the event</typeparam>
/// <returns></returns>
public T GetEvent<T>() where T : EventBase, new()
{
var evt = events.Find(x => x is T);
if (evt == null)
{
evt = new T();
events.Add(evt);
}
return evt as T;
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 2ac29c6e09760dc45a27054e159f1240
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,34 @@

namespace GatherAndDefend.Events
{
/// <summary>
/// lets you create custom events for the event aggregator
/// </summary>
public abstract class EventBase
{
private event System.Action innerEvent;
public void Invoke()
{
innerEvent?.Invoke();
}
public void Attach(System.Action handler)
{
innerEvent += handler;
}
public void Detach(System.Action handler)
{
innerEvent -= handler;
}
}
/// <summary>
/// lets you create custom event with given parameter for the event aggregator
/// </summary>
/// <typeparam name="T"></typeparam>
public abstract class EventBase<T> : EventBase
{
private event System.Action<T> innerEvent;
public void Invoke(T value) => innerEvent?.Invoke(value);
public void Attach(System.Action<T> handler) => innerEvent += handler;
public void Detach(System.Action<T> handler) => innerEvent -= handler;
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 515b3ee1c144baa4abe1951ad6039ae4
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,3 @@
using GatherAndDefend.Events;
public class ExitingLevelEvent : EventBase { }

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: ac71e91f163c3c446850b85d7b6a59c4
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,7 @@
using GatherAndDefend.Events;
using GatherAndDefend.LevelEditor;
public class LevelLoadedEvent : EventBase<Level>
{
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: ccf2a9d05b59e0947b1f327a8cb970f7
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,5 @@
using GatherAndDefend.Events;
public class ScreenActivatedEvent : EventBase
{
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: c2b6c01fae276b7448d4ed179443af4e
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,5 @@
using GatherAndDefend.Events;
public class ScreenDeactivatedEvent : EventBase
{
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 864c47f40960dde46b92c49f90bd812c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,3 +1,4 @@
using GatherAndDefend.Events;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
@ -25,5 +26,7 @@ public class GoToScene : MonoBehaviour
{
SceneManager.LoadScene(_sceneToLoad);
}
EventAggregator.Instance.GetEvent<ExitingLevelEvent>().Invoke();
}
}

View File

@ -1,6 +1,8 @@
using GatherAndDefend.Events;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using static LevelManager;
public class KeepLevelAnchored : MonoBehaviour
{
@ -11,7 +13,7 @@ public class KeepLevelAnchored : MonoBehaviour
void Start()
{
_camera = Camera.main;
LevelManager.Instance.LevelLoaded += CalculateBound;
EventAggregator.Instance.GetEvent<LevelLoadedEvent>().Attach(CalculateBound);
if (!LevelManager.Instance.CurrentLevel) return;
CalculateBound(LevelManager.Instance.CurrentLevel);
@ -26,7 +28,7 @@ public class KeepLevelAnchored : MonoBehaviour
void OnDestroy()
{
LevelManager.Instance.LevelLoaded -= CalculateBound;
EventAggregator.Instance.GetEvent<LevelLoadedEvent>().Attach(CalculateBound);
}
// Update is called once per frame

View File

@ -19,13 +19,7 @@ namespace GatherAndDefend.LevelEditor
data.SaveFromTilemap(tilemap);
_data.Add(data);
}
public async void LoadToTilemap(Tilemap tilemap)
{
var data = _data.Find(x => x.Key == tilemap.name);
if (data == null) return;
await data.LoadToTilemap(tilemap);
}
public WaveConfig WaveConfig { get { return _waveConfig; } }
public IEnumerator<TilemapData> GetEnumerator()

View File

@ -38,17 +38,10 @@ namespace GatherAndDefend.LevelEditor
///
/// </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)
public void LoadToTilemapEditor(Tilemap reference)
{
// if the function we receive is null, we just make it constant 1
if (tileSpawnAcceleration == default) tileSpawnAcceleration = () => 1;
var tilesPerSecond = GlobalConfig.Instance.Current.baseTileSpawnSpeed;
var tilesPerSecond = Application.isPlaying ? GlobalConfig.Instance.Current.baseTileSpawnSpeed : float.Epsilon;
reference.transform.localPosition = _position;
reference.transform.localScale = _scale;
@ -66,10 +59,58 @@ namespace GatherAndDefend.LevelEditor
var tasks = new List<Task>();
foreach (TileData data in _tiles)
{
tasks.Add(placementAnimation(data.Position, data.Tile, () => reference.SetTile(data.Position, data.Tile)));
reference.SetTile(data.Position, data.Tile);
}
}
/// <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, Func<bool> shouldKillTask, 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 (placementAnimation == null) placementAnimation = (tileData, placer, killer) =>
{
reference.SetTile(tileData.Position, tileData.Tile);
return null;
};
var tilesPerSecond = Application.isPlaying ? GlobalConfig.Instance.Current.baseTileSpawnSpeed : float.Epsilon;
reference.transform.localPosition = _position;
reference.transform.localScale = _scale;
var rend = reference.GetComponent<TilemapRenderer>();
rend.sortingOrder = _renderOrder;
rend.sortingLayerName = _renderLayer;
if (_isInvisible) rend.gameObject.layer = INVISIBLE_LAYER;
if (_isCollidable)
{
var collision = rend.gameObject.AddComponent<TilemapCollider2D>();
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>();
foreach (TileData data in _tiles)
{
tasks.Add(placementAnimation(data, () => reference.SetTile(data.Position, data.Tile), shouldKillTask));
if (shouldKillTask())
{
return;
}
await Task.Delay((int)(1000f / (tilesPerSecond * tileSpawnAcceleration())));
}
allTilesSpawned?.Invoke();
if (shouldKillTask())
{
return;
}
await Task.WhenAll(tasks);
}
/// <summary>

View File

@ -8,6 +8,7 @@ using Newtonsoft.Json;
using System.IO;
using System.Collections;
using System.Threading.Tasks;
using GatherAndDefend.Events;
/// <summary>
/// data class for containing everything level related
@ -16,8 +17,6 @@ public class LevelManager : Singleton<LevelManager>
{
string SavePath => Application.dataPath + "/save.txt";
public event OnLevelLoaded LevelLoaded;
public delegate void OnLevelLoaded(Level level);
public delegate void LevelAction(ILevelObject levelObject);
public delegate bool LevelPredicate<T>(T levelObject) where T : ILevelObject;
@ -26,6 +25,8 @@ public class LevelManager : Singleton<LevelManager>
private readonly List<ILevelObject> _toRemove;
private readonly List<ILevelObject> _levelObjects;
private WaveObserver _waveObserver;
private bool _isLoading = true;
private bool _shouldKillTask = false;
private Tilemap _dynamicTilemap;
public Tilemap DynamicTilemap
@ -100,8 +101,8 @@ public class LevelManager : Singleton<LevelManager>
#endregion
#region [Level management]
public void AddAndRemoveObjects()
void AddAndRemoveObjects()
{
//add and remove
var toAdd = new List<ILevelObject>(_toAdd);
@ -123,6 +124,7 @@ public class LevelManager : Singleton<LevelManager>
public void UpdateLevel()
{
if (_isLoading) return;
AddAndRemoveObjects();
_levelObjects.ForEach(levelObject =>
@ -142,22 +144,25 @@ public class LevelManager : Singleton<LevelManager>
Clear();
}
public void KillLoading()
{
_shouldKillTask = true;
}
/// <summary>
/// loads a Level scriptable object
/// </summary>
/// <param name="level">the level to load</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, PlacementAnimationHandler placementAnimation = null)
{
_isLoading = true;
_shouldKillTask = false;
float accelerationOfAcceleration = GlobalConfig.Instance.Current.tileSpawnAcceleration;
float tileCurrentAcceleration = 1;
float tileSpawnAccelerationFunc() => (tileCurrentAcceleration += accelerationOfAcceleration * Time.deltaTime);
if (shouldClear)
{
ClearLevel();
}
ClearLevel();
_currentLevel = level;
_waveObserver = WaveObserver.Instance;
@ -190,12 +195,23 @@ public class LevelManager : Singleton<LevelManager>
tilemap.gameObject.AddComponent<TilemapRenderer>();
tilemap.transform.SetParent(grid.transform);
tasks.Add(tilemapData.LoadToTilemap(tilemap, placementAnimation, OnAllTilesSpawned, tileSpawnAccelerationFunc));
tasks.Add(tilemapData.LoadToTilemap(tilemap, () => _shouldKillTask, placementAnimation, OnAllTilesSpawned, tileSpawnAccelerationFunc));
if (_shouldKillTask)
{
return;
}
await Extensions.WaitWhile(() => !allTilesSpawned);
}
if (_shouldKillTask)
{
return;
}
await Task.WhenAll(tasks);
LevelLoaded?.Invoke(level);
EventAggregator.Instance.GetEvent<LevelLoadedEvent>().Invoke(level);
_isLoading = false;
Debug.Log("level loaded successfully");
}
@ -205,17 +221,12 @@ public class LevelManager : Singleton<LevelManager>
/// <param name="levelName">the name of the loaded Level</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, PlacementAnimationHandler placementAnimation = null)
{
if (shouldClear)
{
ClearLevel();
}
//fetch level from database
_currentLevel = Database.Instance.ScriptableObjects[levelName] as Level;
await LoadLevel(_currentLevel, shouldClear, placementAnimation);
await LoadLevel(_currentLevel, placementAnimation).ConfigureAwait(false);
}
public void SaveFile()
@ -255,8 +266,7 @@ public class LevelManager : Singleton<LevelManager>
var otherDict = dicts.Find(x => x[nameof(ILevelObject.ObjectType)].ToString() == nameof(ILevelObject.ObjectType.Other));
DictToOtherValues(otherDict);
LevelLoaded?.Invoke(_currentLevel);
EventAggregator.Instance.GetEvent<LevelLoadedEvent>().Invoke(_currentLevel);
Debug.Log("game loaded successfully");
}

View File

@ -4,12 +4,14 @@ using System.Collections;
using UnityEngine.Tilemaps;
using System.Threading.Tasks;
using System;
using GatherAndDefend.Events;
using static LevelManager;
/// <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(GatherAndDefend.LevelEditor.TileData tileData, Action tilePlacement, Func<bool> shouldKillTask);
public class LevelManagerScript : SingletonBehaviour<LevelManagerScript>
{
private Action updateAction = null;
@ -18,15 +20,18 @@ public class LevelManagerScript : SingletonBehaviour<LevelManagerScript>
async void Start()
{
//only when the level is loaded do we start updating
LevelManager.Instance.LevelLoaded += Instance_LevelLoaded;
EventAggregator.Instance.GetEvent<LevelLoadedEvent>().Attach(Instance_LevelLoaded);
EventAggregator.Instance.GetEvent<ExitingLevelEvent>().Attach(KillLoading);
if (loadOnStart && firstLevel)
{
await LevelManager.Instance.LoadLevel(firstLevel, placementAnimation: PlacementAnimation);
await LevelManager.Instance.LoadLevel(firstLevel, PlacementAnimation);
}
}
void OnDestroy()
{
EventAggregator.Instance.GetEvent<ExitingLevelEvent>().Detach(KillLoading);
updateAction = null;
}
@ -48,7 +53,7 @@ public class LevelManagerScript : SingletonBehaviour<LevelManagerScript>
/// <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(GatherAndDefend.LevelEditor.TileData tile, Action putTileOnTilemap, Func<bool> shouldKillTask)
{
const string layer = "Unit";
float speed = 0;
@ -56,23 +61,24 @@ public class LevelManagerScript : SingletonBehaviour<LevelManagerScript>
//create the falling GameObject that will placehold for the tile
var tilePlaceholder = new GameObject("tile");
tilePlaceholder.transform.SetParent(Instance.transform);
var rend = tilePlaceholder.AddComponent<SpriteRenderer>();
rend.sortingOrder = 10;
rend.sortingLayerName = layer;
if (tile is LevelTile)
if (tile.Tile is LevelTile)
{
rend.sprite = (tile as LevelTile).Sprite;
rend.sprite = (tile.Tile as LevelTile).Sprite;
}
else
{
rend.sprite = (tile as Tile).sprite;
rend.sprite = (tile.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 = tile.Position + Vector3.up * Camera.main.orthographicSize * 2;
var delta = tilePlaceholder.transform.position - position;
var delta = tilePlaceholder.transform.position - tile.Position;
var direction = delta.normalized;
var signY = delta.y / Mathf.Abs(delta.y);
@ -84,11 +90,15 @@ public class LevelManagerScript : SingletonBehaviour<LevelManagerScript>
//make the placeholder fall and check if we went past the target position
speed += acceleration * Time.deltaTime;
tilePlaceholder.transform.position += speed * Time.deltaTime * direction;
var newDelta = tilePlaceholder.transform.position - position;
var newDelta = tilePlaceholder.transform.position - tile.Position;
var newSign = newDelta.y / Mathf.Abs(newDelta.y);
if (newSign != signY) break;
if (shouldKillTask())
{
return;
}
await Task.Yield();
}
@ -96,4 +106,8 @@ public class LevelManagerScript : SingletonBehaviour<LevelManagerScript>
putTileOnTilemap.Invoke();
Destroy(tilePlaceholder);
}
void KillLoading()
{
LevelManager.Instance.KillLoading();
}
}

View File

@ -1,7 +1,9 @@
using System.Collections;
using GatherAndDefend.Events;
using System.Collections;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
/// <summary>
/// manages the logic of loading
@ -17,9 +19,23 @@ public class LoadingManager : MonoBehaviour
void Start()
{
loadingScreen = GetComponent<LoadingScreen>();
loadingScreen.ScreenActivated += LoadTargetSceneAndCloseOthers;
EventAggregator.Instance.GetEvent<ScreenActivatedEvent>().Attach(LoadTargetSceneAndCloseOthers);
loadingScreen.ShowLoadingScreen();
}
void Update()
{
foreach (var button in FindObjectsOfType<Button>())
{
button.enabled = false;
}
}
void OnDestroy()
{
foreach (var button in FindObjectsOfType<Button>())
{
button.enabled = true;
}
}
/// <summary>
/// loads the target scene after given time
@ -32,7 +48,7 @@ public class LoadingManager : MonoBehaviour
{
yield return new WaitForSeconds(GlobalConfig.Instance.Current.loadingAddedTime);
loadingScreen.ScreenActivated -= LoadTargetSceneAndCloseOthers;
EventAggregator.Instance.GetEvent<ScreenActivatedEvent>().Detach(LoadTargetSceneAndCloseOthers);
SceneManager.sceneLoaded += StartHidingLoadingScreen;
var sceneToLoad = PlayerPrefs.GetString(SceneToLoad);
@ -57,38 +73,32 @@ public class LoadingManager : MonoBehaviour
private void StartHidingLoadingScreen(Scene arg0, LoadSceneMode arg1)
{
SceneManager.sceneLoaded -= StartHidingLoadingScreen;
loadingScreen.ScreenDeactivated += StartLoadingLevel;
EventAggregator.Instance.GetEvent<ScreenDeactivatedEvent>().Attach(StartLoadingLevel);
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 void StartLoadingLevel()
{
loadingScreen.ScreenDeactivated -= StartLoadingLevel;
LevelManager.Instance.LevelLoaded += UnloadLoadingScreenScene;
EventAggregator.Instance.GetEvent<ScreenDeactivatedEvent>().Detach(StartLoadingLevel);
var levelToLoad = PlayerPrefs.GetInt(LevelToLoad, NoLevel);
if (levelToLoad == NoLevel)
{
UnloadLoadingScreenScene(null);
}
else
if(levelToLoad != NoLevel)
{
string lvlName = $"Level{levelToLoad}";
await LevelManager.Instance.LoadLevel(lvlName, true, LevelManagerScript.PlacementAnimation);
_ = LevelManager.Instance.LoadLevel(lvlName, LevelManagerScript.PlacementAnimation);
}
UnloadLoadingScreenScene();
}
/// <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()
{
LevelManager.Instance.LevelLoaded -= UnloadLoadingScreenScene;
SceneManager.UnloadSceneAsync(gameObject.scene.name);
}

View File

@ -3,6 +3,8 @@ using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using GatherAndDefend.Events;
[CustomEditor(typeof(LoadingScreen))]
public class LoadingScreenEditor : Editor
{
@ -26,9 +28,6 @@ public class LoadingScreenEditor : Editor
/// </summary>
public class LoadingScreen : SingletonBehaviour<LoadingScreen>
{
public event System.Action ScreenActivated;
public event System.Action ScreenDeactivated;
[Header("Screen")]
public CanvasGroup blueScreen;
public float fadeInDuration = 1;
@ -59,12 +58,12 @@ public class LoadingScreen : SingletonBehaviour<LoadingScreen>
private IEnumerator EnableLoadingScreen()
{
yield return blueScreen.FadeTo(1, fadeInDuration);
ScreenActivated?.Invoke();
EventAggregator.Instance.GetEvent<ScreenActivatedEvent>().Invoke();
}
private IEnumerator DisableLoadingScreen()
{
yield return blueScreen.FadeTo(0, fadeOutDuration);
ScreenDeactivated?.Invoke();
EventAggregator.Instance.GetEvent<ScreenDeactivatedEvent>().Invoke();
}
public void ShowLoadingScreen()
{

View File

@ -68,6 +68,7 @@ public class ResourceMaker : MonoBehaviour
public void GenerateResource()
{
if (!_rigidbody) return;
_isPlaying = true;
_rigidbody.gravityScale = 0.0f;
_rigidbody.velocity = Vector2.zero;

View File

@ -24,6 +24,8 @@ public class Root : MonoBehaviour
Rigidbody2D _rigidbodyAlly;
Rigidbody2D _rigidbodyOpponent;
_rigidbodyAlly = _entity.GetComponent<Rigidbody2D>();
if (!_entity.Enemy) return;
_rigidbodyOpponent = _entity.Enemy.GetComponent<Rigidbody2D>();
Vector3 spawnPos = (_projectileSpawn == null) ? _rigidbodyAlly.position : _projectileSpawn.position;

View File

@ -1,10 +1,6 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine;
using UnityEngine.SceneManagement;
using System;
using UnityEditor;
public class WorldMapManager : MonoBehaviour
{

View File

@ -8,11 +8,11 @@ EditorBuildSettings:
- enabled: 1
path: Assets/Scenes/LevelSelect.unity
guid: c1efd9104a876984eb669c4bd54598d1
- enabled: 1
path: Assets/Scenes/Game.unity
guid: 8c9cfa26abfee488c85f1582747f6a02
- enabled: 1
path: Assets/Scenes/LoadingScreen.unity
guid: 6da14f6006606f840b2df7664c50e1ec
- enabled: 1
path: Assets/Scenes/Game.unity
guid: 435ced5e4c7807f409bbc420fc6b95ad
m_configObjects:
com.unity.input.settings: {fileID: 11400000, guid: 2670dfbb5772b0248b8c8ccaa6470d9a, type: 2}