[Refactor] Final fix GameManager & GameController

This commit is contained in:
2026-03-04 07:20:42 +07:00
parent 3031d2e4c2
commit 3793686dcf
10 changed files with 47 additions and 81 deletions
+6 -7
View File
@@ -158,9 +158,9 @@ MonoBehaviour:
shopCatalog: {fileID: 11400000, guid: 7efc21139c0b2234194047239dcf8a71, type: 2} shopCatalog: {fileID: 11400000, guid: 7efc21139c0b2234194047239dcf8a71, type: 2}
scoringSystem: {fileID: 1016044386} scoringSystem: {fileID: 1016044386}
currencyBank: {fileID: 389543052} currencyBank: {fileID: 389543052}
gameManager: {fileID: 2136136801} gameLoopController: {fileID: 2136136801}
diceManager: {fileID: 822363842} diceManager: {fileID: 822363842}
gameController: {fileID: 1035691492} gamePresentationRoot: {fileID: 1035691492}
shopController: {fileID: 1102794499} shopController: {fileID: 1102794499}
inventoryController: {fileID: 2034939427} inventoryController: {fileID: 2034939427}
maxActiveModifierSlots: 5 maxActiveModifierSlots: 5
@@ -802,7 +802,7 @@ GameObject:
- component: {fileID: 1035691491} - component: {fileID: 1035691491}
- component: {fileID: 1035691492} - component: {fileID: 1035691492}
m_Layer: 0 m_Layer: 0
m_Name: GameController m_Name: GamePresentationRoot
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
@@ -834,11 +834,10 @@ MonoBehaviour:
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 06752cfc00e8dc24f8004581af1a1933, type: 3} m_Script: {fileID: 11500000, guid: 06752cfc00e8dc24f8004581af1a1933, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: YachtDice.Runtime::YachtDice.UI.GameController m_EditorClassIdentifier: YachtDice.Runtime::YachtDice.UI.GamePresentationRoot
scoreCardView: {fileID: 0} scoreCardView: {fileID: 0}
dicePanelView: {fileID: 0} dicePanelView: {fileID: 0}
gameInfoView: {fileID: 0} gameInfoView: {fileID: 0}
maxRollsPerTurn: 3
--- !u!4 &1077005091 stripped --- !u!4 &1077005091 stripped
Transform: Transform:
m_CorrespondingSourceObject: {fileID: 6590077607741954368, guid: b59e9f48ded300a44bdf1f3f3a43e1ae, type: 3} m_CorrespondingSourceObject: {fileID: 6590077607741954368, guid: b59e9f48ded300a44bdf1f3f3a43e1ae, type: 3}
@@ -1466,7 +1465,7 @@ GameObject:
- component: {fileID: 2136136800} - component: {fileID: 2136136800}
- component: {fileID: 2136136801} - component: {fileID: 2136136801}
m_Layer: 0 m_Layer: 0
m_Name: GameManager m_Name: GameLoopController
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
@@ -1498,7 +1497,7 @@ MonoBehaviour:
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 187be5e60b9cc014fbe755fbe18578be, type: 3} m_Script: {fileID: 11500000, guid: 187be5e60b9cc014fbe755fbe18578be, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: YachtDice.Runtime::YachtDice.Game.GameManager m_EditorClassIdentifier: YachtDice.Runtime::YachtDice.Game.GameLoopController
maxRollsPerTurn: 3 maxRollsPerTurn: 3
--- !u!1001 &3765562131710099387 --- !u!1001 &3765562131710099387
PrefabInstance: PrefabInstance:
+4 -4
View File
@@ -29,9 +29,9 @@ namespace YachtDice.DI
[Header("Scene References")] [Header("Scene References")]
[SerializeField] private ScoringSystem scoringSystem; [SerializeField] private ScoringSystem scoringSystem;
[SerializeField] private CurrencyBank currencyBank; [SerializeField] private CurrencyBank currencyBank;
[SerializeField] private GameManager gameManager; [SerializeField] private GameLoopController gameLoopController;
[SerializeField] private DiceManager diceManager; [SerializeField] private DiceManager diceManager;
[SerializeField] private GameController gameController; [SerializeField] private GamePresentationRoot gamePresentationRoot;
[SerializeField] private ShopController shopController; [SerializeField] private ShopController shopController;
[SerializeField] private InventoryController inventoryController; [SerializeField] private InventoryController inventoryController;
@@ -69,9 +69,9 @@ namespace YachtDice.DI
// Scene MonoBehaviour components // Scene MonoBehaviour components
builder.RegisterComponent(scoringSystem); builder.RegisterComponent(scoringSystem);
builder.RegisterComponent(currencyBank); builder.RegisterComponent(currencyBank);
builder.RegisterComponent(gameManager); builder.RegisterComponent(gameLoopController);
builder.RegisterComponent(diceManager); builder.RegisterComponent(diceManager);
builder.RegisterComponent(gameController); builder.RegisterComponent(gamePresentationRoot);
builder.RegisterComponent(shopController); builder.RegisterComponent(shopController);
builder.RegisterComponent(inventoryController); builder.RegisterComponent(inventoryController);
} }
@@ -6,7 +6,7 @@ using YachtDice.Scoring;
namespace YachtDice.Game namespace YachtDice.Game
{ {
public class GameManager : MonoBehaviour public class GameLoopController : MonoBehaviour
{ {
[Header("Settings")] [Header("Settings")]
[SerializeField] private int maxRollsPerTurn = 3; [SerializeField] private int maxRollsPerTurn = 3;
@@ -47,7 +47,6 @@ namespace YachtDice.Game
CurrentRoll = 0; CurrentRoll = 0;
_diceManager.UnlockAll(); _diceManager.UnlockAll();
OnTurnStarted?.Invoke(CurrentTurn); OnTurnStarted?.Invoke(CurrentTurn);
Debug.Log($"=== Turn {CurrentTurn} ===");
} }
public void Roll() public void Roll()
@@ -62,10 +61,6 @@ namespace YachtDice.Game
private void HandleAllDiceSettled() private void HandleAllDiceSettled()
{ {
_diceManager.OnAllDiceSettled -= HandleAllDiceSettled; _diceManager.OnAllDiceSettled -= HandleAllDiceSettled;
var values = _diceManager.GetCurrentValues();
Debug.Log($"Roll {CurrentRoll}/{maxRollsPerTurn} | Dice: [{string.Join(", ", values)}]");
OnRollComplete?.Invoke(CurrentRoll); OnRollComplete?.Invoke(CurrentRoll);
} }
@@ -74,9 +69,6 @@ namespace YachtDice.Game
if (_diceManager.IsAnyRolling) return; if (_diceManager.IsAnyRolling) return;
if (CurrentRoll == 0) return; if (CurrentRoll == 0) return;
_diceManager.ToggleLock(index); _diceManager.ToggleLock(index);
var isLocked = _diceManager.IsLocked(index);
Debug.Log($"Dice {index + 1} (value={_diceManager.GetValue(index)}): {(isLocked ? "LOCKED" : "UNLOCKED")}");
} }
public void ScoreInCategory(CategoryDefinition category) public void ScoreInCategory(CategoryDefinition category)
@@ -85,18 +77,13 @@ namespace YachtDice.Game
if (_scoringSystem.IsCategoryUsed(category)) return; if (_scoringSystem.IsCategoryUsed(category)) return;
var dice = _diceManager.GetDice(); var dice = _diceManager.GetDice();
ScoreResult result = _scoringSystem.ScoreCategory(dice, category); var result = _scoringSystem.ScoreCategory(dice, category);
Debug.Log($"Scored {category.DisplayName}: base={result.baseScore}, " +
$"bonus=+{result.flatBonus}, mult=x{result.multiplier:F1}, " +
$"FINAL={result.FinalScore} | Total={_scoringSystem.TotalScore}");
OnScored?.Invoke(category, result.FinalScore); OnScored?.Invoke(category, result.FinalScore);
if (_scoringSystem.IsComplete) if (_scoringSystem.IsComplete)
{ {
var total = _scoringSystem.TotalScore; var total = _scoringSystem.TotalScore;
Debug.Log($"*** GAME OVER *** Total Score: {total}");
OnGameOver?.Invoke(total); OnGameOver?.Invoke(total);
} }
else else
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 187be5e60b9cc014fbe755fbe18578be
-2
View File
@@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 187be5e60b9cc014fbe755fbe18578be
-2
View File
@@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 06752cfc00e8dc24f8004581af1a1933
@@ -12,14 +12,14 @@ using YachtDice.UI.Presentation;
namespace YachtDice.UI namespace YachtDice.UI
{ {
public class GameController : MonoBehaviour public class GamePresentationRoot : MonoBehaviour
{ {
[Header("MVP Views")] [Header("MVP Views")]
[SerializeField] private ScoreCardView scoreCardView; [SerializeField] private ScoreCardView scoreCardView;
[SerializeField] private DicePanelView dicePanelView; [SerializeField] private DicePanelView dicePanelView;
[SerializeField] private GameInfoView gameInfoView; [SerializeField] private GameInfoView gameInfoView;
private GameManager _gameManager; private GameLoopController _gameLoopController;
private ScoringSystem _scoringSystem; private ScoringSystem _scoringSystem;
private DiceManager _diceManager; private DiceManager _diceManager;
private CurrencyBank _currencyBank; private CurrencyBank _currencyBank;
@@ -37,7 +37,7 @@ namespace YachtDice.UI
[Inject] [Inject]
public void Construct( public void Construct(
GameManager gameManager, GameLoopController gameLoopController,
ScoringSystem scoringSystem, ScoringSystem scoringSystem,
DiceManager diceManager, DiceManager diceManager,
CurrencyBank currencyBank, CurrencyBank currencyBank,
@@ -48,7 +48,7 @@ namespace YachtDice.UI
IGameSaveService saveService, IGameSaveService saveService,
IScoreSummaryService scoreSummaryService) IScoreSummaryService scoreSummaryService)
{ {
this._gameManager = gameManager; this._gameLoopController = gameLoopController;
this._scoringSystem = scoringSystem; this._scoringSystem = scoringSystem;
this._diceManager = diceManager; this._diceManager = diceManager;
this._currencyBank = currencyBank; this._currencyBank = currencyBank;
@@ -62,13 +62,12 @@ namespace YachtDice.UI
private void Start() private void Start()
{ {
_dicePanelPresenter = new DicePanelPresenter(dicePanelView, _gameManager, _diceManager); _dicePanelPresenter = new DicePanelPresenter(dicePanelView, _gameLoopController, _diceManager);
_scoreCardPresenter = new ScoreCardPresenter(scoreCardView, _categoryCatalog, _scoringSystem, _diceManager); _scoreCardPresenter = new ScoreCardPresenter(scoreCardView, _categoryCatalog, _scoringSystem, _diceManager);
_gameInfoPresenter = new GameInfoPresenter(gameInfoView); _gameInfoPresenter = new GameInfoPresenter(gameInfoView);
_gameFlowPresenter = new GameFlowPresenter( _gameFlowPresenter = new GameFlowPresenter(
_gameManager, _gameLoopController,
_scoringSystem,
_diceManager, _diceManager,
_currencyBank, _currencyBank,
_shopController, _shopController,
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 06752cfc00e8dc24f8004581af1a1933
@@ -6,16 +6,16 @@ namespace YachtDice.UI.Presentation
public sealed class DicePanelPresenter : IDisposable public sealed class DicePanelPresenter : IDisposable
{ {
private readonly DicePanelView _view; private readonly DicePanelView _view;
private readonly GameManager _gameManager; private readonly GameLoopController _gameLoopController;
private readonly DiceManager _diceManager; private readonly DiceManager _diceManager;
public event Action RollClicked; public event Action RollClicked;
public event Action<int> DiceToggled; public event Action<int> DiceToggled;
public DicePanelPresenter(DicePanelView view, GameManager gameManager, DiceManager diceManager) public DicePanelPresenter(DicePanelView view, GameLoopController gameLoopController, DiceManager diceManager)
{ {
_view = view; _view = view;
_gameManager = gameManager; _gameLoopController = gameLoopController;
_diceManager = diceManager; _diceManager = diceManager;
} }
@@ -36,32 +36,32 @@ namespace YachtDice.UI.Presentation
public void ResetForNewTurn() public void ResetForNewTurn()
{ {
_view.ResetForNewTurn(); _view.ResetForNewTurn();
_view.SetRollButtonState(true, 0, _gameManager.MaxRollsPerTurn); _view.SetRollButtonState(true, 0, _gameLoopController.MaxRollsPerTurn);
} }
public void PrepareForRoll() public void PrepareForRoll()
{ {
_view.SetRollButtonState(false, _gameManager.CurrentRoll, _gameManager.MaxRollsPerTurn); _view.SetRollButtonState(false, _gameLoopController.CurrentRoll, _gameLoopController.MaxRollsPerTurn);
_view.SetDiceInteractable(false); _view.SetDiceInteractable(false);
} }
public void HandleRollComplete(int rollNumber) public void HandleRollComplete(int rollNumber)
{ {
var canRollAgain = _gameManager.CanRoll; var canRollAgain = _gameLoopController.CanRoll;
_view.SetRollButtonState(canRollAgain, rollNumber, _gameManager.MaxRollsPerTurn); _view.SetRollButtonState(canRollAgain, rollNumber, _gameLoopController.MaxRollsPerTurn);
_view.SetDiceInteractable(true); _view.SetDiceInteractable(true);
_view.SetAllDiceValues(_diceManager.GetCurrentValues()); _view.SetAllDiceValues(_diceManager.GetCurrentValues());
} }
public void HandleGameOver() public void HandleGameOver()
{ {
_view.SetRollButtonState(false, _gameManager.MaxRollsPerTurn, _gameManager.MaxRollsPerTurn); _view.SetRollButtonState(false, _gameLoopController.MaxRollsPerTurn, _gameLoopController.MaxRollsPerTurn);
_view.SetDiceInteractable(false); _view.SetDiceInteractable(false);
} }
public void ResetForNewGame() public void ResetForNewGame()
{ {
_view.ResetForNewGame(_gameManager.MaxRollsPerTurn); _view.ResetForNewGame(_gameLoopController.MaxRollsPerTurn);
} }
public void SetDiceLocked(int index, bool isLocked) public void SetDiceLocked(int index, bool isLocked)
@@ -4,15 +4,13 @@ using YachtDice.Economy;
using YachtDice.Game; using YachtDice.Game;
using YachtDice.Inventory; using YachtDice.Inventory;
using YachtDice.Player; using YachtDice.Player;
using YachtDice.Scoring;
using YachtDice.Shop; using YachtDice.Shop;
namespace YachtDice.UI.Presentation namespace YachtDice.UI.Presentation
{ {
public sealed class GameFlowPresenter : IDisposable public sealed class GameFlowPresenter : IDisposable
{ {
private readonly GameManager _gameManager; private readonly GameLoopController _gameLoopController;
private readonly ScoringSystem _scoringSystem;
private readonly DiceManager _diceManager; private readonly DiceManager _diceManager;
private readonly CurrencyBank _currencyBank; private readonly CurrencyBank _currencyBank;
private readonly ShopController _shopController; private readonly ShopController _shopController;
@@ -26,8 +24,7 @@ namespace YachtDice.UI.Presentation
private readonly GameInfoPresenter _gameInfoPresenter; private readonly GameInfoPresenter _gameInfoPresenter;
public GameFlowPresenter( public GameFlowPresenter(
GameManager gameManager, GameLoopController gameLoopController,
ScoringSystem scoringSystem,
DiceManager diceManager, DiceManager diceManager,
CurrencyBank currencyBank, CurrencyBank currencyBank,
ShopController shopController, ShopController shopController,
@@ -40,8 +37,7 @@ namespace YachtDice.UI.Presentation
ScoreCardPresenter scoreCardPresenter, ScoreCardPresenter scoreCardPresenter,
GameInfoPresenter gameInfoPresenter) GameInfoPresenter gameInfoPresenter)
{ {
_gameManager = gameManager; _gameLoopController = gameLoopController;
_scoringSystem = scoringSystem;
_diceManager = diceManager; _diceManager = diceManager;
_currencyBank = currencyBank; _currencyBank = currencyBank;
_shopController = shopController; _shopController = shopController;
@@ -57,10 +53,10 @@ namespace YachtDice.UI.Presentation
public void Initialize() public void Initialize()
{ {
_gameManager.OnTurnStarted += HandleTurnStarted; _gameLoopController.OnTurnStarted += HandleTurnStarted;
_gameManager.OnRollComplete += HandleRollComplete; _gameLoopController.OnRollComplete += HandleRollComplete;
_gameManager.OnScored += HandleScored; _gameLoopController.OnScored += HandleScored;
_gameManager.OnGameOver += HandleGameOver; _gameLoopController.OnGameOver += HandleGameOver;
_dicePanelPresenter.RollClicked += HandleRollClicked; _dicePanelPresenter.RollClicked += HandleRollClicked;
_dicePanelPresenter.DiceToggled += HandleDiceToggled; _dicePanelPresenter.DiceToggled += HandleDiceToggled;
@@ -74,15 +70,15 @@ namespace YachtDice.UI.Presentation
_saveService.Load(); _saveService.Load();
_gameInfoPresenter.SetCurrencyText(_currencyBank.Balance); _gameInfoPresenter.SetCurrencyText(_currencyBank.Balance);
_gameManager.StartNewGame(); _gameLoopController.StartNewGame();
} }
public void Dispose() public void Dispose()
{ {
_gameManager.OnTurnStarted -= HandleTurnStarted; _gameLoopController.OnTurnStarted -= HandleTurnStarted;
_gameManager.OnRollComplete -= HandleRollComplete; _gameLoopController.OnRollComplete -= HandleRollComplete;
_gameManager.OnScored -= HandleScored; _gameLoopController.OnScored -= HandleScored;
_gameManager.OnGameOver -= HandleGameOver; _gameLoopController.OnGameOver -= HandleGameOver;
_dicePanelPresenter.RollClicked -= HandleRollClicked; _dicePanelPresenter.RollClicked -= HandleRollClicked;
_dicePanelPresenter.DiceToggled -= HandleDiceToggled; _dicePanelPresenter.DiceToggled -= HandleDiceToggled;
@@ -127,35 +123,20 @@ namespace YachtDice.UI.Presentation
private void HandleRollClicked() private void HandleRollClicked()
{ {
if (!_gameManager.CanRoll)
return;
_dicePanelPresenter.PrepareForRoll(); _dicePanelPresenter.PrepareForRoll();
_scoreCardPresenter.SetAllInteractable(false); _scoreCardPresenter.SetAllInteractable(false);
_gameManager.Roll(); _gameLoopController.Roll();
} }
private void HandleDiceToggled(int index) private void HandleDiceToggled(int index)
{ {
if (_gameManager.CurrentRoll == 0) _gameLoopController.ToggleDiceLock(index);
return;
if (_diceManager.IsAnyRolling)
return;
_gameManager.ToggleDiceLock(index);
_dicePanelPresenter.SetDiceLocked(index, _diceManager.IsLocked(index)); _dicePanelPresenter.SetDiceLocked(index, _diceManager.IsLocked(index));
} }
private void HandleCategorySelected(CategoryDefinition category) private void HandleCategorySelected(CategoryDefinition category)
{ {
if (!_gameManager.CanScore) _gameLoopController.ScoreInCategory(category);
return;
if (_scoringSystem.IsCategoryUsed(category))
return;
_gameManager.ScoreInCategory(category);
} }
private void HandleNewGameClicked() private void HandleNewGameClicked()
@@ -163,7 +144,7 @@ namespace YachtDice.UI.Presentation
_gameInfoPresenter.HideGameOver(); _gameInfoPresenter.HideGameOver();
_scoreCardPresenter.ResetAll(); _scoreCardPresenter.ResetAll();
_dicePanelPresenter.ResetForNewGame(); _dicePanelPresenter.ResetForNewGame();
_gameManager.StartNewGame(); _gameLoopController.StartNewGame();
} }
private void HandleShopClicked() private void HandleShopClicked()