execution.cpp
上传用户:center1979
上传日期:2022-07-26
资源大小:50633k
文件大小:2k
源码类别:

OpenGL

开发平台:

Visual C++

  1. // execution.cpp
  2. //
  3. // Copyright (C) 2001 Chris Laurel <claurel@shatters.net>
  4. //
  5. // This program is free software; you can redistribute it and/or
  6. // modify it under the terms of the GNU General Public License
  7. // as published by the Free Software Foundation; either version 2
  8. // of the License, or (at your option) any later version.
  9. #include "execution.h"
  10. using namespace std;
  11. Execution::Execution(CommandSequence& cmd, ExecutionEnvironment& _env) :
  12.     currentCommand(cmd.begin()),
  13.     finalCommand(cmd.end()),
  14.     env(_env),
  15.     commandTime(-1.0)
  16. {
  17. }
  18. bool Execution::tick(double dt)
  19. {
  20.     // ignore the very first call to tick, because on windows dt may include the
  21.     // time spent in the "Open File" dialog. Using commandTime < 0 as a flag
  22.     // to recognize the first call:
  23.     if (commandTime < 0.0)
  24.     {
  25.         commandTime = 0.0;
  26.         return false;
  27.     }
  28.     while (dt > 0.0 && currentCommand != finalCommand)
  29.     {
  30.         Command* cmd = *currentCommand;
  31.         double timeLeft = cmd->getDuration() - commandTime;
  32.         if (dt >= timeLeft)
  33.         {
  34.             cmd->process(env, cmd->getDuration(), timeLeft);
  35.             dt -= timeLeft;
  36.             commandTime = 0.0;
  37.             currentCommand++;
  38.         }
  39.         else
  40.         {
  41.             commandTime += dt;
  42.             cmd->process(env, commandTime, dt);
  43.             dt = 0.0;
  44.         }
  45.     }
  46.     return currentCommand == finalCommand;
  47. }
  48. void Execution::reset(CommandSequence& cmd)
  49. {
  50.     currentCommand = cmd.begin();
  51.     finalCommand = cmd.end();
  52.     commandTime = -1.0;
  53. }