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 + -
显示快捷键?