diff --git a/LastTowerDefense/include/Cylinder.h b/LastTowerDefense/include/Cylinder.h new file mode 100644 index 0000000..cd21711 --- /dev/null +++ b/LastTowerDefense/include/Cylinder.h @@ -0,0 +1,17 @@ +#include "Base/GameObject.h" +#include "Graphic/Model.h" +#include "Physics/RigidBody.h" + +class Cylinder : public GameObject +{ +private: + RigidBody* rigidbody; + Transform transform; + Graphic::Model* model; +public: + Cylinder(); + virtual ~Cylinder(); + void Draw() override; + void Update(unsigned int delta) override; + void OnTriggerEnter(void* ptr) override; +}; \ No newline at end of file diff --git a/LastTowerDefense/include/Game.h b/LastTowerDefense/include/Game.h index 0e937d6..5ff3991 100644 --- a/LastTowerDefense/include/Game.h +++ b/LastTowerDefense/include/Game.h @@ -14,6 +14,7 @@ #include "Floor.h" #include "Level.h" #include "Wall.h" +#include "Cylinder.h" #include "Physics/Physics.h" #include "Graphic/GUI.h" #include "Graphic/GUILine.h" @@ -42,6 +43,7 @@ class Game : public GameState Floor* floor; Cube* cube; Sphere* sphere; + Cylinder* cylinder; DirectionalLight directionalLight; PointLight point1; diff --git a/LastTowerDefense/src/Cylinder.cpp b/LastTowerDefense/src/Cylinder.cpp new file mode 100644 index 0000000..66e651e --- /dev/null +++ b/LastTowerDefense/src/Cylinder.cpp @@ -0,0 +1,35 @@ +include "Cylinder.h" +#include "Base/ResourceManager.h" + +Cylinder::Cylinder() +{ + id = 103; + model = (Graphic::Model*)ResourceManager::GetPtr()->GetElement("cylinder"); + transform.SetTranslation(2.0f, 200.0f, 2.0f); + transform.SetScale(3.0f, 3.8f, 3.0f); + rigidbody = new RigidBody(4, transform.GetTranslation(), 3.0f, 2.5f, this); +} + +Cylinder::~Cylinder() +{ + //TODO +} + +void Cylinder::Draw() +{ + model->SetTransform(transform); + model->Draw(); +} + +void Cylinder::Update(unsigned int delta) +{ + transform.SetTranslation(rigidbody->GetObjectPosition()); + transform.SetRotation(rigidbody->GetObjectRotation()); +} + +void Cylinder::OnTriggerEnter(void* ptr) +{ + auto obj0 = static_cast(ptr); + + std::cout << "hit cylinder"; +} \ No newline at end of file diff --git a/LastTowerDefense/src/Game.cpp b/LastTowerDefense/src/Game.cpp index 8410f51..ffdde7a 100644 --- a/LastTowerDefense/src/Game.cpp +++ b/LastTowerDefense/src/Game.cpp @@ -32,6 +32,7 @@ void Game::InitResources() resourceManager->Add(ResourceType::Model3d, "wall"); resourceManager->Add(ResourceType::Model3d, "cube"); resourceManager->Add(ResourceType::Model3d, "sphere"); + resourceManager->Add(ResourceType::Model3d, "cylinder"); resourceManager->Add(ResourceType::Texture, "pina_normal"); resourceManager->Add(ResourceType::Texture, "pina"); @@ -65,6 +66,7 @@ void Game::Init() floor = new Floor(); cube = new Cube(); sphere = new Sphere(); + cylinder = new Cylinder(); LoadShaders(); @@ -112,6 +114,7 @@ void Game::Draw() floor->Draw(); cube->Draw(); sphere->Draw(); + cylinder->Draw(); } void Game::DrawMap() { @@ -144,6 +147,7 @@ void Game::Update(unsigned int delta) cube->Update(delta); sphere->Update(delta); + cylinder->Update(delta); physics->Update(delta); } diff --git a/PlayEngine/Physics/RigidBody.cpp b/PlayEngine/Physics/RigidBody.cpp index e805fef..7e6116a 100644 --- a/PlayEngine/Physics/RigidBody.cpp +++ b/PlayEngine/Physics/RigidBody.cpp @@ -20,7 +20,18 @@ RigidBody::RigidBody(const float& mass, const glm::vec3& pos, const float radio, startTransform.setOrigin(btVector3(pos.x, pos.y, pos.z)); rigidBody = Physics::GetPtr()->createRigidBody(mass, startTransform, colShape); rigidBody->setRollingFriction(0); - rigidBody->setUserPointer(this); + rigidBody->setUserPointer(obj); +} + +RigidBody::RigidBody(const float& mass, const glm::vec3& pos, const float height, const float radio1, const float radio2, GameObject* obj) +{ + btCylinderShape* colShape = new btCylinderShape(radio1, height, radio2 );//TODO arreglar tamanio de la caja de colision + btTransform startTransform; + startTransform.setIdentity(); + startTransform.setOrigin(btVector3(pos.x, pos.y, pos.z)); + rigidBody = Physics::GetPtr()->createRigidBody(mass, startTransform, colShape); + rigidBody->setRollingFriction(0); + rigidBody->setUserPointer(obj); } glm::vec3 RigidBody::GetObjectPosition() diff --git a/PlayEngine/include/Physics/RigidBody.h b/PlayEngine/include/Physics/RigidBody.h index c5f95dd..7ca2458 100644 --- a/PlayEngine/include/Physics/RigidBody.h +++ b/PlayEngine/include/Physics/RigidBody.h @@ -10,6 +10,7 @@ class PLAYENGINE RigidBody public: RigidBody(const float &mass,const glm::vec3 &pos, const glm::vec3 &box, GameObject* obj); RigidBody(const float& mass, const glm::vec3& pos, const float radio, GameObject* obj); + RigidBody(const float& mass, const glm::vec3& pos, const float radio1, const float height, const float radio2, GameObject* obj); glm::vec3 GetObjectPosition(); glm::vec3 GetObjectRotation();