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

📄 movemgr.h

📁 Blood 2全套源码
💻 H
字号:

// Client side movement manager for Blood 2.

#ifndef __MOVEMGR_H__
#define __MOVEMGR_H__


#define DEFAULT_LADDER_VEL			400.0f
#define DEFAULT_SWIM_VEL			175.0f


	
#include "client_de.h"
#include "ContainerCodes.h"
#include "SharedMovement.h"
#include "SharedDefs.h"
//	#include "ModelFuncs.h"
enum ModelSize { MS_NORMAL=0, MS_SMALL, MS_LARGE, NUM_MODELSIZES };

	
	class CPhysicsLT;
	class CBloodClientShell;

	
	class CContainerInfo
	{
	public:
		float			m_fGravity;
		DVector			m_Current;
		ContainerCode	m_ContainerCode;
		DBOOL			m_bHidden;
	};

	
	class CMoveMgr
	{
	public:

					CMoveMgr(CBloodClientShell *pShell);
					~CMoveMgr();
		
		DBOOL		Init(ClientDE *pClientDE);
		
		void		Update();
		void		OnPhysicsUpdate(HMESSAGEREAD hRead);

		DRESULT		OnObjectMove(HOBJECT hObj, DBOOL bTeleport, DVector *pPos);
		DRESULT		OnObjectRotate(HOBJECT hObj, DBOOL bTeleport, DRotation *pNewRot);

		void		OnObjectRemove(HOBJECT hObj);

		// CMoveMgr keeps a list of spheres that repel the player object.
		// These are created from explosions.
		DRESULT		AddPusher(DVector &pos, float radius, 
			float startDelay, float duration, float strength);

		HOBJECT		GetObject() {return m_hObject;}

		void		OnServerForcePos(HMESSAGEREAD hRead);

		void		WritePositionInfo(HMESSAGEWRITE hWrite);
		DDWORD		GetControlFlags() { return m_dwControlFlags; }

		void		ClearControlFlags() { m_dwControlFlags = 0; }

		void		UpdateAxisMovement(DBOOL bUseAxisForwardBackward, float fForwardBackward, float fForwardBackwardDeadZone,
									   DBOOL bUseAxisLeftRight,float fLeftRight, float fLeftRightDeadZone );

	protected:

		void		ShowPos(char *pBlah);
		void		UpdateControlFlags();
		void		UpdateMotion();
		void		UpdatePushers();
		void		UpdatePlayerAnimation();
		
		DBOOL		AreDimsCorrect();
		void		ResetDims(DVector *pOffset=NULL);
		
		void		UpdateFriction();
		
		void		UpdateOnLadder(CContainerInfo *pInfo);
		void		UpdateOnConveyor(CContainerInfo *pInfo);
		void		UpdateInLiquid(CContainerInfo *pInfo);
		void		UpdateOnGround(CollisionInfo *pInfo);
		
		void		MoveLocalSolidObject();
		void		UpdateVelMagnitude();
		void		SetClientObjNonsolid();
		void		MoveToClientObj();

		DBOOL		IsBodyInLiquid();
		DBOOL		IsDead();

		
		DBYTE		m_ClientMoveCode;

		// The object representing our movement.  
		HOBJECT		m_hObject;

		ClientDE			*m_pClientDE;
		CPhysicsLT			*m_pPhysicsLT;
		CBloodClientShell	*m_pClientShell;

		float		m_DimsScale[NUM_MODELSIZES];
		DLink		m_Pushers;


		DVector		m_WantedDims;

		// Movement state.
		DDWORD		m_dwControlFlags;
		DDWORD		m_dwLastControlFlags;
		DDWORD		m_nMouseStrafeFlags;
		
		DBOOL		m_bBodyInLiquid;
		DBOOL		m_bSwimmingOnSurface;
		DBOOL		m_bCanSwimJump;
		float		m_fSwimmingOnSurfaceStart;
		
		DBOOL		m_bBodyOnLadder;
		DBOOL		m_bBodyOnConveyor;

		DBOOL		m_bSpectatorMode;
		DBOOL		m_bForceJump;

		DBOOL		m_bOnGround;
		
		float		m_fBaseMoveAccel;
		float		m_fMoveAccelMultiplier;

		float		m_fLeashLen;
		float		m_FrameTime;


		// Movement speeds.
		float		m_fJumpVel;
		float		m_fJumpMultiplier;

		float		m_fMoveVel;
		float		m_fLadderVel;
		float		m_fSwimVel;
		float		m_fMoveMultiplier;
		float		m_fFrictionCoeff;
		
		DBOOL		m_bSwimmingJump;

		ContainerCode	m_eLastContainerCode;
		CContainerInfo	m_Containers[MAX_TRACKED_CONTAINERS];
		DDWORD			m_nContainers;

		// special movement axis information
		DBOOL		m_bUseAxisLeftRight;
		DBOOL		m_bUseAxisForwardBackward;
		float		m_fAxisLeftRightVel; // Right is positive
		float		m_fAxisLeftRightDeadZone; 
		float		m_fAxisForwardBackwardVel; // Forward is positive ?????????
		float		m_fAxisForwardBackwardDeadZone; 

		// Still animations.
		char			m_StillAnimNames[MAX_STILL_ANIMATIONS][MAX_STILL_ANIM_NAME_LEN];
		HMODELANIM		m_hStillAnims[MAX_STILL_ANIMATIONS];
		DDWORD			m_nStillAnims;

		// Player attributes
		DBOOL		m_bFalling;
		DBOOL		m_bForcedCrouch;
		DBOOL		m_bMovementBlocked;
		DFLOAT		m_startFall;
		DBOOL		m_bLastJumpCommand;
		DBOOL		m_bPowerupActivated;
		DBOOL		m_bLastCrouchCommand;
		DBOOL		m_bSlowMode;
		DFLOAT		m_fSlowTime;

		D_WORD		m_wLastChangeFlags;

		SurfaceType	m_eLastSurface;
		
		DVector		m_vServerVelocity;
	};


#endif  // __MOVEMGR_H__


⌨️ 快捷键说明

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