A WIP 3D game engine in C++ using OpenGL
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

#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();
};
};