166 lines
4.9 KiB
C++
166 lines
4.9 KiB
C++
#include "StdAfx.h"
|
|
#include "InstanceBase.h"
|
|
#include "AbstractPlayer.h"
|
|
#include "../gameLib/ActorInstance.h"
|
|
|
|
const int c_iFishingRotStep = 8;
|
|
const float c_fFishingDistance = 600.0f;
|
|
|
|
void CInstanceBase::SetMotionMode(int iMotionMode)
|
|
{
|
|
m_GraphicThingInstance.SetMotionMode(iMotionMode);
|
|
}
|
|
|
|
int CInstanceBase::GetMotionMode(DWORD dwMotionIndex)
|
|
{
|
|
return m_GraphicThingInstance.GetMotionMode();
|
|
}
|
|
|
|
void CInstanceBase::SetLoopMotion(WORD wMotion, float fBlendTime/* =0.1f */, float fSpeedRatio)
|
|
{
|
|
m_GraphicThingInstance.SetLoopMotion(wMotion, fBlendTime, fSpeedRatio);
|
|
}
|
|
|
|
void CInstanceBase::PushOnceMotion(WORD wMotion, float fBlendTime, float fSpeedRatio)
|
|
{
|
|
m_GraphicThingInstance.PushOnceMotion(wMotion, fBlendTime, fSpeedRatio);
|
|
}
|
|
|
|
void CInstanceBase::PushLoopMotion(WORD wMotion, float fBlendTime, float fSpeedRatio)
|
|
{
|
|
m_GraphicThingInstance.PushLoopMotion(wMotion, fBlendTime, fSpeedRatio);
|
|
}
|
|
|
|
void CInstanceBase::ResetLocalTime()
|
|
{
|
|
m_GraphicThingInstance.ResetLocalTime();
|
|
}
|
|
|
|
void CInstanceBase::SetEndStopMotion()
|
|
{
|
|
m_GraphicThingInstance.SetEndStopMotion();
|
|
}
|
|
|
|
BOOL CInstanceBase::isLock()
|
|
{
|
|
return m_GraphicThingInstance.isLock();
|
|
}
|
|
|
|
void CInstanceBase::StartFishing(float frot)
|
|
{
|
|
BlendRotation(frot);
|
|
|
|
const TPixelPosition& c_rkPPosCur=m_GraphicThingInstance.NEW_GetCurPixelPositionRef();
|
|
float fRot = m_GraphicThingInstance.GetTargetRotation();
|
|
//float fPlainCoordRot=ELRightCoord_ConvertToPlainCoordDegree(fRightCoordRot);
|
|
|
|
TPixelPosition kPPosFishing;
|
|
ELPlainCoord_GetRotatedPixelPosition(c_rkPPosCur.x, c_rkPPosCur.y, c_fFishingDistance, fRot, &kPPosFishing.x, &kPPosFishing.y);
|
|
if (!__Background_GetWaterHeight(kPPosFishing, &kPPosFishing.z))
|
|
kPPosFishing.z=c_rkPPosCur.z;
|
|
|
|
D3DXVECTOR3 v3Fishing;
|
|
PixelPositionToD3DXVECTOR3(kPPosFishing, &v3Fishing);
|
|
m_GraphicThingInstance.SetFishingPosition(v3Fishing);
|
|
|
|
PushOnceMotion(CRaceMotionData::NAME_FISHING_THROW);
|
|
PushLoopMotion(CRaceMotionData::NAME_FISHING_WAIT);
|
|
}
|
|
void CInstanceBase::StopFishing()
|
|
{
|
|
m_GraphicThingInstance.InterceptOnceMotion(CRaceMotionData::NAME_FISHING_STOP);
|
|
PushLoopMotion(CRaceMotionData::NAME_WAIT);
|
|
}
|
|
void CInstanceBase::ReactFishing()
|
|
{
|
|
PushOnceMotion(CRaceMotionData::NAME_FISHING_REACT);
|
|
PushLoopMotion(CRaceMotionData::NAME_FISHING_WAIT);
|
|
}
|
|
void CInstanceBase::CatchSuccess()
|
|
{
|
|
m_GraphicThingInstance.InterceptOnceMotion(CRaceMotionData::NAME_FISHING_CATCH);
|
|
PushLoopMotion(CRaceMotionData::NAME_WAIT);
|
|
}
|
|
void CInstanceBase::CatchFail()
|
|
{
|
|
m_GraphicThingInstance.InterceptOnceMotion(CRaceMotionData::NAME_FISHING_FAIL);
|
|
PushLoopMotion(CRaceMotionData::NAME_WAIT);
|
|
}
|
|
|
|
BOOL CInstanceBase::GetFishingRot(int * pirot)
|
|
{
|
|
const TPixelPosition& c_rkPPosCur=m_GraphicThingInstance.NEW_GetCurPixelPositionRef();
|
|
float fCharacterRot = m_GraphicThingInstance.GetRotation();
|
|
|
|
//float frot = fCharacterRot;
|
|
|
|
for (float fRot=0.0f; fRot<=180.0f; fRot+=10.0f)
|
|
{
|
|
TPixelPosition kPPosFishingRight;
|
|
ELPlainCoord_GetRotatedPixelPosition(c_rkPPosCur.x, c_rkPPosCur.y, c_fFishingDistance, fCharacterRot+fRot, &kPPosFishingRight.x, &kPPosFishingRight.y);
|
|
if (__Background_IsWaterPixelPosition(kPPosFishingRight))
|
|
{
|
|
*pirot = fCharacterRot+fRot;
|
|
return TRUE;
|
|
}
|
|
|
|
TPixelPosition kPPosFishingLeft;
|
|
ELPlainCoord_GetRotatedPixelPosition(c_rkPPosCur.x, c_rkPPosCur.y, c_fFishingDistance, fCharacterRot-fRot, &kPPosFishingLeft.x, &kPPosFishingLeft.y);
|
|
if (__Background_IsWaterPixelPosition(kPPosFishingLeft))
|
|
{
|
|
*pirot = fCharacterRot-fRot;
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
void CInstanceBase::__EnableChangingTCPState()
|
|
{
|
|
m_bEnableTCPState = TRUE;
|
|
}
|
|
|
|
void CInstanceBase::__DisableChangingTCPState()
|
|
{
|
|
m_bEnableTCPState = FALSE;
|
|
}
|
|
|
|
void CInstanceBase::ActDualEmotion(CInstanceBase & rkDstInst, WORD wMotionNumber1, WORD wMotionNumber2)
|
|
{
|
|
if (!IsWaiting())
|
|
{
|
|
m_GraphicThingInstance.SetLoopMotion(CRaceMotionData::NAME_WAIT, 0.05f);
|
|
}
|
|
if (!rkDstInst.IsWaiting())
|
|
{
|
|
rkDstInst.m_GraphicThingInstance.SetLoopMotion(CRaceMotionData::NAME_WAIT, 0.05f);
|
|
}
|
|
|
|
const float c_fEmotionDistance = 100.0f;
|
|
const TPixelPosition & c_rMainPosition = NEW_GetCurPixelPositionRef();
|
|
const TPixelPosition & c_rTargetPosition = rkDstInst.NEW_GetCurPixelPositionRef();
|
|
TPixelPosition kDirection = c_rMainPosition - c_rTargetPosition;
|
|
float fDistance = sqrtf((kDirection.x*kDirection.x) + (kDirection.y*kDirection.y));
|
|
TPixelPosition kDstPosition;
|
|
kDstPosition.x = c_rTargetPosition.x + (kDirection.x/fDistance)*c_fEmotionDistance;
|
|
kDstPosition.y = c_rTargetPosition.y + (kDirection.y/fDistance)*c_fEmotionDistance;
|
|
|
|
DWORD dwCurTime = ELTimer_GetServerMSec() + 500;
|
|
PushTCPStateExpanded(dwCurTime, kDstPosition, 0.0f, FUNC_EMOTION, MAKELONG(wMotionNumber1, wMotionNumber2), rkDstInst.GetVirtualID());
|
|
|
|
__DisableChangingTCPState();
|
|
rkDstInst.__DisableChangingTCPState();
|
|
|
|
if (__IsMainInstance() || rkDstInst.__IsMainInstance())
|
|
{
|
|
IAbstractPlayer & rPlayer=IAbstractPlayer::GetSingleton();
|
|
rPlayer.StartEmotionProcess();
|
|
}
|
|
}
|
|
|
|
void CInstanceBase::ActEmotion(DWORD dwMotionNumber)
|
|
{
|
|
PushOnceMotion(dwMotionNumber);
|
|
}
|