Level save + load

This commit is contained in:
2023-06-16 17:08:56 +03:00
parent d9fbd99072
commit 0eb8b1d4ee
132 changed files with 20138 additions and 15 deletions

View File

@@ -19,8 +19,6 @@ namespace Level
}
public CellContent cellContent;
public bool isTarget;
public Vector3Int cellPos;
}
// Public
@@ -59,7 +57,6 @@ namespace Level
{
cellContent = LayoutCellData.CellContent.None,
isTarget = false,
cellPos = cellPos
};
worldPos = grid.GetCellCenterWorld(cellPos);

View File

@@ -31,6 +31,7 @@ namespace Level
private int height;
private LayoutCell[][] layout;
private Vector3Int firstCellPos;
private LevelSaveSystem levelSaveSystem = new LevelSaveSystem();
// Properties
public static LevelBuilder Instance => instance;
@@ -59,6 +60,11 @@ namespace Level
EditCellAt(worldMousePosition);
}
if (Input.GetKeyDown(KeyCode.T))
{
Save();
}
}
@@ -135,6 +141,25 @@ namespace Level
}
public void Save()
{
LevelData levelData = CreateLevelData();
Save(levelData);
}
public void Save(LevelData levelData)
{
levelSaveSystem.Save(levelData);
}
public void Load()
{
levelSaveSystem.Load();
}
public LayoutCell GetCellAtLayout(Vector2Int layoutPosition)
{
// Check that cell with these indices exists in array

View File

@@ -1,4 +1,6 @@
using System.Collections;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using System.Collections.Generic;
using UnityEngine;
@@ -10,5 +12,24 @@ namespace Level
public LayoutCell.LayoutCellData[][] layout;
public int width;
public int height;
public byte[] ToBytes()
{
BinaryFormatter formatter = new BinaryFormatter();
using (MemoryStream memoryStream = new MemoryStream())
{
formatter.Serialize(memoryStream, this);
return memoryStream.ToArray();
}
}
public static LevelData FromBytes(byte[] data)
{
BinaryFormatter formatter = new BinaryFormatter();
using (MemoryStream memoryStream = new MemoryStream(data))
{
return (LevelData)formatter.Deserialize(memoryStream);
}
}
}
}

View File

@@ -0,0 +1,78 @@
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization.Formatters.Binary;
using SimpleFileBrowser;
using UnityEngine;
namespace Level
{
public class LevelSaveSystem
{
public void Save(LevelData levelData)
{
string[] extensions = new string[1];
extensions[0] = "*.lvl";
FileBrowser.SetFilters(true, extensions);
FileBrowser.ShowSaveDialog(
(string[] paths) => SaveLevel(paths, levelData),
null,
FileBrowser.PickMode.Files,
false,
null,
"level.lvl"
);
}
private void SaveLevel(string[] paths, LevelData levelData)
{
string filePath = paths[0];
string directoryName = FileBrowserHelpers.GetDirectoryName(filePath);
string fileName = FileBrowserHelpers.GetFilename(filePath);
if (!FileBrowserHelpers.FileExists(filePath))
{
FileBrowserHelpers.CreateFileInDirectory(directoryName, fileName);
}
FileBrowserHelpers.WriteBytesToFile(filePath, levelData.ToBytes());
Debug.Log("File saved to " + filePath);
}
public void Load()
{
string[] extensions = new string[1];
extensions[0] = "*.lvl";
FileBrowser.SetFilters(true, extensions);
FileBrowser.ShowLoadDialog(
LoadLevel,
null,
FileBrowser.PickMode.Files
);
}
public void LoadLevel(string[] paths)
{
string filePath = paths[0];
if (!FileBrowserHelpers.FileExists(filePath))
{
Debug.LogError("File not found");
return;
}
byte[] levelDataBytes = FileBrowserHelpers.ReadBytesFromFile(filePath);
LevelData levelData = LevelData.FromBytes(levelDataBytes);
Debug.Log("Loaded file " + filePath);
LevelBuilder.Instance.LoadLevelData(levelData);
}
}
}

View File

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