| | |
| | | using Assets.Scripts.Enums; |
| | | using System.Collections; |
| | | using Assets.Scripts.Helpers; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using TMPro; |
| | | using Unity.VisualScripting; |
| | | using UnityEngine; |
| | | using UnityEngine.InputSystem; |
| | | using UnityEngine.SceneManagement; |
| | | using UnityEngine.Tilemaps; |
| | | |
| | | public class GameManager : SettingsManager |
| | |
| | | public GameObject healthTextPrefab; |
| | | public Canvas playerUI; |
| | | public Canvas pauseMenuUI; |
| | | public GameObject levelChanger; |
| | | public Tilemap tilemap; |
| | | [NonSerialized] |
| | | public GenerateTileMap generateTileMap; |
| | | [NonSerialized] |
| | | public List<Vector3Int> destroyedTiles = new List<Vector3Int>(); |
| | | public GameObject pickups; |
| | | |
| | | private void Awake() |
| | | { |
| | | SoundManager.instance.ChangeMusic(SoundName.MusicHappy); |
| | | LoadTileMaps(SaveSystem.isGameLoaded); |
| | | } |
| | | |
| | | |
| | | private void LoadTileMaps(bool loadFromSave) |
| | | { |
| | | generateTileMap = tilemap.GetComponent<GenerateTileMap>(); |
| | | pauseMenuUI.GetComponent<PauseMenu>().Pause(); |
| | | levelChanger.GetComponent<Animator>().SetBool("SceneLoading", true); |
| | | 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 map loading"); |
| | | levelChanger.GetComponent<Animator>().SetBool("SceneLoading", false); |
| | | GameLoaded(); |
| | | } |
| | | public void GameLoaded() |
| | | { |
| | | pauseMenuUI.GetComponent<PauseMenu>().Resume(); |
| | | pauseMenuUI.GetComponent<Animator>().SetTrigger("GameLoaded"); |
| | | } |
| | | |
| | | #region characterEvents |
| | | private void OnEnable() |
| | | { |
| | | // add listen events |
| | |
| | | //Debug.Log(tilemap.HasTile(cellCoord)); |
| | | if (tilemap.HasTile(cellCoord)) |
| | | { |
| | | tilemap.SetTile(cellCoord, null); |
| | | Vector3 moveToPosition = grid.CellToWorld(cellCoord); |
| | | moveToPosition.x += 0.5f; |
| | | moveToPosition.y += 0.5f; |
| | | CharacterEvents.characterDrillingToPosition.Invoke(moveToPosition); |
| | | GameObject tileGameObject = tilemap.GetInstantiatedObject(cellCoord); |
| | | if (tileGameObject?.GetComponent<Drillable>()?.isDrillable ?? false) |
| | | { |
| | | Vector3 cellWorldPosition = grid.CellToWorld(cellCoord); |
| | | // middle of tile |
| | | cellWorldPosition.x += 0.5f; |
| | | cellWorldPosition.y += 0.5f; |
| | | if (tileGameObject?.GetComponent<Dropable>()?.isDropable ?? false) |
| | | { |
| | | // Change no drops, only inventory |
| | | //Instantiate(tileGameObject?.GetComponent<Dropable>().dropable, cellWorldPosition, Quaternion.identity, pickups.transform); |
| | | //Debug.Log(.name); |
| | | |
| | | } |
| | | tilemap.SetTile(cellCoord, null); |
| | | destroyedTiles.Add(cellCoord); |
| | | CharacterEvents.characterDrillingToPosition.Invoke(cellWorldPosition, drillDirection); |
| | | } |
| | | else |
| | | { |
| | | //CharacterEvents.characterDrillingToPositionAbort.Invoke(moveToPosition); |
| | | } |
| | | } |
| | | } |
| | | public void GameLoaded() |
| | | { |
| | | pauseMenuUI.GetComponent<Animator>().SetTrigger("GameLoaded"); |
| | | } |
| | | #endregion |
| | | |
| | | } |