miepzerino
2025-04-08 40ac185dc7a017d95771fe580c77eab20e663908
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Tilemaps;
 
public class SaveSystemManager : MonoBehaviour
{
    private FogOfWar fogOfWar;
    private GenerateTileMap generateTileMap;
    private PlayerController playerController;
    private Inventory playerInventory;
    private SaveDataMap mapState;
    private SaveDataPlayer playerState;
    public static SaveSystemManager Instance { get; private set; }
    private void Awake()
    {
        if (Instance == null)
        {
            Instance = this;
            fogOfWar = FindObjectOfType<FogOfWar>();
            generateTileMap = FindObjectOfType<GenerateTileMap>();
            playerController = GameObject.Find("Player").GetComponent<PlayerController>();
            playerInventory = GameObject.Find("Player").GetComponent<Inventory>();
        }
        else
        {
            Destroy(gameObject);
        }
    }
 
    public void SaveGame()
    {
        SaveSystem.SavePlayer(GetSaveDataPlayer());
        SaveSystem.SaveMapState(GetSaveDataMap());
    }
 
    private SaveDataPlayer GetSaveDataPlayer()
    {
        return new SaveDataPlayer(playerController, playerInventory);
    }
 
    public SaveDataMap GetMapStateFromSave()
    {
        if (mapState == null)
        {
            mapState = SaveSystem.LoadMapState();
        }
        return mapState;
    }
 
    public SaveDataPlayer GetPlayerStateFromSave()
    {
        if (playerState == null)
        {
            playerState = SaveSystem.LoadPlayer();
            Debug.Log("Player state loaded from save");
        }
        return playerState;
    }
 
    private SaveDataMap GetSaveDataMap()
    {
        var saveDataTileMap = GetSaveDataTileMap();
        return new SaveDataMap(
            saveDataTileMap.seed,
            saveDataTileMap.destroyedTiles,
            saveDataTileMap.chunkCache,
            GetSaveDataFogOfWar()
        );
    }
 
    private FogOfWarData GetSaveDataFogOfWar()
    {
        var fogSaveValues = fogOfWar.GetSaveValues();
        FogOfWarData saveData = new FogOfWarData();
 
        for (int x = 0; x < fogSaveValues.discoveredFog.GetLength(0); x++)
        {
            for (int y = 0; y < fogSaveValues.discoveredFog.GetLength(1); y++)
            {
                TileBase currentTile = fogSaveValues.discoveredFog[x, y];
                if (currentTile == null || currentTile != fogSaveValues.fogTile) // Only save revealed tiles
                {
                    FogTileData tileData = new FogTileData
                    {
                        x = x,
                        y = y,
                        fogLevelIndex = currentTile == null ? -1 : System.Array.FindIndex(fogSaveValues.fogLevels, f => f.tile == currentTile)
                    };
                    saveData.discoveredTiles.Add(tileData);
                }
            }
        }
 
        return saveData;
    }
 
    public (int seed, Dictionary<Vector2Int, TileBase[]> chunkCache, List<Vector3Int> destroyedTiles) GetSaveDataTileMap()
    {
        return generateTileMap.GetSaveValues();
    }
}