added some static function in lobbysystem (createtile) and fixed some old changes not necessary now

This commit is contained in:
HENRY Benjamin
2021-06-18 22:38:32 +02:00
parent 4c9b8958ba
commit 68c219671f
5 changed files with 43 additions and 142 deletions
+1 -1
View File
@@ -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);
})
+34 -30
View File
@@ -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;
+5 -2
View File
@@ -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;
+3 -103
View File
@@ -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);