Merging with develop

This commit is contained in:
Zoe Roux
2021-06-17 14:50:41 +02:00
8 changed files with 121 additions and 63 deletions
@@ -14,7 +14,7 @@ using namespace std::chrono_literals;
namespace BBM
{
class BombHolderComponent : public WAL::Component
class BombHolderComponent : public WAL::Component
{
public:
//! @brief The number of bomb that this entity hold.
-1
View File
@@ -63,7 +63,6 @@ namespace BBM
return scene.addEntity("player")
.addComponent<PositionComponent>()
.addComponent<Drawable3DComponent, RAY3D::Model>("assets/player/player.iqm", true)
.addComponent<ControllableComponent>()
.addComponent<ScoreComponent>()
.addComponent<AnimatorComponent>()
.addComponent<GravityComponent>()
+2
View File
@@ -46,6 +46,7 @@
#include "System/Gravity/GravitySystem.hpp"
#include "System/BumperTimer/BumperTimerSystem.hpp"
#include "System/Music/MusicSystem.hpp"
#include "System/Renderer/CameraSystem.hpp"
#include "System/Lobby/LobbySystem.hpp"
#include "System/Score/ScoreSystem.hpp"
#include "System/EndCondition/EndConditionSystem.hpp"
@@ -108,6 +109,7 @@ namespace BBM
.addSystem<ShaderDrawable2DSystem>()
.addSystem<EndConditionSystem>()
.addSystem<ScoreSystem>()
.addSystem<CameraSystem>()
.addSystem<MusicSystem>();
}
+79
View File
@@ -0,0 +1,79 @@
//
// Created by Tom Augier on 05/06/2021
//
#include "CameraSystem.hpp"
#include "Entity/Entity.hpp"
#include "Component/Tag/TagComponent.hpp"
namespace BBM
{
CameraSystem::CameraSystem(WAL::Wal &wal)
: System(wal)
{}
bool CameraSystem::introAnimation(WAL::ViewEntity<CameraComponent, PositionComponent> &entity, bool restart)
{
auto &pos = entity.get<PositionComponent>();
static Vector3f posTarget(8, 25, 7);
static bool hasEnded = false;
if (restart) {
hasEnded = false;
return (false);
}
if (pos.position.distance(posTarget) < 2 || hasEnded) {
hasEnded = true;
return (true);
}
auto &cam = entity.get<CameraComponent>();
pos.position += (posTarget - pos.position) / 100;
return (false);
}
void CameraSystem::onUpdate(WAL::ViewEntity<CameraComponent, PositionComponent> &entity,
std::chrono::nanoseconds dtime)
{
if (!introAnimation(entity))
return;
auto &pos = entity.get<PositionComponent>();
auto &cam = entity.get<CameraComponent>();
Vector3f newCameraPos = Vector3f(-1, -1, -1);
std::vector<Vector3f> playerPos;
float maxDist = 0;
float lowerXDist = 0;
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)
introAnimation(entity, true);
if (playerPos.size() == 1)
newCameraPos = playerPos[0];
for (int i = 0; i < playerPos.size(); i++)
for (int j = 0; j < playerPos.size(); j++) {
if (maxDist < playerPos[i].distance(playerPos[j])) {
maxDist = playerPos[i].distance(playerPos[j]);
newCameraPos = (playerPos[i] + playerPos[j]) / 2;
}
if (lowerXDist < std::abs((playerPos[i].x - playerPos[j].x)))
lowerXDist = std::abs((playerPos[i].x - playerPos[j].x));
if (lowerZDist < std::abs((playerPos[i].z - playerPos[j].z)))
lowerZDist = std::abs((playerPos[i].z - playerPos[j].z));
}
maxDist += (lowerXDist + lowerZDist) / 2;
if (maxDist < 14)
maxDist = 14;
if (maxDist > 25)
maxDist = 25;
cam.target += (newCameraPos.abs() - pos.position.abs()) / 10;
newCameraPos.y = maxDist;
newCameraPos.z -= 1;
pos.position += (newCameraPos.abs() - pos.position.abs()) / 10;
}
}
+36
View File
@@ -0,0 +1,36 @@
//
// Created by Tom Augier on 05/06/2021
//
#pragma once
#include "System/System.hpp"
#include "Window.hpp"
#include "Component/Renderer/CameraComponent.hpp"
#include "Component/Position/PositionComponent.hpp"
#include <Component/Controllable/ControllableComponent.hpp>
#include "Wal.hpp"
namespace BBM
{
class CameraSystem : public WAL::System<CameraComponent, PositionComponent>
{
public:
//! @inherit
void onUpdate(WAL::ViewEntity<CameraComponent, PositionComponent> &entity, std::chrono::nanoseconds) override;
//! @brief introduciton animation when entering gameScene
bool introAnimation(WAL::ViewEntity<CameraComponent, PositionComponent> &entity, bool restart = false);
//! @brief ctor
CameraSystem(WAL::Wal &wal);
//! @brief Default copy ctor
CameraSystem(const CameraSystem &) = default;
//! @brief Default dtor
~CameraSystem() override = default;
//! @brief A CameraManager screen system can't be assigned.
CameraSystem &operator=(const CameraSystem &) = delete;
};
}
+1 -58
View File
@@ -162,69 +162,12 @@ namespace BBM
this->_window.endDrawing();
}
bool RenderSystem::introAnimation(WAL::ViewEntity<CameraComponent, PositionComponent> &entity, bool restart)
{
auto &pos = entity.get<PositionComponent>();
static Vector3f posTarget(8, 25, 7);
static bool hasEnded = false;
if (restart) {
hasEnded = false;
return (false);
}
if (pos.position.distance(posTarget) < 1 || hasEnded) {
hasEnded = true;
return (true);
}
auto &cam = entity.get<CameraComponent>();
pos.position += (posTarget - pos.position) / 100;
this->_camera.setPosition(pos.position);
this->_camera.setTarget(cam.target);
return (false);
}
void RenderSystem::onUpdate(WAL::ViewEntity<CameraComponent, PositionComponent> &entity,
std::chrono::nanoseconds dtime)
{
if (!introAnimation(entity))
return;
auto &pos = entity.get<PositionComponent>();
auto &cam = entity.get<CameraComponent>();
Vector3f newCameraPos = Vector3f(-1, -1, -1);
std::vector<Vector3f> playerPos;
float maxDist = 0;
float lowerXDist = 0;
float lowerZDist = 0;
for (auto &[entity, pos, _] : this->_wal.getScene()->view<PositionComponent, TagComponent<Player>>())
playerPos.emplace_back(pos.position);
if (playerPos.size() == 0)
introAnimation(entity, true);
if (playerPos.size() == 1)
newCameraPos = playerPos[0];
for (int i = 0; i < playerPos.size(); i++)
for (int j = 0; j < playerPos.size(); j++) {
if (maxDist < playerPos[i].distance(playerPos[j])) {
maxDist = playerPos[i].distance(playerPos[j]);
newCameraPos = (playerPos[i] + playerPos[j]) / 2;
}
if (lowerXDist < std::abs((playerPos[i].x - playerPos[j].x)))
lowerXDist = std::abs((playerPos[i].x - playerPos[j].x));
if (lowerZDist < std::abs((playerPos[i].z - playerPos[j].z)))
lowerZDist = std::abs((playerPos[i].z - playerPos[j].z));
}
maxDist += (lowerXDist + lowerZDist) / 2;
if (maxDist < 14)
maxDist = 14;
if (maxDist > 25)
maxDist = 25;
cam.target += (newCameraPos.abs() - pos.position.abs()) / 10;
newCameraPos.y = maxDist;
newCameraPos.z -= 1;
pos.position += (newCameraPos.abs() - pos.position.abs()) / 10;
_camera.setTarget(cam.target);
_camera.setPosition(pos.position);
}
-3
View File
@@ -56,9 +56,6 @@ namespace BBM
//! @param entity entity to draw bounding box of
void drawBoundingBox(const WAL::Entity &entity, const PositionComponent &posComponent, const Drawable3DComponent &drawable) const;
//! @brief introduciton animation when entering gameScene
bool introAnimation(WAL::ViewEntity<CameraComponent, PositionComponent> &entity, bool restart = false);
//! @brief ctor
RenderSystem(WAL::Wal &wal, RAY::Window &window, bool debugMode = false);