// // VROSceneController.h // ViroKit // // Copyright © 2015 Viro Media. All rights reserved. // #ifndef ANDROID_VROSCENECONTROLLER_H #define ANDROID_VROSCENECONTROLLER_H #include #include "VROScene.h" #include "VROLog.h" #include "VROTransaction.h" #include "VROMaterial.h" #include "VROPortal.h" class VROScene; class VROVector3f; class VRODriver; class VRORenderContext; class VROPortalTraversalListener; static float kTransitionPushDistance = 0.10; /* SceneController manages transitions between Scenes and the Scene lifecyle. */ class VROSceneController : public std::enable_shared_from_this{ public: // Delegate for callbacks across the bridge class VROSceneControllerDelegate { public: virtual void onSceneWillAppear(VRORenderContext * context, std::shared_ptr driver) {}; virtual void onSceneDidAppear(VRORenderContext * context, std::shared_ptr driver) {}; virtual void onSceneWillDisappear(VRORenderContext * context, std::shared_ptr driver) {}; virtual void onSceneDidDisappear(VRORenderContext * context, std::shared_ptr driver) {}; }; void setDelegate(std::shared_ptr delegate){ auto autoWeakDelegate = delegate; _sceneDelegateWeak = autoWeakDelegate; } VROSceneController() { _scene = std::make_shared(); _scene->getRootNode()->setScene(_scene, true); } virtual ~VROSceneController() {} virtual std::shared_ptr getScene() { return _scene; } /* Scene appeared delegate methods, triggered by VRORenderer. */ virtual void onSceneWillAppear(VRORenderContext *context, std::shared_ptr driver); virtual void onSceneDidAppear(VRORenderContext *context, std::shared_ptr driver); virtual void onSceneWillDisappear(VRORenderContext *context, std::shared_ptr driver); virtual void onSceneDidDisappear(VRORenderContext *context, std::shared_ptr driver); // For now, we use fade plus push for all animated scene transitions. TODO: VIRO-771 // captures applying varying kinds of custom animations on scene transitions. void startIncomingTransition(float duration, VROTimingFunctionType timingFunctionType, VRORenderContext *context); void startOutgoingTransition(float duration, VROTimingFunctionType timingFunctionType, VRORenderContext *context); bool hasActiveTransitionAnimation(){ return _isTransitionAnimationActive; } void setActiveTransitionAnimation (bool flag){ _isTransitionAnimationActive = flag; } protected: std::shared_ptr _scene; std::weak_ptr _sceneDelegateWeak; private: bool _isTransitionAnimationActive; std::shared_ptr _portalTraversalListener; }; #endif //ANDROID_VROSCENECONTROLLER_H