Level save + load
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
78
Assets/Scripts/Level/LevelSaveSystem.cs
Normal file
78
Assets/Scripts/Level/LevelSaveSystem.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
11
Assets/Scripts/Level/LevelSaveSystem.cs.meta
Normal file
11
Assets/Scripts/Level/LevelSaveSystem.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 10992efe7e790c24aae63e5d448a7c0e
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user