/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include #include #include #include #include #include #include #include typedef void* ServoInstance; /** * Servo2D Landscape Application */ class Servo2D : public lumin::LandscapeApp { public: /** * Constructs the Landscape Application. */ Servo2D(); /** * Destroys the Landscape Application. */ virtual ~Servo2D(); /** * Disallows the copy constructor. */ Servo2D(const Servo2D&) = delete; /** * Disallows the move constructor. */ Servo2D(Servo2D&&) = delete; /** * Disallows the copy assignment operator. */ Servo2D& operator=(const Servo2D&) = delete; /** * Disallows the move assignment operator. */ Servo2D& operator=(Servo2D&&) = delete; protected: /** * Initializes the Landscape Application. * @return - 0 on success, error code on failure. */ int init() override; /** * Deinitializes the Landscape Application. * @return - 0 on success, error code on failure. */ int deInit() override; /** * Returns the size of the Prism, default = +/- (1.0f, 1.0f, 1.0f) meters. * Used in createPrism(). */ const glm::vec3 getInitialPrismExtents() const; /** * Creates the prism, updates the private variable prism_ with the created prism. */ int createInitialPrism(); /** * Initializes and creates the scene of all scenes marked as initially instanced */ void instanceInitialScenes(); /** * Initializes and creates the scene of the scene and instances it into the prism */ lumin::Node* instanceScene(const SceneDescriptor & sceneToInit); /** * Run application login */ virtual bool updateLoop(float fDelta) override; /** * Handle events from the server */ virtual bool eventListener(lumin::ServerEvent* event) override; bool touchpadEventListener(lumin::ControlTouchPadInputEventData* event); bool keyEventListener(lumin::KeyInputEventData* event); /** * Get the current cursor position, with respect to the viewport. */ glm::vec2 viewportCursorPosition(); bool pointInsideViewport(glm::vec2 pt); private: lumin::Prism* prism_ = nullptr; // represents the bounded space where the App renders. lumin::PlanarResource* plane_ = nullptr; // the plane we're rendering into lumin::QuadNode* content_node_ = nullptr; // the node containing the plane ServoInstance servo_ = nullptr; // the servo instance we're embedding };