mirror of
https://github.com/zoriya/Bomberman.git
synced 2026-06-07 11:34:46 +00:00
Finishing the replay button
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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();
|
||||
});
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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},
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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++)
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user