diff --git a/Assets/Docu.meta b/Assets/Docu.meta new file mode 100644 index 0000000..a7127f9 --- /dev/null +++ b/Assets/Docu.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8a15f4b90f65f61489693e72dc43b1bd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/LevelManager class diagram.png b/Assets/Docu/LevelManager class diagram.png similarity index 100% rename from Assets/LevelManager class diagram.png rename to Assets/Docu/LevelManager class diagram.png diff --git a/Assets/LevelManager class diagram.png.meta b/Assets/Docu/LevelManager class diagram.png.meta similarity index 100% rename from Assets/LevelManager class diagram.png.meta rename to Assets/Docu/LevelManager class diagram.png.meta diff --git a/Assets/Editor/DatabaseEditor.cs b/Assets/Editor/DatabaseEditor.cs new file mode 100644 index 0000000..ea3811b --- /dev/null +++ b/Assets/Editor/DatabaseEditor.cs @@ -0,0 +1,51 @@ +using System.Linq; +using UnityEditor; +using UnityEngine; +using System.IO; +using System.Collections.Generic; + + +[CustomEditor(typeof(Database))] +public class DatabaseEditor : Editor +{ + public override void OnInspectorGUI() + { + DrawDefaultInspector(); + + if (GUILayout.Button("fetch assets")) + { + var targ = target as Database; + + + + foreach (var folder in targ.Folders) + { + var path = AssetDatabase.GetAssetPath(folder); + foreach (var file in GetAllPaths(path)) + { + var scriptableObject = AssetDatabase.LoadAssetAtPath(file); + if (scriptableObject && !targ.ScriptableObjects.Contains(scriptableObject)) + { + targ.ScriptableObjects.Add(scriptableObject); + } + + var prefab = AssetDatabase.LoadAssetAtPath(file); + if (prefab && !targ.Prefabs.Contains(prefab)) + { + targ.Prefabs.Add(prefab); + } + } + } + } + } + + string[] GetAllPaths(string target) + { + var files = Directory.GetFiles(target).ToList(); + foreach (var dir in Directory.GetDirectories(target)) + { + files.AddRange(GetAllPaths(dir)); + } + return files.ToArray(); + } +} diff --git a/Assets/Scripts/General/SingletonSO.cs.meta b/Assets/Editor/DatabaseEditor.cs.meta similarity index 83% rename from Assets/Scripts/General/SingletonSO.cs.meta rename to Assets/Editor/DatabaseEditor.cs.meta index 2ed6595..f67b826 100644 --- a/Assets/Scripts/General/SingletonSO.cs.meta +++ b/Assets/Editor/DatabaseEditor.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d7329f36f451bd2479a760e1fc38e1a3 +guid: ca089e7bfdaf2a943aebf7ce03bbd2e6 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Editor/LevelManagerEditor.cs b/Assets/Editor/LevelManagerEditor.cs new file mode 100644 index 0000000..4248da3 --- /dev/null +++ b/Assets/Editor/LevelManagerEditor.cs @@ -0,0 +1,19 @@ +using UnityEditor; +using UnityEngine; + +[CustomEditor(typeof(LevelManagerScript))] +public class LevelManagerEditor : Editor +{ + public override void OnInspectorGUI() + { + DrawDefaultInspector(); + if (GUILayout.Button("Save")) + { + LevelManager.Instance.SaveFile(); + } + if (GUILayout.Button("Load")) + { + LevelManager.Instance.LoadFile(); + } + } +} \ No newline at end of file diff --git a/Assets/Editor/LevelManagerEditor.cs.meta b/Assets/Editor/LevelManagerEditor.cs.meta new file mode 100644 index 0000000..dda2872 --- /dev/null +++ b/Assets/Editor/LevelManagerEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0c34c07f45297c74ca25240700f7903d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/LevelEditor/LevelEditorScene.unity b/Assets/LevelEditor/LevelEditorScene.unity index b735cac..885415f 100644 --- a/Assets/LevelEditor/LevelEditorScene.unity +++ b/Assets/LevelEditor/LevelEditorScene.unity @@ -123,7 +123,7 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} ---- !u!1 &86093666 +--- !u!1 &364640801 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -131,9 +131,127 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 86093667} - - component: {fileID: 86093669} - - component: {fileID: 86093668} + - component: {fileID: 364640805} + - component: {fileID: 364640804} + - component: {fileID: 364640803} + - component: {fileID: 364640802} + m_Layer: 0 + m_Name: Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &364640802 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 364640801} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 2 + m_RequiresOpaqueTextureOption: 2 + m_CameraType: 0 + m_Cameras: [] + m_RendererIndex: -1 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 + m_RenderPostProcessing: 0 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_AllowXRRendering: 1 + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_Version: 2 +--- !u!81 &364640803 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 364640801} + m_Enabled: 1 +--- !u!20 &364640804 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 364640801} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 55 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &364640805 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 364640801} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &448766791 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 448766792} + - component: {fileID: 448766794} + - component: {fileID: 448766793} m_Layer: 0 m_Name: Entities m_TagString: Untagged @@ -141,13 +259,13 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &86093667 +--- !u!4 &448766792 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 86093666} + m_GameObject: {fileID: 448766791} 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: 1} @@ -156,13 +274,13 @@ Transform: m_Father: {fileID: 1827197199} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!483693784 &86093668 +--- !u!483693784 &448766793 TilemapRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 86093666} + m_GameObject: {fileID: 448766791} m_Enabled: 1 m_CastShadows: 0 m_ReceiveShadows: 0 @@ -196,7 +314,7 @@ TilemapRenderer: m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 m_SortingLayer: 0 - m_SortingOrder: 0 + m_SortingOrder: 1 m_ChunkSize: {x: 32, y: 32, z: 32} m_ChunkCullingBounds: {x: 0, y: 0, z: 0} m_MaxChunkCount: 16 @@ -205,13 +323,13 @@ TilemapRenderer: m_Mode: 0 m_DetectChunkCullingBounds: 0 m_MaskInteraction: 0 ---- !u!1839735485 &86093669 +--- !u!1839735485 &448766794 Tilemap: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 86093666} + m_GameObject: {fileID: 448766791} m_Enabled: 1 m_Tiles: - first: {x: -10, y: -4, z: 0} @@ -707,7 +825,7 @@ Tilemap: e31: 0 e32: 0 e33: 1 ---- !u!1 &364640801 +--- !u!1 &1134605333 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -715,127 +833,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 364640805} - - component: {fileID: 364640804} - - component: {fileID: 364640803} - - component: {fileID: 364640802} - m_Layer: 0 - m_Name: Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &364640802 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 364640801} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} - m_Name: - m_EditorClassIdentifier: - m_RenderShadows: 1 - m_RequiresDepthTextureOption: 2 - m_RequiresOpaqueTextureOption: 2 - m_CameraType: 0 - m_Cameras: [] - m_RendererIndex: -1 - m_VolumeLayerMask: - serializedVersion: 2 - m_Bits: 1 - m_VolumeTrigger: {fileID: 0} - m_VolumeFrameworkUpdateModeOption: 2 - m_RenderPostProcessing: 0 - m_Antialiasing: 0 - m_AntialiasingQuality: 2 - m_StopNaN: 0 - m_Dithering: 0 - m_ClearDepth: 1 - m_AllowXRRendering: 1 - m_RequiresDepthTexture: 0 - m_RequiresColorTexture: 0 - m_Version: 2 ---- !u!81 &364640803 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 364640801} - m_Enabled: 1 ---- !u!20 &364640804 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 364640801} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 1 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 1 - orthographic size: 5 - m_Depth: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 55 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 1 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &364640805 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 364640801} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &449089078 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 449089079} - - component: {fileID: 449089081} - - component: {fileID: 449089080} + - component: {fileID: 1134605334} + - component: {fileID: 1134605336} + - component: {fileID: 1134605335} m_Layer: 0 m_Name: Background m_TagString: Untagged @@ -843,13 +843,13 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &449089079 +--- !u!4 &1134605334 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 449089078} + m_GameObject: {fileID: 1134605333} 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: 1} @@ -858,13 +858,13 @@ Transform: m_Father: {fileID: 1827197199} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!483693784 &449089080 +--- !u!483693784 &1134605335 TilemapRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 449089078} + m_GameObject: {fileID: 1134605333} m_Enabled: 1 m_CastShadows: 0 m_ReceiveShadows: 0 @@ -907,13 +907,13 @@ TilemapRenderer: m_Mode: 0 m_DetectChunkCullingBounds: 0 m_MaskInteraction: 0 ---- !u!1839735485 &449089081 +--- !u!1839735485 &1134605336 Tilemap: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 449089078} + m_GameObject: {fileID: 1134605333} m_Enabled: 1 m_Tiles: - first: {x: -10, y: -4, z: 0} @@ -2439,7 +2439,7 @@ Tilemap: e31: 0 e32: 0 e33: 1 ---- !u!1 &991823372 +--- !u!1 &1588294913 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2447,9 +2447,9 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 991823373} - - component: {fileID: 991823375} - - component: {fileID: 991823374} + - component: {fileID: 1588294914} + - component: {fileID: 1588294916} + - component: {fileID: 1588294915} m_Layer: 6 m_Name: Spawners m_TagString: Untagged @@ -2457,13 +2457,13 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &991823373 +--- !u!4 &1588294914 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 991823372} + m_GameObject: {fileID: 1588294913} 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: 1} @@ -2472,13 +2472,13 @@ Transform: m_Father: {fileID: 1827197199} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!483693784 &991823374 +--- !u!483693784 &1588294915 TilemapRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 991823372} + m_GameObject: {fileID: 1588294913} m_Enabled: 1 m_CastShadows: 0 m_ReceiveShadows: 0 @@ -2521,13 +2521,13 @@ TilemapRenderer: m_Mode: 0 m_DetectChunkCullingBounds: 0 m_MaskInteraction: 0 ---- !u!1839735485 &991823375 +--- !u!1839735485 &1588294916 Tilemap: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 991823372} + m_GameObject: {fileID: 1588294913} m_Enabled: 1 m_Tiles: - first: {x: -10, y: -4, z: 0} @@ -2709,9 +2709,9 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 449089079} - - {fileID: 86093667} - - {fileID: 991823373} + - {fileID: 1134605334} + - {fileID: 448766792} + - {fileID: 1588294914} m_Father: {fileID: 0} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -2729,48 +2729,3 @@ MonoBehaviour: m_EditorClassIdentifier: _path: {fileID: 102900000, guid: c9341b1bdc1103b4e832cf62d29e5471, type: 3} _level: {fileID: 11400000, guid: e715669e1ed4b294c82d07ac011e89bb, type: 2} ---- !u!1 &2124900075 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2124900076} - - component: {fileID: 2124900077} - m_Layer: 0 - m_Name: LevelManager - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2124900076 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2124900075} - 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: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &2124900077 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2124900075} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8f415d45fd9659408ac8c5ce2e96aba, type: 3} - m_Name: - m_EditorClassIdentifier: - firstLevel: {fileID: 11400000, guid: e715669e1ed4b294c82d07ac011e89bb, type: 2} diff --git a/Assets/Newtonsoft.Json.dll b/Assets/Newtonsoft.Json.dll new file mode 100644 index 0000000..341d08f Binary files /dev/null and b/Assets/Newtonsoft.Json.dll differ diff --git a/Assets/Newtonsoft.Json.dll.meta b/Assets/Newtonsoft.Json.dll.meta new file mode 100644 index 0000000..aad831c --- /dev/null +++ b/Assets/Newtonsoft.Json.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 175b6e9751ccac44b94d94c793bec2d8 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/LevelManager.prefab b/Assets/Prefabs/LevelManager.prefab new file mode 100644 index 0000000..34a2a24 --- /dev/null +++ b/Assets/Prefabs/LevelManager.prefab @@ -0,0 +1,80 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3028288566889208744 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3028288566889208751} + - component: {fileID: 3028288566889208750} + - component: {fileID: 3028288566889208749} + m_Layer: 0 + m_Name: LevelManager + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3028288566889208751 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3028288566889208744} + 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: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &3028288566889208750 +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: c8f415d45fd9659408ac8c5ce2e96aba, type: 3} + m_Name: + m_EditorClassIdentifier: + firstLevel: {fileID: 11400000, guid: e715669e1ed4b294c82d07ac011e89bb, type: 2} +--- !u!114 &3028288566889208749 +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: edb1aa3d6230b1e4c9a50056da756015, type: 3} + m_Name: + m_EditorClassIdentifier: + _folders: + - {fileID: 102900000, guid: f3dee7994db941e47b9445cb464c69a9, type: 3} + - {fileID: 102900000, guid: 4f8284570682f8f4c954e446b35ea0ae, type: 3} + - {fileID: 102900000, guid: 0ca30b5ca281be24bb62d7e48cc2bec8, type: 3} + - {fileID: 102900000, guid: 73ca1afa7b0f7dd4ea39f69cf74f8370, type: 3} + _prefabs: + - {fileID: 6962989255644195630, guid: 6cd87b398e7a0e94580f4fcbe2fd310a, type: 3} + - {fileID: 6962989255644195630, guid: 377c7275c0001cc47a6b8926ac57d573, type: 3} + - {fileID: 6962989255644195630, guid: 869a03bba705e8d4485aa73daad773dc, type: 3} + - {fileID: 6962989255644195630, guid: 9b40c232eddfd1b469bea688e3c970c0, type: 3} + - {fileID: 4052934186652138539, guid: 8560e1f66d452b543a705c8a0f3e22fa, type: 3} + - {fileID: 3814095509541806390, guid: 9527f3a1482b90a48bb6c62acc70f986, type: 3} + _scriptableObjects: + - {fileID: 11400000, guid: a6e34739c9325da4cac4fbaea30d052c, type: 2} + - {fileID: 11400000, guid: d37561e153d6a6448a03839488fdec5e, type: 2} + - {fileID: 11400000, guid: 4002377ed7e87b34699f126f2b10c703, type: 2} + - {fileID: 11400000, guid: 4aaf448680c7f8a438a9a5861c622a55, type: 2} + - {fileID: 11400000, guid: e715669e1ed4b294c82d07ac011e89bb, type: 2} + - {fileID: 11400000, guid: a387250a316b97e43be83b85980101e1, type: 2} + - {fileID: 11400000, guid: ef5a154519b23a34aaded32e86bf7f2f, type: 2} diff --git a/Assets/Prefabs/LevelManager.prefab.meta b/Assets/Prefabs/LevelManager.prefab.meta new file mode 100644 index 0000000..dbd7829 --- /dev/null +++ b/Assets/Prefabs/LevelManager.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 02daecb0115395844b4932445d039051 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/General/Database.cs b/Assets/Scripts/General/Database.cs index 958b2b9..23c9adb 100644 --- a/Assets/Scripts/General/Database.cs +++ b/Assets/Scripts/General/Database.cs @@ -7,54 +7,18 @@ using System; #if UNITY_EDITOR using UnityEditor; - -[CustomEditor(typeof(Database))] -public class DatabaseEditor : Editor -{ - public override void OnInspectorGUI() - { - DrawDefaultInspector(); - - if (GUILayout.Button("fetch assets")) - { - var targ = target as Database; - - - - foreach (var folder in targ.Folders) - { - var path = AssetDatabase.GetAssetPath(folder); - foreach (var file in GetAllPaths(path)) - { - var scriptableObject = AssetDatabase.LoadAssetAtPath(file); - if (scriptableObject && !targ.ScriptableObjects.Contains(scriptableObject)) - { - targ.ScriptableObjects.Add(scriptableObject); - } - - var prefab = AssetDatabase.LoadAssetAtPath(file); - if (prefab && !targ.Prefabs.Contains(prefab)) - { - targ.Prefabs.Add(prefab); - } - } - } - } - } - - string[] GetAllPaths(string target) - { - var files = Directory.GetFiles(target).ToList(); - foreach (var dir in Directory.GetDirectories(target)) - { - files.AddRange(GetAllPaths(dir)); - } - return files.ToArray(); - } -} #endif + + public class Database : SingletonBehaviour { +#if UNITY_EDITOR + [Header("Editor section")] + [SerializeField] + private List _folders; + + public List Folders => _folders; +#endif public const string TYPE = nameof(TYPE); [Serializable] @@ -95,9 +59,7 @@ public class Database : SingletonBehaviour _prefabs = new List(); _scriptableObjects = new List(); } - [Header("Editor section")] - [SerializeField] - private List _folders; - - public List Folders => _folders; +#if UNITY_EDITOR + +#endif } \ No newline at end of file diff --git a/Assets/Scripts/General/Extensions.cs b/Assets/Scripts/General/Extensions.cs index 922d1e7..e925f6a 100644 --- a/Assets/Scripts/General/Extensions.cs +++ b/Assets/Scripts/General/Extensions.cs @@ -31,10 +31,6 @@ public static class Extensions public static bool ToBool(this object jobj) => bool.Parse(jobj.ToString()); public static GameObject Create(this GameObject prefab, Vector3 position, Quaternion rotation = default, Transform parent = null) { - if (!prefab) - { - Debug.Log(""); - } if (rotation == default) rotation = Quaternion.identity; var instance = GameObject.Instantiate(prefab, position, rotation); instance.transform.SetParent(parent); diff --git a/Assets/Scripts/General/SingletonBehaviour.cs b/Assets/Scripts/General/SingletonBehaviour.cs index 64d3e6b..777db2f 100644 --- a/Assets/Scripts/General/SingletonBehaviour.cs +++ b/Assets/Scripts/General/SingletonBehaviour.cs @@ -1,5 +1,9 @@ using UnityEngine; +/// +/// a singleton but as a MonoBehaviour +/// +/// public class SingletonBehaviour : MonoBehaviour where T : SingletonBehaviour { public static T Instance diff --git a/Assets/Scripts/General/SingletonSO.cs b/Assets/Scripts/General/SingletonSO.cs deleted file mode 100644 index 878889c..0000000 --- a/Assets/Scripts/General/SingletonSO.cs +++ /dev/null @@ -1,17 +0,0 @@ -using UnityEngine; - -public class SingletonSO : ScriptableObject where T : SingletonSO -{ - private static T _instance; - public static T Instance - { - get - { - if (!_instance) - { - _instance = CreateInstance(); - } - return _instance; - } - } -} \ No newline at end of file diff --git a/Assets/Scripts/LevelEditor/LevelEditor.cs b/Assets/Scripts/LevelEditor/LevelEditor.cs index 139851d..ec5f126 100644 --- a/Assets/Scripts/LevelEditor/LevelEditor.cs +++ b/Assets/Scripts/LevelEditor/LevelEditor.cs @@ -1,3 +1,4 @@ + #if UNITY_EDITOR using UnityEditor; #endif @@ -12,7 +13,13 @@ namespace GatherAndDefend.LevelEditor #if UNITY_EDITOR [SerializeField] private DefaultAsset _path; + public DefaultAsset Path + { + get => _path; + set => _path = value; + } #endif + [SerializeField] private Level _level; public Level Level @@ -20,10 +27,6 @@ namespace GatherAndDefend.LevelEditor get => _level; set => _level = value; } - public DefaultAsset Path - { - get => _path; - set => _path = value; - } + } } \ No newline at end of file diff --git a/Assets/Scripts/LevelEditor/TilemapData.cs b/Assets/Scripts/LevelEditor/TilemapData.cs index d071495..dbbf05d 100644 --- a/Assets/Scripts/LevelEditor/TilemapData.cs +++ b/Assets/Scripts/LevelEditor/TilemapData.cs @@ -3,6 +3,8 @@ using UnityEngine.Tilemaps; using UnityEngine; using System; using System.Collections; +using System.Linq; +using Newtonsoft.Json; namespace GatherAndDefend.LevelEditor { @@ -75,6 +77,83 @@ namespace GatherAndDefend.LevelEditor } } + /// + /// returns a dictionary representation of the tilemap + /// + /// + public Dictionary ToDictionary() + { + return new Dictionary() + { + {nameof(_key), _key }, + {nameof(_isInvisible), _isInvisible }, + {nameof(_isCollidable), _isCollidable }, + {nameof(_isTrigger), _isTrigger }, + {nameof(_renderOrder), _renderOrder }, + {nameof(_renderLayer), _renderLayer }, + {nameof(_tiles), _tiles.FindAll(x => !(x.Tile is LevelTile)) + .Select(x => new Dictionary() { + {nameof(x.Position), new float[] { x.Position.x, x.Position.y, x.Position.z } }, + {nameof(x.Tile), x.Tile.name } }).ToArray() } + }; + } + + /// + /// builds a tilemap from a dictionary representation (from the save file) + /// + /// + /// + public static Tilemap FromDictionary(Dictionary dict) + { + //get all tilemap data + var key = dict[nameof(_key)].ToString(); + var invisible = dict[nameof(_isInvisible)].ToBool(); + var collidable = dict[nameof(_isCollidable)].ToBool(); + var trigger = dict[nameof(_isTrigger)].ToBool(); + var renderOrder = dict[nameof(_renderOrder)].ToInt(); + var renderLayer = dict[nameof(_renderLayer)].ToString(); + var tiles = dict[nameof(_tiles)]; + + //get grid + var grid = GameObject.FindObjectOfType(); + if (!grid) grid = new GameObject("Grid").AddComponent(); + + //get tilemap by name + var tilemap = grid.GetComponentInChildren(key); + TilemapRenderer renderer; + if (!tilemap) + { + tilemap = new GameObject(key).AddComponent(); + tilemap.gameObject.AddComponent(); + tilemap.transform.SetParent(grid.transform); + } + renderer = tilemap.GetComponent(); + + //populate tilemap according to specs + renderer.sortingOrder = renderOrder; + renderer.sortingLayerName = renderLayer; + + if (invisible) tilemap.gameObject.layer = INVISIBLE_LAYER; + if (collidable) + { + tilemap.gameObject.AddComponent().isTrigger = trigger; + } + + //populate tilemaps with non-LevelTile tiles + foreach (var tileObj in tiles as IEnumerable) + { + var tileDict = JsonConvert.DeserializeObject>(tileObj.ToString()); + var tileName = tileDict["Tile"].ToString(); + var tile = Database.Instance.ScriptableObjects[tileName]; + + var tilePos = tileDict["Position"].ToVector3(); + + tilemap.SetTile(Vector3Int.RoundToInt(tilePos), tile as TileBase); + } + + return tilemap; + } + public IEnumerator GetEnumerator() { return _tiles.GetEnumerator(); diff --git a/Assets/Scripts/LevelManager/ILevelObject.cs b/Assets/Scripts/LevelManager/ILevelObject.cs index 8b5c2cd..7d6e261 100644 --- a/Assets/Scripts/LevelManager/ILevelObject.cs +++ b/Assets/Scripts/LevelManager/ILevelObject.cs @@ -6,7 +6,8 @@ public interface ILevelObject public enum ObjectType { Tile = 0, - Prefab = 1 + Prefab = 1, + Tilemap = 2 } string Name { get; } diff --git a/Assets/Scripts/LevelManager/LevelManager.cs b/Assets/Scripts/LevelManager/LevelManager.cs new file mode 100644 index 0000000..bd0fe4c --- /dev/null +++ b/Assets/Scripts/LevelManager/LevelManager.cs @@ -0,0 +1,231 @@ +using GatherAndDefend.LevelEditor; +using System.Collections.Generic; +using System.Text; +using UnityEngine.Tilemaps; +using UnityEngine; +using System.Linq; +using Newtonsoft.Json; +using System.IO; + +/// +/// data class for containing everything level related +/// +public class LevelManager : Singleton +{ + string SavePath => Application.dataPath + "/save.txt"; + + public delegate void LevelAction(ILevelObject levelObject); + public delegate bool LevelPredicate(T levelObject) where T : ILevelObject; + + public event LevelAction Added; + public event LevelAction Removed; + + private readonly List _toAdd; + private readonly List _toRemove; + private readonly List _levelObjects; + + public Level _currentLevel; + + public Transform LevelTransform + { + get; private set; + } + public LevelManager() + { + _toAdd = new List(); + _toRemove = new List(); + _levelObjects = new List(); + + var mgrScript = Object.FindObjectOfType(); + if (!mgrScript) mgrScript = new GameObject(nameof(LevelManager)).AddComponent(); + LevelTransform = mgrScript.transform; + } + + #region [~CRUD~] + public void Add(ILevelObject levelObject) + { + _toAdd.Add(levelObject); + } + public void Remove(ILevelObject levelObject) + { + _toRemove.Add(levelObject); + } + public void Clear() + { + _toAdd.Clear(); + _toRemove.Clear(); + _levelObjects.Clear(); + } + public T Get(LevelPredicate predicate = null) where T : ILevelObject + { + if (predicate == null) predicate = (generic) => true; + return (T)_levelObjects.Find(levelObject => levelObject is T generic && predicate(generic)); + } + public List GetAll(LevelPredicate predicate = null) where T : ILevelObject + { + if (predicate == null) predicate = (generic) => true; + List ret = new(); + foreach (var levelObject in _levelObjects) if (levelObject is T generic && predicate(generic)) ret.Add(generic); + return ret; + } + public int Count(LevelPredicate predicate = null) where T : ILevelObject + { + return GetAll(predicate).Count; + } + public bool Has(LevelPredicate predicate = null) where T : ILevelObject + { + if (predicate == null) predicate = (generic) => true; + return _levelObjects.Exists(levelObject => levelObject is T generic && predicate(generic)); + } + #endregion + + #region [Level management] + public void UpdateLevel() + { + _levelObjects.ForEach(levelObject => levelObject.LevelUpdate()); + + var toAdd = new List(this._toAdd); + toAdd.ForEach(addedObject => + { + this._toAdd.Remove(addedObject); + _levelObjects.Add(addedObject); + Added?.Invoke(addedObject); + addedObject.LevelStart(); + }); + + var toRemove = new List(this._toRemove); + toRemove.ForEach(removedObject => + { + this._toRemove.Remove(removedObject); + _levelObjects.Remove(removedObject); + Removed?.Invoke(removedObject); + removedObject.LevelDestroy(); + }); + toRemove.Clear(); + } + + public void ClearLevel() + { + foreach (var obj in _levelObjects) + { + obj.RemoveFromLevel(); + } + Clear(); + } + + /// + /// permet de loader un scriptable object de niveau + /// + /// le niveau à loader + /// est ce qu'on veut effacer ce qui est déjà là? + public void LoadLevel(Level level, bool shouldClear = false) + { + if (shouldClear) + { + ClearLevel(); + } + + _currentLevel = level; + Grid grid = Object.FindObjectOfType(); + //create new grid if there is none + if (!grid) + { + grid = new GameObject("Grid").AddComponent(); + } + //remove all tilemaps if there is a grid + else + { + foreach (Transform child in grid.transform) + { + Object.Destroy(child.gameObject); + } + } + + //generate all tilemaps + foreach (TilemapData tilemapData in _currentLevel) + { + var tilemap = new GameObject(tilemapData.Key).AddComponent(); + tilemap.gameObject.AddComponent(); + tilemapData.LoadToTilemap(tilemap); + tilemap.transform.SetParent(grid.transform); + } + Debug.Log("level loaded successfully"); + } + + /// + /// permet de loader un scriptable object de niveau + /// + /// le nom du niveau à loader + /// est ce qu'on veut effacer ce qui est déjà là? + public void LoadLevel(string levelName, bool shouldClear = false) + { + if (shouldClear) + { + ClearLevel(); + } + + //fetch level from database + _currentLevel = Database.Instance.ScriptableObjects[levelName] as Level; + + LoadLevel(_currentLevel, shouldClear); + } + + + public void SaveFile() + { + var list = _levelObjects.Select(obj => obj.ToDictionary()).ToList(); + + foreach (var tilemapData in _currentLevel) + { + var levelConfig = tilemapData.ToDictionary(); + levelConfig[nameof(ILevelObject.ObjectType)] = nameof(ILevelObject.ObjectType.Tilemap); + list.Add(levelConfig); + } + string saved = JsonConvert.SerializeObject(list); + + File.WriteAllText(SavePath, saved, Encoding.UTF8); + Debug.Log("game saved successfully"); + } + + public void LoadFile() + { + + string saved = File.ReadAllText(SavePath, Encoding.UTF8); + var dicts = JsonConvert.DeserializeObject>>(saved); + + ClearLevel(); + + var tilemapDicts = dicts.FindAll(x => x[nameof(ILevelObject.ObjectType)].ToString() == nameof(ILevelObject.ObjectType.Tilemap)); + foreach (var tilemapDict in tilemapDicts) CreateTilemap(tilemapDict); + + var prefabDicts = dicts.FindAll(x => x[nameof(ILevelObject.ObjectType)].ToString() == nameof(ILevelObject.ObjectType.Prefab)); + foreach (var prefabDict in prefabDicts) CreatePrefab(prefabDict); + + var tileDicts = dicts.FindAll(x => x[nameof(ILevelObject.ObjectType)].ToString() == nameof(ILevelObject.ObjectType.Tile)); + foreach (var tileDict in tileDicts) CreateTile(tileDict); + + Debug.Log("game loaded successfully"); + } + private void CreatePrefab(Dictionary dict) + { + var name = dict["Name"].ToString(); + var prefab = Database.Instance.Prefabs[name]; + var instance = prefab.Create(Vector3.zero, parent: LevelTransform); + var comp = instance.GetComponent(); + comp.LoadDictionary(dict); + } + private void CreateTile(Dictionary dict) + { + var name = dict["Name"].ToString(); + + var tile = Object.Instantiate(Database.Instance.ScriptableObjects[name]) as LevelTile; + tile.Instantiated = true; + tile.LoadDictionary(dict); + tile.AddToLevel(); + } + private void CreateTilemap(Dictionary dict) + { + TilemapData.FromDictionary(dict); + } + #endregion +} \ No newline at end of file diff --git a/Assets/Scripts/LevelManager/LevelManager.cs.meta b/Assets/Scripts/LevelManager/LevelManager.cs.meta new file mode 100644 index 0000000..a30ef3b --- /dev/null +++ b/Assets/Scripts/LevelManager/LevelManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e3bef4a71d706874fb7500a47d3f4f1d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/LevelManager/LevelManagerScript.cs b/Assets/Scripts/LevelManager/LevelManagerScript.cs index eb88277..bb0178e 100644 --- a/Assets/Scripts/LevelManager/LevelManagerScript.cs +++ b/Assets/Scripts/LevelManager/LevelManagerScript.cs @@ -1,243 +1,6 @@ -using System.Collections.Generic; -using System.Linq; -using Unity.Plastic.Newtonsoft.Json; using UnityEngine; -using UnityEngine.Tilemaps; using GatherAndDefend.LevelEditor; -using Unity.VisualScripting.YamlDotNet.Core.Tokens; -using System.Text; -using System.IO; -#region [custom inspector] -#if UNITY_EDITOR -using UnityEditor; - -[CustomEditor(typeof(LevelManagerScript))] -public class LevelManagerEditor : Editor -{ - public override void OnInspectorGUI() - { - DrawDefaultInspector(); - if (GUILayout.Button("Save")) - { - LevelManager.Instance.SaveFile(); - } - if (GUILayout.Button("Load")) - { - LevelManager.Instance.LoadFile(); - } - } -} -#endif -#endregion - -#region [singleton level manager] -public class LevelManager : Singleton -{ - string SavePath => Application.dataPath + "/save.txt"; - public delegate void LevelAction(ILevelObject levelObject); - public delegate bool LevelPredicate(T levelObject) where T : ILevelObject; - public event LevelAction Added; - public event LevelAction Removed; - - private readonly List _toAdd; - private readonly List _toRemove; - private readonly List _levelObjects; - - public Level _currentLevel; - - public Transform LevelTransform - { - get;private set; - } - public LevelManager() -{ - _toAdd = new List(); - _toRemove = new List(); - _levelObjects = new List(); - - var mgrScript = Object.FindObjectOfType(); - if (!mgrScript) mgrScript = new GameObject(nameof(LevelManager)).AddComponent(); - LevelTransform = mgrScript.transform; - } - - #region [~CRUD~] - public void Add(ILevelObject levelObject) - { - _toAdd.Add(levelObject); - } - public void Remove(ILevelObject levelObject) - { - _toRemove.Add(levelObject); - } - public void Clear() - { - _toAdd.Clear(); - _toRemove.Clear(); - _levelObjects.Clear(); - } - public T Get(LevelPredicate predicate = null) where T : ILevelObject - { - if (predicate == null) predicate = (generic) => true; - return (T)_levelObjects.Find(levelObject => levelObject is T generic && predicate(generic)); - } - public List GetAll(LevelPredicate predicate = null) where T : ILevelObject - { - if (predicate == null) predicate = (generic) => true; - List ret = new(); - foreach (var levelObject in _levelObjects) if (levelObject is T generic && predicate(generic)) ret.Add(generic); - return ret; - } - public int Count(LevelPredicate predicate = null) where T : ILevelObject - { - return GetAll(predicate).Count; - } - public bool Has(LevelPredicate predicate = null) where T : ILevelObject - { - if (predicate == null) predicate = (generic) => true; - return _levelObjects.Exists(levelObject => levelObject is T generic && predicate(generic)); - } - #endregion - - #region [Level management] - public void UpdateLevel() - { - _levelObjects.ForEach(levelObject => levelObject.LevelUpdate()); - - var toAdd = new List(this._toAdd); - toAdd.ForEach(addedObject => - { - this._toAdd.Remove(addedObject); - _levelObjects.Add(addedObject); - Added?.Invoke(addedObject); - addedObject.LevelStart(); - }); - - var toRemove = new List(this._toRemove); - toRemove.ForEach(removedObject => - { - this._toRemove.Remove(removedObject); - _levelObjects.Remove(removedObject); - Removed?.Invoke(removedObject); - removedObject.LevelDestroy(); - }); - toRemove.Clear(); - } - - public void ClearLevel() - { - foreach (var obj in _levelObjects) - { - obj.RemoveFromLevel(); - } - Clear(); - } - - /// - /// permet de loader un scriptable object de niveau - /// - /// le niveau à loader - /// est ce qu'on veut effacer ce qui est déjà là? - public void LoadLevel(Level level, bool shouldClear = false) - { - if (shouldClear) - { - ClearLevel(); - } - - _currentLevel = level; - Grid grid = Object.FindObjectOfType(); - //create new grid if there is none - if (!grid) - { - grid = new GameObject("Grid").AddComponent(); - } - //remove all tilemaps if there is a grid - else - { - foreach (Transform child in grid.transform) - { - Object.Destroy(child.gameObject); - } - } - - //generate all tilemaps - foreach (TilemapData tilemapData in _currentLevel) - { - var tilemap = new GameObject(tilemapData.Key).AddComponent(); - tilemap.gameObject.AddComponent(); - tilemapData.LoadToTilemap(tilemap); - tilemap.transform.SetParent(grid.transform); - } - Debug.Log("level loaded successfully"); - } - - /// - /// permet de loader un scriptable object de niveau - /// - /// le nom du niveau à loader - /// est ce qu'on veut effacer ce qui est déjà là? - public void LoadLevel(string levelName, bool shouldClear = false) - { - if (shouldClear) - { - ClearLevel(); -} - -//fetch level from database - _currentLevel = Database.Instance.ScriptableObjects[levelName] as Level; - - LoadLevel(_currentLevel, shouldClear); - } - - - public void SaveFile() - { - var list = _levelObjects.Select(obj => obj.ToDictionary()).ToList(); - string saved = JsonConvert.SerializeObject(list); - - File.WriteAllText(SavePath, saved, Encoding.UTF8); - Debug.Log("game saved successfully"); - } - - public void LoadFile() - { - - string saved = File.ReadAllText(SavePath, Encoding.UTF8); - var dicts = JsonConvert.DeserializeObject>>(saved); - - ClearLevel(); - - var prefabDicts = dicts.FindAll(x => x[nameof(ILevelObject.ObjectType)].ToString() == nameof(ILevelObject.ObjectType.Prefab)); - foreach (var prefabDict in prefabDicts) CreatePrefab(prefabDict); - - var tileDicts = dicts.FindAll(x => x[nameof(ILevelObject.ObjectType)].ToString() == nameof(ILevelObject.ObjectType.Tile)); - foreach (var tileDict in tileDicts) CreateTile(tileDict); - - Debug.Log("game loaded successfully"); - } - private void CreatePrefab(Dictionary dict) - { - var name = dict["Name"].ToString(); - var prefab = Database.Instance.Prefabs[name]; - var instance = prefab.Create(Vector3.zero, parent: LevelTransform); - var comp = instance.GetComponent(); - comp.LoadDictionary(dict); - } - private void CreateTile(Dictionary dict) - { - var name = dict["Name"].ToString(); - - var tile = Object.Instantiate(Database.Instance.ScriptableObjects[name]) as LevelTile; - tile.Instantiated = true; - tile.LoadDictionary(dict); - tile.AddToLevel(); - } - #endregion -} -#endregion - -#region [mono behaviour] public class LevelManagerScript : MonoBehaviour { public Level firstLevel; @@ -265,5 +28,4 @@ public class LevelManagerScript : MonoBehaviour { LevelManager.Instance.UpdateLevel(); } -} -#endregion \ No newline at end of file +} \ No newline at end of file diff --git a/Assets/Scripts/LevelManager/LevelObject.cs b/Assets/Scripts/LevelManager/LevelObject.cs index 1b651ce..68c1078 100644 --- a/Assets/Scripts/LevelManager/LevelObject.cs +++ b/Assets/Scripts/LevelManager/LevelObject.cs @@ -51,6 +51,8 @@ public abstract class LevelObject : MonoBehaviour, ILevelObject public void RemoveFromLevel() { + //checks if go is still in scene before removing it + if (!this) return; Destroy(gameObject); } } \ No newline at end of file diff --git a/Assets/Scripts/LevelManager/LevelTile.cs b/Assets/Scripts/LevelManager/LevelTile.cs index 12e9333..772d270 100644 --- a/Assets/Scripts/LevelManager/LevelTile.cs +++ b/Assets/Scripts/LevelManager/LevelTile.cs @@ -1,9 +1,8 @@ using System.Collections; using System.Collections.Generic; -using Unity.Plastic.Newtonsoft.Json.Linq; using UnityEngine; using UnityEngine.Tilemaps; -using static Extensions; + /// /// can be inherited by tiles in order to be added to the level manager /// @@ -89,16 +88,17 @@ public abstract class LevelTile : TileBase, ILevelObject var tilemapName = dict[nameof(Tilemap)].ToString(); _tilemap = FindObjectOfType().GetComponentInChildren(tilemapName); - } public void AddToLevel() { + if (!_tilemap) return; _tilemap.SetTile(Vector3Int.RoundToInt(Position), this); } public void RemoveFromLevel() { + if (!_tilemap) return; _tilemap.SetTile(Vector3Int.RoundToInt(Position), null); } } \ No newline at end of file diff --git a/Assets/save.txt b/Assets/save.txt new file mode 100644 index 0000000..ff384b6 --- /dev/null +++ b/Assets/save.txt @@ -0,0 +1 @@ +[{"Name":"baseArcher","Position":[-10.0,-4.0,0.0],"ObjectType":"Prefab","_hp":100,"_speed":0.0,"_attack_speed":2.0,"_attack_damage":10,"_attack_speed_wait":0.0},{"Name":"baseArcher","Position":[-10.0,-2.0,0.0],"ObjectType":"Prefab","_hp":100,"_speed":0.0,"_attack_speed":2.0,"_attack_damage":10,"_attack_speed_wait":0.0},{"Name":"baseArcher","Position":[-10.0,0.0,0.0],"ObjectType":"Prefab","_hp":100,"_speed":0.0,"_attack_speed":2.0,"_attack_damage":10,"_attack_speed_wait":0.0},{"Name":"baseArcher","Position":[-10.0,2.0,0.0],"ObjectType":"Prefab","_hp":100,"_speed":0.0,"_attack_speed":2.0,"_attack_damage":10,"_attack_speed_wait":0.0},{"Name":"baseMonster","Position":[8.48811,-4.0,0.0],"ObjectType":"Prefab","_hp":1000,"_speed":0.1,"_attack_speed":3.0,"_attack_damage":2,"_attack_speed_wait":0.0},{"Name":"baseMonster","Position":[8.48811,-2.0,0.0],"ObjectType":"Prefab","_hp":1000,"_speed":0.1,"_attack_speed":3.0,"_attack_damage":2,"_attack_speed_wait":0.0},{"Name":"baseMonster","Position":[8.48811,0.0,0.0],"ObjectType":"Prefab","_hp":1000,"_speed":0.1,"_attack_speed":3.0,"_attack_damage":2,"_attack_speed_wait":0.0},{"Name":"baseMonster","Position":[8.48811,2.0,0.0],"ObjectType":"Prefab","_hp":1000,"_speed":0.1,"_attack_speed":3.0,"_attack_damage":2,"_attack_speed_wait":0.0},{"_key":"Background","_isInvisible":false,"_isCollidable":false,"_isTrigger":false,"_renderOrder":0,"_renderLayer":"Default","_tiles":[{"Position":[-10.0,-4.0,0.0],"Tile":"tile_grass"},{"Position":[-10.0,-3.0,0.0],"Tile":"tile_grass"},{"Position":[-10.0,-2.0,0.0],"Tile":"tile_grass"},{"Position":[-10.0,-1.0,0.0],"Tile":"tile_grass"},{"Position":[-10.0,0.0,0.0],"Tile":"tile_grass"},{"Position":[-10.0,1.0,0.0],"Tile":"tile_grass"},{"Position":[-10.0,2.0,0.0],"Tile":"tile_grass"},{"Position":[-9.0,-4.0,0.0],"Tile":"tile_grass"},{"Position":[-9.0,-3.0,0.0],"Tile":"tile_grass"},{"Position":[-9.0,-2.0,0.0],"Tile":"tile_grass"},{"Position":[-9.0,-1.0,0.0],"Tile":"tile_grass"},{"Position":[-9.0,0.0,0.0],"Tile":"tile_grass"},{"Position":[-9.0,1.0,0.0],"Tile":"tile_grass"},{"Position":[-9.0,2.0,0.0],"Tile":"tile_grass"},{"Position":[-8.0,-4.0,0.0],"Tile":"tile_grass"},{"Position":[-8.0,-3.0,0.0],"Tile":"tile_grass"},{"Position":[-8.0,-2.0,0.0],"Tile":"tile_grass"},{"Position":[-8.0,-1.0,0.0],"Tile":"tile_grass"},{"Position":[-8.0,0.0,0.0],"Tile":"tile_grass"},{"Position":[-8.0,1.0,0.0],"Tile":"tile_grass"},{"Position":[-8.0,2.0,0.0],"Tile":"tile_grass"},{"Position":[-7.0,-4.0,0.0],"Tile":"tile_grass"},{"Position":[-7.0,-3.0,0.0],"Tile":"tile_grass"},{"Position":[-7.0,-2.0,0.0],"Tile":"tile_grass"},{"Position":[-7.0,-1.0,0.0],"Tile":"tile_grass"},{"Position":[-7.0,0.0,0.0],"Tile":"tile_grass"},{"Position":[-7.0,1.0,0.0],"Tile":"tile_grass"},{"Position":[-7.0,2.0,0.0],"Tile":"tile_grass"},{"Position":[-6.0,-4.0,0.0],"Tile":"tile_grass"},{"Position":[-6.0,-3.0,0.0],"Tile":"tile_grass"},{"Position":[-6.0,-2.0,0.0],"Tile":"tile_grass"},{"Position":[-6.0,-1.0,0.0],"Tile":"tile_grass"},{"Position":[-6.0,0.0,0.0],"Tile":"tile_grass"},{"Position":[-6.0,1.0,0.0],"Tile":"tile_grass"},{"Position":[-6.0,2.0,0.0],"Tile":"tile_grass"},{"Position":[-5.0,-4.0,0.0],"Tile":"tile_grass"},{"Position":[-5.0,-3.0,0.0],"Tile":"tile_grass"},{"Position":[-5.0,-2.0,0.0],"Tile":"tile_grass"},{"Position":[-5.0,-1.0,0.0],"Tile":"tile_grass"},{"Position":[-5.0,0.0,0.0],"Tile":"tile_grass"},{"Position":[-5.0,1.0,0.0],"Tile":"tile_grass"},{"Position":[-5.0,2.0,0.0],"Tile":"tile_grass"},{"Position":[-4.0,-4.0,0.0],"Tile":"tile_grass"},{"Position":[-4.0,-3.0,0.0],"Tile":"tile_grass"},{"Position":[-4.0,-2.0,0.0],"Tile":"tile_grass"},{"Position":[-4.0,-1.0,0.0],"Tile":"tile_grass"},{"Position":[-4.0,0.0,0.0],"Tile":"tile_grass"},{"Position":[-4.0,1.0,0.0],"Tile":"tile_grass"},{"Position":[-4.0,2.0,0.0],"Tile":"tile_grass"},{"Position":[-3.0,-4.0,0.0],"Tile":"tile_grass"},{"Position":[-3.0,-3.0,0.0],"Tile":"tile_grass"},{"Position":[-3.0,-2.0,0.0],"Tile":"tile_grass"},{"Position":[-3.0,-1.0,0.0],"Tile":"tile_grass"},{"Position":[-3.0,0.0,0.0],"Tile":"tile_grass"},{"Position":[-3.0,1.0,0.0],"Tile":"tile_grass"},{"Position":[-3.0,2.0,0.0],"Tile":"tile_grass"},{"Position":[-2.0,-4.0,0.0],"Tile":"tile_grass"},{"Position":[-2.0,-3.0,0.0],"Tile":"tile_grass"},{"Position":[-2.0,-2.0,0.0],"Tile":"tile_grass"},{"Position":[-2.0,-1.0,0.0],"Tile":"tile_grass"},{"Position":[-2.0,0.0,0.0],"Tile":"tile_grass"},{"Position":[-2.0,1.0,0.0],"Tile":"tile_grass"},{"Position":[-2.0,2.0,0.0],"Tile":"tile_grass"},{"Position":[-1.0,-4.0,0.0],"Tile":"tile_grass"},{"Position":[-1.0,-3.0,0.0],"Tile":"tile_grass"},{"Position":[-1.0,-2.0,0.0],"Tile":"tile_grass"},{"Position":[-1.0,-1.0,0.0],"Tile":"tile_grass"},{"Position":[-1.0,0.0,0.0],"Tile":"tile_grass"},{"Position":[-1.0,1.0,0.0],"Tile":"tile_grass"},{"Position":[-1.0,2.0,0.0],"Tile":"tile_grass"},{"Position":[0.0,-4.0,0.0],"Tile":"tile_grass"},{"Position":[0.0,-3.0,0.0],"Tile":"tile_grass"},{"Position":[0.0,-2.0,0.0],"Tile":"tile_grass"},{"Position":[0.0,-1.0,0.0],"Tile":"tile_grass"},{"Position":[0.0,0.0,0.0],"Tile":"tile_grass"},{"Position":[0.0,1.0,0.0],"Tile":"tile_grass"},{"Position":[0.0,2.0,0.0],"Tile":"tile_grass"},{"Position":[1.0,-4.0,0.0],"Tile":"tile_grass"},{"Position":[1.0,-3.0,0.0],"Tile":"tile_grass"},{"Position":[1.0,-2.0,0.0],"Tile":"tile_grass"},{"Position":[1.0,-1.0,0.0],"Tile":"tile_grass"},{"Position":[1.0,0.0,0.0],"Tile":"tile_grass"},{"Position":[1.0,1.0,0.0],"Tile":"tile_grass"},{"Position":[1.0,2.0,0.0],"Tile":"tile_grass"},{"Position":[2.0,-4.0,0.0],"Tile":"tile_grass"},{"Position":[2.0,-3.0,0.0],"Tile":"tile_grass"},{"Position":[2.0,-2.0,0.0],"Tile":"tile_grass"},{"Position":[2.0,-1.0,0.0],"Tile":"tile_grass"},{"Position":[2.0,0.0,0.0],"Tile":"tile_grass"},{"Position":[2.0,1.0,0.0],"Tile":"tile_grass"},{"Position":[2.0,2.0,0.0],"Tile":"tile_grass"},{"Position":[3.0,-4.0,0.0],"Tile":"tile_grass"},{"Position":[3.0,-3.0,0.0],"Tile":"tile_grass"},{"Position":[3.0,-2.0,0.0],"Tile":"tile_grass"},{"Position":[3.0,-1.0,0.0],"Tile":"tile_grass"},{"Position":[3.0,0.0,0.0],"Tile":"tile_grass"},{"Position":[3.0,1.0,0.0],"Tile":"tile_grass"},{"Position":[3.0,2.0,0.0],"Tile":"tile_grass"},{"Position":[4.0,-4.0,0.0],"Tile":"tile_grass"},{"Position":[4.0,-3.0,0.0],"Tile":"tile_grass"},{"Position":[4.0,-2.0,0.0],"Tile":"tile_grass"},{"Position":[4.0,-1.0,0.0],"Tile":"tile_grass"},{"Position":[4.0,0.0,0.0],"Tile":"tile_grass"},{"Position":[4.0,1.0,0.0],"Tile":"tile_grass"},{"Position":[4.0,2.0,0.0],"Tile":"tile_grass"},{"Position":[5.0,-4.0,0.0],"Tile":"tile_grass"},{"Position":[5.0,-3.0,0.0],"Tile":"tile_grass"},{"Position":[5.0,-2.0,0.0],"Tile":"tile_grass"},{"Position":[5.0,-1.0,0.0],"Tile":"tile_grass"},{"Position":[5.0,0.0,0.0],"Tile":"tile_grass"},{"Position":[5.0,1.0,0.0],"Tile":"tile_grass"},{"Position":[5.0,2.0,0.0],"Tile":"tile_grass"},{"Position":[6.0,-4.0,0.0],"Tile":"tile_grass"},{"Position":[6.0,-3.0,0.0],"Tile":"tile_grass"},{"Position":[6.0,-2.0,0.0],"Tile":"tile_grass"},{"Position":[6.0,-1.0,0.0],"Tile":"tile_grass"},{"Position":[6.0,0.0,0.0],"Tile":"tile_grass"},{"Position":[6.0,1.0,0.0],"Tile":"tile_grass"},{"Position":[6.0,2.0,0.0],"Tile":"tile_grass"},{"Position":[7.0,-4.0,0.0],"Tile":"tile_grass"},{"Position":[7.0,-3.0,0.0],"Tile":"tile_grass"},{"Position":[7.0,-2.0,0.0],"Tile":"tile_grass"},{"Position":[7.0,-1.0,0.0],"Tile":"tile_grass"},{"Position":[7.0,0.0,0.0],"Tile":"tile_grass"},{"Position":[7.0,1.0,0.0],"Tile":"tile_grass"},{"Position":[7.0,2.0,0.0],"Tile":"tile_grass"},{"Position":[8.0,-4.0,0.0],"Tile":"tile_grass"},{"Position":[8.0,-3.0,0.0],"Tile":"tile_grass"},{"Position":[8.0,-2.0,0.0],"Tile":"tile_grass"},{"Position":[8.0,-1.0,0.0],"Tile":"tile_grass"},{"Position":[8.0,0.0,0.0],"Tile":"tile_grass"},{"Position":[8.0,1.0,0.0],"Tile":"tile_grass"},{"Position":[8.0,2.0,0.0],"Tile":"tile_grass"},{"Position":[9.0,-4.0,0.0],"Tile":"tile_grass"},{"Position":[9.0,-3.0,0.0],"Tile":"tile_grass"},{"Position":[9.0,-2.0,0.0],"Tile":"tile_grass"},{"Position":[9.0,-1.0,0.0],"Tile":"tile_grass"},{"Position":[9.0,0.0,0.0],"Tile":"tile_grass"},{"Position":[9.0,1.0,0.0],"Tile":"tile_grass"},{"Position":[9.0,2.0,0.0],"Tile":"tile_grass"},{"Position":[10.0,-4.0,0.0],"Tile":"tile_grass"},{"Position":[10.0,-3.0,0.0],"Tile":"tile_grass"},{"Position":[10.0,-2.0,0.0],"Tile":"tile_grass"},{"Position":[10.0,-1.0,0.0],"Tile":"tile_grass"},{"Position":[10.0,0.0,0.0],"Tile":"tile_grass"},{"Position":[10.0,1.0,0.0],"Tile":"tile_grass"},{"Position":[10.0,2.0,0.0],"Tile":"tile_grass"}],"ObjectType":"Tilemap"},{"_key":"Entities","_isInvisible":false,"_isCollidable":false,"_isTrigger":false,"_renderOrder":1,"_renderLayer":"Default","_tiles":[{"Position":[-10.0,-4.0,0.0],"Tile":"tile_farm"},{"Position":[-10.0,-2.0,0.0],"Tile":"tile_farm"},{"Position":[-10.0,0.0,0.0],"Tile":"tile_farm"},{"Position":[-10.0,2.0,0.0],"Tile":"tile_farm"},{"Position":[-8.0,-4.0,0.0],"Tile":"tile_farm"},{"Position":[-8.0,-2.0,0.0],"Tile":"tile_farm"},{"Position":[-8.0,0.0,0.0],"Tile":"tile_farm"},{"Position":[-8.0,2.0,0.0],"Tile":"tile_farm"},{"Position":[-6.0,-4.0,0.0],"Tile":"tile_farm"},{"Position":[-6.0,-2.0,0.0],"Tile":"tile_farm"},{"Position":[-6.0,0.0,0.0],"Tile":"tile_farm"},{"Position":[-6.0,2.0,0.0],"Tile":"tile_farm"},{"Position":[-4.0,-4.0,0.0],"Tile":"tile_farm"},{"Position":[-4.0,-2.0,0.0],"Tile":"tile_farm"},{"Position":[-4.0,0.0,0.0],"Tile":"tile_farm"},{"Position":[-4.0,2.0,0.0],"Tile":"tile_farm"},{"Position":[-2.0,-4.0,0.0],"Tile":"tile_farm"},{"Position":[-2.0,-2.0,0.0],"Tile":"tile_farm"},{"Position":[-2.0,0.0,0.0],"Tile":"tile_farm"},{"Position":[-2.0,2.0,0.0],"Tile":"tile_farm"},{"Position":[0.0,-4.0,0.0],"Tile":"tile_farm"},{"Position":[0.0,-2.0,0.0],"Tile":"tile_farm"},{"Position":[0.0,0.0,0.0],"Tile":"tile_farm"},{"Position":[0.0,2.0,0.0],"Tile":"tile_farm"},{"Position":[2.0,-4.0,0.0],"Tile":"tile_farm"},{"Position":[2.0,-2.0,0.0],"Tile":"tile_farm"},{"Position":[2.0,0.0,0.0],"Tile":"tile_farm"},{"Position":[2.0,2.0,0.0],"Tile":"tile_farm"},{"Position":[4.0,-4.0,0.0],"Tile":"tile_farm"},{"Position":[4.0,-2.0,0.0],"Tile":"tile_farm"},{"Position":[4.0,0.0,0.0],"Tile":"tile_farm"},{"Position":[4.0,2.0,0.0],"Tile":"tile_farm"},{"Position":[6.0,-4.0,0.0],"Tile":"tile_farm"},{"Position":[6.0,-2.0,0.0],"Tile":"tile_farm"},{"Position":[6.0,0.0,0.0],"Tile":"tile_farm"},{"Position":[6.0,2.0,0.0],"Tile":"tile_farm"},{"Position":[8.0,-4.0,0.0],"Tile":"tile_farm"},{"Position":[8.0,-2.0,0.0],"Tile":"tile_farm"},{"Position":[8.0,0.0,0.0],"Tile":"tile_farm"},{"Position":[8.0,2.0,0.0],"Tile":"tile_farm"},{"Position":[10.0,-4.0,0.0],"Tile":"tile_farm"},{"Position":[10.0,-2.0,0.0],"Tile":"tile_farm"},{"Position":[10.0,0.0,0.0],"Tile":"tile_farm"},{"Position":[10.0,2.0,0.0],"Tile":"tile_farm"}],"ObjectType":"Tilemap"},{"_key":"Spawners","_isInvisible":true,"_isCollidable":false,"_isTrigger":false,"_renderOrder":2,"_renderLayer":"Default","_tiles":[],"ObjectType":"Tilemap"}] \ No newline at end of file diff --git a/Assets/test.txt.meta b/Assets/save.txt.meta similarity index 75% rename from Assets/test.txt.meta rename to Assets/save.txt.meta index 99da9ad..7935757 100644 --- a/Assets/test.txt.meta +++ b/Assets/save.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 0e51df1fc98540b49abfd724a8df0eb6 +guid: e12fc9910d378cd4b913db867d6c3018 TextScriptImporter: externalObjects: {} userData: diff --git a/Assets/test.txt b/Assets/test.txt deleted file mode 100644 index 28231c6..0000000 --- a/Assets/test.txt +++ /dev/null @@ -1 +0,0 @@ -[{"Name":"StickSpawner","Position":[-8.0,-5.0,0.0],"Tilemap":"Spawners","_prefab":"baseArcher","_spawnOnStart":true,"_spawnSpeed":0.0},{"Name":"StickSpawner","Position":[-8.0,-3.0,0.0],"Tilemap":"Spawners","_prefab":"baseArcher","_spawnOnStart":true,"_spawnSpeed":0.0},{"Name":"StickSpawner","Position":[-8.0,-1.0,0.0],"Tilemap":"Spawners","_prefab":"baseArcher","_spawnOnStart":true,"_spawnSpeed":0.0},{"Name":"StickSpawner","Position":[-8.0,1.0,0.0],"Tilemap":"Spawners","_prefab":"baseArcher","_spawnOnStart":true,"_spawnSpeed":0.0},{"Name":"baseArcher(Clone)","Position":[-8.0,-5.0,0.0],"_hp":100,"_speed":0.0,"_attack_speed":2.0,"_attack_damage":10},{"Name":"baseArcher(Clone)","Position":[-8.0,-3.0,0.0],"_hp":100,"_speed":0.0,"_attack_speed":2.0,"_attack_damage":10},{"Name":"baseArcher(Clone)","Position":[-8.0,-1.0,0.0],"_hp":100,"_speed":0.0,"_attack_speed":2.0,"_attack_damage":10},{"Name":"baseArcher(Clone)","Position":[-8.0,1.0,0.0],"_hp":100,"_speed":0.0,"_attack_speed":2.0,"_attack_damage":10}] \ No newline at end of file diff --git a/ProjectSettings/BurstAotSettings_StandaloneWindows.json b/ProjectSettings/BurstAotSettings_StandaloneWindows.json new file mode 100644 index 0000000..8e6a74e --- /dev/null +++ b/ProjectSettings/BurstAotSettings_StandaloneWindows.json @@ -0,0 +1,17 @@ +{ + "MonoBehaviour": { + "Version": 4, + "EnableBurstCompilation": true, + "EnableOptimisations": true, + "EnableSafetyChecks": false, + "EnableDebugInAllBuilds": false, + "EnableArmv9SecurityFeatures": false, + "CpuMinTargetX32": 0, + "CpuMaxTargetX32": 0, + "CpuMinTargetX64": 0, + "CpuMaxTargetX64": 0, + "CpuTargetsX32": 6, + "CpuTargetsX64": 72, + "OptimizeFor": 0 + } +} diff --git a/ProjectSettings/CommonBurstAotSettings.json b/ProjectSettings/CommonBurstAotSettings.json new file mode 100644 index 0000000..0293daf --- /dev/null +++ b/ProjectSettings/CommonBurstAotSettings.json @@ -0,0 +1,6 @@ +{ + "MonoBehaviour": { + "Version": 4, + "DisabledWarnings": "" + } +}