From 569d6c0b51db7dc7fe66342efd2bbce0e1aaa09e Mon Sep 17 00:00:00 2001 From: Edouard DUPIN Date: Mon, 17 Nov 2014 21:44:45 +0100 Subject: [PATCH] [DEV] update some physic interface --- ege/Environement.cpp | 3 ++- ege/elements/Element.h | 2 +- ege/elements/ElementPhysic.cpp | 25 +++++++++++++++++++++++++ ege/elements/ElementPhysic.h | 8 ++++++++ ege/widget/Scene.cpp | 7 ++++++- 5 files changed, 42 insertions(+), 3 deletions(-) diff --git a/ege/Environement.cpp b/ege/Environement.cpp index d2281b1..a8997c2 100644 --- a/ege/Environement.cpp +++ b/ege/Environement.cpp @@ -236,7 +236,8 @@ void ege::Environement::getOrderedElementForDisplay(std::vectorgetPosition(); - vec3 angleView = (destPosition - _position).normalized(); + vec3 angleView = (destPosition - _position); + angleView.safeNormalize(); float dotResult=angleView.dot(_direction); //EGE_DEBUG("Dot position : " << destPosition << " == > dot=" << dotResult); /* diff --git a/ege/elements/Element.h b/ege/elements/Element.h index e1ceba6..b1a8afb 100644 --- a/ege/elements/Element.h +++ b/ege/elements/Element.h @@ -29,7 +29,7 @@ #define ELEMENT_SCALE (1.0f/8.0f) namespace ege { - class Element { + class Element : public std::enable_shared_from_this { protected: std::shared_ptr m_env; public: diff --git a/ege/elements/ElementPhysic.cpp b/ege/elements/ElementPhysic.cpp index b60f40c..4b5d2d5 100644 --- a/ege/elements/ElementPhysic.cpp +++ b/ege/elements/ElementPhysic.cpp @@ -395,6 +395,31 @@ void ege::ElementPhysic::iaDisable() { m_IA = nullptr; } +void ege::ElementPhysic::setMass(float _value) { + if (m_body == nullptr) { + return; + } + m_body->setMassProps(_value, vec3(0,0,0)); +} +void ege::ElementPhysic::setLinearVelocity(const vec3& _value) { + if (m_body == nullptr) { + return; + } + m_body->setLinearVelocity(vec3(0,0,0)); +} +void ege::ElementPhysic::setTorqueImpulse(const vec3& _value) { + if (m_body == nullptr) { + return; + } + +} + +void ege::ElementPhysic::setAngularVelocity(const vec3& _value) { + if (m_body == nullptr) { + return; + } + m_body->setAngularVelocity(_value); +} diff --git a/ege/elements/ElementPhysic.h b/ege/elements/ElementPhysic.h index 1c83004..b0c6d29 100644 --- a/ege/elements/ElementPhysic.h +++ b/ege/elements/ElementPhysic.h @@ -109,6 +109,14 @@ namespace ege { * @return the mass in kG. */ const float getInvMass(); + + virtual void setMass(float _value); + virtual void setLinearVelocity(const vec3& _value); + virtual void setTorqueImpulse(const vec3& _value); + virtual void setAngularVelocity(const vec3& _value); + + + protected: bool m_elementInPhysicsSystem; public: diff --git a/ege/widget/Scene.cpp b/ege/widget/Scene.cpp index 57e1b3b..c485f7b 100644 --- a/ege/widget/Scene.cpp +++ b/ege/widget/Scene.cpp @@ -30,7 +30,8 @@ #undef __class__ #define __class__ "Scene" -ege::widget::Scene::Scene() { +ege::widget::Scene::Scene() : + m_cameraName("default") { addObjectType("ege::widget::Scene"); } @@ -81,6 +82,10 @@ void ege::widget::Scene::onDraw() { // get camera : std::shared_ptr camera = m_env->getCamera(m_cameraName); + if (camera == nullptr) { + EGE_ERROR(" can not get camera named: '" << m_cameraName << "'"); + return; + } //EGE_DEBUG("Draw (start)"); mat4 tmpMatrix; std::shared_ptr world = m_env->getPhysicEngine().getDynamicWorld();