using Assets.Scripts.Enums;
|
using TMPro;
|
using UnityEngine;
|
using UnityEngine.Tilemaps;
|
|
public class GameManager : SettingsManager
|
{
|
public GameObject damageTextPrefab;
|
public GameObject healthTextPrefab;
|
public Canvas playerUI;
|
public Canvas pauseMenuUI;
|
public GameObject levelChanger;
|
public Tilemap tilemap;
|
GenerateTileMap generateTileMap;
|
|
private void Awake()
|
{
|
SoundManager.instance.ChangeMusic(SoundName.MusicHappy);
|
LoadTileMaps(SaveSystem.isGameLoaded);
|
}
|
|
|
private void LoadTileMaps(bool loadFromSave)
|
{
|
pauseMenuUI.GetComponent<PauseMenu>().Pause();
|
levelChanger.GetComponent<Animator>().SetBool("SceneLoading", true);
|
generateTileMap = tilemap.GetComponent<GenerateTileMap>();
|
Debug.Log("waiting for async");
|
StartCoroutine(generateTileMap.GenerateTiles(LoadTileMapsFinished));
|
}
|
|
public void LoadTileMapsFinished()
|
{
|
Debug.Log("done async");
|
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
|
CharacterEvents.characterDamaged += (CharacterTookDamange);
|
CharacterEvents.characterHealed += (CharacterHealed);
|
CharacterEvents.characterDrill += (CharacterDrill);
|
|
}
|
|
private void OnDisable()
|
{
|
// remove listen events
|
CharacterEvents.characterDamaged -= (CharacterTookDamange);
|
CharacterEvents.characterHealed -= (CharacterHealed);
|
CharacterEvents.characterDrill -= (CharacterDrill);
|
}
|
|
public void CharacterTookDamange(GameObject character, int damageReceived)
|
{
|
// Create damage text at character
|
Vector3 spawnPosition = Camera.main.WorldToScreenPoint(character.transform.position);
|
|
TMP_Text tmpText = Instantiate(damageTextPrefab, spawnPosition, Quaternion.identity, pauseMenuUI.transform).GetComponent<TMP_Text>();
|
|
tmpText.text = damageReceived.ToString();
|
|
}
|
public void CharacterHealed(GameObject character, int healthRestored)
|
{
|
// Create heal text at character
|
Vector3 spawnPosition = Camera.main.WorldToScreenPoint(character.transform.position);
|
|
TMP_Text tmpText = Instantiate(healthTextPrefab, spawnPosition, Quaternion.identity, pauseMenuUI.transform).GetComponent<TMP_Text>();
|
|
tmpText.text = healthRestored.ToString();
|
|
}
|
public void CharacterDrill(ContactPoint2D contact, DrillDirection drillDirection)
|
{
|
GridLayout grid = tilemap.transform.GetComponentInParent<GridLayout>();
|
Vector3Int cellCoord = grid.WorldToCell(contact.point);
|
switch (drillDirection)
|
{
|
case DrillDirection.Left:
|
cellCoord.x = cellCoord.x - 1;
|
break;
|
case DrillDirection.Right:
|
cellCoord.x = cellCoord.x + 1;
|
break;
|
case DrillDirection.Down:
|
cellCoord.y = cellCoord.y - 1;
|
break;
|
}
|
|
//Debug.Log("cellCoord: " + grid.CellToWorld(cellCoord));
|
//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);
|
}
|
}
|
#endregion
|
|
}
|