mirror of
https://github.com/zhenyan121/SporeBG-Conid.git
synced 2026-04-10 06:14:08 +08:00
Added OnlineGameScene and OnlineGameUIManager class
This commit is contained in:
@@ -38,6 +38,9 @@ void SceneManager::registerAllScene() {
|
||||
registerSceneFactory("GameScene", []() -> std::shared_ptr<Scene> {
|
||||
return std::make_shared<GameScene>();
|
||||
});
|
||||
registerSceneFactory("OnlineGameScene", []() -> std::shared_ptr<Scene> {
|
||||
return std::make_shared<OnlineGameScene>();
|
||||
});
|
||||
}
|
||||
|
||||
std::shared_ptr<Scene> SceneManager::createScene(const std::string& sceneName) {
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include "Scene.h"
|
||||
#include "scenes/gameplay/GameScene.h"
|
||||
#include "scenes/menu/MainMenuScene.h"
|
||||
#include "scenes/gameplay/OnlineGameScene.h"
|
||||
#include <SDL3/SDL.h>
|
||||
#include <string>
|
||||
#include <stack>
|
||||
|
||||
@@ -56,7 +56,7 @@ void GameScene::renderUI() {
|
||||
}
|
||||
|
||||
void GameScene::handleClick(int logicalX, int logicalY) {
|
||||
if (m_gameUIManager->handleClick(logicalX, logicalY)) {
|
||||
if (m_gameUIManager && m_gameUIManager->handleClick(logicalX, logicalY)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -21,12 +21,12 @@ public:
|
||||
|
||||
|
||||
void restartGame();
|
||||
private:
|
||||
protected:
|
||||
|
||||
std::unique_ptr<BoardRenderer> m_boardRenderer;
|
||||
std::unique_ptr<CoordinateConverter> m_CoordinateConverter;
|
||||
std::unique_ptr<GameSession> m_gameSession;
|
||||
|
||||
private:
|
||||
std::unique_ptr<GameUIManager> m_gameUIManager;
|
||||
|
||||
|
||||
|
||||
82
src/scenes/gameplay/OnlineGameScene.cpp
Normal file
82
src/scenes/gameplay/OnlineGameScene.cpp
Normal file
@@ -0,0 +1,82 @@
|
||||
#include "OnlineGameScene.h"
|
||||
#include "core/GameApplication.h"
|
||||
#include <iostream>
|
||||
void OnlineGameScene::onEnter(SDL_Renderer* renderer, int WIDTH, int HEIGHT, UIRenderer* uiRenderer) {
|
||||
m_renderer = renderer;
|
||||
m_uiRenderer = uiRenderer;
|
||||
m_gameUIManager = std::make_unique<OnlineGameUIManager>(
|
||||
[this](const std::string& sceneName) {
|
||||
if (m_eventCallback) {
|
||||
SceneEvent event{SceneEventType::ChangeScene, sceneName};
|
||||
m_eventCallback(event);
|
||||
}
|
||||
}
|
||||
);
|
||||
m_networkManager = std::make_unique<NetworkManager>();
|
||||
|
||||
m_gameUIManager->init();
|
||||
m_gameUIManager->setCallback([this]() {
|
||||
this->restartGame();
|
||||
});
|
||||
|
||||
m_gameUIManager->setOnlineTypeCallback(
|
||||
[this](NetType type){
|
||||
//std::cout << "try to init networkmanager\n";
|
||||
if (!m_networkManager) {
|
||||
std::cerr << "networkmanager is null\n";
|
||||
}
|
||||
m_networkManager->init(type);
|
||||
if (type == NetType::CLIENT) {
|
||||
m_isMyTurn = false;
|
||||
m_myPlayerID = PlayerID::P2;
|
||||
}
|
||||
if (type == NetType::HOST) {
|
||||
m_isMyTurn = true;
|
||||
m_myPlayerID = PlayerID::P1;
|
||||
}
|
||||
}
|
||||
);
|
||||
m_boardRenderer = std::make_unique<BoardRenderer>(WIDTH, HEIGHT, renderer);
|
||||
m_gameSession = std::make_unique<GameSession>();
|
||||
m_CoordinateConverter = std::make_unique<CoordinateConverter>(renderer);
|
||||
m_gameSession->initialize();
|
||||
|
||||
m_boardRenderer->setBoard(m_gameSession->getBoard());
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
void OnlineGameScene::renderWorld() {
|
||||
GameScene::renderWorld();
|
||||
}
|
||||
|
||||
void OnlineGameScene::renderUI() {
|
||||
m_uiRenderer->renderUI(m_gameUIManager->getUIRenderData());
|
||||
}
|
||||
|
||||
void OnlineGameScene::handleClick(int logicalX, int logicalY) {
|
||||
if (m_gameUIManager && m_gameUIManager->handleClick(logicalX, logicalY)) {
|
||||
return;
|
||||
}
|
||||
// 如果当前是自己的回合就处理点击
|
||||
// 否则忽略
|
||||
if (!m_isMyTurn) {\
|
||||
std::cout << "it is not your turn\n";
|
||||
return;
|
||||
}
|
||||
GameScene::handleClick(logicalX, logicalY);
|
||||
if (m_gameSession->getCurrentPlayer() != m_myPlayerID) {
|
||||
m_isMyTurn = false;
|
||||
}
|
||||
}
|
||||
|
||||
void OnlineGameScene::handleNetworkClick(int logicalX, int logicalY) {
|
||||
if (m_isMyTurn) {
|
||||
return;
|
||||
}
|
||||
GameScene::handleClick(logicalX, logicalY);
|
||||
if (m_gameSession->getCurrentPlayer() == m_myPlayerID) {
|
||||
m_isMyTurn = true;
|
||||
}
|
||||
}
|
||||
22
src/scenes/gameplay/OnlineGameScene.h
Normal file
22
src/scenes/gameplay/OnlineGameScene.h
Normal file
@@ -0,0 +1,22 @@
|
||||
#pragma once
|
||||
#include "GameScene.h"
|
||||
#include "ui/managers/OnlineGameUIManager.h"
|
||||
#include "network/NetworkManager.h"
|
||||
class OnlineGameScene : public GameScene {
|
||||
public:
|
||||
|
||||
void onEnter(SDL_Renderer* renderer, int WIDTH, int HEIGHT, UIRenderer* uiRenderer) override;
|
||||
|
||||
void renderWorld() override;
|
||||
|
||||
void handleClick(int logicalX, int logicalY) override;
|
||||
|
||||
void handleNetworkClick(int logicalX, int logicalY);
|
||||
|
||||
void renderUI() override;
|
||||
private:
|
||||
PlayerID m_myPlayerID;
|
||||
bool m_isMyTurn;
|
||||
std::unique_ptr<NetworkManager> m_networkManager;
|
||||
std::unique_ptr<OnlineGameUIManager> m_gameUIManager;
|
||||
};
|
||||
Reference in New Issue
Block a user