@Override
 protected void onUpdateGameAction(double progress) {
   PointF pt = mover.onUpdateCalculateForMover(progress);
   switcher.onUpdateForSwitch(progress);
   if (switcher.isInANoGoZone()) return;
   mover.onUpdateCalculateForMover(progress, pt);
 }
  @Override
  public void runGameAction() {
    switcher.runForSwitch();
    double duration = mover.getRunningDurationForMover();

    this.run((int) (duration * 1000.0));
  }
 @Override
 // method in animation
 protected boolean onCompleteActionAndCheckForGateExit() {
   onUpdateGameAction(1.0);
   mover.onCompleteForMover();
   boolean isExited = switcher.onCompleteForSwitch();
   return isExited;
 }
 @Override
 public void setAll(
     IMasterPresenterFromActions master,
     IScenePresenterFromActions scene,
     IDialogTreePresenterFromActions dialogTree,
     ITitleCardPresenterFromActions titleCard,
     IInventoryPresenterFromActions inventory) {
   mover.setSceneForMover(scene);
   switcher.setSceneForSwitch(scene);
 }