⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fsm_game.cpp.svn-base

📁 自己做的小游戏
💻 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 + -