[FEATURE] collisions!!!!!!!!!!! YAY
This commit is contained in:
@@ -11,7 +11,7 @@ namespace entities
|
||||
|
||||
class Entity
|
||||
{
|
||||
private:
|
||||
protected:
|
||||
models::TexturedModel model;
|
||||
|
||||
glm::vec3 position;
|
||||
|
||||
@@ -7,11 +7,7 @@ namespace entities
|
||||
: Entity(model, position, rotation, scale),
|
||||
bounding_box(bounding_box)
|
||||
{
|
||||
const glm::vec3& center = bounding_box.center_pos;
|
||||
const glm::vec3& size = bounding_box.size;
|
||||
|
||||
min_xyz = glm::vec3(center.x - size.x, center.y - size.y, center.z - size.z);
|
||||
max_xyz = glm::vec3(center.x + size.x, center.y + size.y, center.z + size.z);
|
||||
MoveCollisionBox();
|
||||
}
|
||||
|
||||
void CollisionEntity::OnCollide(const collision::Collision& collision)
|
||||
@@ -35,4 +31,14 @@ namespace entities
|
||||
(min_xyz.y <= e.max_xyz.y && max_xyz.y >= e.min_xyz.y) &&
|
||||
(min_xyz.z <= e.max_xyz.z && max_xyz.z >= e.min_xyz.z);
|
||||
}
|
||||
|
||||
void CollisionEntity::MoveCollisionBox()
|
||||
{
|
||||
bounding_box.center_pos = position;
|
||||
|
||||
const glm::vec3 size = bounding_box.size;
|
||||
|
||||
min_xyz = bounding_box.center_pos;
|
||||
max_xyz = glm::vec3(min_xyz.x + size.x, min_xyz.y + size.y, min_xyz.z + size.z);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ namespace entities
|
||||
*/
|
||||
class CollisionEntity : public Entity
|
||||
{
|
||||
private:
|
||||
public:
|
||||
collision::Box bounding_box;
|
||||
|
||||
glm::vec3 min_xyz;
|
||||
@@ -54,5 +54,12 @@ namespace entities
|
||||
*/
|
||||
void SetCollisionBehaviour(void (*function)(const collision::Collision& collision))
|
||||
{ if (function != nullptr) { on_collide = function; } }
|
||||
|
||||
protected:
|
||||
|
||||
/*
|
||||
* @brief: This method moves the collision to the center of the entity
|
||||
*/
|
||||
void MoveCollisionBox();
|
||||
};
|
||||
}
|
||||
43
src/entities/player.h
Normal file
43
src/entities/player.h
Normal file
@@ -0,0 +1,43 @@
|
||||
#pragma once
|
||||
|
||||
#include <iostream>
|
||||
#include "collision_entity.h"
|
||||
|
||||
namespace entities
|
||||
{
|
||||
class Player : public CollisionEntity
|
||||
{
|
||||
public:
|
||||
Player(const models::TexturedModel& model, const glm::vec3& position, const glm::vec3& rotation, float scale,
|
||||
const collision::Box& bounding_box)
|
||||
: CollisionEntity(model, position, rotation, scale, bounding_box)
|
||||
{}
|
||||
|
||||
void Update()
|
||||
{
|
||||
position.x += 0.11f;
|
||||
MoveCollisionBox();
|
||||
}
|
||||
|
||||
void OnCollide(const ::collision::Collision& collision) override
|
||||
{
|
||||
std::cout << "Player got HIT" << std::endl;
|
||||
}
|
||||
};
|
||||
|
||||
class Player2 : public CollisionEntity
|
||||
{
|
||||
public:
|
||||
Player2(const models::TexturedModel& model, const glm::vec3& position, const glm::vec3& rotation, float scale,
|
||||
const collision::Box& bounding_box)
|
||||
: CollisionEntity(model, position, rotation, scale, bounding_box)
|
||||
{}
|
||||
|
||||
void Update() { position.x -= 0.01f; MoveCollisionBox(); }
|
||||
|
||||
void OnCollide(const ::collision::Collision& collision) override
|
||||
{
|
||||
std::cout << "Player2 got HIT" << std::endl;
|
||||
}
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user