Finishing the replay button

This commit is contained in:
Zoe Roux
2021-06-17 22:31:21 +02:00
parent a886b50239
commit d424c07744
17 changed files with 59 additions and 64 deletions
@@ -12,7 +12,7 @@ namespace BBM
: WAL::Component(entity),
_modelAnimation(path),
_currentAnimIndex(animIndex),
_animDisabled(play)
_animDisabled(!play)
{
this->_modelAnimation[this->_currentAnimIndex].setFrameCounter(0);
}
@@ -7,11 +7,17 @@
namespace BBM
{
ControllableComponent::ControllableComponent(WAL::Entity &entity)
: WAL::Component(entity)
: WAL::Component(entity),
disabled(false)
{}
WAL::Component *ControllableComponent::clone(WAL::Entity &entity) const
{
return new ControllableComponent(entity);
}
ControllableComponent::ControllableComponent(WAL::Entity &entity, bool isDisabled)
: WAL::Component(entity),
disabled(isDisabled)
{}
}
@@ -29,6 +29,9 @@ namespace BBM
AI
};
//! @brief True if the entity should not be controllable.
bool disabled;
//! @brief The X and Z abscis of the movement.
Vector2f move;
//! @brief input value to select
@@ -47,6 +50,8 @@ namespace BBM
//! @brief Initialize a new controllable component.
explicit ControllableComponent(WAL::Entity &entity);
//! @brief Initialize a new controllable component.
ControllableComponent(WAL::Entity &entity, bool isDisabled);
//! @brief A Controllable component is copy constructable.
ControllableComponent(const ControllableComponent &) = default;
//! @brief default destructor
+2
View File
@@ -60,6 +60,7 @@ namespace BBM
.addComponent<AnimatorComponent>()
.addComponent<GravityComponent>()
.addComponent<BumperTimerComponent>()
.addComponent<ControllableComponent>(true)
.addComponent<TagComponent<BlowablePass>>()
.addComponent<TagComponent<Player>>()
.addComponent<AnimationsComponent>("assets/player/player.iqm", 3)
@@ -77,6 +78,7 @@ namespace BBM
entity.removeComponent<AnimatorComponent>();
if (entity.hasComponent<TimerComponent>())
return;
entity.getComponent<ControllableComponent>().disabled = true;
entity.addComponent<TimerComponent>(1s, [](WAL::Entity &entity, WAL::Wal &wal) {
entity.scheduleDeletion();
});
+9 -10
View File
@@ -42,16 +42,20 @@ namespace BBM
});
int playerID = 0;
for (auto &entity: players) {
for (auto &entity : players) {
auto *model = dynamic_cast<RAY3D::Model *>(entity.get().getComponent<Drawable3DComponent>().drawable.get());
std::string path = model->getTextureByMaterial(MAP_DIFFUSE).getResourcePath();
playersIconPath.push_back(path.replace(path.find("textures"), std::string("textures").size(), "icons"));
auto &newPlayer = scene->addEntity("add");
newPlayer.addComponent<LobbyComponent>(playerID++, newPlayer, newPlayer);
auto &lobby = newPlayer.getComponent<LobbyComponent>();
lobby.layout = entity.get().getComponent<ControllableComponent>().layout; // TODO layout was none.
std::string color = path.substr(path.find_last_of('/'), path.find_last_of('.'));
lobby.color = std::find(LobbySystem::colors.begin(), LobbySystem::colors.end(), color) - LobbySystem::colors.begin();
lobby.layout = entity.get().getComponent<ControllableComponent>().layout;
auto start = path.find_last_of('/') + 1;
std::string color = path.substr(start, path.find_last_of('.') - start);
auto iterator = std::find(LobbySystem::colors.begin(), LobbySystem::colors.end(), color);
lobby.color = static_cast<int>(iterator - LobbySystem::colors.begin());
}
addMenuControl(*scene, sounds);
@@ -96,13 +100,8 @@ namespace BBM
})
.addComponent<OnClickComponent>([](WAL::Entity &entity, WAL::Wal &wal)
{
if (Runner::gameState.currentScene != GameState::ScoreScene
|| !LobbySystem::playersAreReady(*wal.getScene()))
return;
LobbySystem::switchToGame(wal);
})
.addComponent<TagComponent<"PlayButton">>();
});
auto &back = scene->addEntity("back to main menu")
.addComponent<PositionComponent>(10, 1080 - 85, 0)
.addComponent<Drawable2DComponent, RAY::Texture>("assets/buttons/button_back.png")
@@ -2,7 +2,6 @@
// Created by cbihan on 01/06/2021.
//
#include <iostream>
#include "AnimationsSystem.hpp"
#include "Component/Animation/AnimationsComponent.hpp"
#include "Model/Model.hpp"
@@ -20,7 +19,7 @@ namespace BBM
auto &model = entity.get<Drawable3DComponent>();
auto &anim = entity.get<AnimationsComponent>();
if (anim.isDisabled())
if (anim.isAnimDisabled())
return;
auto modelPtr = std::dynamic_pointer_cast<RAY::Drawables::Drawables3D::Model>(model.drawable);
if (modelPtr) {
@@ -7,7 +7,6 @@
#include "Component/Movable/MovableComponent.hpp"
#include "Component/Controllable/ControllableComponent.hpp"
#include "Component/Health/HealthComponent.hpp"
#include "Entity/Entity.hpp"
namespace BBM
{
@@ -22,8 +21,6 @@ namespace BBM
auto health = entity->tryGetComponent<HealthComponent>();
Vector2f move = controllable.move.normalized() * controllable.speed;
if (health && health->getHealthPoint() <= 0)
return;
movable.addForce(Vector3f(move.x, 0, move.y));
}
}
+4 -1
View File
@@ -21,8 +21,11 @@ namespace BBM
{
const auto &gamepadComponent = entity.get<GamepadComponent>();
auto &controllable = entity.get<ControllableComponent>();
Gamepad gamepad(gamepadComponent.getID());
if (controllable.disabled)
return;
Gamepad gamepad(gamepadComponent.getID());
const std::map<Button, bool &> keyPressedMap = {
{gamepadComponent.keyJump, controllable.select},
{gamepadComponent.keyBomb, controllable.bomb},
@@ -158,6 +158,9 @@ namespace BBM
auto &bombHolder = entity.get<BombHolderComponent>();
MapInfo player(pos.position, MapGenerator::NOTHING);
if (controllable.disabled)
return;
UpdateMapInfos(entity);
ia._state.getGlobal("Update");
@@ -21,6 +21,9 @@ namespace BBM
const auto &keyboard = entity.get<KeyboardComponent>();
auto &controllable = entity.get<ControllableComponent>();
if (controllable.disabled)
return;
const std::map<KeyboardKey, bool &> keyPressedMap = {
{keyboard.keyJump, controllable.select},
{keyboard.keyBomb, controllable.bomb},
+3
View File
@@ -198,6 +198,7 @@ namespace BBM
default:
throw std::runtime_error("Invalid controller for a player.");
}
player.getComponent<ControllableComponent>().layout = layout;
}
void LobbySystem::switchToGame(WAL::Wal &wal)
@@ -217,6 +218,8 @@ namespace BBM
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;
+12 -10
View File
@@ -28,8 +28,18 @@ namespace BBM
hasEnded = false;
return (false);
}
if (pos.position.distance(posTarget) < 4 || hasEnded) {
if (hasEnded)
return true;
if (pos.position.distance(posTarget) < 4) {
hasEnded = true;
this->_wal.getScene()->scheduleNewEntity("Timer")
.addComponent<TimerComponent>(std::chrono::minutes (3), [](WAL::Entity &, WAL::Wal &) {
Runner::gameState.nextScene = GameState::ScoreScene;
})
.addComponent<PositionComponent>(1920 / 2 - 2 * 30, 30, 0)
.addComponent<Drawable2DComponent, RAY2D::Text>("", 60, RAY::Vector2(), ORANGE);
for (WAL::Entity &player : this->_wal.getScene()->view<TagComponent<Player>>())
player.getComponent<ControllableComponent>().disabled = false;
return (true);
}
@@ -53,18 +63,10 @@ namespace BBM
float lowerZDist = 0;
for (auto &[entity, pos, _] : this->_wal.getScene()->view<PositionComponent, TagComponent<Player>>()) {
if (!entity.hasComponent<ControllableComponent>())
entity.addComponent<ControllableComponent>();
playerPos.emplace_back(pos.position);
}
if (playerPos.size() == 0)
if (!playerPos.empty())
introAnimation(entity, true);
static auto &timer = this->_wal.getScene()->addEntity("Timer")
.addComponent<TimerComponent>(std::chrono::minutes (3), [](WAL::Entity &, WAL::Wal &) {
Runner::gameState.nextScene = GameState::ScoreScene;
})
.addComponent<PositionComponent>(1920 / 2 - 2 * 30, 30, 0)
.addComponent<Drawable2DComponent, RAY2D::Text>("", 60, RAY::Vector2(), ORANGE);
if (playerPos.size() == 1)
newCameraPos = playerPos[0];
for (int i = 0; i < playerPos.size(); i++)
-1
View File
@@ -19,7 +19,6 @@ namespace BBM
auto &timer = entity.get<TimerComponent>();
timer.ringIn -= dtime;
if (timer.ringIn <= 0ns) {
timer.setDisable(true);
timer.callback(entity, this->_wal);
}
}