Slippers Engine
 
Loading...
Searching...
No Matches
Collidable Class Reference

Responsible for Collision functions. More...

#include <Collidable.h>

Collaboration diagram for Collidable:
Collaboration graph

Public Types

enum class  VOLUME_TYPE { BSPHERE , AABB , OBB }
 3 Types of Collision Tests More...
 

Public Member Functions

const CollisionVolume & GetColVolume ()
 Retrieves the Collider Model's Collision Volume.
 

Protected Member Functions

void SubmitRegistration ()
 Called when wanting to check for collisions.
 
void SubmitDeregistration ()
 Called when wanting to stop checking for collisions.
 
void SetColliderModel (Model *mod, VOLUME_TYPE vt)
 Stores an Objects Collision Model for calculating collisions.
 
void UpdateCollisionData (const Matrix &mat)
 Updates Objects Collision Model for proper scaling and positioning.
 
template<typename C>
void SetCollidableGroup ()
 Registers a DemoObject to be part of a Collision Group.
 

Detailed Description

Responsible for Collision functions.

Collisions are reliant on Game Objects having their own Collision Functions to call to.

Example:
SceneDemo.h

#include "Scene.h"
class DemoObjOne;
class DemoObjTwo;
class SceneDemo : public Scene {
public:
SceneDemo() = default;
SceneDemo(const SceneDemo&) = default;
SceneDemo& operator=(const SceneDemo&) = default;
~SceneDemo() = default;
private:
DemoObjOne* objOne;
DemoObjTwo* objTwo;
virtual void Initialize();
virtual void SceneEnd();
};
Responsible for Scene functions.
Definition Scene.h:101
virtual void Initialize()
Function automatically called on scene starting.
Definition Scene.h:264
virtual void SceneEnd()
Function automatically called on scene ending.
Definition Scene.h:270

SceneDemo.cpp

#include "SceneDemo.h"
#include "DemoObjOne.h"
#include "DemoObjTwo.h"
void SceneDemo::Initialize() {
objOne = new DemoObjOne();
objTwo = new DemoObjTwo();
SetCollisionPair<DemoObjOne, DemoObjTwo>();
SetCollisionSelf<DemoObjOne>();
}
void SceneDemo::SceneEnd() {
delete objOne;
delete objTwo;
}

DemoObjOne.h

#include "GameObject.h"
#include "AzulCore.h"
class DemoObjTwo;
class DemoObjOne : public GameObject {
public:
DemoObjOne();
DemoObjOne(const DemoObjOne&) = default;
DemoObjOne& operator=(const DemoObjOne&) = default;
~DemoObjOne();
void Collision(DemoObjOne*);
void Collision(DemoObjTwo*);
private:
GraphicObject_TextureFlat* demoGraphicsObj;
virtual void Update();
};
Responsible for GameObject centralization.
Definition GameObject.h:182
virtual void Update()
Fill this with code that occurs during the Update phase.
Definition Updatable.h:54

DemoObjOne.cpp

#include "DemoObjOne.h"
#include "ModelManager.h"
#include "ShaderManager.h"
#include "TextureManager.h"
#include "SceneManager.h"
#include "Scene.h"
DemoObjOne::DemoObjOne() {
demoGraphicsObj = new GraphicsObject_TextureFlat(ModelManager::GetModel("Demo Model One"), ShaderManager::GetShader(ShaderManager::DefaultShaders::TEXTUREFLAT), TextureManager::GetTexture("Demo Texture One"));
Collidable::SetColliderModel(demoGraphicsObj->getModel(), VOLUME_TYPE::BSPHERE);
}
DemoObjOne::~DemoObjOne(){
delete demoGraphicsObj;
}
void DemoObjOne::Update(){
Collidable::UpdateCollisionData(demoGraphicsObj->getWorld());
}
void DemoObjOne::Collision(DemoObjOne*){
//Do Collision Stuff with other Obj Ones
}
void DemoObjOne::Collision(DemoObjTwo*){
//Do Collision Stuff with Obj Twos
}
void SetColliderModel(Model *mod, VOLUME_TYPE vt)
Stores an Objects Collision Model for calculating collisions.
Definition Collidable.cpp:71
void UpdateCollisionData(const Matrix &mat)
Updates Objects Collision Model for proper scaling and positioning.
Definition Collidable.cpp:89
void SetCollidableGroup()
Registers a DemoObject to be part of a Collision Group.
Definition Collidable.h:293
@ BSPHERE
Definition Collidable.h:193
static Model * GetModel(const MapKey &key)
Load Shader with KEY and AZUL's PREMADEMODELS.
Definition ModelManager.h:98
static ShaderObject * GetShader(const MapKey &key)
Returns shader object pointer with given KEY.
Definition ShaderManager.h:71
@ TEXTUREFLAT
Definition ShaderManager.h:20
static Texture * GetTexture(const MapKey &key)
Returns texture pointer with given KEY.
Definition TextureManager.h:134

DemoObjTwo.h

#include "GameObject.h"
#include "AzulCore.h"
class DemoObjOne;
class DemoObjTwo : public GameObject {
public:
DemoObjTwo();
DemoObjTwo(const DemoObjTwo&) = default;
DemoObjTwo& operator=(const DemoObjTwo&) = default;
~DemoObjTwo();
void Collision(DemoObjOne*);
private:
GraphicObject_TextureFlat* demoGraphicsObj;
virtual void Update();
};

DemoObjTwo.cpp

#include "DemoObjTwo.h"
#include "ModelManager.h"
#include "ShaderManager.h"
#include "TextureManager.h"
#include "SceneManager.h"
#include "Scene.h"
DemoObjTwo::DemoObjTwo() {
demoGraphicsObj = new GraphicsObject_TextureFlat(ModelManager::GetModel("Demo Model Two"), ShaderManager::GetShader(ShaderManager::DefaultShaders::TEXTUREFLAT), TextureManager::GetTexture("Demo Texture Two"));
Collidable::SetColliderModel(demoGraphicsObj->getModel(), VOLUME_TYPE::OBB);
}
DemoObjTwo::~DemoObjTwo(){
delete demoGraphicsObj;
}
void DemoObjTwo::Update(){
Collidable::UpdateCollisionData(demoGraphicsObj->getWorld());
}
void DemoObjOne::Collision(DemoObjOne*){
//Do Collision Stuff with Obj Ones
}
@ OBB
Definition Collidable.h:193

Member Enumeration Documentation

◆ VOLUME_TYPE

enum class Collidable::VOLUME_TYPE
strong

3 Types of Collision Tests

Enumerator
BSPHERE 
AABB 
OBB 

Member Function Documentation

◆ GetColVolume()

const CollisionVolume & Collidable::GetColVolume ( )

Retrieves the Collider Model's Collision Volume.

This will mainly be used when needing to visualize an object's Collision Volume.

Example:

const CollisionVolume & GetColVolume()
Retrieves the Collider Model's Collision Volume.
Definition Collidable.cpp:63
static void ShowCollisionVolume(const CollisionVolume &cv, const Vect &col=DEFAULT_COLOR)
Shows a collision volume of an object using a given color.
Definition Visualizer.cpp:128
static const Vect Red
Definition ColorsCommon.h:132
Returns
const CollisionVolume&

◆ SetCollidableGroup()

template<typename C>
void Collidable::SetCollidableGroup ( )
protected

Registers a DemoObject to be part of a Collision Group.

The have any collision testing, an object must be registered for a Collidable Group.

Example:

Template Parameters
C

◆ SetColliderModel()

void Collidable::SetColliderModel ( Model * mod,
VOLUME_TYPE vt )
protected

Stores an Objects Collision Model for calculating collisions.

This will normally be either the graphics object currently in use, or a low poly version of the same model.

Example:

Collidable::SetColliderModel(demoGraphicsObj->getModel(), VOLUME_TYPE::BSPHERE);
Collidable::SetColliderModel(demoGraphicsObjLowPoly->getModel(), VOLUME_TYPE::OBB);
Parameters
mod

◆ SubmitDeregistration()

void Collidable::SubmitDeregistration ( )
protected

Called when wanting to stop checking for collisions.

Example:

void SubmitDeregistration()
Called when wanting to stop checking for collisions.
Definition Collidable.cpp:55

◆ SubmitRegistration()

void Collidable::SubmitRegistration ( )
protected

Called when wanting to check for collisions.

Example:

void SubmitRegistration()
Called when wanting to check for collisions.
Definition Collidable.cpp:47

◆ UpdateCollisionData()

void Collidable::UpdateCollisionData ( const Matrix & mat)
protected

Updates Objects Collision Model for proper scaling and positioning.

Warning
An object must have SetColliderModel() prior to calling this function

Example:

Collidable::UpdateCollisionData(demoGraphicsObj->getWorld());
Parameters
mat