Skip to content

Instantly share code, notes, and snippets.

@nilsdoehring
Created February 14, 2017 09:02
Show Gist options
  • Save nilsdoehring/076d16600682816d1bcc5fc681aa9eb3 to your computer and use it in GitHub Desktop.
Save nilsdoehring/076d16600682816d1bcc5fc681aa9eb3 to your computer and use it in GitHub Desktop.
/// 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