DragonNest/GameCommon/MAMovementInterface.hpp
2024-12-19 09:48:26 +08:00

122 lines
5.8 KiB
C++

#pragma once
#include "MAMovementBase.h"
class MAMovementInterface
{
public:
MAMovementInterface()
:m_pMovement(NULL)
{
}
virtual ~MAMovementInterface()
{
SAFE_DELETE( m_pMovement );
}
virtual MAMovementBase* CreateMovement()
{
MAMovementBase* pMovement = new MAMovementBase();
return pMovement;
}
void SetMovement( MAMovementBase* pMovement ){ m_pMovement = pMovement; }
MAMovementBase* GetMovement(){ return m_pMovement; }
//###################################################################################################
virtual void OnDrop( float fCurVelocity ) {}
virtual void OnStop( EtVector3 &vPosition ) {}
virtual void OnBeginNaviMode() {}
virtual void OnClash( EtVector3 &vPosition, OnClashFloorCheckType bFloorClash ) {}
virtual void OnBumpWall(){}
virtual void OnFall( float fCurVelocity ) {}
virtual void OnBeginLook() { }
virtual void OnEndLook() { }
virtual void OnMoveNavi( EtVector3 &vPosition ) {}
#ifdef PRE_MOD_NAVIGATION_PATH
virtual void OnAutoMoving( EtVector3& vPosition, EtVector3& vCurrentPosition ) {}
#endif // PRE_MOD_NAVIGATION_PATH
//###################################################################################################
void PushAndCollisionCheck( EtVector3 &vPush ) { m_pMovement->PushAndCollisionCheck( vPush ); }
void SetMoveVectorX( EtVector3 &vVec ){ m_pMovement->SetMoveVectorX( vVec ); }
void SetMoveVectorZ( EtVector3 &vVec ){ m_pMovement->SetMoveVectorZ( vVec ); }
EtVector3 *GetMoveVectorX(){ return m_pMovement->GetMoveVectorX(); }
EtVector3 *GetMoveVectorZ(){ return m_pMovement->GetMoveVectorZ(); }
void MoveZ( float fSpeed ){ m_pMovement->MoveZ( fSpeed ); }
void MoveX( float fSpeed ){ m_pMovement->MoveX( fSpeed ); }
void MovePos( EtVector3 &vPos, bool bRefreshZVec = true ){ m_pMovement->MovePos( vPos, bRefreshZVec ); }
void MoveTarget( DnActorHandle &hActor, float fMinDistance ){ m_pMovement->MoveTarget( hActor, fMinDistance ); }
void MoveTargetNavi( DnActorHandle &hActor, float fMinDistance, const char* szActionName ){ m_pMovement->MoveTargetNavi( hActor, fMinDistance, szActionName ); }
void MoveTargetNavi( EtVector3& vTargetPos, float fMinDistance, const char* szActionName ){ m_pMovement->MoveTargetNavi( vTargetPos, fMinDistance, szActionName ); }
int GetNaviType(){ return m_pMovement->GetNaviType(); }
void MoveToWorld( EtVector2 &vVec ){ m_pMovement->MoveToWorld(vVec); }
EtVector3 *GetMovePos() { return m_pMovement->GetMovePos(); }
void ResetMove(){ m_pMovement->ResetMove(); }
DnActorHandle GetMoveTarget(){ return m_pMovement->GetMoveTarget(); }
DnActorHandle GetNaviTarget(){ return m_pMovement->GetNaviTarget(); }
void SetVelocity( EtVector3 &vVec ) { m_pMovement->SetVelocity(vVec); }
void SetVelocityX( float fPower ) { m_pMovement->SetVelocityX(fPower); }
void SetVelocityY( float fPower ) { m_pMovement->SetVelocityY(fPower); }
void SetVelocityZ( float fPower ) { m_pMovement->SetVelocityZ(fPower); }
EtVector3 *GetVelocity(){ return m_pMovement->GetVelocity(); }
EtVector3 *GetResistance(){ return m_pMovement->GetResistance(); }
EtVector3 *GetLastVelocity(){ return m_pMovement->GetLastVelocity(); }
EtVector3 *GetVelocityValue(){ return m_pMovement->GetVelocityValue(); }
void SetMagnetDir( EtVector2 &vPos ){ m_pMovement->SetMagnetDir(vPos); }
void SetMagnetLength( float fLength ){ m_pMovement->SetMagnetLength(fLength); }
bool IsNaviMode() { return m_pMovement->IsNaviMode(); }
void SetMoveYDistancePerSec( float fMoveYDistancePerSec, float fWholeMoveYDistance, bool bMaintainYDistance ) { m_pMovement->SetMoveYDistancePerSec(fMoveYDistancePerSec, fWholeMoveYDistance, bMaintainYDistance); };
void ResetMoveYDistance( void ) { m_pMovement->ResetMoveYDistance(); };
void SetResistance( EtVector3 &vVec ) { m_pMovement->SetResistance(vVec); }
void SetResistanceX( float fPower ) { m_pMovement->SetResistanceX(fPower); }
void SetResistanceY( float fPower ) { m_pMovement->SetResistanceY(fPower); }
void SetResistanceZ( float fPower ) { m_pMovement->SetResistanceZ(fPower); }
#ifdef PRE_ADD_GRAVITY_PROPERTY
void SetAppliedYDistance( bool bAppliedYDistance ) { m_pMovement->SetAppliedYDistance( bAppliedYDistance ); }
#endif // PRE_ADD_GRAVITY_PROPERTY
void Jump( float fPower, EtVector2 &vVec ){ m_pMovement->Jump( fPower, vVec); }
void MoveJumpX( float fSpeed ){ m_pMovement->MoveJumpX(fSpeed); }
void MoveJumpZ( float fSpeed ){ m_pMovement->MoveJumpZ(fSpeed); }
void SetVelocityByMoveVector( EtVector3 &vVec ){ m_pMovement->SetVelocityByMoveVector(vVec); }
void SetMagnetPosition( EtVector3 &vPos ){ m_pMovement->SetMagnetPosition(vPos); }
bool IsFloorCollision() { return m_pMovement->IsFloorCollision(); }
virtual void Look( EtVector2 &vVec, bool bForceRotate = true ){ m_pMovement->Look( vVec, bForceRotate ); }
void LookTarget( DnActorHandle &hActor ){ m_pMovement->LookTarget( hActor ); }
EtVector3 *GetLookDir(){ return m_pMovement->GetLookDir(); }
EtVector2 *GetLookDirTarget(){ return m_pMovement->GetLookDirTarget(); }
DnActorHandle GetLookTarget(){ return m_pMovement->GetLookTarget(); }
void ResetLook(){ m_pMovement->ResetLook(); }
void ResetNaviMode() { m_pMovement->ResetNaviMode(); }
float GetNaviTargetMinDistance(){ return m_pMovement->GetNaviTargetMinDistance(); }
const char* GetNaviTargetActionName(){ return m_pMovement->GetNaviTargetActionName(); }
size_t GetWayPointSize(){ return m_pMovement->GetWayPointSize(); }
void SetJumpMovement( EtVector2& vVec ){ m_pMovement->SetJumpMovement(vVec); }
void EnableDebugDraw(bool bDebugRender ) { m_pMovement->EnableDebugDraw(bDebugRender); }
bool GetFloorForceVelocity(){ return m_pMovement->GetFloorForceVelocity(); }
bool GetLastFloorForceVelocity(){ return m_pMovement->GetLastFloorForceVelocity(); }
MatrixEx* GetMatEx(){ return m_pMovement->GetMatEx(); }
bool CheckDiagonalBlock( float fX, float fY ){ return m_pMovement->CheckDiagonalBlock(fX,fY); }
protected:
MAMovementBase* m_pMovement;
};