DragonNest/Client/EtActionTool/SCRProjectile.cpp

162 lines
4.7 KiB
C++
Raw Normal View History

2024-12-19 09:48:26 +08:00
#include "StdAfx.h"
#include "SCRProjectile.h"
#include "ActionSignal.h"
#include "ActionObject.h"
#include "InputReceiver.h"
#include "RenderBase.h"
#include "resource.h"
#include "MainFrm.h"
#include "UserMessage.h"
#include "PaneDefine.h"
CSCRProjectile::CSCRProjectile( const char *szSignalName )
: CSignalCustomRender( szSignalName )
{
}
CSCRProjectile::~CSCRProjectile()
{
}
void CSCRProjectile::Initialize()
{
m_bActivate = true;
OnModify();
}
void CSCRProjectile::OnModify()
{
m_matExWorld.Identity();
m_matExWorld = *((CActionObject*)m_pSignal->GetParent()->GetParent())->GetMatEx();
m_matExWorld.m_vPosition = m_pSignal->GetProperty(1)->GetVariableVector3();
}
void CSCRProjectile::OnSelect( bool bFirst )
{
EtVector3 vPos[2];
float fSize = 30.f;
CUnionValueProperty *pVariable = m_pSignal->GetProperty(1);
EtVector3 vDist = ((CActionObject*)m_pSignal->GetParent()->GetParent())->GetAniDistance() + pVariable->GetVariableVector3();
vPos[0] = EtVector3( 0.f, 0.f, fSize ) + vDist;
vPos[1] = EtVector3( 0.f, 0.f, -fSize ) + vDist;
EternityEngine::DrawLine3D( vPos[0], vPos[1], 0xFFFFFF00 );
vPos[0] = EtVector3( 0.f, fSize, 0.f ) + vDist;
vPos[1] = EtVector3( 0.f, -fSize, 0.f ) + vDist;
EternityEngine::DrawLine3D( vPos[0], vPos[1], 0xFFFFFF00 );
vPos[0] = EtVector3( fSize, 0.f, 0.f ) + vDist;
vPos[1] = EtVector3( -fSize, 0.f, 0.f ) + vDist;
EternityEngine::DrawLine3D( vPos[0], vPos[1], 0xFFFFFF00 );
// [12/10/2007 nextome]
// Make Direction
EtVector3 m_vDirection[18];
m_vDirection[0] = D3DXVECTOR3( 0, 0, -10 );
m_vDirection[1] = D3DXVECTOR3( 0, 0, 10 );
m_vDirection[2] = D3DXVECTOR3( 2, -2, -10 );
m_vDirection[3] = D3DXVECTOR3( 2, 2, -10 );
m_vDirection[4] = D3DXVECTOR3( -2, -2, -10 );
m_vDirection[5] = D3DXVECTOR3( -2, 2, -10 );
m_vDirection[6] = D3DXVECTOR3( 2, -2, -10 );
m_vDirection[7] = D3DXVECTOR3( -2, -2, -10 );
m_vDirection[8] = D3DXVECTOR3( 2, 2, -10 );
m_vDirection[9] = D3DXVECTOR3( -2, 2, -10 );
m_vDirection[10] = D3DXVECTOR3( 2, 2, -10 );
m_vDirection[11] = D3DXVECTOR3( 0, 0, -15 );
m_vDirection[12] = D3DXVECTOR3( 2, -2, -10 );
m_vDirection[13] = D3DXVECTOR3( 0, 0, -15 );
m_vDirection[14] = D3DXVECTOR3( -2, 2, -10 );
m_vDirection[15] = D3DXVECTOR3( 0, 0, -15 );
m_vDirection[16] = D3DXVECTOR3( -2, -2, -10 );
m_vDirection[17] = D3DXVECTOR3( 0, 0, -15 );
pVariable = m_pSignal->GetProperty(8);
if ( !pVariable )
return;
EtVector3 vDir = pVariable->GetVariableVector3();
EtVector3 vDirection[18];
MatrixEx Cross;
Cross.m_vPosition = m_pSignal->GetProperty(1)->GetVariableVector3();
Cross.m_vZAxis = -vDir;
Cross.MakeUpCartesianByZAxis();
for( int i=0; i<18; i++ ) {
vDirection[i] = m_vDirection[i] * 5.0f;
EtVec3TransformCoord( &vDirection[i], &vDirection[i], Cross );
if( i % 2 == 1 ) {
EternityEngine::DrawLine3D( vDirection[i-1], vDirection[i], 0xFFFFFF00 );
}
}
}
void CSCRProjectile::OnUnSelect()
{
}
void CSCRProjectile::OnProcess( LOCAL_TIME LocalTime, float fDelta )
{
}
void CSCRProjectile::OnInputReceive( int nReceiverState, LOCAL_TIME LocalTime, CInputReceiver *pReceiver )
{
if( nReceiverState & CInputReceiver::IR_MOUSE_MOVE )
{
if( GetAsyncKeyState( VK_LCONTROL ) & 0x8000 )
{
if( pReceiver->IsPushMouseButton(0) )
{
MatrixEx *pCamera = CRenderBase::GetInstance().GetLastUpdateCamera();
MatrixEx Cross;
Cross.m_vPosition = m_pSignal->GetProperty(1)->GetVariableVector3();
Cross.m_vXAxis = pCamera->m_vXAxis;
Cross.m_vYAxis = EtVector3( 0.f, 1.f, 0.f );
EtVec3Cross( &Cross.m_vZAxis, &Cross.m_vXAxis, &Cross.m_vYAxis );
Cross.MoveLocalXAxis( pReceiver->GetMouseVariation().x );
Cross.MoveLocalZAxis( -pReceiver->GetMouseVariation().y );
m_pSignal->GetProperty(1)->SetVariable( Cross.m_vPosition );
CWnd *pWnd = GetPaneWnd( PROPERTY_PANE );
pWnd->SendMessage( UM_PROPERTY_PANE_SET_MODIFY, 1, (LPARAM)m_pSignal->GetProperty(1) );
}
else if( pReceiver->IsPushMouseButton(1) ) {
EtVector3 vPos = m_pSignal->GetProperty(1)->GetVariableVector3();
vPos.y += -pReceiver->GetMouseVariation().y;
m_pSignal->GetProperty(1)->SetVariable( vPos );
CWnd *pWnd = GetPaneWnd( PROPERTY_PANE );
pWnd->SendMessage( UM_PROPERTY_PANE_SET_MODIFY, 1, (LPARAM)m_pSignal->GetProperty(1) );
}
else if( pReceiver->IsPushMouseButton(2) ) {
MatrixEx Cross;
Cross.m_vZAxis = m_pSignal->GetProperty(8)->GetVariableVector3();
Cross.MakeUpCartesianByZAxis();
Cross.RotateYAxis( pReceiver->GetMouseVariation().x / 2.f );
Cross.RotatePitch( pReceiver->GetMouseVariation().y / 2.f );
m_pSignal->GetProperty(8)->SetVariable( Cross.m_vZAxis );
CWnd *pWnd = GetPaneWnd( PROPERTY_PANE );
pWnd->SendMessage( UM_PROPERTY_PANE_SET_MODIFY, 8, (LPARAM)m_pSignal->GetProperty(8) );
}
}
}
}