3dscenemanager.h

来自「Ion Team Lord Of The Rings Demo 模拟指环王的3」· C头文件 代码 · 共 90 行

H
90
字号


typedef void (*f_void)();
typedef void (*f_float)(float);

struct Scene
  {
    float fDeltaTime;
    f_void Init,DeInit;
    f_float RenderNextFrame;


  };

class SceneHandler
  {
  public:
    vector<Scene> Scenes;
    float fCurrentTime;
    bool bEnded;
    void NewScene(float DeltaTime, f_void InitFunc, f_void DeInitFunc, f_float RenderNextFrame);
    void InitScenes();
    void DeInitScenes();
    void NextFrame(float Milliseconds);
    SceneHandler()
    {
      fCurrentTime=0.0f;
      bEnded=false;
    }
  }
SM,SM2;


void SceneHandler::NewScene(float DeltaTime, f_void InitFunc, f_void DeInitFunc, f_float RenderNextFrame)
{
  Scene tScene;
  tScene.fDeltaTime=DeltaTime;
  tScene.Init=InitFunc;
  tScene.DeInit=DeInitFunc;
  tScene.RenderNextFrame=RenderNextFrame;
  Scenes.push_back(tScene);
}

void SceneHandler::InitScenes()
{
  for (Uint16 i=0;i<Scenes.size();i++)
	{
		//Loading.Draw(i+1);
    Scenes[i].Init();
	}
}

void SceneHandler::DeInitScenes()
{
  for (Uint16 i=0;i<Scenes.size();i++)
    Scenes[i].DeInit();
}

void SceneHandler::NextFrame(float Milliseconds)
{
  Uint16 i;
  float TimeCounter=0.0f;
  fCurrentTime+=Milliseconds;
  for (i=0;i<Scenes.size();i++)
    {
      TimeCounter+=Scenes[i].fDeltaTime;
      if (fCurrentTime<TimeCounter)
        break;
    }
  if (fCurrentTime>TimeCounter)
    {
      bEnded	=true;
      DeInitScenes();
      return;                         // Scenes Ended
    }
  Scenes[i].RenderNextFrame(Milliseconds);

}


struct CharMovement
  {
    bool ChangeAnimation,TwoFrameInterpolation, RotationInterpolation;
    string NewAnimation;
		int Frame1,Frame2;
    Vector3d Position, Rotation, Rotation2;
    float TimeFactor; // time multiplication factor
  }
;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?