smart-interactive-display/Assets/GadGame/Scripts/MiniGame/MiniGameController.cs

116 lines
3.6 KiB
C#
Raw Normal View History

2024-04-15 04:10:00 -07:00
using GadGame.Manager;
using GadGame.State;
using GadGame.State.GameState;
using Pools.Runtime;
2024-04-15 20:57:02 -07:00
using Sirenix.OdinInspector;
2024-04-15 04:10:00 -07:00
using TMPro;
using UnityEngine;
namespace GadGame.MiniGame
{
public class MiniGameController : StateRunner<MiniGameController>
{
2024-04-15 20:57:02 -07:00
[Header("Stats")]
2024-04-15 04:10:00 -07:00
public int GameTime;
[SerializeField] private Transform _basket;
[SerializeField] private float _lerp;
[SerializeField] private float _spawnTime;
[SerializeField, Range(0,1)] private float _bombChange;
[SerializeField] private Rect _spawnArea;
2024-04-15 20:57:02 -07:00
[SerializeField, MinMaxSlider(0, 2, true)] private Vector2 _gravityScaleRange;
[Header("UI")]
[SerializeField] private TextMeshProUGUI _time;
[SerializeField] private TextMeshProUGUI _score;
2024-04-15 04:10:00 -07:00
2024-04-15 20:57:02 -07:00
[Header("Pool")]
2024-04-15 04:10:00 -07:00
[SerializeField] private Pool<Item>[] _itemPools;
[SerializeField] private Pool<Bomb>[] _bombPools;
private GameManager _gameManager;
private Camera _camera;
private float _spawnTimer;
private void Start()
{
_gameManager = GameManager.Instance;
_gameManager.OnPause += Pause;
_gameManager.OnResume += Resume;
2024-04-15 20:57:02 -07:00
_gameManager.OnScoreUpdate += OnScoreUpdate;
2024-04-15 04:10:00 -07:00
_camera = Camera.main;
SetState<PlayingGameState>();
_time.text = GameTime.ToString();
}
public void SpawnRandomItem()
{
_spawnTimer += Time.deltaTime;
if (_spawnTimer >= _spawnTime)
{
_spawnTimer = 0;
2024-04-15 20:57:02 -07:00
var gravity = Random.Range(_gravityScaleRange.x, _gravityScaleRange.y);
2024-04-15 04:10:00 -07:00
var bombChance = Random.value;
if (bombChance <= _bombChange)
{
var random = Random.Range(0, _bombPools.Length);
var bomb = _bombPools[random].Get();
2024-04-15 20:57:02 -07:00
bomb.Init(gravity);
2024-04-15 04:10:00 -07:00
bomb.transform.position = _spawnArea.RandomPointInside();
}
else
{
var random = Random.Range(0, _itemPools.Length);
var item = _itemPools[random].Get();
2024-04-15 20:57:02 -07:00
item.Init(gravity);
2024-04-15 04:10:00 -07:00
item.transform.position = _spawnArea.RandomPointInside();
}
}
}
public void PlayerControl()
{
if (Input.GetMouseButton(0))
{
var mousePos = Input.mousePosition;
var pos = _camera.ScreenToWorldPoint(mousePos);
var currentPosition = _basket.position;
pos.y = currentPosition.y;
pos.z = 0;
_basket.position = Vector3.Lerp(currentPosition, pos, _lerp * Time.deltaTime);
}
}
public void SetTextTime(float time)
{
_time.text = Mathf.Floor(time).ToString();
}
private void OnDestroy()
{
_gameManager.OnPause -= Pause;
_gameManager.OnResume -= Resume;
}
private void Pause()
{
SetState<PauseGameState>();
}
private void Resume()
{
SetState<ResumeGameState>();
}
2024-04-15 20:57:02 -07:00
private void OnScoreUpdate(int score)
{
_score.text = score.ToString();
}
2024-04-15 04:10:00 -07:00
private void OnDrawGizmos()
{
Gizmos.color = new Color(0, 1, 0f, 0.3f);
Gizmos.DrawCube(_spawnArea.position, _spawnArea.size);
}
}
}