sdl2dll
Loading...
Searching...
No Matches
sdl_hitbox.h
1/*
2 * Clases para manejar hitboxes en SDL2
3 */
4#ifndef _SDL_HITBOX
5#define _SDL_HITBOX
6
7#define EXPORT __declspec(dllexport)
8
9#include <SDL.h>
10#include <vector>
11#include "sdl_point.h"
12#include "sdl_rect.h"
13#include "sdl_circle.h"
14
15namespace sdl {
16
21 rectangle=0,
22 circle
23};
24
31class Shape {
32protected:
34 union {
37 };
38public:
44 EXPORT Shape() : type(rectangle), re({0,0,0,0}) {}
50 EXPORT Shape(FCircle c) : type(circle), ci(c) {}
56 EXPORT Shape(FRect r) : type(rectangle), re(r) {}
65 EXPORT Shape Move(float alfa, FPoint &displacement, FPoint &escale);
71 EXPORT FCircle &Ci() { return ci; }
77 EXPORT FRect &Re() { return re; }
80 friend class Hitbox;
81};
82
89class Hitbox {
90protected:
91 std::vector<Shape> hitbox;
92 std::vector<Shape> hitboxT;
108 bool CollisionRectRect(FRect &r1, FRect &r2);
116 bool CollisionRectCircle(FRect &r1, FCircle &c1);
117
118public:
122 EXPORT Hitbox() {}
128 EXPORT void ResizeT() { hitboxT.resize(hitbox.size()); }
134 EXPORT void InsertShape(const Shape &f) { hitbox.push_back(f); }
141 EXPORT bool Collision(Hitbox& h);
149 EXPORT void Move(float alfa, FPoint &displacement, FPoint &escale);
153 EXPORT void Reset() {
154 hitbox.clear();
155 }
162 EXPORT Shape GetShape(int i) { return hitboxT[i]; }
163};
164
165} // namespace sdl
166
167#endif // _SDL_HITBOX
Encapsula una circunferencia con coordenadas en punto flotante.
Definition sdl_circle.h:73
Clase para manipular puntos con coordenadas float.
Definition sdl_point.h:70
Clase para manipular rectángulos con coordenadas en coma flotante.
Definition sdl_rect.h:87
Clase para encapsular hitboxes.
Definition sdl_hitbox.h:89
bool CollisionCircleCircle(FCircle &c1, FCircle &c2)
Método privado para averiguar si hay colisión entre dos círculos.
Definition sdl_hitbox.cpp:16
EXPORT void InsertShape(const Shape &f)
Añade una forma al hitbox.
Definition sdl_hitbox.h:134
EXPORT void Reset()
Elimina las formas que componen la hitbox.
Definition sdl_hitbox.h:153
EXPORT void Move(float alfa, FPoint &displacement, FPoint &escale)
Mueve la hitbox rotando en ángulo dado y a la distancia especificada, aplicando una escala.
Definition sdl_hitbox.cpp:55
std::vector< Shape > hitbox
Definition sdl_hitbox.h:91
EXPORT void ResizeT()
Redimensiona el vector de formas trasladadas (privado?)
Definition sdl_hitbox.h:128
EXPORT Shape GetShape(int i)
Obtiene la forma que define el hitbox con el índice dado.
Definition sdl_hitbox.h:162
bool CollisionRectCircle(FRect &r1, FCircle &c1)
Método privado para averiguar si hay colisión entre un círculo y un rectángulo.
Definition sdl_hitbox.cpp:28
EXPORT bool Collision(Hitbox &h)
Averigua si la hitbox actual colisiona con otra.
Definition sdl_hitbox.cpp:37
std::vector< Shape > hitboxT
Definition sdl_hitbox.h:92
EXPORT Hitbox()
Constructor.
Definition sdl_hitbox.h:122
bool CollisionRectRect(FRect &r1, FRect &r2)
Método privado para averiguar si hay colisión entre dos rectángulos.
Definition sdl_hitbox.cpp:24
Clase para encapsular formas.
Definition sdl_hitbox.h:31
FRect re
Definition sdl_hitbox.h:35
EXPORT Shape(FRect r)
Constructor para forma rectangular.
Definition sdl_hitbox.h:56
EXPORT FRect & Re()
Obtiene el objeto rectángulo asociado a la forma.
Definition sdl_hitbox.h:77
EXPORT Shape Move(float alfa, FPoint &displacement, FPoint &escale)
Mueve la forma rotando en ángulo dado y a la distancia especificada, aplicando una escala.
Definition sdl_hitbox.cpp:4
shapeType type
Definition sdl_hitbox.h:33
EXPORT Shape(FCircle c)
Constructor para forma circular.
Definition sdl_hitbox.h:50
FCircle ci
Definition sdl_hitbox.h:36
EXPORT Shape()
Constructor por defecto.
Definition sdl_hitbox.h:44
EXPORT FCircle & Ci()
Obtiene el objeto circunferencia asociada a la forma.
Definition sdl_hitbox.h:71
Espacio con nombre para el wrapper de SDL2.
Definition sdl_music.h:14
shapeType
Enumerado para tipos de formas.
Definition sdl_hitbox.h:20