📄 fsm_game.cpp.svn-base
字号:
#include "fsm_game.h"
#include "fsm.h"
#include "fsmmacros.h"
#include "custom_time.h"
#include "game_object.h"
#include "msg.h"
#include "msgroute.h"
#include "game.h"
#include "player.h"
#include "camera.h"
#include "unit.h"
#include "CollisionDetection.h"
#include "../gamedata/fireball.h"
#include "../gamedata/gamedata.h"
#include "../renderer/renderer.h"
#include "../gamedata/structs.h"
#include <assert.h>
#include <time.h>
#include <windows.h>
//float x=350,y,z=160;
bool GameProcessStateMachine( GameObject* go, unsigned int state, MsgObject* msg )
{
BeginStateMachine
OnEnter
//最最开始时,所有的东西都没初始化时,load mission
s.LoadMission("../Data/script/Mission2.ini");
//然后依次初始化这三个东西
InitPlayer();
InitUnits();
InitCamera();
//进入开场动画
SetState(STATE_GameExcuteScript);
//----------------------------------------------------------------
State( STATE_GameExcuteScript )
OnEnter
FSMInitialize(player.unique_id, FSM_Script); //把player的状态机改成脚本状态机
list<GameObject>::iterator i;
for (i = units.begin(); i != units.end(); ++i) //把所有unit的状态机改成脚本状态机
FSMInitialize(i->unique_id, FSM_Script);
//开始脚本动画,在另一个线程中
s.LoadScript("../Data/script/1.M1_GameStart.script");
s.ExecuteScriptInNewThd();
OnUpdate
UpdatePlayer();
//由于目前脚本动画里的东西有bug,所以这里有待完善。由于人物都是由脚本控制的,可以考虑不进行碰撞检测
UpdateCamera();
OnMsg(MSG_GameStart)
//收到这个消息后转为开始游戏
SetState(STATE_GameRunning);
OnExit
//----------------------------------------------------------------
State( STATE_GamePause )
//目前还没做,应该比较好做
//----------------------------------------------------------------
State( STATE_GameRunning )
OnEnter
//把状态机改回来
FSMInitialize(player.unique_id, FSM_Player);
list<GameObject>::iterator i;
for (i = units.begin(); i != units.end(); ++i)
FSMInitialize(i->unique_id, FSM_Unit);
SetCameraWithPlayer(); //把camera改回来
OnUpdate
//如果player到达了某个区域内,则触发剧情,转为脚本动画状态
if (player.pos.x > endLeftBottom.x && player.pos.x < endRightUp.x &&
player.pos.z > endLeftBottom.z && player.pos.z < endRightUp.z) {
SetState(STATE_GameExcuteScript);
return true;
}
//依次计算player和怪物和火球的位置
CalcPlayerNewPos();
CalcUnitsNewPos();
FireBall::CalcFBNewPos();
//进行碰撞检测
CollisionDetection::doCollisionDetection();
//peng();
//依次更新
UpdatePlayer();
UpdateUnits();
FireBall::UpdateFireballs();
FireBall::DeleteOldFB(); //这个函数应该放到UpdateFireballs()里面比较好
UpdateCamera();
OnMsg(MSG_GamePlayerDie)
// 设置一下标志位
SetState(STATE_GameExcuteScript);
OnMsg(MSG_GameBossDie)
// 设置一下标志位
SetState(STATE_GameExcuteScript);
//----------------------------------------------------------------
State( STATE_GameEnd )
OnEnter
EndStateMachine
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -