diff --git a/ege/camera/ControlBase.cpp b/ege/camera/ControlBase.cpp new file mode 100644 index 0000000..9728775 --- /dev/null +++ b/ege/camera/ControlBase.cpp @@ -0,0 +1,186 @@ +/** @file + * @author Edouard DUPIN + * @copyright 2013, Edouard DUPIN, all right reserved + * @license MPL v2.0 (see license file) + */ + + +#include +#include +#include +#include + + +ege::camera::ControlBase::ControlBase() : + m_destinationCameraOffset(0,0,0), + m_angleTetha(0.0f), + m_anglePsy(0.0f), + m_distance(1.0f) { + +} + +void ege::camera::ControlBase::setCamera(const ememory::SharedPtr& _camera) { + m_camera.reset(); + m_PCH.disconnect(); + if (_camera == nullptr) { + return; + } + m_camera = _camera; + m_camera->setTarget(vec3(0,0,0)); + m_camera->setEye(vec3(100*std::sin(m_angleTetha),80*std::cos(m_anglePsy),100*std::cos(m_angleTetha))*m_distance); + m_PCH = ewol::Object::getObjectManager().periodicCall.connect(this, &ege::camera::ControlBase::periodicCall); +} + + + +bool ege::camera::ControlBase::onEventEntry(const ewol::event::Entry& _event) { + if (_event.getType() == gale::key::keyboard::left) { + if (_event.getStatus() == gale::key::status::down) { + m_destinationCameraOffset += vec3(1,0,0); + } else if (_event.getStatus() == gale::key::status::up) { + m_destinationCameraOffset -= vec3(1,0,0); + } + return true; + } + if (_event.getType() == gale::key::keyboard::right) { + if (_event.getStatus() == gale::key::status::down) { + m_destinationCameraOffset -= vec3(1,0,0); + } else if (_event.getStatus() == gale::key::status::up) { + m_destinationCameraOffset += vec3(1,0,0); + } + return true; + } + if (_event.getType() == gale::key::keyboard::up) { + if (_event.getStatus() == gale::key::status::down) { + m_destinationCameraOffset += vec3(0,0,1); + } else if (_event.getStatus() == gale::key::status::up) { + m_destinationCameraOffset -= vec3(0,0,1); + } + return true; + } + if (_event.getType() == gale::key::keyboard::down) { + if (_event.getStatus() == gale::key::status::down) { + m_destinationCameraOffset -= vec3(0,0,1); + } else if (_event.getStatus() == gale::key::status::up) { + m_destinationCameraOffset += vec3(0,0,1); + } + return true; + } + if (_event.getType() == gale::key::keyboard::pageUp) { + if (_event.getStatus() == gale::key::status::down) { + m_destinationCameraOffset += vec3(0,1,0); + } else if (_event.getStatus() == gale::key::status::up) { + m_destinationCameraOffset -= vec3(0,1,0); + } + return true; + } + if (_event.getType() == gale::key::keyboard::pageDown) { + if (_event.getStatus() == gale::key::status::down) { + m_destinationCameraOffset -= vec3(0,1,0); + } else if (_event.getStatus() == gale::key::status::up) { + m_destinationCameraOffset += vec3(0,1,0); + } + return true; + } + if (_event.getType() == gale::key::keyboard::start) { + if (_event.getStatus() == gale::key::status::down) { + m_camera->setAngle(m_camera->getAngle() + 0.01f); + } + return true; + } + if (_event.getType() == gale::key::keyboard::end) { + if (_event.getStatus() == gale::key::status::down) { + m_camera->setAngle(m_camera->getAngle() - 0.01f); + } + return true; + } + if (_event.getType() == gale::key::keyboard::insert) { + if (_event.getStatus() == gale::key::status::down) { + m_camera->setXAngleView(m_camera->getXAngleView() + 0.01f); + } + return true; + } + if ( _event.getType() == gale::key::keyboard::character + && _event.getChar() == u32char::Suppress) { + if (_event.getStatus() == gale::key::status::down) { + m_camera->setXAngleView(m_camera->getXAngleView() - 0.01f); + } + return true; + } + return false; +} + +bool ege::camera::ControlBase::onEventInput(const ewol::event::Input& _event, const vec2& _relativePosition) { + if (m_camera == nullptr) { + return false; + } + if (_event.getId() == 4) { + // scrool button ==> zoom in + m_distance += 0.01f; + m_camera->setEye(vec3(100*std::sin(m_angleTetha),80*std::cos(m_anglePsy),100*std::cos(m_angleTetha))*m_distance); + return true; + } else if (_event.getId() == 5) { + // scrool button ==> zoom OUT + m_distance -= 0.01f; + if (m_distance <= 0.05f) { + m_distance = 0.05f; + } + m_camera->setEye(vec3(100*std::sin(m_angleTetha),80*std::cos(m_anglePsy),100*std::cos(m_angleTetha))*m_distance); + return true; + } else if (_event.getId() == 3) { + // Middle button ==> move around the target position + if (_event.getStatus() == gale::key::status::down) { + m_oldScreenPos = _relativePosition; + } else if (_event.getStatus() == gale::key::status::move) { + vec2 pos = _relativePosition; + m_angleTetha += (m_oldScreenPos.x()-pos.x())*0.02f; + m_anglePsy += (m_oldScreenPos.y()-pos.y())*0.01f; + m_camera->setEye(m_camera->getTarget() + vec3(100*std::sin(m_angleTetha),80*std::cos(m_anglePsy),100*std::cos(m_angleTetha))*m_distance); + m_oldScreenPos = _relativePosition; + } + return true; + } else if (_event.getId() == 2) { + // Middle button ==> move the camera view axis + if (_event.getStatus() == gale::key::status::down) { + m_oldScreenPos = _relativePosition; + } else if (_event.getStatus() == gale::key::status::move) { + vec2 pos = _relativePosition*0.2; + pos -= m_oldScreenPos*0.2; + float cameraAngle = m_camera->getTetha(); + vec3 newPos = vec3(std::sin(cameraAngle)*pos.x() + std::cos(cameraAngle)*pos.y(), + std::cos(cameraAngle)*pos.x() + std::sin(cameraAngle)*pos.y(), + 0); + EGE_ERROR("apply offset = " << newPos << " from pos=" << pos << " angle=" << cameraAngle); + newPos += m_camera->getTarget(); + newPos.setMin(vec3(200,200,200)); + newPos.setMax(vec3(-200,-200,-200)); + m_camera->setTarget(newPos); + m_oldScreenPos = _relativePosition; + } + return true; + } + return false; +} + +void ege::camera::ControlBase::periodicCall(const ewol::event::Time& _event) { + if (m_camera == nullptr) { + return; + } + if ( m_destinationCameraOffset.x() < 0.7f + && m_destinationCameraOffset.x() > -0.7f) { + m_destinationCameraOffset.setX(0.0f); + } + if ( m_destinationCameraOffset.y() < 0.7f + && m_destinationCameraOffset.y() > -0.7f) { + m_destinationCameraOffset.setY(0.0f); + } + if ( m_destinationCameraOffset.z() < 0.7f + && m_destinationCameraOffset.z() > -0.7f) { + m_destinationCameraOffset.setZ(0.0f); + } + float delta = _event.getDeltaCall(); + vec3 tmp = m_destinationCameraOffset * delta * 30.0f; + m_camera->setTarget(m_camera->getTarget() + tmp); + m_camera->setEye(m_camera->getEye() + tmp); +} + diff --git a/ege/camera/ControlBase.hpp b/ege/camera/ControlBase.hpp new file mode 100644 index 0000000..2340684 --- /dev/null +++ b/ege/camera/ControlBase.hpp @@ -0,0 +1,46 @@ +/** @file + * @author Edouard DUPIN + * @copyright 2013, Edouard DUPIN, all right reserved + * @license MPL v2.0 (see license file) + */ +#pragma once + +#include + +#include +#include +#include + +namespace ege { + namespace camera { + /** + * The control position of the camera is principali a basic camera control to prototype an idea ... + */ + class ControlBase { + protected: + vec3 m_destinationCameraOffset; + float m_angleTetha; + float m_anglePsy; + float m_distance; + vec2 m_oldScreenPos; + esignal::Connection m_PCH; //!< Periodic Call Handle to remove it when needed + public: + /** + * @brief Constructor. + */ + ControlBase(); + private: + ememory::SharedPtr m_camera; + public: + void setCamera(const ememory::SharedPtr& _camera); + bool onEventEntry(const ewol::event::Entry& _event); + bool onEventInput(const ewol::event::Input& _event, const vec2& _relativePosition); + /** + * @brief Periodic call to update grapgic display + * @param[in] _event Time generic event + */ + void periodicCall(const ewol::event::Time& _event); + }; + } +} + diff --git a/ege/widget/Scene.cpp b/ege/widget/Scene.cpp index c318326..70ee374 100644 --- a/ege/widget/Scene.cpp +++ b/ege/widget/Scene.cpp @@ -51,7 +51,13 @@ ege::widget::Scene::~Scene() { void ege::widget::Scene::onRegenerateDisplay() { if (needRedraw() == true) { - + // Update the curent camera with the aspect ratio + if (m_env != nullptr) { + ememory::SharedPtr camera = m_env->getCamera(m_cameraName); + if (camera != nullptr) { + camera->setSceenSize(getSize()); + } + } } } diff --git a/lutin_ege.py b/lutin_ege.py index 38021ca..82934ec 100644 --- a/lutin_ege.py +++ b/lutin_ege.py @@ -25,6 +25,7 @@ def get_version(): return "version.txt" def configure(target, my_module): + my_module.add_extra_flags() my_module.add_src_file([ 'ege/debug.cpp', 'ege/Engine.cpp', @@ -33,6 +34,7 @@ def configure(target, my_module): 'ege/camera/Camera.cpp', 'ege/camera/View.cpp', 'ege/camera/FPS.cpp', + 'ege/camera/ControlBase.cpp', 'ege/position/Component.cpp', 'ege/physics/Component.cpp', 'ege/physics/Engine.cpp', @@ -87,6 +89,7 @@ def configure(target, my_module): 'ege/camera/Camera.hpp', 'ege/camera/View.hpp', 'ege/camera/FPS.hpp', + 'ege/camera/ControlBase.hpp', 'ege/position/Component.hpp', 'ege/physics/Engine.hpp', 'ege/physics/Component.hpp', diff --git a/sample/CameraPosition/appl/Windows.cpp b/sample/CameraPosition/appl/Windows.cpp index 9726250..eca4cee 100644 --- a/sample/CameraPosition/appl/Windows.cpp +++ b/sample/CameraPosition/appl/Windows.cpp @@ -14,8 +14,15 @@ #include #include #include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include appl::Windows::Windows() { addObjectType("appl::Windows"); @@ -27,7 +34,7 @@ static ememory::SharedPtr createViewBoxStar() { ememory::SharedPtr out = ege::resource::Mesh::create("viewBoxStar", "DATA:texturedNoMaterial.prog"); if (out != nullptr) { ememory::SharedPtr material = ememory::makeShared(); - // set the element material properties : + // set the entity material properties : material->setAmbientFactor(vec4(1,1,1,1)); material->setDiffuseFactor(vec4(0,0,0,1)); material->setSpecularFactor(vec4(0,0,0,1)); @@ -69,7 +76,7 @@ void appl::Windows::init() { m_env = ege::Environement::create(); // Create basic Camera - m_camera = ememory::makeShared(vec3(30,30,-100), vec3(0,0,0)); + m_camera = ememory::makeShared(vec3(30,-100,30), vec3(0,0,0)); m_env->addCamera("basic", m_camera); ememory::SharedPtr tmpWidget = ege::widget::Scene::create(); @@ -83,14 +90,33 @@ void appl::Windows::init() { setSubWidget(tmpWidget); } ememory::SharedPtr myMesh; - // Create an external box : + // Create an external box: (no physics) myMesh = createViewBoxStar(); if (myMesh != nullptr) { - m_env->addStaticMeshToDraw(myMesh); + ememory::SharedPtr entity = ememory::makeShared(m_env); + // 1st Position component: + etk::Transform3D transform(vec3(0,0,0), etk::Quaternion::identity()); + ememory::SharedPtr componentPosition = ememory::makeShared(transform); + entity->addComponent(componentPosition); + // 2nd something to diplay: + ememory::SharedPtr componentRender = ememory::makeShared(myMesh); + entity->addComponent(componentRender); + // add it .. + m_env->addEntity(entity); } + // create basic gird: (no physics) myMesh = ege::resource::Mesh::createGrid(10, vec3(0,0,0), 5); if (myMesh != nullptr) { - m_env->addStaticMeshToDraw(myMesh); + ememory::SharedPtr entity = ememory::makeShared(m_env); + // 1st Position component: + etk::Transform3D transform(vec3(0,0,0), etk::Quaternion::identity()); + ememory::SharedPtr componentPosition = ememory::makeShared(transform); + entity->addComponent(componentPosition); + // 2nd something to diplay: + ememory::SharedPtr componentRender = ememory::makeShared(myMesh); + entity->addComponent(componentRender); + // add it .. + m_env->addEntity(entity); } m_env->propertyStatus.set(ege::gameStart); } @@ -101,7 +127,7 @@ void appl::Windows::onCallbackPeriodicUpdateCamera(const ewol::event::Time& _eve offset += 0.01; static float offset2 = 0; offset2 += 0.003; - m_camera->setEye(vec3(100*std::sin(offset),100*std::cos(offset),40*std::cos(offset2))); + m_camera->setEye(vec3(100*std::sin(offset),40*std::cos(offset2),100*std::cos(offset))); } diff --git a/sample/CameraPosition/appl/Windows.hpp b/sample/CameraPosition/appl/Windows.hpp index 3a235ca..09c422c 100644 --- a/sample/CameraPosition/appl/Windows.hpp +++ b/sample/CameraPosition/appl/Windows.hpp @@ -18,7 +18,7 @@ namespace appl { ememory::SharedPtr m_camera; protected: Windows(); - void init(); + void init() override; public: DECLARE_FACTORY(Windows); virtual ~Windows() { }; diff --git a/sample/CameraPosition/lutin_ege-sample-camera-position.py b/sample/CameraPosition/lutin_ege-sample-camera-position.py index 00fd072..904ff90 100644 --- a/sample/CameraPosition/lutin_ege-sample-camera-position.py +++ b/sample/CameraPosition/lutin_ege-sample-camera-position.py @@ -31,6 +31,7 @@ def get_version(): return [0,1] def configure(target, my_module): + my_module.add_extra_flags() my_module.add_src_file([ 'appl/debug.cpp', diff --git a/sample/Collision/appl/Windows.cpp b/sample/Collision/appl/Windows.cpp index ee93acb..ad6d1da 100644 --- a/sample/Collision/appl/Windows.cpp +++ b/sample/Collision/appl/Windows.cpp @@ -38,7 +38,7 @@ static ememory::SharedPtr createViewBoxStar() { return out; } ememory::SharedPtr material = ememory::makeShared(); - // set the element material properties : + // set the entity material properties : material->setAmbientFactor(vec4(1,1,1,1)); material->setDiffuseFactor(vec4(0,0,0,1)); material->setSpecularFactor(vec4(0,0,0,1)); @@ -81,9 +81,9 @@ void appl::Windows::init() { m_env->getEngine("physics")->properties.set("debug-AABB", "true"); m_env->getEngine("physics")->properties.set("debug-shape", "true"); // Create basic Camera - m_camera = ememory::makeShared(vec3(30,30,-100), vec3(0,0,0)); - m_camera->setEye(vec3(100*std::sin(m_angleTetha),100*std::cos(m_angleTetha),40*std::cos(m_anglePsy))); + m_camera = ememory::makeShared(); m_env->addCamera("basic", m_camera); + m_cameraControler.setCamera(m_camera); ememory::SharedPtr tmpWidget = ege::widget::Scene::create(); if (tmpWidget == nullptr) { @@ -100,54 +100,54 @@ void appl::Windows::init() { // Create an external box: (no physics) myMesh = createViewBoxStar(); if (myMesh != nullptr) { - ememory::SharedPtr element = ememory::makeShared(m_env); + ememory::SharedPtr entity = ememory::makeShared(m_env); // 1st Position component: etk::Transform3D transform(vec3(0,0,0), etk::Quaternion::identity()); ememory::SharedPtr componentPosition = ememory::makeShared(transform); - element->addComponent(componentPosition); + entity->addComponent(componentPosition); // 2nd something to diplay: ememory::SharedPtr componentRender = ememory::makeShared(myMesh); - element->addComponent(componentRender); + entity->addComponent(componentRender); // add it .. - m_env->addEntity(element); + m_env->addEntity(entity); } // create basic gird: (no physics) myMesh = ege::resource::Mesh::createGrid(10, vec3(0,0,0), 5); if (myMesh != nullptr) { - ememory::SharedPtr element = ememory::makeShared(m_env); + ememory::SharedPtr entity = ememory::makeShared(m_env); // 1st Position component: etk::Transform3D transform(vec3(0,0,0), etk::Quaternion::identity()); ememory::SharedPtr componentPosition = ememory::makeShared(transform); - element->addComponent(componentPosition); + entity->addComponent(componentPosition); // 2nd something to diplay: ememory::SharedPtr componentRender = ememory::makeShared(myMesh); - element->addComponent(componentRender); + entity->addComponent(componentRender); // add it .. - m_env->addEntity(element); + m_env->addEntity(entity); } // create the 6 border that destroy the object when percuted: // create cubes ... myMesh = ege::resource::Mesh::createCube(vec3(200,0.2,200), "basics", etk::color::green); if (myMesh != nullptr) { - ememory::SharedPtr element = ememory::makeShared(m_env); + ememory::SharedPtr entity = ememory::makeShared(m_env); // add all component: // 1st Position component: etk::Transform3D transform(vec3(0,-200,0), etk::Quaternion::identity()); // 2nd something to diplay: ememory::SharedPtr componentRender = ememory::makeShared(myMesh); - element->addComponent(componentRender); + entity->addComponent(componentRender); // 3rd some physic: ememory::SharedPtr componentPhysics = ememory::makeShared(m_env, transform); ememory::SharedPtr physic = ememory::makeShared(); physic->setSize(vec3(200.01,0.21,200.01)); componentPhysics->addShape(physic); - // The element can not move + // The entity can not move componentPhysics->setType(ege::physics::Component::type::bodyStatic); componentPhysics->generate(); - element->addComponent(componentPhysics); + entity->addComponent(componentPhysics); // add it .. - m_env->addEntity(element); + m_env->addEntity(entity); } @@ -155,13 +155,13 @@ void appl::Windows::init() { // create cubes ... myMesh = ege::resource::Mesh::createCube(vec3(3,0.2,5), "basics", etk::color::green); if (myMesh != nullptr) { - ememory::SharedPtr element = ememory::makeShared(m_env); + ememory::SharedPtr entity = ememory::makeShared(m_env); // add all component: // 1st Position component: etk::Transform3D transform(vec3(0,0,2), etk::Quaternion::identity()); // 2nd something to diplay: ememory::SharedPtr componentRender = ememory::makeShared(myMesh); - element->addComponent(componentRender); + entity->addComponent(componentRender); // 3rd some physic: ememory::SharedPtr componentPhysics = ememory::makeShared(m_env, transform); ememory::SharedPtr physic = ememory::makeShared(); @@ -169,21 +169,21 @@ void appl::Windows::init() { physic->setMass(300000); componentPhysics->addShape(physic); componentPhysics->generate(); - element->addComponent(componentPhysics); + entity->addComponent(componentPhysics); // add it .. - m_env->addEntity(element); + m_env->addEntity(entity); } myMesh = ege::resource::Mesh::createCube(3, "basics", etk::color::orange); if (myMesh != nullptr) { - ememory::SharedPtr element = ememory::makeShared(m_env); + ememory::SharedPtr entity = ememory::makeShared(m_env); // add all component: // 1st Position component: etk::Transform3D transform(vec3(20,-10,10), etk::Quaternion::identity()); //ememory::SharedPtr componentPosition = ememory::makeShared(transform); - //element->addComponent(componentPosition); + //entity->addComponent(componentPosition); // 2nd something to diplay: ememory::SharedPtr componentRender = ememory::makeShared(myMesh); - element->addComponent(componentRender); + entity->addComponent(componentRender); // 3rd some physic: ememory::SharedPtr componentPhysics = ememory::makeShared(m_env, transform); ememory::SharedPtr physic = ememory::makeShared(); @@ -191,21 +191,21 @@ void appl::Windows::init() { physic->setMass(50000); componentPhysics->addShape(physic); componentPhysics->generate(); - element->addComponent(componentPhysics); + entity->addComponent(componentPhysics); // add it .. - m_env->addEntity(element); + m_env->addEntity(entity); } myMesh = ege::resource::Mesh::createSphere(4, "basics", etk::color::blue); if (myMesh != nullptr) { - ememory::SharedPtr element = ememory::makeShared(m_env); + ememory::SharedPtr entity = ememory::makeShared(m_env); // add all component: // 1st Position component: etk::Transform3D transform(vec3(-20,10,10), etk::Quaternion::identity()); //ememory::SharedPtr componentPosition = ememory::makeShared(transform); - //element->addComponent(componentPosition); + //entity->addComponent(componentPosition); // 2nd something to diplay: ememory::SharedPtr componentRender = ememory::makeShared(myMesh); - element->addComponent(componentRender); + entity->addComponent(componentRender); // 3rd some physic: ememory::SharedPtr componentPhysics = ememory::makeShared(m_env, transform); ememory::SharedPtr physic = ememory::makeShared(); @@ -213,21 +213,21 @@ void appl::Windows::init() { physic->setMass(500000); componentPhysics->addShape(physic); componentPhysics->generate(); - element->addComponent(componentPhysics); + entity->addComponent(componentPhysics); // add it .. - m_env->addEntity(element); + m_env->addEntity(entity); } myMesh = ege::resource::Mesh::createCylinder(4, 8, "basics", etk::color::blue); if (myMesh != nullptr) { - ememory::SharedPtr element = ememory::makeShared(m_env); + ememory::SharedPtr entity = ememory::makeShared(m_env); // add all component: // 1st Position component: etk::Transform3D transform(vec3(20,10,10), etk::Quaternion::identity()); //ememory::SharedPtr componentPosition = ememory::makeShared(transform); - //element->addComponent(componentPosition); + //entity->addComponent(componentPosition); // 2nd something to diplay: ememory::SharedPtr componentRender = ememory::makeShared(myMesh); - element->addComponent(componentRender); + entity->addComponent(componentRender); // 3rd some physic: ememory::SharedPtr componentPhysics = ememory::makeShared(m_env, transform); ememory::SharedPtr physic = ememory::makeShared(); @@ -236,21 +236,21 @@ void appl::Windows::init() { physic->setMass(500000); componentPhysics->addShape(physic); componentPhysics->generate(); - element->addComponent(componentPhysics); + entity->addComponent(componentPhysics); // add it .. - m_env->addEntity(element); + m_env->addEntity(entity); } myMesh = ege::resource::Mesh::createCapsule(4, 8, "basics", etk::color::purple); if (myMesh != nullptr) { - ememory::SharedPtr element = ememory::makeShared(m_env); + ememory::SharedPtr entity = ememory::makeShared(m_env); // add all component: // 1st Position component: etk::Transform3D transform(vec3(20,-10,-10), etk::Quaternion::identity()); //ememory::SharedPtr componentPosition = ememory::makeShared(transform); - //element->addComponent(componentPosition); + //entity->addComponent(componentPosition); // 2nd something to diplay: ememory::SharedPtr componentRender = ememory::makeShared(myMesh); - element->addComponent(componentRender); + entity->addComponent(componentRender); // 3rd some physic: ememory::SharedPtr componentPhysics = ememory::makeShared(m_env, transform); ememory::SharedPtr physic = ememory::makeShared(); @@ -259,21 +259,21 @@ void appl::Windows::init() { physic->setMass(500000); componentPhysics->addShape(physic); componentPhysics->generate(); - element->addComponent(componentPhysics); + entity->addComponent(componentPhysics); // add it .. - m_env->addEntity(element); + m_env->addEntity(entity); } myMesh = ege::resource::Mesh::createCone(4, 8, "basics", etk::color::purple); if (myMesh != nullptr) { - ememory::SharedPtr element = ememory::makeShared(m_env); + ememory::SharedPtr entity = ememory::makeShared(m_env); // add all component: // 1st Position component: etk::Transform3D transform(vec3(20, 20,-10), etk::Quaternion::identity()); //ememory::SharedPtr componentPosition = ememory::makeShared(transform); - //element->addComponent(componentPosition); + //entity->addComponent(componentPosition); // 2nd something to diplay: ememory::SharedPtr componentRender = ememory::makeShared(myMesh); - element->addComponent(componentRender); + entity->addComponent(componentRender); // 3rd some physic: ememory::SharedPtr componentPhysics = ememory::makeShared(m_env, transform); ememory::SharedPtr physic = ememory::makeShared(); @@ -282,16 +282,24 @@ void appl::Windows::init() { physic->setMass(500000); componentPhysics->addShape(physic); componentPhysics->generate(); - element->addComponent(componentPhysics); + entity->addComponent(componentPhysics); // add it .. - m_env->addEntity(element); + m_env->addEntity(entity); } m_env->propertyStatus.set(ege::gameStart); } +bool appl::Windows::onEventEntry(const ewol::event::Entry& _event) { + if (m_cameraControler.onEventEntry(_event) == true) { + return true; + } + return false; +} bool appl::Windows::onEventInput(const ewol::event::Input& _event) { - static float ploppp=1; + if (m_cameraControler.onEventInput(_event, relativePosition(_event.getPos())) == true) { + return true; + } if (_event.getId() == 1) { if (_event.getStatus() == gale::key::status::down) { vec2 pos = relativePosition(_event.getPos()); @@ -300,15 +308,15 @@ bool appl::Windows::onEventInput(const ewol::event::Input& _event) { ememory::SharedPtr myMesh; myMesh = ege::resource::Mesh::createCube(1, "basics", etk::color::orange); if (myMesh != nullptr) { - ememory::SharedPtr element = ememory::makeShared(m_env); + ememory::SharedPtr entity = ememory::makeShared(m_env); // add all component: // 1st Position component: etk::Transform3D transform(ray.getOrigin(), etk::Quaternion::identity()); //ememory::SharedPtr componentPosition = ememory::makeShared(transform); - //element->addComponent(componentPosition); + //entity->addComponent(componentPosition); // 2nd something to diplay: ememory::SharedPtr componentRender = ememory::makeShared(myMesh); - element->addComponent(componentRender); + entity->addComponent(componentRender); // 3rd some physic: ememory::SharedPtr componentPhysics = ememory::makeShared(m_env, transform); ememory::SharedPtr physic = ememory::makeShared(); @@ -320,59 +328,14 @@ bool appl::Windows::onEventInput(const ewol::event::Input& _event) { // set has dynamic object (can move) //APPL_CRITICAL("velocity : " << ray.getDirection()*100); componentPhysics->setLinearVelocity(ray.getDirection()*100); - element->addComponent(componentPhysics); + entity->addComponent(componentPhysics); // add it .. - m_env->addEntity(element); + m_env->addEntity(entity); } return true; } - } else if (_event.getId() == 4) { - ploppp += 0.01f; - m_camera->setEye(vec3(100*std::sin(m_angleTetha),100*std::cos(m_angleTetha),80*std::cos(m_anglePsy))*ploppp); - } else if (_event.getId() == 5) { - ploppp -= 0.01f; - if (ploppp == 0) { - ploppp = 1.0f; - } - m_camera->setEye(vec3(100*std::sin(m_angleTetha),100*std::cos(m_angleTetha),80*std::cos(m_anglePsy))*ploppp); - } else if (_event.getId() == 3) { - if (_event.getStatus() == gale::key::status::down) { - m_oldScreenPos = relativePosition(_event.getPos()); - return true; - } else if (_event.getStatus() == gale::key::status::move) { - vec2 pos = relativePosition(_event.getPos()); - m_angleTetha -= (m_oldScreenPos.x()-pos.x())*0.05f; - m_anglePsy += (m_oldScreenPos.y()-pos.y())*0.01f; - m_camera->setEye(vec3(100*std::sin(m_angleTetha),100*std::cos(m_angleTetha),80*std::cos(m_anglePsy))*ploppp); - m_oldScreenPos = relativePosition(_event.getPos()); - return true; - } - } else if (_event.getId() == 2) { - if (_event.getStatus() == gale::key::status::down) { - m_oldScreenPos = relativePosition(_event.getPos()); - return true; - } else if (_event.getStatus() == gale::key::status::move) { - vec2 pos = relativePosition(_event.getPos())*0.2; - pos -= m_oldScreenPos*0.2; - float cameraAngle = m_camera->getTetha(); - vec3 newPos = vec3(std::sin(cameraAngle)*pos.x() + std::cos(cameraAngle)*pos.y(), - std::cos(cameraAngle)*pos.x() + std::sin(cameraAngle)*pos.y(), - 0); - APPL_ERROR("apply offset = " << newPos << " from pos=" << pos << " angle=" << cameraAngle); - newPos += m_camera->getTarget(); - newPos.setMin(vec3(200,200,200)); - newPos.setMax(vec3(-200,-200,-200)); - m_camera->setTarget(newPos); - m_oldScreenPos = relativePosition(_event.getPos()); - return true; - } - } else if (_event.getId() == 10) { - m_camera->setAngle(m_camera->getAngle() + 0.01f); - } else if (_event.getId() == 11) { - m_camera->setAngle(m_camera->getAngle() - 0.01f); - } + } return false; } - diff --git a/sample/Collision/appl/Windows.hpp b/sample/Collision/appl/Windows.hpp index 320ceb7..0e3b18f 100644 --- a/sample/Collision/appl/Windows.hpp +++ b/sample/Collision/appl/Windows.hpp @@ -10,6 +10,7 @@ #include #include #include +#include #include namespace appl { @@ -17,18 +18,17 @@ namespace appl { private: ememory::SharedPtr m_env; ememory::SharedPtr m_camera; + ege::camera::ControlBase m_cameraControler; protected: Windows(); - void init(); + void init() override; public: DECLARE_FACTORY(Windows); virtual ~Windows() { }; private: - bool onEventInput(const ewol::event::Input& _event); - float m_angleTetha; - float m_anglePsy; - vec2 m_oldScreenPos; - void onCallbackPeriodicCheckCollision(const ewol::event::Time& _event); + // need this to forward if to the camera controler ... + bool onEventEntry(const ewol::event::Entry& _event) override; + bool onEventInput(const ewol::event::Input& _event) override; }; } diff --git a/sample/Collision/lutin_ege-sample-collision.py b/sample/Collision/lutin_ege-sample-collision.py index 76585fe..b941c3b 100644 --- a/sample/Collision/lutin_ege-sample-collision.py +++ b/sample/Collision/lutin_ege-sample-collision.py @@ -31,6 +31,7 @@ def get_version(): return [0,1] def configure(target, my_module): + my_module.add_extra_flags() my_module.add_src_file([ 'appl/debug.cpp', diff --git a/sample/DoubleView/appl/Windows.cpp b/sample/DoubleView/appl/Windows.cpp index b0b1e86..46c6b12 100644 --- a/sample/DoubleView/appl/Windows.cpp +++ b/sample/DoubleView/appl/Windows.cpp @@ -15,10 +15,15 @@ #include #include #include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include appl::Windows::Windows() { addObjectType("appl::Windows"); @@ -30,7 +35,7 @@ static ememory::SharedPtr createViewBoxStar() { ememory::SharedPtr out = ege::resource::Mesh::create("viewBoxStar", "DATA:texturedNoMaterial.prog"); if (out != nullptr) { ememory::SharedPtr material = ememory::makeShared(); - // set the element material properties : + // set the entity material properties : material->setAmbientFactor(vec4(1,1,1,1)); material->setDiffuseFactor(vec4(0,0,0,1)); material->setSpecularFactor(vec4(0,0,0,1)); @@ -70,9 +75,9 @@ void appl::Windows::init() { m_env = ege::Environement::create(); // Create basic Camera - m_camera = ememory::makeShared(vec3(30,30,-100), vec3(0,0,0)); - m_camera->setEye(vec3(100*std::sin(m_angleTetha),100*std::cos(m_angleTetha),40*std::cos(m_anglePsy))); + m_camera = ememory::makeShared(); m_env->addCamera("basic", m_camera); + m_cameraControler.setCamera(m_camera); // Create basic Camera ememory::SharedPtr camera2 = ememory::makeShared(vec3(100,0,0), vec3(0,0,0)); m_env->addCamera("front", camera2); @@ -129,101 +134,92 @@ void appl::Windows::init() { } ememory::SharedPtr myMesh; - // Create an external box : + // Create an external box: (no physics) myMesh = createViewBoxStar(); if (myMesh != nullptr) { - m_env->addStaticMeshToDraw(myMesh); + ememory::SharedPtr entity = ememory::makeShared(m_env); + // 1st Position component: + etk::Transform3D transform(vec3(0,0,0), etk::Quaternion::identity()); + ememory::SharedPtr componentPosition = ememory::makeShared(transform); + entity->addComponent(componentPosition); + // 2nd something to diplay: + ememory::SharedPtr componentRender = ememory::makeShared(myMesh); + entity->addComponent(componentRender); + // add it .. + m_env->addEntity(entity); } - // create basic gird: + // create basic gird: (no physics) myMesh = ege::resource::Mesh::createGrid(10, vec3(0,0,0), 5); if (myMesh != nullptr) { - m_env->addStaticMeshToDraw(myMesh); + ememory::SharedPtr entity = ememory::makeShared(m_env); + // 1st Position component: + etk::Transform3D transform(vec3(0,0,0), etk::Quaternion::identity()); + ememory::SharedPtr componentPosition = ememory::makeShared(transform); + entity->addComponent(componentPosition); + // 2nd something to diplay: + ememory::SharedPtr componentRender = ememory::makeShared(myMesh); + entity->addComponent(componentRender); + // add it .. + m_env->addEntity(entity); } - myMesh = ege::resource::Mesh::createCube(3); + myMesh = ege::resource::Mesh::createCube(3, "basics", etk::color::orange); if (myMesh != nullptr) { - //ememory::SharedPtr element = ememory::makeShared(m_env); - ememory::SharedPtr element = ememory::makeShared(m_env); - // add physic interface: - ememory::SharedPtr physic = ememory::makeShared(); - physic->setSize(vec3(3.2,3.2,3.2)); - myMesh->addPhysicElement(physic); - - element->setMesh(myMesh); - element->createRigidBody(4000000); - element->setPosition(vec3(20,10,10)); - - m_env->addElement(element); + ememory::SharedPtr entity = ememory::makeShared(m_env); + // add all component: + // 1st Position component: + etk::Transform3D transform(vec3(-20,10,0), etk::Quaternion::identity()); + //ememory::SharedPtr componentPosition = ememory::makeShared(transform); + //entity->addComponent(componentPosition); + // 2nd something to diplay: + ememory::SharedPtr componentRender = ememory::makeShared(myMesh); + entity->addComponent(componentRender); + // 3rd some physic: + ememory::SharedPtr componentPhysics = ememory::makeShared(m_env, transform); + ememory::SharedPtr physic = ememory::makeShared(); + physic->setSize(vec3(3.01,3.01,3.01)); + physic->setMass(50000); + componentPhysics->addShape(physic); + componentPhysics->generate(); + entity->addComponent(componentPhysics); + // add it .. + m_env->addEntity(entity); } - myMesh = ege::resource::Mesh::createCube(3); + myMesh = ege::resource::Mesh::createSphere(4, "basics", etk::color::blue); if (myMesh != nullptr) { - //element = ememory::makeShared(m_env); - ememory::SharedPtr element = ememory::makeShared(m_env); - - // add physic interface: - ememory::SharedPtr physic = ememory::makeShared(); - physic->setRadius(4.5f); - myMesh->addPhysicElement(physic); - - - element->setMesh(myMesh); - element->createRigidBody(4000000); - element->setPosition(vec3(20,-10,10)); - - element->iaEnable(); - - m_env->addElement(element); - + ememory::SharedPtr entity = ememory::makeShared(m_env); + // add all component: + // 1st Position component: + etk::Transform3D transform(vec3(20,10,0), etk::Quaternion::identity()); + //ememory::SharedPtr componentPosition = ememory::makeShared(transform); + //entity->addComponent(componentPosition); + // 2nd something to diplay: + ememory::SharedPtr componentRender = ememory::makeShared(myMesh); + entity->addComponent(componentRender); + // 3rd some physic: + ememory::SharedPtr componentPhysics = ememory::makeShared(m_env, transform); + ememory::SharedPtr physic = ememory::makeShared(); + physic->setRadius(4.01); + physic->setMass(500000); + componentPhysics->addShape(physic); + componentPhysics->generate(); + entity->addComponent(componentPhysics); + // add it .. + m_env->addEntity(entity); } m_env->propertyStatus.set(ege::gameStart); } -bool appl::Windows::onEventInput(const ewol::event::Input& _event) { - static float ploppp=1; - if (_event.getId() == 4) { - ploppp += 0.01f; - m_camera->setEye(vec3(100*std::sin(m_angleTetha),100*std::cos(m_angleTetha),80*std::cos(m_anglePsy))*ploppp); - } else if (_event.getId() == 5) { - ploppp -= 0.01f; - if (ploppp == 0) { - ploppp = 1.0f; - } - m_camera->setEye(vec3(100*std::sin(m_angleTetha),100*std::cos(m_angleTetha),80*std::cos(m_anglePsy))*ploppp); - } else if (_event.getId() == 3) { - if (_event.getStatus() == gale::key::status::down) { - m_oldScreenPos = relativePosition(_event.getPos()); - return true; - } else if (_event.getStatus() == gale::key::status::move) { - vec2 pos = relativePosition(_event.getPos()); - m_angleTetha -= (m_oldScreenPos.x()-pos.x())*0.05f; - m_anglePsy += (m_oldScreenPos.y()-pos.y())*0.01f; - m_camera->setEye(vec3(100*std::sin(m_angleTetha),100*std::cos(m_angleTetha),80*std::cos(m_anglePsy))*ploppp); - m_oldScreenPos = relativePosition(_event.getPos()); - return true; - } - } else if (_event.getId() == 2) { - if (_event.getStatus() == gale::key::status::down) { - m_oldScreenPos = relativePosition(_event.getPos()); - return true; - } else if (_event.getStatus() == gale::key::status::move) { - vec2 pos = relativePosition(_event.getPos())*0.2; - pos -= m_oldScreenPos*0.2; - float cameraAngle = m_camera->getTetha(); - vec3 newPos = vec3(std::sin(cameraAngle)*pos.x() + std::cos(cameraAngle)*pos.y(), - std::cos(cameraAngle)*pos.x() + std::sin(cameraAngle)*pos.y(), - 0); - APPL_ERROR("apply offset = " << newPos << " from pos=" << pos << " angle=" << cameraAngle); - newPos += m_camera->getTarget(); - newPos.setMin(vec3(200,200,200)); - newPos.setMax(vec3(-200,-200,-200)); - m_camera->setTarget(newPos); - m_oldScreenPos = relativePosition(_event.getPos()); - return true; - } - } else if (_event.getId() == 10) { - m_camera->setAngle(m_camera->getAngle() + 0.01f); - } else if (_event.getId() == 11) { - m_camera->setAngle(m_camera->getAngle() - 0.01f); - } +bool appl::Windows::onEventEntry(const ewol::event::Entry& _event) { + if (m_cameraControler.onEventEntry(_event) == true) { + return true; + } + return false; +} + +bool appl::Windows::onEventInput(const ewol::event::Input& _event) { + if (m_cameraControler.onEventInput(_event, relativePosition(_event.getPos())) == true) { + return true; + } return false; } diff --git a/sample/DoubleView/appl/Windows.hpp b/sample/DoubleView/appl/Windows.hpp index 7bdb217..0e3b18f 100644 --- a/sample/DoubleView/appl/Windows.hpp +++ b/sample/DoubleView/appl/Windows.hpp @@ -10,6 +10,7 @@ #include #include #include +#include #include namespace appl { @@ -17,17 +18,17 @@ namespace appl { private: ememory::SharedPtr m_env; ememory::SharedPtr m_camera; + ege::camera::ControlBase m_cameraControler; protected: Windows(); - void init(); + void init() override; public: DECLARE_FACTORY(Windows); virtual ~Windows() { }; private: - bool onEventInput(const ewol::event::Input& _event); - float m_angleTetha; - float m_anglePsy; - vec2 m_oldScreenPos; + // need this to forward if to the camera controler ... + bool onEventEntry(const ewol::event::Entry& _event) override; + bool onEventInput(const ewol::event::Input& _event) override; }; } diff --git a/sample/DoubleView/lutin_ege-sample-double-view.py b/sample/DoubleView/lutin_ege-sample-double-view.py index 9d914c8..a5990f2 100644 --- a/sample/DoubleView/lutin_ege-sample-double-view.py +++ b/sample/DoubleView/lutin_ege-sample-double-view.py @@ -31,6 +31,7 @@ def get_version(): return [0,1] def configure(target, my_module): + my_module.add_extra_flags() my_module.add_src_file([ 'appl/debug.cpp', diff --git a/sample/LowPoly/appl/Windows.cpp b/sample/LowPoly/appl/Windows.cpp index 6d4b5da..8985e1b 100644 --- a/sample/LowPoly/appl/Windows.cpp +++ b/sample/LowPoly/appl/Windows.cpp @@ -14,8 +14,15 @@ #include #include #include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include appl::Windows::Windows() { addObjectType("appl::Windows"); @@ -27,7 +34,7 @@ static ememory::SharedPtr createViewBoxStar() { ememory::SharedPtr out = ege::resource::Mesh::create("viewBoxStar", "DATA:texturedNoMaterial.prog"); if (out != nullptr) { ememory::SharedPtr material = ememory::makeShared(); - // set the element material properties : + // set the entity material properties : material->setAmbientFactor(vec4(1,1,1,1)); material->setDiffuseFactor(vec4(0,0,0,1)); material->setSpecularFactor(vec4(0,0,0,1)); @@ -59,34 +66,6 @@ static ememory::SharedPtr createViewBoxStar() { return out; } -namespace appl { - class Tree : public ege::ElementPhysic { - public: - Tree(const ememory::SharedPtr& _env) : - ege::ElementPhysic(_env, false) { - m_group = 1; - m_life = 100; - m_radius = 10; - loadMesh("DATA:tree_1.emf"); - - createRigidBody(10000); - ///never deactivate the vehicle - m_body->setActivationState(DISABLE_DEACTIVATION); - // set the Element as an IA: - iaEnable(); - } - void iaAction(float _step) { - - } - void onLifeChange() { - APPL_DEBUG("Loose life " << m_life); - } - }; -} - -static ememory::SharedPtr createTree(const ememory::SharedPtr& _env) { - return ememory::makeShared(_env); -} void appl::Windows::init() { @@ -96,9 +75,9 @@ void appl::Windows::init() { m_env = ege::Environement::create(); // Create basic Camera - m_camera = ememory::makeShared(vec3(30,30,-100), vec3(0,0,1)); - m_camera->setEye(vec3(100*std::sin(m_angleTetha),100*std::cos(m_angleTetha),80*std::cos(m_anglePsy))); + m_camera = ememory::makeShared(); m_env->addCamera("basic", m_camera); + m_cameraControler.setCamera(m_camera); ememory::SharedPtr tmpWidget = ege::widget::Scene::create(); if (tmpWidget == nullptr) { @@ -111,20 +90,50 @@ void appl::Windows::init() { setSubWidget(tmpWidget); } ememory::SharedPtr myMesh; - // Create an external box : + // Create an external box: (no physics) myMesh = createViewBoxStar(); if (myMesh != nullptr) { - m_env->addStaticMeshToDraw(myMesh); + ememory::SharedPtr entity = ememory::makeShared(m_env); + // 1st Position component: + etk::Transform3D transform(vec3(0,0,0), etk::Quaternion::identity()); + ememory::SharedPtr componentPosition = ememory::makeShared(transform); + entity->addComponent(componentPosition); + // 2nd something to diplay: + ememory::SharedPtr componentRender = ememory::makeShared(myMesh); + entity->addComponent(componentRender); + // add it .. + m_env->addEntity(entity); } + // create basic gird: (no physics) myMesh = ege::resource::Mesh::createGrid(10, vec3(0,0,0), 5); if (myMesh != nullptr) { - m_env->addStaticMeshToDraw(myMesh); + ememory::SharedPtr entity = ememory::makeShared(m_env); + // 1st Position component: + etk::Transform3D transform(vec3(0,0,0), etk::Quaternion::identity()); + ememory::SharedPtr componentPosition = ememory::makeShared(transform); + entity->addComponent(componentPosition); + // 2nd something to diplay: + ememory::SharedPtr componentRender = ememory::makeShared(myMesh); + entity->addComponent(componentRender); + // add it .. + m_env->addEntity(entity); } - if (true) { - ememory::SharedPtr myElement = createTree(m_env); - if (myElement != nullptr) { - m_env->addElement(myElement); - } + myMesh = ege::resource::Mesh::create("DATA:tree_1.emf"); + if (myMesh != nullptr) { + ememory::SharedPtr entity = ememory::makeShared(m_env); + // add all component: + // 1st Position component: + etk::Transform3D transform(vec3(0,0,0), etk::Quaternion::identity()); + // 2nd something to diplay: + ememory::SharedPtr componentRender = ememory::makeShared(myMesh); + entity->addComponent(componentRender); + // 3rd some physic: + ememory::SharedPtr componentPhysics = ememory::makeShared(m_env, transform); + componentPhysics->setShape(myMesh->getPhysicalProperties()); + componentPhysics->generate(); + entity->addComponent(componentPhysics); + // add it .. + m_env->addEntity(entity); } m_env->propertyStatus.set(ege::gameStart); tmpWidget->propertyDebugPhysic.set(false); @@ -132,63 +141,16 @@ void appl::Windows::init() { } -void appl::Windows::onCallbackPeriodicUpdateCamera(const ewol::event::Time& _event) { - static float offset = 0; - offset += 0.01; - static float offset2 = 0; - offset2 += 0.003; - m_camera->setEye(vec3(10*std::sin(offset),10*std::cos(offset),4*std::cos(offset2))); -} - - - -bool appl::Windows::onEventInput(const ewol::event::Input& _event) { - static float ploppp=1; - if (_event.getId() == 1) { - } else if (_event.getId() == 4) { - ploppp += 0.001f; - m_camera->setEye(vec3(100*std::sin(m_angleTetha),100*std::cos(m_angleTetha),80*std::cos(m_anglePsy))*ploppp); - } else if (_event.getId() == 5) { - ploppp -= 0.001f; - if (ploppp == 0) { - ploppp = 1.0f; - } - m_camera->setEye(vec3(100*std::sin(m_angleTetha),100*std::cos(m_angleTetha),80*std::cos(m_anglePsy))*ploppp); - } else if (_event.getId() == 3) { - if (_event.getStatus() == gale::key::status::down) { - m_oldScreenPos = relativePosition(_event.getPos()); - return true; - } else if (_event.getStatus() == gale::key::status::move) { - vec2 pos = relativePosition(_event.getPos()); - m_angleTetha -= (m_oldScreenPos.x()-pos.x())*0.05f; - m_anglePsy += (m_oldScreenPos.y()-pos.y())*0.01f; - m_camera->setEye(vec3(100*std::sin(m_angleTetha),100*std::cos(m_angleTetha),80*std::cos(m_anglePsy))*ploppp); - m_oldScreenPos = relativePosition(_event.getPos()); - return true; - } - } else if (_event.getId() == 2) { - if (_event.getStatus() == gale::key::status::down) { - m_oldScreenPos = relativePosition(_event.getPos()); - return true; - } else if (_event.getStatus() == gale::key::status::move) { - vec2 pos = relativePosition(_event.getPos())*0.2; - pos -= m_oldScreenPos*0.2; - float cameraAngle = m_camera->getTetha(); - vec3 newPos = vec3(std::sin(cameraAngle)*pos.x() + std::cos(cameraAngle)*pos.y(), - std::cos(cameraAngle)*pos.x() + std::sin(cameraAngle)*pos.y(), - 0); - APPL_ERROR("apply offset = " << newPos << " from pos=" << pos << " angle=" << cameraAngle); - newPos += m_camera->getTarget(); - newPos.setMin(vec3(200,200,200)); - newPos.setMax(vec3(-200,-200,-200)); - m_camera->setTarget(newPos); - m_oldScreenPos = relativePosition(_event.getPos()); - return true; - } - } else if (_event.getId() == 10) { - m_camera->setAngle(m_camera->getAngle() + 0.01f); - } else if (_event.getId() == 11) { - m_camera->setAngle(m_camera->getAngle() - 0.01f); - } +bool appl::Windows::onEventEntry(const ewol::event::Entry& _event) { + if (m_cameraControler.onEventEntry(_event) == true) { + return true; + } + return false; +} + +bool appl::Windows::onEventInput(const ewol::event::Input& _event) { + if (m_cameraControler.onEventInput(_event, relativePosition(_event.getPos())) == true) { + return true; + } return false; } diff --git a/sample/LowPoly/appl/Windows.hpp b/sample/LowPoly/appl/Windows.hpp index c105b4b..420b2f4 100644 --- a/sample/LowPoly/appl/Windows.hpp +++ b/sample/LowPoly/appl/Windows.hpp @@ -10,12 +10,14 @@ #include #include #include +#include namespace appl { class Windows : public ewol::widget::Windows { private: ememory::SharedPtr m_env; ememory::SharedPtr m_camera; + ege::camera::ControlBase m_cameraControler; protected: Windows(); void init() override; @@ -24,10 +26,10 @@ namespace appl { virtual ~Windows() { }; private: void onCallbackPeriodicUpdateCamera(const ewol::event::Time& _event); - bool onEventInput(const ewol::event::Input& _event); - float m_angleTetha; - float m_anglePsy; - vec2 m_oldScreenPos; + private: + // need this to forward if to the camera controler ... + bool onEventEntry(const ewol::event::Entry& _event) override; + bool onEventInput(const ewol::event::Input& _event) override; }; } diff --git a/sample/LowPoly/lutin_ege-sample-low-poly.py b/sample/LowPoly/lutin_ege-sample-low-poly.py index 19c04eb..f8facb3 100644 --- a/sample/LowPoly/lutin_ege-sample-low-poly.py +++ b/sample/LowPoly/lutin_ege-sample-low-poly.py @@ -31,6 +31,7 @@ def get_version(): return [0,1] def configure(target, my_module): + my_module.add_extra_flags() my_module.add_src_file([ 'appl/debug.cpp', diff --git a/sample/MeshCreator/appl/Windows.cpp b/sample/MeshCreator/appl/Windows.cpp index e4a167d..c7e6d95 100644 --- a/sample/MeshCreator/appl/Windows.cpp +++ b/sample/MeshCreator/appl/Windows.cpp @@ -14,8 +14,15 @@ #include #include #include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include appl::Windows::Windows() { addObjectType("appl::Windows"); @@ -26,7 +33,7 @@ static ememory::SharedPtr createViewBoxStar() { ememory::SharedPtr out = ege::resource::Mesh::create("---", "DATA:texturedNoMaterial.prog"); if (out != nullptr) { ememory::SharedPtr material = ememory::makeShared(); - // set the element material properties : + // set the entity material properties : material->setAmbientFactor(vec4(1,1,1,1)); material->setDiffuseFactor(vec4(0,0,0,1)); material->setSpecularFactor(vec4(0,0,0,1)); @@ -81,7 +88,7 @@ void appl::Windows::init() { m_env = ege::Environement::create(); // Create basic Camera - m_camera = ememory::makeShared(vec3(30,30,-100), vec3(50,0,0)); + m_camera = ememory::makeShared(vec3(30,-100,30), vec3(50,0,0)); m_env->addCamera("basic", m_camera); ememory::SharedPtr tmpWidget = ege::widget::Scene::create(); @@ -94,23 +101,48 @@ void appl::Windows::init() { tmpWidget->setCamera("basic"); setSubWidget(tmpWidget); } - // Create an external box : - ememory::SharedPtr myMesh = createViewBoxStar(); + ememory::SharedPtr myMesh; + // Create an external box: (no physics) + myMesh = createViewBoxStar(); if (myMesh != nullptr) { - m_env->addStaticMeshToDraw(myMesh); + ememory::SharedPtr entity = ememory::makeShared(m_env); + // 1st Position component: + etk::Transform3D transform(vec3(0,0,0), etk::Quaternion::identity()); + ememory::SharedPtr componentPosition = ememory::makeShared(transform); + entity->addComponent(componentPosition); + // 2nd something to diplay: + ememory::SharedPtr componentRender = ememory::makeShared(myMesh); + entity->addComponent(componentRender); + // add it .. + m_env->addEntity(entity); } + // create basic gird: (no physics) myMesh = ege::resource::Mesh::createGrid(10, vec3(0,0,0), 5); if (myMesh != nullptr) { - m_env->addStaticMeshToDraw(myMesh); + ememory::SharedPtr entity = ememory::makeShared(m_env); + // 1st Position component: + etk::Transform3D transform(vec3(0,0,0), etk::Quaternion::identity()); + ememory::SharedPtr componentPosition = ememory::makeShared(transform); + entity->addComponent(componentPosition); + // 2nd something to diplay: + ememory::SharedPtr componentRender = ememory::makeShared(myMesh); + entity->addComponent(componentRender); + // add it .. + m_env->addEntity(entity); } if (true) { myMesh = createMars(); if (myMesh != nullptr) { - ememory::SharedPtr element = ememory::makeShared(m_env); - //ememory::SharedPtr element = ememory::makeShared(m_env); - element->setPosition(vec3(50,0,0)); - element->setMesh(myMesh); - m_env->addElement(element); + ememory::SharedPtr entity = ememory::makeShared(m_env); + // 1st Position component: + etk::Transform3D transform(vec3(5,0,0), etk::Quaternion::identity()); + ememory::SharedPtr componentPosition = ememory::makeShared(transform); + entity->addComponent(componentPosition); + // 2nd something to diplay: + ememory::SharedPtr componentRender = ememory::makeShared(myMesh); + entity->addComponent(componentRender); + // add it .. + m_env->addEntity(entity); } } m_env->propertyStatus.set(ege::gameStart); @@ -122,7 +154,7 @@ void appl::Windows::onCallbackPeriodicUpdateCamera(const ewol::event::Time& _eve offset += 0.01; static float offset2 = 0; offset2 += 0.003; - m_camera->setEye(vec3(100*std::sin(offset),100*std::cos(offset),40*std::cos(offset2))+vec3(50,0,0)); + m_camera->setEye(vec3(100*std::sin(offset),40*std::cos(offset2),100*std::cos(offset))+vec3(50,0,0)); } diff --git a/sample/MeshCreator/appl/Windows.hpp b/sample/MeshCreator/appl/Windows.hpp index 3a235ca..09c422c 100644 --- a/sample/MeshCreator/appl/Windows.hpp +++ b/sample/MeshCreator/appl/Windows.hpp @@ -18,7 +18,7 @@ namespace appl { ememory::SharedPtr m_camera; protected: Windows(); - void init(); + void init() override; public: DECLARE_FACTORY(Windows); virtual ~Windows() { }; diff --git a/sample/RayTest/appl/Windows.cpp b/sample/RayTest/appl/Windows.cpp index c323a33..b26e92d 100644 --- a/sample/RayTest/appl/Windows.cpp +++ b/sample/RayTest/appl/Windows.cpp @@ -24,9 +24,7 @@ #include #include -appl::Windows::Windows() : - m_angleTetha(0), - m_anglePsy(0) { +appl::Windows::Windows() { addObjectType("appl::Windows"); propertyTitle.setDirectCheck("example ege: RayTest"); } @@ -35,7 +33,7 @@ static ememory::SharedPtr createViewBoxStar() { ememory::SharedPtr out = ege::resource::Mesh::create("viewBoxStar", "DATA:texturedNoMaterial.prog"); if (out != nullptr) { ememory::SharedPtr material = ememory::makeShared(); - // set the element material properties : + // set the entity material properties : material->setAmbientFactor(vec4(1,1,1,1)); material->setDiffuseFactor(vec4(0,0,0,1)); material->setSpecularFactor(vec4(0,0,0,1)); @@ -77,9 +75,9 @@ void appl::Windows::init() { m_env->getEngine("physics")->properties.set("debug-shape", "true"); // Create basic Camera - m_camera = ememory::makeShared(vec3(30,30,-100), vec3(0,0,0)); - m_camera->setEye(vec3(100*std::sin(m_angleTetha),40*std::cos(m_anglePsy),100*std::cos(m_angleTetha))); + m_camera = ememory::makeShared(); m_env->addCamera("basic", m_camera); + m_cameraControler.setCamera(m_camera); ememory::SharedPtr tmpWidget = ege::widget::Scene::create(); if (tmpWidget == nullptr) { @@ -96,43 +94,42 @@ void appl::Windows::init() { // Create an external box: (no physics) myMesh = createViewBoxStar(); if (myMesh != nullptr) { - ememory::SharedPtr element = ememory::makeShared(m_env); + ememory::SharedPtr entity = ememory::makeShared(m_env); // 1st Position component: etk::Transform3D transform(vec3(0,0,0), etk::Quaternion::identity()); ememory::SharedPtr componentPosition = ememory::makeShared(transform); - element->addComponent(componentPosition); + entity->addComponent(componentPosition); // 2nd something to diplay: ememory::SharedPtr componentRender = ememory::makeShared(myMesh); - element->addComponent(componentRender); + entity->addComponent(componentRender); // add it .. - m_env->addEntity(element); + m_env->addEntity(entity); } // create basic gird: (no physics) myMesh = ege::resource::Mesh::createGrid(10, vec3(0,0,0), 5); if (myMesh != nullptr) { - ememory::SharedPtr element = ememory::makeShared(m_env); + ememory::SharedPtr entity = ememory::makeShared(m_env); // 1st Position component: etk::Transform3D transform(vec3(0,0,0), etk::Quaternion::identity()); ememory::SharedPtr componentPosition = ememory::makeShared(transform); - element->addComponent(componentPosition); + entity->addComponent(componentPosition); // 2nd something to diplay: ememory::SharedPtr componentRender = ememory::makeShared(myMesh); - element->addComponent(componentRender); + entity->addComponent(componentRender); // add it .. - m_env->addEntity(element); + m_env->addEntity(entity); } - myMesh = ege::resource::Mesh::createCube(3, "basics", etk::color::orange); if (myMesh != nullptr) { - ememory::SharedPtr element = ememory::makeShared(m_env); + ememory::SharedPtr entity = ememory::makeShared(m_env); // add all component: // 1st Position component: etk::Transform3D transform(vec3(-20,10,0), etk::Quaternion::identity()); //ememory::SharedPtr componentPosition = ememory::makeShared(transform); - //element->addComponent(componentPosition); + //entity->addComponent(componentPosition); // 2nd something to diplay: ememory::SharedPtr componentRender = ememory::makeShared(myMesh); - element->addComponent(componentRender); + entity->addComponent(componentRender); // 3rd some physic: ememory::SharedPtr componentPhysics = ememory::makeShared(m_env, transform); ememory::SharedPtr physic = ememory::makeShared(); @@ -140,21 +137,21 @@ void appl::Windows::init() { physic->setMass(50000); componentPhysics->addShape(physic); componentPhysics->generate(); - element->addComponent(componentPhysics); + entity->addComponent(componentPhysics); // add it .. - m_env->addEntity(element); + m_env->addEntity(entity); } myMesh = ege::resource::Mesh::createSphere(4, "basics", etk::color::blue); if (myMesh != nullptr) { - ememory::SharedPtr element = ememory::makeShared(m_env); + ememory::SharedPtr entity = ememory::makeShared(m_env); // add all component: // 1st Position component: etk::Transform3D transform(vec3(20,10,0), etk::Quaternion::identity()); //ememory::SharedPtr componentPosition = ememory::makeShared(transform); - //element->addComponent(componentPosition); + //entity->addComponent(componentPosition); // 2nd something to diplay: ememory::SharedPtr componentRender = ememory::makeShared(myMesh); - element->addComponent(componentRender); + entity->addComponent(componentRender); // 3rd some physic: ememory::SharedPtr componentPhysics = ememory::makeShared(m_env, transform); ememory::SharedPtr physic = ememory::makeShared(); @@ -162,15 +159,24 @@ void appl::Windows::init() { physic->setMass(500000); componentPhysics->addShape(physic); componentPhysics->generate(); - element->addComponent(componentPhysics); + entity->addComponent(componentPhysics); // add it .. - m_env->addEntity(element); + m_env->addEntity(entity); } m_env->propertyStatus.set(ege::gameStart); } +bool appl::Windows::onEventEntry(const ewol::event::Entry& _event) { + if (m_cameraControler.onEventEntry(_event) == true) { + return true; + } + return false; +} + bool appl::Windows::onEventInput(const ewol::event::Input& _event) { - static float ploppp=1; + if (m_cameraControler.onEventInput(_event, relativePosition(_event.getPos())) == true) { + return true; + } if (_event.getId() == 1) { if (_event.getStatus() == gale::key::status::down) { vec2 pos = relativePosition(_event.getPos()); @@ -194,27 +200,6 @@ bool appl::Windows::onEventInput(const ewol::event::Input& _event) { } return true; } - } else if (_event.getId() == 4) { - ploppp += 0.2f; - m_camera->setEye(vec3(100*std::sin(m_angleTetha),40*std::cos(m_anglePsy),100*std::cos(m_angleTetha))*ploppp); - } else if (_event.getId() == 5) { - ploppp -= 0.2f; - if (ploppp == 0) { - ploppp = 1.0f; - } - m_camera->setEye(vec3(100*std::sin(m_angleTetha),40*std::cos(m_anglePsy),100*std::cos(m_angleTetha))*ploppp); - } else if (_event.getId() == 3) { - if (_event.getStatus() == gale::key::status::down) { - m_oldScreenPos = relativePosition(_event.getPos()); - return true; - } else if (_event.getStatus() == gale::key::status::move) { - vec2 pos = relativePosition(_event.getPos()); - m_angleTetha -= (m_oldScreenPos.x()-pos.x())*0.05f; - m_anglePsy += (m_oldScreenPos.y()-pos.y())*0.05f; - m_camera->setEye(vec3(100*std::sin(m_angleTetha),40*std::cos(m_anglePsy),100*std::cos(m_angleTetha))*ploppp); - m_oldScreenPos = relativePosition(_event.getPos()); - return true; - } } return false; } diff --git a/sample/RayTest/appl/Windows.hpp b/sample/RayTest/appl/Windows.hpp index 5ed2bb0..7899a4d 100644 --- a/sample/RayTest/appl/Windows.hpp +++ b/sample/RayTest/appl/Windows.hpp @@ -11,6 +11,7 @@ #include #include #include +#include #include namespace appl { @@ -18,19 +19,19 @@ namespace appl { private: ememory::SharedPtr m_env; ememory::SharedPtr m_camera; + ege::camera::ControlBase m_cameraControler; protected: Windows(); - void init(); + void init() override; public: DECLARE_FACTORY(Windows); virtual ~Windows() { }; private: - bool onEventInput(const ewol::event::Input& _event); + // need this to forward if to the camera controler ... + bool onEventEntry(const ewol::event::Entry& _event) override; + bool onEventInput(const ewol::event::Input& _event) override; void onCallbackDisplayDebug(const ememory::SharedPtr& _obj); std::pair m_ray; - float m_angleTetha; - float m_anglePsy; - vec2 m_oldScreenPos; std::pair m_destination; }; } diff --git a/sample/RayTest/lutin_ege-sample-raytracing.py b/sample/RayTest/lutin_ege-sample-raytracing.py index 75d454e..1011b6f 100644 --- a/sample/RayTest/lutin_ege-sample-raytracing.py +++ b/sample/RayTest/lutin_ege-sample-raytracing.py @@ -31,6 +31,7 @@ def get_version(): return [0,2] def configure(target, my_module): + my_module.add_extra_flags() my_module.add_src_file([ 'appl/debug.cpp',