evershade/Assets/Scripts/Managers/GridManager.cs

110 lines
4.1 KiB
C#

using System.Collections.Generic;
using Components;
using UnityEngine;
public class InteractableItem
{
// Properties and methods for interactable items like rocks and trees
}
public class GridManager : MonoBehaviour
{
public int tileSize = 1; // my grid is set to 32x32 and so that is 1 in unity, ok huh.
private readonly Dictionary<string, Grid> _grids = new();
public static GridManager Instance { get; private set; }
private void Awake()
{
if (Instance == null)
{
Instance = this;
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
}
}
public Grid CreateGridForMap(string mapName, Vector2Int gridSize)
{
_grids[mapName] = ScriptableObject.CreateInstance<Grid>();
_grids[mapName].Initialize(gridSize);
Debug.Log("New Grid created for map: " + mapName);
return _grids[mapName];
}
public Grid GetGridForMap(Map map)
{
if (_grids.TryGetValue(map.sceneName, out var grid)) return grid;
Debug.LogError($"No grid found for map {map.sceneName}");
// create a new grid with default size
return CreateGridForMap(map.sceneName, map.gridSize);
}
public void AssignGridToMap(Map map, Grid grid)
{
// Load the grid for the map
Debug.Log("Loading grid for map: " + map.sceneName);
_grids[map.sceneName] = grid;
}
// Update your other methods to take a mapName parameter and operate on the correct grid
public void LoadGrid(string currentMapSceneName)
{
Debug.Log("GRID: Loading grid: " + currentMapSceneName);
if (_grids.TryGetValue(currentMapSceneName, out var grid))
{
Debug.Log("GRID: Grid found for map: " + currentMapSceneName);
Debug.Log("GRID: Size: " + grid.size.x + ", " + grid.size.y);
// Create a parent object for the grid
var gridParent = new GameObject("Grid");
// gridParent.transform.position = Vector3.zero;
var mapParent = GameObject.FindGameObjectWithTag("Map");
if (mapParent != null) gridParent.transform.SetParent(mapParent.transform);
Instantiate(gridParent, new Vector3(0, 0, 0), Quaternion.identity);
// Load the grid by looping through the grid's tiles
for (var x = 0; x < grid.size.x; x++)
for (var y = 0; y < grid.size.y; y++)
{
// Load the tile at position (x, y)
Debug.Log("GRID: Loading tile at position: " + x + ", " + y);
var tile = ScriptableObject.CreateInstance<Tile>();
tile.Initialize(new Vector2Int(x, y));
var crop = CropManager.Instance.GetRandomCrop();
var randomCropItem = GameItemManager.Instance.GetRandomCategoryItem(GameItem.ItemType.Crop);
crop.setCropItem(randomCropItem);
tile.SetCrop(crop);
grid.SetTile(x, y, tile);
var tilePrefab = PrefabManager.Instance.GetTilePrefab();
var tileObject = Instantiate(tilePrefab, new Vector3(x * tileSize, -y * tileSize, 0),
Quaternion.identity);
tileObject.name = $"Tile_{x}_{y}";
tileObject.transform.SetParent(gridParent.transform);
var tileComponent = tileObject.GetComponent<TileComponent>();
tileComponent.Initialize(x, y, tile);
// get Crop prefab and instantiate it at the center of its new parent tile
var cropPrefab = PrefabManager.Instance.GetCropPrefab();
var cropObject = Instantiate(cropPrefab, tileObject.transform.position, Quaternion.identity);
var cropComponent = cropObject.GetComponent<CropComponent>();
cropComponent.SetCrop(tile.Crop);
cropObject.name = $"Crop_{x}_{y}";
cropObject.transform.SetParent(tileObject.transform);
}
}
else
{
Debug.LogError("GRID: No grid found for map: " + currentMapSceneName);
}
}
}