/********************\ | Copyright 2024, | | Ulysse Cura | \********************/ //////////////////////////////////////////////////////// // // // Composant hitbox, contient toutes les données // // necessaires pour gérer les collision efficacement. // // // //////////////////////////////////////////////////////// #ifndef HITBOX_HPP #define HITBOX_HPP #include "ECS.hpp" #include "TransformComponent.hpp" #include "../Vector2D.hpp" #ifdef DEBUG_MODE #include "../Game.hpp" #endif class HitboxComponent : public Component { public: HitboxComponent() = default; HitboxComponent(Vector2D sc, Vector2D pos) : position(pos), scale(sc) {} void init() override { m_transform = &entity->getComponent(); } void update() override { hitboxR.w = static_cast(static_cast(m_transform->dimension.x * m_transform->scale) * scale.x); hitboxR.h = static_cast(static_cast(m_transform->dimension.y * m_transform->scale) * scale.y); hitboxR.x = static_cast(m_transform->position.x + static_cast(m_transform->dimension.x * m_transform->scale - hitboxR.w) * position.x); hitboxR.y = static_cast(m_transform->position.y + static_cast(m_transform->dimension.y * m_transform->scale - hitboxR.h) * position.y); } #ifdef DEBUG_MODE void draw() override { if(hitboxActivated) { SDL_SetRenderDrawColor(Game::renderer, 20, 200, 18, 255); SDL_RenderDrawRect(Game::renderer, &hitboxR); SDL_SetRenderDrawColor(Game::renderer, 20, 20, 18, 255); } } #endif Vector2D position{Vector2D(1.0f, 1.0f)}; // Dans l'entitée (0 -> 1) 0=>tout a gauche de l'entitée, 1=>tout a droite et pareil pour le Y Vector2D scale{Vector2D(1.0f, 1.0f)}; // Par rapport à la taille initiale (0 -> 1) SDL_Rect hitboxR {0, 0, 0, 0}; bool hitboxActivated {true}; private: TransformComponent *m_transform; }; #endif