162 lines
4.7 KiB
C++
162 lines
4.7 KiB
C++
|
|
#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) );
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|