67 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
| /********************\
 | |
| |  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<float> sc, Vector2D<float> pos) : position(pos), scale(sc)
 | |
|     {}
 | |
| 
 | |
|     void init() override
 | |
|     {
 | |
|         m_transform = &entity->getComponent<TransformComponent>();
 | |
|     }
 | |
| 
 | |
|     void update() override
 | |
|     {
 | |
|         hitboxR.w = static_cast<int>(static_cast<float>(m_transform->dimension.x * m_transform->scale) * scale.x);
 | |
|         hitboxR.h = static_cast<int>(static_cast<float>(m_transform->dimension.y * m_transform->scale) * scale.y);
 | |
|         hitboxR.x = static_cast<int>(m_transform->position.x + static_cast<float>(m_transform->dimension.x * m_transform->scale - hitboxR.w) * position.x);
 | |
|         hitboxR.y = static_cast<int>(m_transform->position.y + static_cast<float>(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<float> position{Vector2D<float>(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<float> scale{Vector2D<float>(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
 |