diff --git a/CMakeLists.txt b/CMakeLists.txt index 5cd8e63c..583bd1c5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -99,7 +99,7 @@ set(SOURCES sources/System/Music/MusicSystem.cpp sources/System/Lobby/LobbySystem.cpp sources/System/Lobby/LobbySystem.hpp -) + sources/Component/Lobby/LobbyComponent.cpp sources/Component/Lobby/LobbyComponent.hpp) add_executable(bomberman sources/main.cpp diff --git a/sources/Component/Controllable/ControllableComponent.hpp b/sources/Component/Controllable/ControllableComponent.hpp index 8376d43f..89110cee 100644 --- a/sources/Component/Controllable/ControllableComponent.hpp +++ b/sources/Component/Controllable/ControllableComponent.hpp @@ -14,6 +14,17 @@ namespace BBM class ControllableComponent : public WAL::Component { public: + enum Layout + { + NONE, + KEYBOARD_0, + KEYBOARD_1, + GAMEPAD_0, + GAMEPAD_1, + GAMEPAD_2, + GAMEPAD_3 + }; + //! @brief The X and Z abscis of the movement. Vector2f move; //! @brief input value for jump @@ -22,6 +33,8 @@ namespace BBM bool bomb = false; //! @brief input value for pause bool pause = false; + //! @brief The layout used for this controllable. + Layout layout = NONE; //! @inherit WAL::Component *clone(WAL::Entity &entity) const override; diff --git a/sources/Component/Lobby/LobbyComponent.cpp b/sources/Component/Lobby/LobbyComponent.cpp new file mode 100644 index 00000000..e2f7c839 --- /dev/null +++ b/sources/Component/Lobby/LobbyComponent.cpp @@ -0,0 +1,18 @@ +// +// Created by Zoe Roux on 6/11/21. +// + +#include "LobbyComponent.hpp" + +namespace BBM +{ + LobbyComponent::LobbyComponent(WAL::Entity &entity, int playerID) + : WAL::Component(entity), + playerID(playerID) + {} + + WAL::Component *LobbyComponent::clone(WAL::Entity &entity) const + { + return new LobbyComponent(entity, this->playerID); + } +} \ No newline at end of file diff --git a/sources/Component/Lobby/LobbyComponent.hpp b/sources/Component/Lobby/LobbyComponent.hpp new file mode 100644 index 00000000..0f5e6ff8 --- /dev/null +++ b/sources/Component/Lobby/LobbyComponent.hpp @@ -0,0 +1,37 @@ +// +// Created by Zoe Roux on 6/11/21. +// + +#pragma once + +#include +#include +#include +#include + +namespace BBM +{ + class LobbyComponent : public WAL::Component + { + public: + //! @brief The layout used for this player. + ControllableComponent::Layout layout = ControllableComponent::NONE; + //! @brief The ID of the lobby player (from 0 to 3) + int playerID; + //! @brief The color of the player + RAY::Color color = RED; + //! @brief Is this player ready + bool ready = false; + + Component * clone(WAL::Entity &entity) const override; + + //! @brief Create a new lobby component. + explicit LobbyComponent(WAL::Entity &entity, int playerID); + //! @brief A lobby component is copyable. + LobbyComponent(const LobbyComponent &) = default; + //! @brief A default destructor + ~LobbyComponent() override = default; + //! @brief A lobby component is not assignable. + LobbyComponent &operator=(const LobbyComponent &) = delete; + }; +} diff --git a/sources/Runner/Runner.cpp b/sources/Runner/Runner.cpp index 1cabcabd..13c2e94e 100644 --- a/sources/Runner/Runner.cpp +++ b/sources/Runner/Runner.cpp @@ -50,6 +50,7 @@ #include "System/Sound/MenuSoundManagerSystem.hpp" #include "System/Music/MusicSystem.hpp" #include "System/Lobby/LobbySystem.hpp" +#include "Component/Lobby/LobbyComponent.hpp" namespace RAY3D = RAY::Drawables::Drawables3D; namespace RAY2D = RAY::Drawables::Drawables2D; @@ -299,25 +300,29 @@ namespace BBM .addComponent(RAY::Vector2(), RAY::Vector2(200, 200), WHITE); auto &p1 = scene->addEntity("player1") .addComponent(224, 1080 / 3, 0) - .addComponent("assets/player/none_icon.png"); + .addComponent("assets/player/none_icon.png") + .addComponent(0); auto &p2tile = scene->addEntity("player2 tile") .addComponent(2 * 224 + 200, 1080 / 3, 0) .addComponent(RAY::Vector2(), RAY::Vector2(200, 200), WHITE); auto &p2 = scene->addEntity("player2") .addComponent(2 * 224 + 200, 1080 / 3, 0) - .addComponent("assets/player/none_icon.png"); + .addComponent("assets/player/none_icon.png") + .addComponent(1); auto &p3tile = scene->addEntity("player3 tile") .addComponent(3 * 224 + 2 * 200, 1080 / 3, 0) .addComponent(RAY::Vector2(), RAY::Vector2(200, 200), WHITE); auto &p3 = scene->addEntity("player3") .addComponent(3 * 224 + 2 * 200, 1080 / 3, 0) - .addComponent("assets/player/none_icon.png"); + .addComponent("assets/player/none_icon.png") + .addComponent(2); auto &p4tile = scene->addEntity("player4 tile") .addComponent(4 * 224 + 3 * 200, 1080 / 3, 0) .addComponent(RAY::Vector2(), RAY::Vector2(200, 200), WHITE); auto &p4 = scene->addEntity("player4") .addComponent(4 * 224 + 3 * 200, 1080 / 3, 0) - .addComponent("assets/player/none_icon.png"); + .addComponent("assets/player/none_icon.png") + .addComponent(3); scene->addEntity("camera") .addComponent(8, 20, 7) .addComponent(Vector3f(8, 0, 8)); diff --git a/sources/System/Lobby/LobbySystem.cpp b/sources/System/Lobby/LobbySystem.cpp index 6eb2f87f..61bddebd 100644 --- a/sources/System/Lobby/LobbySystem.cpp +++ b/sources/System/Lobby/LobbySystem.cpp @@ -1,7 +1,7 @@ #include +#include #include "System/Lobby/LobbySystem.hpp" #include "Component/Controllable/ControllableComponent.hpp" -#include "Entity/Entity.hpp" namespace BBM { @@ -9,7 +9,23 @@ namespace BBM : System(wal) {} - void LobbySystem::onSelfUpdate() + void LobbySystem::onUpdate(WAL::ViewEntity &entity, std::chrono::nanoseconds dtime) { + auto &lobby = entity.get(); + if (lobby.layout == ControllableComponent::NONE) { + for (auto &[_, controller] : this->_wal.getScene()->view()) { + if (controller.jump) { + lobby.layout = controller.layout; + return; + } + } + } + for (auto &[_, controller] : this->_wal.getScene()->view()) { + if (controller.layout == lobby.layout && controller.jump) { + lobby.ready = !lobby.ready; + if (lobby.ready) { + } + } + } } } \ No newline at end of file diff --git a/sources/System/Lobby/LobbySystem.hpp b/sources/System/Lobby/LobbySystem.hpp index 0e88c3e4..884259f5 100644 --- a/sources/System/Lobby/LobbySystem.hpp +++ b/sources/System/Lobby/LobbySystem.hpp @@ -1,15 +1,16 @@ #pragma once #include "System/System.hpp" +#include "Component/Lobby/LobbyComponent.hpp" namespace BBM { //! @brief A system to handle Health entities. - class LobbySystem : public WAL::System<> + class LobbySystem : public WAL::System { public: //! @inherit - void onSelfUpdate() override; + void onUpdate(WAL::ViewEntity &entity, std::chrono::nanoseconds dtime) override; //! @brief A default constructor explicit LobbySystem(WAL::Wal &wal);