You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
117 lines
2.2 KiB
117 lines
2.2 KiB
#pragma once |
|
|
|
#include <glm/common.hpp> |
|
#include <variant> |
|
#include <optional> |
|
#include <iostream> |
|
#include <glm/glm.hpp> |
|
#include <variant> |
|
|
|
#include "jsonloader.h" |
|
|
|
namespace collision { |
|
|
|
class CollisionInfo { |
|
public: |
|
bool intersecting; |
|
glm::vec3 restore; |
|
}; |
|
|
|
class PlaneCollider { |
|
public: |
|
static constexpr char * name = "Plane"; |
|
glm::vec3 orientation; |
|
PlaneCollider () {}; |
|
PlaneCollider(glm::vec3 orientation) { |
|
this->orientation = orientation; |
|
} |
|
}; |
|
|
|
class FPlaneCollider { |
|
public: |
|
static constexpr char * name = "FinitePlane"; |
|
glm::vec3 orientation; |
|
glm::vec2 extents; |
|
FPlaneCollider() {} |
|
FPlaneCollider (glm::vec3 orientation, glm::vec2 extents) { |
|
this->orientation = orientation; |
|
this->extents = extents; |
|
} |
|
|
|
}; |
|
|
|
class AABBCollider { |
|
public: |
|
static constexpr char * name = "AABB"; |
|
glm::vec3 size; |
|
AABBCollider(){} |
|
AABBCollider(glm::vec3 size) { |
|
this->size = size; |
|
} |
|
|
|
static std::optional<AABBCollider> from_json(json j); |
|
|
|
}; |
|
|
|
class SphereCollider { |
|
public: |
|
static constexpr char * name = "Sphere"; |
|
double radius; |
|
SphereCollider(){} |
|
SphereCollider(double radius) { |
|
this->radius = radius; |
|
} |
|
|
|
static std::optional<SphereCollider> from_json(json j); |
|
|
|
}; |
|
|
|
|
|
|
|
class Collider { |
|
private: |
|
enum Type { |
|
NONE, |
|
PLANE, |
|
FPLANE, |
|
AABB, |
|
SPHERE, |
|
}; |
|
|
|
static constexpr char * names[] = { |
|
"NONE", |
|
"Plane", |
|
"Finite Plane", |
|
"AABB", |
|
"Sphere" |
|
}; |
|
|
|
Type type = NONE; |
|
union Colliders { |
|
PlaneCollider plane; |
|
FPlaneCollider fplane; |
|
AABBCollider aabb; |
|
SphereCollider sphere; |
|
Colliders() {} |
|
} inner; |
|
public: |
|
Collider (PlaneCollider p); |
|
Collider (SphereCollider s); |
|
Collider (AABBCollider a); |
|
Collider (FPlaneCollider f); |
|
|
|
static std::optional<Collider> from_json(json j); |
|
|
|
static CollisionInfo test(PlaneCollider a, SphereCollider b, glm::vec3 pa, glm::vec3 pb); |
|
static CollisionInfo test(SphereCollider a, PlaneCollider b, glm::vec3 pa, glm::vec3 pb); |
|
static CollisionInfo test(AABBCollider a, PlaneCollider b, glm::vec3 pa, glm::vec3 pb); |
|
static CollisionInfo test(PlaneCollider a, AABBCollider b, glm::vec3 pa, glm::vec3 pb); |
|
static CollisionInfo test(AABBCollider a, AABBCollider b, glm::vec3 pa, glm::vec3 pb); |
|
static CollisionInfo test(SphereCollider a, SphereCollider b, glm::vec3 pa, glm::vec3 pb); |
|
|
|
std::string get_name(); |
|
|
|
}; |
|
}; |
|
|
|
|
|
|