From fe3c8a5515acdfcc50913d5b83de8f9504e95b73 Mon Sep 17 00:00:00 2001
From: miepzerino <o.skotnik@gmail.com>
Date: Sat, 23 Dec 2023 23:21:22 +0000
Subject: [PATCH] Added map save/load + seed generation
---
Assets/GenerateTileMap.cs | 50 +++
Assets/Scripts/Helpers/VectorHelper.cs | 89 +++++
Assets/Scripts/Managers/GameManager.cs | 40 ++
Assets/Scripts/PlayerController.cs | 15
Assets/Prefabs/LevelChanger.prefab | 287 +++++++++++++++++++
Assets/Scripts/SaveSystem.cs | 57 +++
Assets/Scenes/GameplayScene.unity | 299 -------------------
Assets/Scripts/PauseMenu.cs | 4
Assets/Scripts/SaveData.cs | 30 +
9 files changed, 535 insertions(+), 336 deletions(-)
diff --git a/Assets/GenerateTileMap.cs b/Assets/GenerateTileMap.cs
index 2d3e10f..46742ed 100644
--- a/Assets/GenerateTileMap.cs
+++ b/Assets/GenerateTileMap.cs
@@ -1,15 +1,18 @@
using System;
using System.Collections;
+using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Tilemaps;
+using UnityEngine.UIElements;
public class GenerateTileMap : MonoBehaviour
{
+ public int? seed;
public int width = 256;
public int height = 256;
- public float scale = 20f;
- public float offsetX = 0f;
- public float offsetY = 0f;
+ private float scale;
+ private float offsetX;
+ private float offsetY;
Tilemap tilemap;
public RuleTile ruleTile;
//public List<TileBase> tiles;
@@ -17,9 +20,43 @@
private void Awake()
{
tilemap = GetComponent<Tilemap>();
+#if DEBUG
+ //seed = 0123456789;
+#endif
+ if (seed == null)
+ {
+ seed = GenerateSeed(9);
+ }
+
+ SetSettingsFromSeed(seed.Value);
}
- public IEnumerator GenerateTiles(Action finishedCallback)
+ public void SetSettingsFromSeed(int seed)
+ {
+ UnityEngine.Random.State randomState = UnityEngine.Random.state;
+
+ UnityEngine.Random.InitState(seed);
+ scale = UnityEngine.Random.Range(17f, 23f);
+ offsetX = UnityEngine.Random.Range(-10000f, 10000f);
+ offsetY = UnityEngine.Random.Range(-10000f, 10000f);
+
+ UnityEngine.Random.state = randomState;
+
+ }
+
+ private int GenerateSeed(int size)
+ {
+ System.Random rand = new System.Random();
+ string seedNumbers = "0123456789";
+ char[] chars = new char[size];
+ for (int i = 0; i < size; i++)
+ {
+ chars[i] = seedNumbers[rand.Next(seedNumbers.Length)];
+ }
+ return int.Parse(new string(chars));
+ }
+
+ public IEnumerator GenerateTiles(Action finishedCallback, List<Vector3Int> destroyedTiles)
{
for (int x = 0; x < width; x++)
{
@@ -31,7 +68,10 @@
if (perlinNoise >= 0.3f)
{
- tilemap.SetTile(new Vector3Int(x, y), ruleTile);
+ if (!destroyedTiles.Contains(new Vector3Int(x, y, 0)))
+ {
+ tilemap.SetTile(new Vector3Int(x, y), ruleTile);
+ }
}
}
diff --git a/Assets/Prefabs/LevelChanger.prefab b/Assets/Prefabs/LevelChanger.prefab
index f584d01..f338308 100644
--- a/Assets/Prefabs/LevelChanger.prefab
+++ b/Assets/Prefabs/LevelChanger.prefab
@@ -142,6 +142,215 @@
m_Script: {fileID: 11500000, guid: a75ef9c1b88892d40b6007a3ab585271, type: 3}
m_Name:
m_EditorClassIdentifier:
+--- !u!1 &3844785706809086879
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 6284251417818347539}
+ - component: {fileID: 1160294125566254827}
+ - component: {fileID: 8332668438839698828}
+ m_Layer: 5
+ m_Name: Spinner
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 0
+--- !u!224 &6284251417818347539
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3844785706809086879}
+ 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: 6682212171457450865}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0.5, y: 0.5}
+ m_AnchorMax: {x: 0.5, y: 0.5}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 32, y: 32}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &1160294125566254827
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3844785706809086879}
+ m_CullTransparentMesh: 1
+--- !u!114 &8332668438839698828
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3844785706809086879}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: -161760997, guid: 8bdab73b8571efc4ba2f350bfc5bf34c, type: 3}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!1 &4140913647654720710
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 712703440348202741}
+ - component: {fileID: 4758794796871118532}
+ - component: {fileID: 4321010892148685286}
+ m_Layer: 5
+ m_Name: GameLoadingText (TMP)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &712703440348202741
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4140913647654720710}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 0.75, y: 0.75, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 6682212171457450865}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 1, y: 0}
+ m_AnchorMax: {x: 1, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 450, y: 100}
+ m_Pivot: {x: 1, y: 0}
+--- !u!222 &4758794796871118532
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4140913647654720710}
+ m_CullTransparentMesh: 1
+--- !u!114 &4321010892148685286
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4140913647654720710}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_text: Game loading...
+ m_isRightToLeft: 0
+ m_fontAsset: {fileID: 11400000, guid: dfaa183353a3e5c4bbc9aabee7dd8268, type: 2}
+ m_sharedMaterial: {fileID: -8621457483150523135, guid: dfaa183353a3e5c4bbc9aabee7dd8268, type: 2}
+ m_fontSharedMaterials: []
+ m_fontMaterial: {fileID: 0}
+ m_fontMaterials: []
+ m_fontColor32:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_fontColor: {r: 1, g: 1, b: 1, a: 1}
+ m_enableVertexGradient: 0
+ m_colorMode: 3
+ m_fontColorGradient:
+ topLeft: {r: 1, g: 1, b: 1, a: 1}
+ topRight: {r: 1, g: 1, b: 1, a: 1}
+ bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+ bottomRight: {r: 1, g: 1, b: 1, a: 1}
+ m_fontColorGradientPreset: {fileID: 0}
+ m_spriteAsset: {fileID: 0}
+ m_tintAllSprites: 0
+ m_StyleSheet: {fileID: 0}
+ m_TextStyleHashCode: -1183493901
+ m_overrideHtmlColors: 0
+ m_faceColor:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_fontSize: 78
+ m_fontSizeBase: 78
+ m_fontWeight: 400
+ m_enableAutoSizing: 0
+ m_fontSizeMin: 18
+ m_fontSizeMax: 72
+ m_fontStyle: 0
+ m_HorizontalAlignment: 32
+ m_VerticalAlignment: 8192
+ m_textAlignment: 65535
+ m_characterSpacing: 0
+ m_wordSpacing: 0
+ m_lineSpacing: 0
+ m_lineSpacingMax: 0
+ m_paragraphSpacing: 0
+ m_charWidthMaxAdj: 0
+ m_enableWordWrapping: 1
+ m_wordWrappingRatios: 0.4
+ m_overflowMode: 0
+ m_linkedTextComponent: {fileID: 0}
+ parentLinkedComponent: {fileID: 0}
+ m_enableKerning: 1
+ m_enableExtraPadding: 0
+ checkPaddingRequired: 0
+ m_isRichText: 1
+ m_parseCtrlCharacters: 1
+ m_isOrthographic: 1
+ m_isCullingEnabled: 0
+ m_horizontalMapping: 0
+ m_verticalMapping: 0
+ m_uvLineOffset: 0
+ m_geometrySortingOrder: 0
+ m_IsTextObjectScaleStatic: 0
+ m_VertexBufferAutoSizeReduction: 0
+ m_useMaxVisibleDescender: 1
+ m_pageToDisplay: 1
+ m_margin: {x: 0, y: 0, z: 0, w: 0}
+ m_isUsingLegacyAnimationComponent: 0
+ m_isVolumetricText: 0
+ m_hasFontAssetChanged: 0
+ m_baseMaterial: {fileID: 0}
+ m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!1 &4958470436171505954
GameObject:
m_ObjectHideFlags: 0
@@ -174,6 +383,7 @@
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 6098923997719688514}
+ - {fileID: 6682212171457450865}
m_Father: {fileID: 7044154378667287598}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
@@ -244,3 +454,80 @@
m_BlockingMask:
serializedVersion: 2
m_Bits: 4294967295
+--- !u!1 &8556222640122415663
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 6682212171457450865}
+ - component: {fileID: 8205283534925286976}
+ - component: {fileID: 5749254209960849005}
+ m_Layer: 5
+ m_Name: LoadingScreen
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &6682212171457450865
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8556222640122415663}
+ 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:
+ - {fileID: 6284251417818347539}
+ - {fileID: 712703440348202741}
+ m_Father: {fileID: 1837984479501285253}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &8205283534925286976
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8556222640122415663}
+ m_CullTransparentMesh: 1
+--- !u!114 &5749254209960849005
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8556222640122415663}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 0, g: 0, b: 0, a: 0}
+ m_RaycastTarget: 0
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 0}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
diff --git a/Assets/Scenes/GameplayScene.unity b/Assets/Scenes/GameplayScene.unity
index 0cc8649..91795ec 100644
--- a/Assets/Scenes/GameplayScene.unity
+++ b/Assets/Scenes/GameplayScene.unity
@@ -1027,11 +1027,6 @@
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 5549e8180a8b1ba49bf0de3848e7bcf9, type: 3}
---- !u!224 &405367630 stripped
-RectTransform:
- m_CorrespondingSourceObject: {fileID: 1837984479501285253, guid: 1727dce3407104540a6bf21deb2957a8, type: 3}
- m_PrefabInstance: {fileID: 1007461191}
- m_PrefabAsset: {fileID: 0}
--- !u!4 &427702723 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 3069410814361871794, guid: 5549e8180a8b1ba49bf0de3848e7bcf9, type: 3}
@@ -1734,83 +1729,6 @@
m_EditorClassIdentifier:
cam: {fileID: 519420031}
followTarget: {fileID: 254538002}
---- !u!1 &700639980
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 700639981}
- - component: {fileID: 700639983}
- - component: {fileID: 700639982}
- m_Layer: 5
- m_Name: LoadingScreen
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &700639981
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 700639980}
- 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:
- - {fileID: 1083067552}
- - {fileID: 1934276584}
- m_Father: {fileID: 405367630}
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 1, y: 1}
- m_AnchoredPosition: {x: 0, y: 0}
- m_SizeDelta: {x: 0, y: 0}
- m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &700639982
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 700639980}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Material: {fileID: 0}
- m_Color: {r: 0, g: 0, b: 0, a: 0}
- m_RaycastTarget: 0
- m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
- m_Maskable: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_Sprite: {fileID: 0}
- m_Type: 0
- m_PreserveAspect: 0
- m_FillCenter: 1
- m_FillMethod: 4
- m_FillAmount: 1
- m_FillClockwise: 1
- m_FillOrigin: 0
- m_UseSpriteMesh: 0
- m_PixelsPerUnitMultiplier: 1
---- !u!222 &700639983
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 700639980}
- m_CullTransparentMesh: 1
--- !u!1 &720777868 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 8421115849835234403, guid: 19b26cb080fd5b841970a693f820fc0f, type: 3}
@@ -2226,10 +2144,7 @@
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
- m_AddedGameObjects:
- - targetCorrespondingSourceObject: {fileID: 1837984479501285253, guid: 1727dce3407104540a6bf21deb2957a8, type: 3}
- insertIndex: -1
- addedObject: {fileID: 700639981}
+ m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 1727dce3407104540a6bf21deb2957a8, type: 3}
--- !u!1 &1029677422
@@ -2465,81 +2380,6 @@
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1042147644}
m_CullTransparentMesh: 1
---- !u!1 &1083067551
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 1083067552}
- - component: {fileID: 1083067554}
- - component: {fileID: 1083067553}
- m_Layer: 5
- m_Name: Spinner
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 0
---- !u!224 &1083067552
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1083067551}
- 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: 700639981}
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0.5, y: 0.5}
- m_AnchorMax: {x: 0.5, y: 0.5}
- m_AnchoredPosition: {x: 0, y: 0}
- m_SizeDelta: {x: 32, y: 32}
- m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &1083067553
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1083067551}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Material: {fileID: 0}
- m_Color: {r: 1, g: 1, b: 1, a: 1}
- m_RaycastTarget: 1
- m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
- m_Maskable: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_Sprite: {fileID: -161760997, guid: 8bdab73b8571efc4ba2f350bfc5bf34c, type: 3}
- m_Type: 0
- m_PreserveAspect: 0
- m_FillCenter: 1
- m_FillMethod: 4
- m_FillAmount: 1
- m_FillClockwise: 1
- m_FillOrigin: 0
- m_UseSpriteMesh: 0
- m_PixelsPerUnitMultiplier: 1
---- !u!222 &1083067554
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1083067551}
- m_CullTransparentMesh: 1
--- !u!1 &1219825711
GameObject:
m_ObjectHideFlags: 0
@@ -4657,144 +4497,7 @@
m_EditorClassIdentifier:
width: 256
height: 256
- scale: 20
- offsetX: 0
- offsetY: 0
ruleTile: {fileID: 11400000, guid: e77c00aec3ec74f4a9ec15ef63c3f9a7, type: 2}
---- !u!1 &1934276583
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 1934276584}
- - component: {fileID: 1934276586}
- - component: {fileID: 1934276585}
- m_Layer: 5
- m_Name: GameLoadingText (TMP)
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &1934276584
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1934276583}
- m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 0.75, y: 0.75, z: 1}
- m_ConstrainProportionsScale: 0
- m_Children: []
- m_Father: {fileID: 700639981}
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 1, y: 0}
- m_AnchorMax: {x: 1, y: 0}
- m_AnchoredPosition: {x: 0, y: 0}
- m_SizeDelta: {x: 450, y: 100}
- m_Pivot: {x: 1, y: 0}
---- !u!114 &1934276585
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1934276583}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Material: {fileID: 0}
- m_Color: {r: 1, g: 1, b: 1, a: 1}
- m_RaycastTarget: 1
- m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
- m_Maskable: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_text: Game loading...
- m_isRightToLeft: 0
- m_fontAsset: {fileID: 11400000, guid: dfaa183353a3e5c4bbc9aabee7dd8268, type: 2}
- m_sharedMaterial: {fileID: -8621457483150523135, guid: dfaa183353a3e5c4bbc9aabee7dd8268, type: 2}
- m_fontSharedMaterials: []
- m_fontMaterial: {fileID: 0}
- m_fontMaterials: []
- m_fontColor32:
- serializedVersion: 2
- rgba: 4294967295
- m_fontColor: {r: 1, g: 1, b: 1, a: 1}
- m_enableVertexGradient: 0
- m_colorMode: 3
- m_fontColorGradient:
- topLeft: {r: 1, g: 1, b: 1, a: 1}
- topRight: {r: 1, g: 1, b: 1, a: 1}
- bottomLeft: {r: 1, g: 1, b: 1, a: 1}
- bottomRight: {r: 1, g: 1, b: 1, a: 1}
- m_fontColorGradientPreset: {fileID: 0}
- m_spriteAsset: {fileID: 0}
- m_tintAllSprites: 0
- m_StyleSheet: {fileID: 0}
- m_TextStyleHashCode: -1183493901
- m_overrideHtmlColors: 0
- m_faceColor:
- serializedVersion: 2
- rgba: 4294967295
- m_fontSize: 78
- m_fontSizeBase: 78
- m_fontWeight: 400
- m_enableAutoSizing: 0
- m_fontSizeMin: 18
- m_fontSizeMax: 72
- m_fontStyle: 0
- m_HorizontalAlignment: 32
- m_VerticalAlignment: 8192
- m_textAlignment: 65535
- m_characterSpacing: 0
- m_wordSpacing: 0
- m_lineSpacing: 0
- m_lineSpacingMax: 0
- m_paragraphSpacing: 0
- m_charWidthMaxAdj: 0
- m_enableWordWrapping: 1
- m_wordWrappingRatios: 0.4
- m_overflowMode: 0
- m_linkedTextComponent: {fileID: 0}
- parentLinkedComponent: {fileID: 0}
- m_enableKerning: 1
- m_enableExtraPadding: 0
- checkPaddingRequired: 0
- m_isRichText: 1
- m_parseCtrlCharacters: 1
- m_isOrthographic: 1
- m_isCullingEnabled: 0
- m_horizontalMapping: 0
- m_verticalMapping: 0
- m_uvLineOffset: 0
- m_geometrySortingOrder: 0
- m_IsTextObjectScaleStatic: 0
- m_VertexBufferAutoSizeReduction: 0
- m_useMaxVisibleDescender: 1
- m_pageToDisplay: 1
- m_margin: {x: 0, y: 0, z: 0, w: 0}
- m_isUsingLegacyAnimationComponent: 0
- m_isVolumetricText: 0
- m_hasFontAssetChanged: 0
- m_baseMaterial: {fileID: 0}
- m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
---- !u!222 &1934276586
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1934276583}
- m_CullTransparentMesh: 1
--- !u!1 &1990316377
GameObject:
m_ObjectHideFlags: 0
diff --git a/Assets/Scripts/Helpers/VectorHelper.cs b/Assets/Scripts/Helpers/VectorHelper.cs
index 6e72915..75b92d0 100644
--- a/Assets/Scripts/Helpers/VectorHelper.cs
+++ b/Assets/Scripts/Helpers/VectorHelper.cs
@@ -1,5 +1,7 @@
using System;
+using System.Collections.Generic;
using System.Reflection;
+using Unity.VisualScripting.Dependencies.NCalc;
using UnityEngine;
using static UnityEngine.Rendering.DebugUI;
@@ -23,19 +25,6 @@
}
/// <summary>
- /// Will get a float array for a given vector2 value
- /// </summary>
- /// <param name="value"></param>
- /// <returns>float[x,y]</returns>
- public static float[] ConvertToFloatArray(this Vector2 value)
- {
- float[] result = new float[2];
- result[0] = value.x;
- result[1] = value.y;
- return result;
- }
-
- /// <summary>
/// Will get a vector3 for a given float array value
/// </summary>
/// <param name="value"></param>
@@ -57,6 +46,19 @@
}
/// <summary>
+ /// Will get a float array for a given vector2 value
+ /// </summary>
+ /// <param name="value"></param>
+ /// <returns>float[x,y]</returns>
+ public static float[] ConvertToFloatArray(this Vector2 value)
+ {
+ float[] result = new float[2];
+ result[0] = value.x;
+ result[1] = value.y;
+ return result;
+ }
+
+ /// <summary>
/// Will get a vector2 for a given float array value
/// </summary>
/// <param name="value"></param>
@@ -75,5 +77,66 @@
}
return result;
}
+
+ /// <summary>
+ /// Will get a float array for a given vector2 value
+ /// </summary>
+ /// <param name="value"></param>
+ /// <returns>float[x,y]</returns>
+ public static List<int[]> ConvertToListIntArray(this List<Vector3Int> value)
+ {
+ List<int[]> result = new List<int[]>();
+ for (int i = 0; i < value.Count; i++)
+ {
+ int[] intVector = new int[2];
+ intVector[0] = value[i].x;
+ intVector[1] = value[i].y;
+ result.Add(intVector);
+ }
+ return result;
+ }
+
+ /// <summary>
+ /// Will get a vector2 for a given float array value
+ /// </summary>
+ /// <param name="value"></param>
+ /// <returns>Vector2</returns>
+ public static List<Vector3Int> ConvertToVector3Int(this List<int[]> value)
+ {
+ List<Vector3Int> result = new List<Vector3Int>();
+ if (value != null && value.Count > 0)
+ {
+ for (int i = 0; i < value.Count; i++)
+ {
+ Vector3Int vector = new Vector3Int();
+ vector.x = value[0][0];
+ vector.y = value[0][1];
+ result.Add(vector);
+ }
+
+ }
+ return result;
+ }
+
+ public static Vector3Int ConvertToVector3Int(this int[] value)
+ {
+ Vector3Int result = new Vector3Int();
+ switch (value.Length)
+ {
+ case 2:
+ result.x = value[0];
+ result.y = value[1];
+ break;
+ case 3:
+ result.x = value[0];
+ result.y = value[1];
+ result.z = value[2];
+ break;
+ default:
+ Debug.Assert(false, "ConvertToVector3Int() got wrong array size, expected size is 2 or 3. recieved size: " + value.Length);
+ break;
+ }
+ return result;
+ }
}
}
\ No newline at end of file
diff --git a/Assets/Scripts/Managers/GameManager.cs b/Assets/Scripts/Managers/GameManager.cs
index 6c12eb4..13f8eb3 100644
--- a/Assets/Scripts/Managers/GameManager.cs
+++ b/Assets/Scripts/Managers/GameManager.cs
@@ -1,5 +1,10 @@
using Assets.Scripts.Enums;
+using Assets.Scripts.Helpers;
+using System;
+using System.Collections.Generic;
+using System.Linq;
using TMPro;
+using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.Tilemaps;
@@ -11,7 +16,10 @@
public Canvas pauseMenuUI;
public GameObject levelChanger;
public Tilemap tilemap;
- GenerateTileMap generateTileMap;
+ [NonSerialized]
+ public GenerateTileMap generateTileMap;
+ [NonSerialized]
+ public List<Vector3Int> destroyedTiles = new List<Vector3Int>();
private void Awake()
{
@@ -22,16 +30,37 @@
private void LoadTileMaps(bool loadFromSave)
{
+ generateTileMap = tilemap.GetComponent<GenerateTileMap>();
pauseMenuUI.GetComponent<PauseMenu>().Pause();
levelChanger.GetComponent<Animator>().SetBool("SceneLoading", true);
- generateTileMap = tilemap.GetComponent<GenerateTileMap>();
- Debug.Log("waiting for async");
- StartCoroutine(generateTileMap.GenerateTiles(LoadTileMapsFinished));
+ if (loadFromSave)
+ {
+ LoadMapState();
+ }
+ Debug.Log("waiting for async map loading");
+ StartCoroutine(generateTileMap.GenerateTiles(LoadTileMapsFinished, destroyedTiles));
+ }
+
+ private void LoadMapState()
+ {
+ SaveDataMap mapState = SaveSystem.LoadMapState();
+ if (mapState != null)
+ {
+ generateTileMap.SetSettingsFromSeed(mapState.seed);
+ if (mapState.destroyedTiles != null && mapState.destroyedTiles.Count > 0)
+ {
+ // TODO rework load map (it's fucky wucky currently as I had to make an extra class for it to jsonify the tiles correctly, as unity does not like lists of arrays or 2d arrays)
+ foreach (DestroyedTile tile in mapState.destroyedTiles)
+ {
+ destroyedTiles.Add(tile.tileCoord.ConvertToVector3Int());
+ } //destroyedTiles.AddRange(mapState.destroyedTiles.Select(tile => { return tile.tileCoord; }).ToList().ConvertToVector3Int());
+ }
+ }
}
public void LoadTileMapsFinished()
{
- Debug.Log("done async");
+ Debug.Log("done async map loading");
levelChanger.GetComponent<Animator>().SetBool("SceneLoading", false);
GameLoaded();
}
@@ -101,6 +130,7 @@
if (tilemap.HasTile(cellCoord))
{
tilemap.SetTile(cellCoord, null);
+ destroyedTiles.Add(cellCoord);
Vector3 moveToPosition = grid.CellToWorld(cellCoord);
moveToPosition.x += 0.5f;
moveToPosition.y += 0.5f;
diff --git a/Assets/Scripts/PauseMenu.cs b/Assets/Scripts/PauseMenu.cs
index 90c5270..630aa70 100644
--- a/Assets/Scripts/PauseMenu.cs
+++ b/Assets/Scripts/PauseMenu.cs
@@ -74,7 +74,9 @@
public void OnGameSaveClicked()
{
PlayerController playerController = GameObject.Find("Player").GetComponent<PlayerController>();
- SaveSystem.SavePlayer(playerController);
+ SaveSystem.SavePlayer(new SaveDataPlayer(playerController));
+ GameManager gameManager= GameObject.Find("GameManager").GetComponent<GameManager>();
+ SaveSystem.SaveMapState(new SaveDataMap(gameManager.destroyedTiles, gameManager.generateTileMap.seed.Value));
animator.SetTrigger("GameSaved");
}
diff --git a/Assets/Scripts/PlayerController.cs b/Assets/Scripts/PlayerController.cs
index 37838d6..081b55e 100644
--- a/Assets/Scripts/PlayerController.cs
+++ b/Assets/Scripts/PlayerController.cs
@@ -110,14 +110,19 @@
boxCollider = GetComponent<BoxCollider2D>();
if (SaveSystem.isGameLoaded)
{
- SaveData save = SaveSystem.LoadPlayer();
- health.MaxHealth = save.maxHealth;
- health.Health = save.health;
- transform.position = VectorHelper.ConvertToVector3(save.position);
- rb.velocity = VectorHelper.ConvertToVector2(save.velocity);
+ LoadPlayer();
}
}
+ private void LoadPlayer()
+ {
+ SaveDataPlayer save = SaveSystem.LoadPlayer();
+ health.MaxHealth = save.maxHealth;
+ health.Health = save.health;
+ transform.position = VectorHelper.ConvertToVector3(save.position);
+ rb.velocity = VectorHelper.ConvertToVector2(save.velocity);
+ }
+
private void FixedUpdate()
{
if (CanMove)
diff --git a/Assets/Scripts/SaveData.cs b/Assets/Scripts/SaveData.cs
index 9af6777..5ee1f34 100644
--- a/Assets/Scripts/SaveData.cs
+++ b/Assets/Scripts/SaveData.cs
@@ -5,13 +5,13 @@
using UnityEngine;
[Serializable]
-public class SaveData
+public class SaveDataPlayer
{
public int maxHealth;
public int health;
public float[] position;
public float[] velocity;
- public SaveData(PlayerController player)
+ public SaveDataPlayer(PlayerController player)
{
maxHealth = player.health.MaxHealth;
health = player.health.Health;
@@ -19,3 +19,29 @@
velocity = player.rb.velocity.ConvertToFloatArray();
}
}
+
+[Serializable]
+public class SaveDataMap
+{
+ public int seed;
+ public List<DestroyedTile> destroyedTiles;
+ public SaveDataMap(List<Vector3Int> destroyedTiles, int seed)
+ {
+ this.seed = seed;
+ this.destroyedTiles = new List<DestroyedTile>();
+ foreach (var item in destroyedTiles.ConvertToListIntArray())
+ {
+ this.destroyedTiles.Add(new DestroyedTile(item));
+ }
+ }
+}
+
+[Serializable]
+public class DestroyedTile
+{
+ public DestroyedTile(int[] tileCoord)
+ {
+ this.tileCoord = tileCoord;
+ }
+ public int[] tileCoord;
+}
diff --git a/Assets/Scripts/SaveSystem.cs b/Assets/Scripts/SaveSystem.cs
index 71ff8ee..bfe2c48 100644
--- a/Assets/Scripts/SaveSystem.cs
+++ b/Assets/Scripts/SaveSystem.cs
@@ -5,14 +5,13 @@
public static class SaveSystem
{
public static bool isGameLoaded = false;
- public static void SavePlayer(PlayerController player)
+ public static void SavePlayer(SaveDataPlayer player)
{
if (player != null)
{
string path = System.IO.Path.Combine(Application.persistentDataPath, "player.savefile");
- SaveData saveData = new SaveData(player);
- string saveDataJSON = JsonUtility.ToJson(saveData);
+ string saveDataJSON = JsonUtility.ToJson(player);
using (FileStream fs = new FileStream(path, FileMode.Create))
{
@@ -25,13 +24,13 @@
}
else
{
- Debug.Log("Not saved as no playerController was sent");
+ Debug.Log("Not saved as no playerData was sent");
}
}
- public static SaveData LoadPlayer ()
+ public static SaveDataPlayer LoadPlayer()
{
- SaveData result;
+ SaveDataPlayer result;
string path = System.IO.Path.Combine(Application.persistentDataPath, "player.savefile");
if (File.Exists(path))
{
@@ -40,7 +39,51 @@
using (StreamReader sr = new StreamReader(fs))
{
string saveData = sr.ReadToEnd();
- result = JsonUtility.FromJson<SaveData>(saveData);
+ result = JsonUtility.FromJson<SaveDataPlayer>(saveData);
+ }
+ }
+ }
+ else
+ {
+ Debug.LogError("Save file not found in: " + path);
+ return null;
+ }
+ return result;
+ }
+ public static void SaveMapState(SaveDataMap mapState)
+ {
+ if (mapState != null)
+ {
+ string path = System.IO.Path.Combine(Application.persistentDataPath, "map.savefile");
+ string saveDataJSON = JsonUtility.ToJson(mapState);
+
+ using (FileStream fs = new FileStream(path, FileMode.Create))
+ {
+ using (StreamWriter sw = new StreamWriter(fs))
+ {
+ sw.Write(saveDataJSON);
+
+ }
+ }
+ }
+ else
+ {
+ Debug.Log("Not saved as no mapData was sent");
+ }
+ }
+
+ public static SaveDataMap LoadMapState()
+ {
+ SaveDataMap result;
+ string path = System.IO.Path.Combine(Application.persistentDataPath, "map.savefile");
+ if (File.Exists(path))
+ {
+ using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
+ {
+ using (StreamReader sr = new StreamReader(fs))
+ {
+ string saveData = sr.ReadToEnd();
+ result = JsonUtility.FromJson<SaveDataMap>(saveData);
}
}
}
--
Gitblit v1.10.0