Created
February 14, 2017 09:02
-
-
Save nilsdoehring/076d16600682816d1bcc5fc681aa9eb3 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// This class shows how to implement a RenderLoop that pauses whenever | |
/// there's nothing going on. | |
/// It deliberately only treats one stage (Rd.STAGE) because that's how | |
/// the underlying framework works, but could easily be changed to support | |
/// several stages - see the super class. | |
class RdRenderLoop extends RenderLoop { | |
bool _invalidate = false; | |
num _currentTime = 0.0; | |
EnterFrameEvent _enterFrameEvent = new EnterFrameEvent(0); | |
ExitFrameEvent _exitFrameEvent = new ExitFrameEvent(); | |
RenderEvent _renderEvent = new RenderEvent(); | |
//---------------------------------------------------------------------------- | |
void invalidate() { | |
_invalidate = true; | |
super.invalidate(); | |
} | |
//---------------------------------------------------------------------------- | |
void addStage(Stage stage) { | |
if (stage.renderLoop != null) { | |
stage.renderLoop.removeStage(stage); | |
} | |
stage.onMouseMove.capture((e) => _setRenderMode(stage)); | |
stage.onTouchMove.capture((e) => _setRenderMode(stage)); | |
stage.onMouseWheel.capture((e) => _setRenderMode(stage)); | |
super.addStage(stage); | |
} | |
void removeStage(Stage stage) { | |
stage.onMouseMove.cancelSubscriptions(); | |
stage.onTouchMove.cancelSubscriptions(); | |
stage.onMouseWheel.cancelSubscriptions(); | |
super.removeStage(stage); | |
} | |
void advanceTime(num deltaTime) { | |
_currentTime += deltaTime; | |
if(Rd.JUGGLER.hasAnimatables){ | |
Rd.STAGE.renderMode = StageRenderMode.ONCE; | |
} | |
_enterFrameEvent.passedTime = deltaTime; | |
_enterFrameEvent.dispatch(); | |
Rd.JUGGLER.advanceTime(deltaTime); | |
if (_invalidate) { | |
_invalidate = false; | |
_renderEvent.dispatch(); | |
} | |
Rd.STAGE.materialize(_currentTime, deltaTime); | |
_exitFrameEvent.dispatch(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment