Use GameScene to control render

This commit is contained in:
2025-12-06 18:39:40 +08:00
parent 995c01bd8c
commit 32eb465f39
9 changed files with 148 additions and 44 deletions

View File

@@ -0,0 +1,38 @@
#include "GameScene.h"
GameScene::GameScene() {
}
GameScene::~GameScene() {
}
void GameScene::onEnter(SDL_Renderer* renderer, int WIDTH, int HEIGHT) {
m_renderer = std::make_unique<GameRenderer>(WIDTH, HEIGHT, renderer);
m_gameSession = std::make_unique<GameSession>();
m_CoordinateConverter = std::make_unique<CoordinateConverter>(renderer);
m_gameSession->initialize();
}
void GameScene::update() {
}
void GameScene::render() {
m_renderer->beginFrame();
m_renderer->drawBackground();
m_renderer->drawBoard();
m_renderer->endFrame();
}
void GameScene::handleClick(float screenX, float screenY) {
auto click = m_CoordinateConverter->ScreenToBoard(screenX, screenY, m_renderer->getBoardArea());
if (click) {
auto [row, col] = click.value();
m_gameSession->handleCoordinateInput(row, col);
m_gameSession->printBoard();
} else {
SDL_Log("invail cilck aera!");
}
}

View File

@@ -0,0 +1,21 @@
#pragma once
#include "scenes/base/Scene.h"
#include "graphics/GameRenderer.h"
#include "graphics/CoordinateConverter.h"
#include "game/GameSession.h"
#include <memory>
class GameScene : public Scene {
public:
GameScene();
~GameScene();
void onEnter(SDL_Renderer* renderer, int WIDTH, int HEIGHT) override;
void update() override;
void render() override;
void handleClick(float screenX, float screenY) override;
private:
std::unique_ptr<GameRenderer> m_renderer;
std::unique_ptr<CoordinateConverter> m_CoordinateConverter;
std::unique_ptr<GameSession> m_gameSession;
};