mirror of
https://github.com/zhenyan121/SporeBG-Conid.git
synced 2026-04-10 06:14:08 +08:00
Added GameOver Scene
This commit is contained in:
@@ -13,6 +13,9 @@ void GameScene::onEnter(SDL_Renderer* renderer, int WIDTH, int HEIGHT, UIRendere
|
||||
m_uiRenderer = uiRenderer;
|
||||
m_gameUIManager = std::make_unique<GameUIManager>(renderer, uiRenderer->getTextRenderer());
|
||||
m_gameUIManager->init();
|
||||
m_gameUIManager->setCallback([this]() {
|
||||
this->restartGame();
|
||||
});
|
||||
m_boardRenderer = std::make_unique<BoardRenderer>(WIDTH, HEIGHT, renderer);
|
||||
m_gameSession = std::make_unique<GameSession>();
|
||||
m_CoordinateConverter = std::make_unique<CoordinateConverter>(renderer);
|
||||
@@ -36,18 +39,33 @@ void GameScene::render() {
|
||||
|
||||
m_boardRenderer->drawPiece(m_gameSession->getSelectedPiece());
|
||||
m_boardRenderer->drawMovementRange();
|
||||
m_boardRenderer->renderBlackOverlay();
|
||||
m_uiRenderer->renderUI(m_gameUIManager->getUIRenderData());
|
||||
endFrame();
|
||||
}
|
||||
|
||||
void GameScene::handleClick(float screenX, float screenY) {
|
||||
if (m_gameUIManager->handleClick(screenX, screenY)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_gameSession->getGameState() != GameState::GAME_RUNING) {
|
||||
SDL_Log("Game is not running, click ignored.");
|
||||
return;
|
||||
}
|
||||
auto click = m_CoordinateConverter->ScreenToBoard(screenX, screenY, m_boardRenderer->getBoardArea());
|
||||
if (click) {
|
||||
auto [row, col] = click.value();
|
||||
m_gameSession->handleCoordinateInput(row, col);
|
||||
m_gameSession->printBoard();
|
||||
SDL_Log("try to updateActionType\n");
|
||||
m_gameUIManager->updateActionType( m_gameSession->getCurrentActionType());
|
||||
SDL_Log("tyr to updateMovementRange\n");
|
||||
m_boardRenderer->updateMovementRange(m_gameSession->getSelectedPiece(), m_gameSession->getCurrentActionType());
|
||||
SDL_Log("tyr to updateGameState\n");
|
||||
m_gameUIManager->updateGameState(m_gameSession->getGameState());
|
||||
m_boardRenderer->setGameState(m_gameSession->getGameState());
|
||||
|
||||
} else {
|
||||
SDL_Log("invail cilck aera!");
|
||||
}
|
||||
@@ -55,4 +73,14 @@ void GameScene::handleClick(float screenX, float screenY) {
|
||||
|
||||
void GameScene::renderMousePosition(float x, float y) {
|
||||
m_gameUIManager->UpdateMousePositon(x, y);
|
||||
}
|
||||
|
||||
void GameScene::restartGame() {
|
||||
m_gameSession = std::make_unique<GameSession>();
|
||||
m_gameSession->initialize();
|
||||
m_boardRenderer->setBoard(m_gameSession->getBoard());
|
||||
m_boardRenderer->updateMovementRange(std::nullopt, ActionType::GROW);
|
||||
m_gameUIManager->updateActionType(ActionType::GROW);
|
||||
m_gameUIManager->updateGameState(GameState::GAME_RUNING);
|
||||
m_boardRenderer->setGameState(GameState::GAME_RUNING);
|
||||
}
|
||||
@@ -18,6 +18,8 @@ public:
|
||||
void handleClick(float screenX, float screenY) override;
|
||||
|
||||
void renderMousePosition(float x, float y) override;
|
||||
|
||||
void restartGame();
|
||||
private:
|
||||
|
||||
std::unique_ptr<BoardRenderer> m_boardRenderer;
|
||||
|
||||
Reference in New Issue
Block a user