227 lines
4.8 KiB
C#
227 lines
4.8 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.Events;
|
|
using OHM.UnityToolkit;
|
|
using OHM.UnityToolkit.Inventory;
|
|
|
|
public class AppController : MonoBehaviour
|
|
{
|
|
public class TransformEvent : UnityEvent<Transform>
|
|
{
|
|
}
|
|
|
|
public const string EDITOR_NAME = "GameSqueleton";
|
|
|
|
public CoreController coreGame;
|
|
|
|
public SavedDataController savedDataController;
|
|
|
|
public MetaDef metaDef;
|
|
|
|
[HideInInspector]
|
|
public UnityEvent onGameExited;
|
|
|
|
[HideInInspector]
|
|
public UnityEvent onCurrenciesChanged;
|
|
|
|
[HideInInspector]
|
|
public UnityEvent onLevelChanged;
|
|
|
|
[HideInInspector]
|
|
public UnityEvent onLevelCleared;
|
|
|
|
[HideInInspector]
|
|
public UnityEvent onBestScoreChanged;
|
|
|
|
[NonSerialized]
|
|
public bool needRestart;
|
|
|
|
public System.Random random = new System.Random();
|
|
|
|
private CustomizableController<PlayerSkinDef, PlayerSkinData> _playerSkinController;
|
|
|
|
private CustomizableController<PickupsSkinDef, PickupsSkinData> _pickupsSkinsController;
|
|
|
|
public CustomizableController<PlayerSkinDef, PlayerSkinData> PlayerSkinController =>
|
|
_playerSkinController ?? (_playerSkinController = new PlayerSkinController(this));
|
|
|
|
public CustomizableController<PickupsSkinDef, PickupsSkinData> PickupsSkinsController =>
|
|
_pickupsSkinsController ?? (_pickupsSkinsController = new PickupsSkinsController(this));
|
|
|
|
public void Awake()
|
|
{
|
|
Application.targetFrameRate = 60;
|
|
Physics.autoSyncTransforms = false;
|
|
coreGame.onGameStarted.AddListener(OnGameStarted);
|
|
coreGame.onGameOver.AddListener(OnGameOver);
|
|
coreGame.onGameWon.AddListener(OnGameEnded);
|
|
coreGame.currenciesController.onWinCurrencies += OnWinCurrency;
|
|
}
|
|
|
|
public void Start()
|
|
{
|
|
AppSettings.Instance.Apply();
|
|
Quit();
|
|
}
|
|
|
|
internal void StartWaitForReadyThen(Action p)
|
|
{
|
|
StartCoroutine(WaitForReadyThen(p));
|
|
}
|
|
|
|
private IEnumerator WaitForReadyThen(Action action)
|
|
{
|
|
while (!coreGame.IsReadyToPlay())
|
|
{
|
|
yield return null;
|
|
}
|
|
action();
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
if (Application.isEditor && Input.GetKeyDown(KeyCode.R))
|
|
{
|
|
needRestart = true;
|
|
}
|
|
if (needRestart)
|
|
{
|
|
Restart();
|
|
needRestart = false;
|
|
}
|
|
if (Application.isEditor && Input.GetKeyDown(KeyCode.Q))
|
|
{
|
|
Quit();
|
|
}
|
|
if (Application.isEditor && Input.GetKeyDown(KeyCode.U))
|
|
{
|
|
DebugNextLevel();
|
|
}
|
|
}
|
|
|
|
public void Restart()
|
|
{
|
|
Quit();
|
|
coreGame.Go();
|
|
}
|
|
|
|
public void Quit()
|
|
{
|
|
onGameExited.Invoke();
|
|
PlayerSkinController.ApplyCurrent();
|
|
PickupsSkinsController.ApplyCurrent();
|
|
coreGame.Warmup(GetPlayerLevel());
|
|
}
|
|
|
|
public void Go()
|
|
{
|
|
coreGame.Go();
|
|
}
|
|
|
|
private void OnGameStarted()
|
|
{
|
|
}
|
|
|
|
private void OnGameEnded()
|
|
{
|
|
savedDataController.SavedData.inventory.AddReward(SavedDataTUType.LEVEL_IDX, 1L);
|
|
RegisterBestScore();
|
|
savedDataController.SaveData();
|
|
onLevelCleared.Invoke();
|
|
}
|
|
|
|
private void OnGameOver()
|
|
{
|
|
RegisterBestScore();
|
|
}
|
|
|
|
private void RegisterBestScore()
|
|
{
|
|
long score = coreGame.scoreController.Score;
|
|
if (score <= GetBestScore())
|
|
{
|
|
return;
|
|
}
|
|
savedDataController.SavedData.inventory.SetCount(SavedDataTUType.BEST_SCORE_DEFAULT, score);
|
|
savedDataController.SaveData();
|
|
onBestScoreChanged.Invoke();
|
|
}
|
|
|
|
public long GetBestScore()
|
|
{
|
|
return savedDataController.SavedData.inventory.GetCount(SavedDataTUType.BEST_SCORE_DEFAULT);
|
|
}
|
|
|
|
public long GetPlayerLevel()
|
|
{
|
|
return savedDataController.SavedData.inventory.GetCount(SavedDataTUType.LEVEL_IDX);
|
|
}
|
|
|
|
private void OnWinCurrency(int count, Transform fromObj)
|
|
{
|
|
WinCurrencies(count);
|
|
}
|
|
|
|
public void WinCurrencies(int count)
|
|
{
|
|
savedDataController.SavedData.inventory.AddReward(SavedDataTUType.CURRENCY, count);
|
|
savedDataController.SaveData();
|
|
onCurrenciesChanged.Invoke();
|
|
}
|
|
|
|
public long GetCurrencies()
|
|
{
|
|
return savedDataController.SavedData.inventory.GetCount(SavedDataTUType.CURRENCY);
|
|
}
|
|
|
|
public bool CanPayCost(TransactionUnit<SavedDataTUType> cost)
|
|
{
|
|
return savedDataController.SavedData.inventory.HasCost(cost);
|
|
}
|
|
|
|
public bool TryPayCost(TransactionUnit<SavedDataTUType> cost)
|
|
{
|
|
if (!savedDataController.SavedData.inventory.PayCost(cost))
|
|
{
|
|
return false;
|
|
}
|
|
onCurrenciesChanged.Invoke();
|
|
return true;
|
|
}
|
|
|
|
public void ResetData(bool exit)
|
|
{
|
|
PlayerPrefs.DeleteAll();
|
|
savedDataController.ClearData();
|
|
savedDataController.ResetData();
|
|
AppSettings.Instance.Apply();
|
|
if (exit)
|
|
{
|
|
Application.Quit();
|
|
}
|
|
}
|
|
|
|
public void DebugNextLevel()
|
|
{
|
|
savedDataController.SavedData.inventory.AddReward(SavedDataTUType.LEVEL_IDX, 1L);
|
|
savedDataController.SaveData();
|
|
onLevelChanged.Invoke();
|
|
}
|
|
|
|
public void DebugRich()
|
|
{
|
|
savedDataController.SavedData.inventory.AddReward(SavedDataTUType.CURRENCY, 1000L);
|
|
savedDataController.SaveData();
|
|
onCurrenciesChanged.Invoke();
|
|
}
|
|
|
|
public void DebugPoor()
|
|
{
|
|
savedDataController.SavedData.inventory.SetCount(SavedDataTUType.CURRENCY, 0L);
|
|
savedDataController.SaveData();
|
|
onCurrenciesChanged.Invoke();
|
|
}
|
|
}
|