mirror of
https://github.com/zoriya/Bomberman.git
synced 2026-05-28 08:33:36 +00:00
added some static function in lobbysystem (createtile) and fixed some old changes not necessary now
This commit is contained in:
@@ -62,7 +62,7 @@ namespace BBM
|
||||
.addComponent<OnClickComponent>([](WAL::Entity &entity, WAL::Wal &wal)
|
||||
{
|
||||
if (Runner::gameState.currentScene != GameState::LobbyScene
|
||||
&& !LobbySystem::playersAreReady(*wal.getScene()))
|
||||
|| !LobbySystem::playersAreReady(*wal.getScene()))
|
||||
return;
|
||||
LobbySystem::switchToGame(wal);
|
||||
})
|
||||
|
||||
@@ -177,11 +177,11 @@ namespace BBM
|
||||
return false;
|
||||
return std::all_of(lobby.begin(), lobby.end(), [](WAL::ViewEntity<LobbyComponent> &entity) {
|
||||
auto &lobbyPlayer = entity.get<LobbyComponent>();
|
||||
return lobbyPlayer.ready && lobbyPlayer.layout != ControllableComponent::NONE;
|
||||
return lobbyPlayer.ready || lobbyPlayer.layout == ControllableComponent::NONE;
|
||||
});
|
||||
}
|
||||
|
||||
void LobbySystem::_addController(WAL::Entity &player, ControllableComponent::Layout layout)
|
||||
void LobbySystem::addController(WAL::Entity &player, ControllableComponent::Layout layout)
|
||||
{
|
||||
switch (layout) {
|
||||
case ControllableComponent::KEYBOARD_0:
|
||||
@@ -209,35 +209,18 @@ namespace BBM
|
||||
player.getComponent<ControllableComponent>().layout = layout;
|
||||
}
|
||||
|
||||
void LobbySystem::switchToGame(WAL::Wal &wal)
|
||||
void LobbySystem::createTile(std::shared_ptr<WAL::Scene> scene, WAL::Entity &player, int color, int playerCount)
|
||||
{
|
||||
auto scene = Runner::loadGameScene();
|
||||
int mapWidth = Runner::mapWidth;
|
||||
int mapHeight = Runner::mapHeight;
|
||||
int playerCount = 0;
|
||||
|
||||
for (auto &[_, lobby] : wal.getScene()->view<LobbyComponent>()) {
|
||||
if (lobby.layout == ControllableComponent::NONE)
|
||||
continue;
|
||||
auto &player = Runner::createPlayer(*scene);
|
||||
_addController(player, lobby.layout);
|
||||
player.getComponent<PositionComponent>().position = Vector3f(mapWidth * (playerCount % 2),
|
||||
(Runner::hasHeights ? 1.01 : 0),
|
||||
mapHeight * (!(playerCount % 3)));
|
||||
auto *model = dynamic_cast<RAY3D::Model *>(player.getComponent<Drawable3DComponent>().drawable.get());
|
||||
model->setTextureToMaterial(MAP_DIFFUSE, "assets/player/textures/" + colors[lobby.color] + ".png");
|
||||
|
||||
|
||||
std::string texturePath = "assets/player/ui/" + colors[lobby.color] + ".png";
|
||||
int x = (playerCount % 2 == 0) ? 1920 - 10 - 320 : 10;
|
||||
int y = (playerCount % 3 != 0) ? 1080 - 10 - 248 : 10;
|
||||
scene->addEntity("player color tile")
|
||||
std::string texturePath = "assets/player/ui/" + colors[color] + ".png";
|
||||
int x = (playerCount % 2 == 0) ? 1920 - 10 - 320 : 10;
|
||||
int y = (playerCount % 3 != 0) ? 1080 - 10 - 248 : 10;
|
||||
scene->addEntity("player color tile")
|
||||
.addComponent<PositionComponent>(x, y - 2, 0)
|
||||
.addComponent<Drawable2DComponent, RAY2D::Rectangle>(x, y, 320, 248, _rayColors[lobby.color]);
|
||||
scene->addEntity("player ui tile")
|
||||
.addComponent<Drawable2DComponent, RAY2D::Rectangle>(x, y, 320, 248, _rayColors[color]);
|
||||
scene->addEntity("player ui tile")
|
||||
.addComponent<PositionComponent>(x, y, 0)
|
||||
.addComponent<Drawable2DComponent, RAY::Texture>(texturePath);
|
||||
scene->addEntity("player hide fireup")
|
||||
scene->addEntity("player hide fireup")
|
||||
.addComponent<PositionComponent>(x + 220, y + 35, 0)
|
||||
.addComponent<Drawable2DComponent, RAY2D::Text>("", 20, x, y, WHITE)
|
||||
.addComponent<StatComponent>([&player](Drawable2DComponent &drawble) {
|
||||
@@ -250,7 +233,7 @@ namespace BBM
|
||||
return;
|
||||
text->setText(std::to_string(static_cast<int>(bonus->explosionRadius)));
|
||||
});
|
||||
scene->addEntity("player hide bombup")
|
||||
scene->addEntity("player hide bombup")
|
||||
.addComponent<PositionComponent>(x + 220, y + 77, 0)
|
||||
.addComponent<Drawable2DComponent, RAY2D::Text>("", 20, x, y, WHITE)
|
||||
.addComponent<StatComponent>([&player](Drawable2DComponent &drawble) {
|
||||
@@ -263,7 +246,7 @@ namespace BBM
|
||||
return;
|
||||
text->setText(std::to_string(bonus->bombCount) + " / " + std::to_string(bonus->maxBombCount));
|
||||
});
|
||||
scene->addEntity("player hide speedup")
|
||||
scene->addEntity("player hide speedup")
|
||||
.addComponent<PositionComponent>(x + 220, y + 122, 0)
|
||||
.addComponent<Drawable2DComponent, RAY2D::Text>("", 20, x, y, WHITE)
|
||||
.addComponent<StatComponent>([&player](Drawable2DComponent &drawble) {
|
||||
@@ -276,7 +259,7 @@ namespace BBM
|
||||
return;
|
||||
text->setText(std::to_string(static_cast<int>(speed->speed * 100)));
|
||||
});
|
||||
scene->addEntity("player hide wall")
|
||||
scene->addEntity("player hide wall")
|
||||
.addComponent<PositionComponent>(x + 220, y + 161, 0)
|
||||
.addComponent<Drawable2DComponent, RAY2D::Text>("", 20, x, y, WHITE)
|
||||
.addComponent<StatComponent>([&player](Drawable2DComponent &drawble) {
|
||||
@@ -289,6 +272,27 @@ namespace BBM
|
||||
return;
|
||||
text->setText(bonus->isNoClipOn ? "YES" : "NO");
|
||||
});
|
||||
}
|
||||
|
||||
void LobbySystem::switchToGame(WAL::Wal &wal)
|
||||
{
|
||||
auto scene = Runner::loadGameScene();
|
||||
int mapWidth = Runner::mapWidth;
|
||||
int mapHeight = Runner::mapHeight;
|
||||
int playerCount = 0;
|
||||
|
||||
for (auto &[_, lobby] : wal.getScene()->view<LobbyComponent>()) {
|
||||
if (lobby.layout == ControllableComponent::NONE)
|
||||
continue;
|
||||
auto &player = Runner::createPlayer(*scene);
|
||||
player.getComponent<PositionComponent>().position = Vector3f(mapWidth * (playerCount % 2),
|
||||
(Runner::hasHeights ? 1.01 : 0),
|
||||
mapHeight * (!(playerCount % 3)));
|
||||
auto *model = dynamic_cast<RAY3D::Model *>(player.getComponent<Drawable3DComponent>().drawable.get());
|
||||
model->setTextureToMaterial(MAP_DIFFUSE, "assets/player/textures/" + colors[lobby.color] + ".png");
|
||||
|
||||
addController(player, lobby.layout);
|
||||
createTile(scene, player, lobby.color, playerCount);
|
||||
playerCount++;
|
||||
}
|
||||
Runner::gameState._loadedScenes[GameState::SceneID::GameScene] = scene;
|
||||
|
||||
@@ -17,8 +17,6 @@ namespace BBM
|
||||
class LobbySystem : public WAL::System<LobbyComponent, Drawable2DComponent>
|
||||
{
|
||||
private:
|
||||
//! @brief Add a controller for the player.
|
||||
static void _addController(WAL::Entity &player, ControllableComponent::Layout layout);
|
||||
|
||||
void _nextColor(WAL::ViewEntity<LobbyComponent, Drawable2DComponent> &entity);
|
||||
|
||||
@@ -29,6 +27,11 @@ namespace BBM
|
||||
public:
|
||||
static std::array<std::string, 4> colors;
|
||||
|
||||
//! @brief Add a controller for the player.
|
||||
static void addController(WAL::Entity &player, ControllableComponent::Layout layout);
|
||||
|
||||
static void createTile(std::shared_ptr<WAL::Scene> scene, WAL::Entity &player, int color, int playerCount);
|
||||
|
||||
//! @inherit
|
||||
void onUpdate(WAL::ViewEntity<LobbyComponent, Drawable2DComponent> &entity, std::chrono::nanoseconds dtime) override;
|
||||
|
||||
|
||||
@@ -23,26 +23,13 @@
|
||||
#include "Component/Color/ColorComponent.hpp"
|
||||
#include "Component/Stat/StatComponent.hpp"
|
||||
#include "Component/Bonus/PlayerBonusComponent.hpp"
|
||||
#include "System/Lobby/LobbySystem.hpp"
|
||||
|
||||
namespace RAY3D = RAY::Drawables::Drawables3D;
|
||||
namespace RAY2D = RAY::Drawables::Drawables2D;
|
||||
|
||||
namespace BBM
|
||||
{
|
||||
std::array<std::string, 4> ResumeLobbySystem::_colors = {
|
||||
"blue",
|
||||
"red",
|
||||
"green",
|
||||
"yellow"
|
||||
};
|
||||
|
||||
std::array<RAY::Color, 4> ResumeLobbySystem::_rayColors = {
|
||||
BLUE,
|
||||
RED,
|
||||
GREEN,
|
||||
YELLOW
|
||||
};
|
||||
|
||||
ResumeLobbySystem::ResumeLobbySystem(WAL::Wal &wal)
|
||||
: System(wal)
|
||||
{}
|
||||
@@ -100,33 +87,6 @@ namespace BBM
|
||||
});
|
||||
}
|
||||
|
||||
void ResumeLobbySystem::addController(WAL::Entity &player, ControllableComponent::Layout layout)
|
||||
{
|
||||
switch (layout) {
|
||||
case ControllableComponent::KEYBOARD_0:
|
||||
case ControllableComponent::KEYBOARD_1:
|
||||
player.addComponent<KeyboardComponent>(layout);
|
||||
break;
|
||||
case ControllableComponent::GAMEPAD_0:
|
||||
player.addComponent<GamepadComponent>(0);
|
||||
break;
|
||||
case ControllableComponent::GAMEPAD_1:
|
||||
player.addComponent<GamepadComponent>(1);
|
||||
break;
|
||||
case ControllableComponent::GAMEPAD_2:
|
||||
player.addComponent<GamepadComponent>(2);
|
||||
break;
|
||||
case ControllableComponent::GAMEPAD_3:
|
||||
player.addComponent<GamepadComponent>(3);
|
||||
break;
|
||||
case ControllableComponent::AI:
|
||||
player.addComponent<IAControllableComponent>("./assets/ai_scripts/john.lua");
|
||||
break;
|
||||
default:
|
||||
throw std::runtime_error("Invalid controller for a player.");
|
||||
}
|
||||
}
|
||||
|
||||
void ResumeLobbySystem::resumeToGame(WAL::Wal &wal)
|
||||
{
|
||||
auto scene = Runner::gameState._loadedScenes[GameState::SceneID::GameScene];
|
||||
@@ -149,68 +109,8 @@ namespace BBM
|
||||
bombHolder->maxBombCount = ParserYAML::playersInfos[countPlayer].maxBombCount;
|
||||
speed->speed = ParserYAML::playersInfos[countPlayer].speed;
|
||||
}
|
||||
addController(player, lobby.layout);
|
||||
std::string texturePath = "assets/player/ui/" + _colors[lobby.playerColor] + ".png";
|
||||
int x = (countPlayer % 2 == 0) ? 1920 - 10 - 320 : 10;
|
||||
int y = (countPlayer % 3 != 0) ? 1080 - 10 - 248 : 10;
|
||||
scene->addEntity("player color tile")
|
||||
.addComponent<PositionComponent>(x, y - 2, 0)
|
||||
.addComponent<Drawable2DComponent, RAY2D::Rectangle>(x, y, 320, 248, _rayColors[lobby.playerColor]);
|
||||
scene->addEntity("player ui tile")
|
||||
.addComponent<PositionComponent>(x, y, 0)
|
||||
.addComponent<Drawable2DComponent, RAY::Texture>(texturePath);
|
||||
scene->addEntity("player hide fireup")
|
||||
.addComponent<PositionComponent>(x + 220, y + 35, 0)
|
||||
.addComponent<Drawable2DComponent, RAY2D::Text>("", 20, x, y, WHITE)
|
||||
.addComponent<StatComponent>([&player](Drawable2DComponent &drawble) {
|
||||
const BombHolderComponent *bonus = player.tryGetComponent<BombHolderComponent>();
|
||||
|
||||
if (!bonus)
|
||||
return;
|
||||
RAY2D::Text *text = dynamic_cast<RAY2D::Text *>(drawble.drawable.get());
|
||||
if (!text)
|
||||
return;
|
||||
text->setText(std::to_string(static_cast<int>(bonus->explosionRadius)));
|
||||
});
|
||||
scene->addEntity("player hide bombup")
|
||||
.addComponent<PositionComponent>(x + 220, y + 77, 0)
|
||||
.addComponent<Drawable2DComponent, RAY2D::Text>("", 20, x, y, WHITE)
|
||||
.addComponent<StatComponent>([&player](Drawable2DComponent &drawble) {
|
||||
const BombHolderComponent *bonus = player.tryGetComponent<BombHolderComponent>();
|
||||
|
||||
if (!bonus)
|
||||
return;
|
||||
RAY2D::Text *text = dynamic_cast<RAY2D::Text *>(drawble.drawable.get());
|
||||
if (!text)
|
||||
return;
|
||||
text->setText(std::to_string(bonus->bombCount) + " / " + std::to_string(bonus->maxBombCount));
|
||||
});
|
||||
scene->addEntity("player hide speedup")
|
||||
.addComponent<PositionComponent>(x + 220, y + 122, 0)
|
||||
.addComponent<Drawable2DComponent, RAY2D::Text>("", 20, x, y, WHITE)
|
||||
.addComponent<StatComponent>([&player](Drawable2DComponent &drawble) {
|
||||
auto speedComponent = player.tryGetComponent<SpeedComponent>();
|
||||
|
||||
if (!speedComponent)
|
||||
return;
|
||||
RAY2D::Text *text = dynamic_cast<RAY2D::Text *>(drawble.drawable.get());
|
||||
if (!text)
|
||||
return;
|
||||
text->setText(std::to_string(static_cast<int>(speedComponent->speed * 100)));
|
||||
});
|
||||
scene->addEntity("player hide wall")
|
||||
.addComponent<PositionComponent>(x + 220, y + 161, 0)
|
||||
.addComponent<Drawable2DComponent, RAY2D::Text>("", 20, x, y, WHITE)
|
||||
.addComponent<StatComponent>([&player](Drawable2DComponent &drawble) {
|
||||
const PlayerBonusComponent *bonus = player.tryGetComponent<PlayerBonusComponent>();
|
||||
|
||||
if (!bonus)
|
||||
return;
|
||||
RAY2D::Text *text = dynamic_cast<RAY2D::Text *>(drawble.drawable.get());
|
||||
if (!text)
|
||||
return;
|
||||
text->setText(bonus->isNoClipOn ? "YES" : "NO");
|
||||
});
|
||||
LobbySystem::addController(player, lobby.layout);
|
||||
LobbySystem::createTile(scene, player, lobby.playerColor, countPlayer);
|
||||
countPlayer++;
|
||||
}
|
||||
Runner::gameState.nextScene = BBM::GameState::SceneID::GameScene;
|
||||
|
||||
@@ -16,13 +16,7 @@ namespace BBM
|
||||
//! @brief A system to handle Health entities.
|
||||
class ResumeLobbySystem : public WAL::System<ResumeLobbyComponent, Drawable2DComponent>
|
||||
{
|
||||
private:
|
||||
static std::array<std::string, 4> _colors;
|
||||
|
||||
static std::array<RAY::Color, 4> _rayColors;
|
||||
public:
|
||||
//! @brief Add a controller for the player.
|
||||
static void addController(WAL::Entity &player, ControllableComponent::Layout layout);
|
||||
|
||||
//! @brief Add a controller for the player when we resume a game
|
||||
static void resumeToGame(WAL::Wal &wal);
|
||||
|
||||
Reference in New Issue
Block a user