[Refactor] Fix GameController
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
using System;
|
||||
using YachtDice.Game;
|
||||
|
||||
namespace YachtDice.UI.Presentation
|
||||
{
|
||||
public sealed class DicePanelPresenter : IDisposable
|
||||
{
|
||||
private readonly DicePanelView _view;
|
||||
private readonly GameManager _gameManager;
|
||||
private readonly DiceManager _diceManager;
|
||||
|
||||
public event Action RollClicked;
|
||||
public event Action<int> DiceToggled;
|
||||
|
||||
public DicePanelPresenter(DicePanelView view, GameManager gameManager, DiceManager diceManager)
|
||||
{
|
||||
_view = view;
|
||||
_gameManager = gameManager;
|
||||
_diceManager = diceManager;
|
||||
}
|
||||
|
||||
public void Initialize()
|
||||
{
|
||||
_view.OnRollClicked += HandleRollClicked;
|
||||
_view.OnDiceToggled += HandleDiceToggled;
|
||||
_diceManager.OnDiceSettled += HandleDiceSettled;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_view.OnRollClicked -= HandleRollClicked;
|
||||
_view.OnDiceToggled -= HandleDiceToggled;
|
||||
_diceManager.OnDiceSettled -= HandleDiceSettled;
|
||||
}
|
||||
|
||||
public void ResetForNewTurn()
|
||||
{
|
||||
_view.ResetForNewTurn();
|
||||
_view.SetRollButtonState(true, 0, _gameManager.MaxRollsPerTurn);
|
||||
}
|
||||
|
||||
public void PrepareForRoll()
|
||||
{
|
||||
_view.SetRollButtonState(false, _gameManager.CurrentRoll, _gameManager.MaxRollsPerTurn);
|
||||
_view.SetDiceInteractable(false);
|
||||
}
|
||||
|
||||
public void HandleRollComplete(int rollNumber)
|
||||
{
|
||||
var canRollAgain = _gameManager.CanRoll;
|
||||
_view.SetRollButtonState(canRollAgain, rollNumber, _gameManager.MaxRollsPerTurn);
|
||||
_view.SetDiceInteractable(true);
|
||||
_view.SetAllDiceValues(_diceManager.GetCurrentValues());
|
||||
}
|
||||
|
||||
public void HandleGameOver()
|
||||
{
|
||||
_view.SetRollButtonState(false, _gameManager.MaxRollsPerTurn, _gameManager.MaxRollsPerTurn);
|
||||
_view.SetDiceInteractable(false);
|
||||
}
|
||||
|
||||
public void ResetForNewGame()
|
||||
{
|
||||
_view.ResetForNewGame(_gameManager.MaxRollsPerTurn);
|
||||
}
|
||||
|
||||
public void SetDiceLocked(int index, bool isLocked)
|
||||
{
|
||||
_view.SetDiceLocked(index, isLocked);
|
||||
}
|
||||
|
||||
private void HandleRollClicked()
|
||||
{
|
||||
RollClicked?.Invoke();
|
||||
}
|
||||
|
||||
private void HandleDiceToggled(int index)
|
||||
{
|
||||
DiceToggled?.Invoke(index);
|
||||
}
|
||||
|
||||
private void HandleDiceSettled(int index, int value)
|
||||
{
|
||||
_view.SetDiceValue(index, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user