forked from metin2/client
Solution refactoring and restructuring, removed Boost dependency, removed unused tools
This commit is contained in:
76
src/GameLib/ActorInstanceSync.cpp
Normal file
76
src/GameLib/ActorInstanceSync.cpp
Normal file
@ -0,0 +1,76 @@
|
||||
#include "StdAfx.h"
|
||||
#include "ActorInstance.h"
|
||||
#include "RaceData.h"
|
||||
|
||||
|
||||
|
||||
void CActorInstance::__Push(int x, int y)
|
||||
{
|
||||
if (IsResistFallen())
|
||||
return;
|
||||
|
||||
//DWORD dwVID=GetVirtualID();
|
||||
//Tracenf("VID %d SyncPixelPosition %d %d", dwVID, x, y);
|
||||
|
||||
const D3DXVECTOR3& c_rv3Src=GetPosition();
|
||||
const D3DXVECTOR3 c_v3Dst=D3DXVECTOR3(x, -y, c_rv3Src.z);
|
||||
const D3DXVECTOR3 c_v3Delta=c_v3Dst-c_rv3Src;
|
||||
|
||||
const int LoopValue = 100;
|
||||
const D3DXVECTOR3 inc=c_v3Delta / LoopValue;
|
||||
|
||||
D3DXVECTOR3 v3Movement(0.0f, 0.0f, 0.0f);
|
||||
|
||||
IPhysicsWorld* pWorld = IPhysicsWorld::GetPhysicsWorld();
|
||||
|
||||
if (!pWorld)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for(int i = 0; i < LoopValue; ++i)
|
||||
{
|
||||
if (pWorld->isPhysicalCollision(c_rv3Src + v3Movement))
|
||||
{
|
||||
ResetBlendingPosition();
|
||||
return;
|
||||
}
|
||||
v3Movement += inc;
|
||||
}
|
||||
|
||||
SetBlendingPosition(c_v3Dst);
|
||||
|
||||
if (!IsUsingSkill())
|
||||
{
|
||||
int len=sqrt(c_v3Delta.x*c_v3Delta.x+c_v3Delta.y*c_v3Delta.y);
|
||||
if (len>150.0f)
|
||||
{
|
||||
InterceptOnceMotion(CRaceMotionData::NAME_DAMAGE_FLYING);
|
||||
PushOnceMotion(CRaceMotionData::NAME_STAND_UP);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CActorInstance::TEMP_Push(int x, int y)
|
||||
{
|
||||
__Push(x, y);
|
||||
}
|
||||
|
||||
bool CActorInstance::__IsSyncing()
|
||||
{
|
||||
if (IsDead())
|
||||
return TRUE;
|
||||
|
||||
if (IsStun())
|
||||
return TRUE;
|
||||
|
||||
if (IsPushing())
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool CActorInstance::IsPushing()
|
||||
{
|
||||
return m_PhysicsObject.isBlending();
|
||||
}
|
Reference in New Issue
Block a user