Skip to content
Merged
Show file tree
Hide file tree
Changes from 11 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion src/Client/Systems/Network/ClientNetwork.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,16 @@ namespace Systems {

void receiveNewEnemy(std::any &any, boost::asio::ip::udp::endpoint &)
{
std::lock_guard<std::mutex> lock(Registry::getInstance().mutex);
const auto newEnemy = std::any_cast<struct msgNewEnemy_s>(any);
initEnemy(JsonType::DEFAULT_ENEMY);

initEnemy(JsonType::DEFAULT_ENEMY, true, newEnemy.enemyInfos.id);
Types::Position pos = {
static_cast<float>(newEnemy.enemyInfos.pos.x),
static_cast<float>(newEnemy.enemyInfos.pos.y)};
struct health_s hp = newEnemy.enemyInfos.life;
Registry::getInstance().getComponents<Types::Position>().insertBack(pos);
Registry::getInstance().getComponents<struct health_s>().insertBack(hp);
}

void sendPositionRelative(std::size_t /* unused */, std::size_t /* unused */)
Expand Down
20 changes: 10 additions & 10 deletions src/ECS/ECSCustomTypes.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -97,24 +97,23 @@ namespace Types {

struct Enemy {
public:
Enemy(enum enemy_type_e type = enemy_type_e::CLASSIC_ENEMY) : _type(type)
Enemy(enum enemy_type_e _type = enemy_type_e::CLASSIC_ENEMY) : type(_type)
{
std::lock_guard<std::mutex> lock(_mutex);

_constId = enemy_id_s {_enemyNb};
constId = enemy_id_s {_enemyNb};
_enemyNb++;
}

[[nodiscard]] const enemy_id_s &getConstId() const
Enemy(struct enemy_id_s _constId, enum enemy_type_e _type = enemy_type_e::CLASSIC_ENEMY)
: constId(_constId),
type(_type)
{
std::lock_guard<std::mutex> lock(_mutex);

return _constId;
}

[[nodiscard]] enum enemy_type_e getType() const
[[nodiscard]] enemy_id_s getConstId() const
{
return _type;
return constId;
}

static void setEnemyNb(unsigned int nb)
Expand All @@ -131,10 +130,11 @@ namespace Types {
return _enemyNb;
}

enemy_id_s constId;
enum enemy_type_e type;

private:
enemy_id_s _constId;
static unsigned int _enemyNb;
enum enemy_type_e _type;
static std::mutex _mutex;
};

Expand Down
8 changes: 8 additions & 0 deletions src/ECS/SparseArray.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,14 @@ class SparseArray {
return _dense[_sparse[id]];
}

Component &back()
{
if (_dense.empty()) {
throw std::runtime_error("SparseArrays::back: empty!");
}
return _dense.back();
}

/*
* A dense sparseArrays is not sort by entities id, the begin of two
* sparseArrays could be different entities, only _sparse are
Expand Down
64 changes: 35 additions & 29 deletions src/ECS/Systems/Systems.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,12 @@
#include <fstream>
#include <nlohmann/json.hpp>
#include <sstream>
#include "CustomTypes.hpp"
#include "ECSCustomTypes.hpp"
#include "Registry.hpp"
#include "SystemManagersDirector.hpp"

#ifdef CLIENT
#include "CustomTypes.hpp"
#include "NitworkClient.hpp"
#include "Raylib.hpp"
#else
Expand Down Expand Up @@ -177,7 +178,7 @@ namespace Systems {
clock.restart(clockId);
}

void initEnemy(JsonType enemyType)
void initEnemy(JsonType enemyType, bool setId, struct ::enemy_id_s enemyId)
{
std::vector<nlohmann::basic_json<>> enemyData =
Json::getInstance().getDataByJsonType("enemy", enemyType);
Expand All @@ -186,42 +187,44 @@ namespace Systems {
#ifdef CLIENT
std::size_t id = Registry::getInstance().addEntity();

Raylib::Sprite enemy = {
Types::Rect rect = {Types::Rect(Json::getInstance().getDataFromJson(elem, "rect"))};
Types::SpriteDatas enemy = {
Json::getInstance().getDataFromJson(elem, "spritePath"),
Json::getInstance().getDataFromJson(elem, "width"),
Json::getInstance().getDataFromJson(elem, "height"),
id};
id,
LayerType::DEFAULTLAYER,
0
};

nlohmann::basic_json<> animRectData = Json::getInstance().getDataFromJson(elem, "animRect");
Types::AnimRect animRect = {
rect,
Json::getInstance().getDataFromJson(animRectData, "move").get<std::vector<Types::Rect>>(),
Json::getInstance().getDataFromJson(animRectData, "attack").get<std::vector<Types::Rect>>(),
Json::getInstance().getDataFromJson(animRectData, "dead").get<std::vector<Types::Rect>>()};
#else
Registry::getInstance().addEntity();

#endif
Types::Enemy enemyComp = {};
Types::Enemy enemyComp = (setId ? Types::Enemy {enemyId} : Types::Enemy {});
Types::Position position = {
Types::Position(Json::getInstance().getDataFromJson(elem, "position"))};
Types::CollisionRect collisionRect = {
Types::CollisionRect(Json::getInstance().getDataFromJson(elem, "collisionRect"))};
Types::Rect rect = {Types::Rect(Json::getInstance().getDataFromJson(elem, "rect"))};
struct health_s healthComp = {Json::getInstance().getDataFromJson(elem, "health")};
Types::Damage damageComp = {Json::getInstance().getDataFromJson(elem, "damage")};
Types::Velocity velocity = {
Types::Velocity(Json::getInstance().getDataFromJson(elem, "velocity"))};

nlohmann::basic_json<> animRectData = Json::getInstance().getDataFromJson(elem, "animRect");
Types::AnimRect animRect = {
rect,
Json::getInstance().getDataFromJson(animRectData, "move").get<std::vector<Types::Rect>>(),
Json::getInstance().getDataFromJson(animRectData, "attack").get<std::vector<Types::Rect>>(),
Json::getInstance().getDataFromJson(animRectData, "dead").get<std::vector<Types::Rect>>()};

#ifdef CLIENT
Registry::getInstance().getComponents<Raylib::Sprite>().insertBack(enemy);
Registry::getInstance().setToFrontLayers(id);
Registry::getInstance().getComponents<Types::Rect>().insertBack((rect));
Registry::getInstance().getComponents<Types::AnimRect>().insertBack(animRect);
Registry::getInstance().getComponents<Types::SpriteDatas>().insertBack(enemy);
#endif

Registry::getInstance().getComponents<Types::Position>().insertBack(position);
Registry::getInstance().getComponents<Types::CollisionRect>().insertBack(collisionRect);
Registry::getInstance().getComponents<Types::Rect>().insertBack((rect));
Registry::getInstance().getComponents<Types::AnimRect>().insertBack(animRect);
Registry::getInstance().getComponents<Types::Velocity>().insertBack(velocity);
Registry::getInstance().getComponents<struct health_s>().insertBack(healthComp);
Registry::getInstance().getComponents<Types::Damage>().insertBack(damageComp);
Expand Down Expand Up @@ -374,14 +377,9 @@ namespace Systems {
id,
FRONTLAYER,
static_cast<std::size_t>(FRONT));
#endif
Types::Position position = {
Types::Position(Json::getInstance().getDataByVector({"player", "position"}, playerType))};

Types::Rect rect = {
Types::Rect(Json::getInstance().getDataByVector({"player", "rect"}, playerType))};
Types::CollisionRect collisionRect = {Types::CollisionRect(
Json::getInstance().getDataByVector({"player", "collisionRect"}, playerType))};

nlohmann::basic_json<> animRectData =
Json::getInstance().getDataByVector({"player", "animRect"}, playerType);
Types::AnimRect animRect = {
Expand All @@ -390,13 +388,19 @@ namespace Systems {
Json::getInstance().getDataFromJson(animRectData, "attack").get<std::vector<Types::Rect>>(),
Json::getInstance().getDataFromJson(animRectData, "dead").get<std::vector<Types::Rect>>()};

#endif
Types::Position position = {
Types::Position(Json::getInstance().getDataByVector({"player", "position"}, playerType))};
Types::CollisionRect collisionRect = {Types::CollisionRect(
Json::getInstance().getDataByVector({"player", "collisionRect"}, playerType))};

#ifdef CLIENT
Registry::getInstance().getComponents<Types::Rect>().insertBack(rect);
Registry::getInstance().getComponents<Types::AnimRect>().insertBack(animRect);
Registry::getInstance().getComponents<Types::SpriteDatas>().insertBack(playerDatas);
#endif
Registry::getInstance().getComponents<Types::Position>().insertBack(position);
Registry::getInstance().getComponents<Types::Rect>().insertBack(rect);
Registry::getInstance().getComponents<Types::CollisionRect>().insertBack(collisionRect);
Registry::getInstance().getComponents<Types::AnimRect>().insertBack(animRect);
Registry::getInstance().getComponents<Types::Player>().insertBack(playerComp);
Registry::getInstance().getComponents<Types::Damage>().insertBack(damageComp);
Registry::getInstance().getComponents<struct health_s>().insertBack(healthComp);
Expand All @@ -405,12 +409,15 @@ namespace Systems {

void createMissile(Types::Position &pos, Types::Missiles &typeOfMissile)
{
#ifdef CLIENT
std::size_t entityId = Registry::getInstance().addEntity();
#else
Registry::getInstance().addEntity();
#endif

Types::CollisionRect collisionRect1 = {1, 1};
constexpr float bulletWidth = 5.0F;
constexpr float bulletHeight = 5.0F;
Types::CollisionRect collisionRect2 = {bulletWidth, bulletHeight};
Types::CollisionRect collisionRect = {bulletWidth, bulletHeight};
Types::Velocity velocity = {0.7F, 0.0F};
Types::Missiles missileType = typeOfMissile;
Types::Dead deadComp = {};
Expand All @@ -435,8 +442,7 @@ namespace Systems {
Registry::getInstance().getComponents<Types::SpriteDatas>().insertBack(bulletDatas);
Registry::getInstance().getComponents<Types::Rect>().insertBack(spriteRect);
#endif
Registry::getInstance().getComponents<Types::CollisionRect>().insertBack(collisionRect1);
Registry::getInstance().getComponents<Types::CollisionRect>().insertBack(collisionRect2);
Registry::getInstance().getComponents<Types::CollisionRect>().insertBack(collisionRect);
Registry::getInstance().getComponents<Types::Missiles>().insertBack(missileType);
Registry::getInstance().getComponents<Types::PlayerAllies>().insertBack(playerAlliesComp);
Registry::getInstance().getComponents<Types::Velocity>().insertBack(velocity);
Expand Down
3 changes: 2 additions & 1 deletion src/ECS/Systems/Systems.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,10 @@
#include <vector>
#include "ECSCustomTypes.hpp"
#include "Json.hpp"
#include "MessageTypes.h"

namespace Systems {
void initEnemy(JsonType enemyType);
void initEnemy(JsonType enemyType, bool setId = false, struct ::enemy_id_s enemyId = {0});
void windowCollision(std::size_t, std::size_t);
void entitiesCollision(std::size_t, std::size_t);
void deathChecker(std::size_t, std::size_t);
Expand Down
2 changes: 1 addition & 1 deletion src/Nitwork/NitworkServer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ namespace Nitwork {
return;
}
_endpoints.emplace_back(endpoint);
addPlayerInitMessage(endpoint, _endpoints.size() - 1);
addPlayerInitMessage(endpoint, static_cast<n_id_t>(_endpoints.size() - 1));
}

void NitworkServer::handleReadyMsg(
Expand Down
2 changes: 1 addition & 1 deletion src/Server/Systems/Network/ServerNetwork.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ namespace Systems {
.pos =
{static_cast<char>(static_cast<int>(arrPos[index].x)),
static_cast<char>(static_cast<int>(arrPos[index].y))},
.type = arrEnemies[index].getType(),
.type = arrEnemies[index].type,
});
}

Expand Down