R-Type
Distributed multiplayer game engine in C++
Loading...
Searching...
No Matches
CollisionSystem.hpp
Go to the documentation of this file.
1/*
2** EPITECH PROJECT, 2025
3** RTYPE
4** File description:
5** CollisionSystem
6*/
7
8#pragma once
9
10#include "../../Components/Buff.hpp"
11#include "../../Components/Collectible.hpp"
12#include "../../Components/Collider.hpp"
13#include "../../Components/Health.hpp"
14#include "../../Components/Player.hpp"
15#include "../../Components/Transform.hpp"
16#include "../ISystem.hpp"
17
18namespace ecs {
26 class CollisionSystem : public ISystem {
27 public:
31 CollisionSystem() = default;
32
36 ~CollisionSystem() override = default;
37
48 void update(Registry &registry, float deltaTime) override;
49
55 ComponentMask getComponentMask() const override;
56
57 private:
71 bool checkAABB(const Transform::Vector2 &pos1, const Collider::Vector2 &size1,
72 const Collider::Vector2 &offset1, const Transform::Vector2 &pos2,
73 const Collider::Vector2 &size2, const Collider::Vector2 &offset2) const;
74
85 void handlePickup(Address playerAddr, Address collectibleAddr, Registry &registry,
86 std::vector<Address> &entitiesToDestroy);
87
102 bool canCollide(std::uint32_t layer1, std::uint32_t mask1, std::uint32_t layer2,
103 std::uint32_t mask2) const;
104
118 void resolveWallCollision(Address playerAddr, Address wallAddr, Transform &playerTransform,
119 Collider &playerCollider, Transform &wallTransform, Collider &wallCollider,
120 Registry &registry);
121
131 void handleModuleEnemyCollision(Address moduleAddr, Address enemyAddr, Registry &registry);
132
143 void handleModuleProjectileCollision(Address moduleAddr, Address projectileAddr, Registry &registry,
144 std::vector<Address> &entitiesToDestroy);
145
158 void handleProjectileCollision(Registry &registry, std::uint32_t entity1, std::uint32_t entity2,
159 std::vector<Address> &entitiesToDestroy);
160 };
161} // namespace ecs
Component for collision detection and physics interactions.
Definition Collider.hpp:21
System handling collision detection between entities.
void resolveWallCollision(Address playerAddr, Address wallAddr, Transform &playerTransform, Collider &playerCollider, Transform &wallTransform, Collider &wallCollider, Registry &registry)
Resolves collision between player and wall by instantly killing the player.
ComponentMask getComponentMask() const override
Gets the component mask for this system.
void handleProjectileCollision(Registry &registry, std::uint32_t entity1, std::uint32_t entity2, std::vector< Address > &entitiesToDestroy)
Handle projectile collision with other entities.
void handleModuleProjectileCollision(Address moduleAddr, Address projectileAddr, Registry &registry, std::vector< Address > &entitiesToDestroy)
Handle collision between orbital module and projectile.
void handlePickup(Address playerAddr, Address collectibleAddr, Registry &registry, std::vector< Address > &entitiesToDestroy)
Handle collision between player and collectible.
void handleModuleEnemyCollision(Address moduleAddr, Address enemyAddr, Registry &registry)
Handle collision between orbital module and enemy.
bool canCollide(std::uint32_t layer1, std::uint32_t mask1, std::uint32_t layer2, std::uint32_t mask2) const
Checks if two entities can collide based on layers.
void update(Registry &registry, float deltaTime) override
Detects and handles collisions between entities.
~CollisionSystem() override=default
Default destructor.
bool checkAABB(const Transform::Vector2 &pos1, const Collider::Vector2 &size1, const Collider::Vector2 &offset1, const Transform::Vector2 &pos2, const Collider::Vector2 &size2, const Collider::Vector2 &offset2) const
Checks AABB collision between two entities.
CollisionSystem()=default
Default constructor.
Base interface for all ECS systems.
Definition ISystem.hpp:37
Manages entities, their signatures and component type registrations.
Definition Registry.hpp:68
Component representing position, rotation and scale in 2D space.
Definition Transform.hpp:20
Maximum number of distinct component types supported by the Registry.
Definition GameLogic.hpp:26
std::uint32_t Address
Type used to represent an entity address/ID.
std::uint64_t ComponentMask
Type alias for component bitmask.
Definition ISystem.hpp:24
2D vector for size and offset.
Definition Collider.hpp:27
2D vector structure for positions and scales.
Definition Transform.hpp:26