#include "StdAfx.h" #include "SCGravity.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" CSCRGravity::CSCRGravity( const char *szSignalName ) : CSignalCustomRender( szSignalName ) { } CSCRGravity::~CSCRGravity() { } void CSCRGravity::Initialize() { m_bActivate = true; OnModify(); } void CSCRGravity::OnModify() { for( int i=0; i<5; i++ ) m_vVecList[i].clear(); float fDistanceMax = m_pSignal->GetProperty(0)->GetVariableFloat(); float fDistanceMin = m_pSignal->GetProperty(6)->GetVariableFloat(); float fHeightMax = m_pSignal->GetProperty(9)->GetVariableFloat(); float fHeightMin = m_pSignal->GetProperty(10)->GetVariableFloat(); float fCenterAngle = m_pSignal->GetProperty(8)->GetVariableFloat(); float fAngle = m_pSignal->GetProperty(7)->GetVariableFloat(); EtVector3 vPos = EtVector3( 0.f, 0.f, 0.f ); EtVector3 vCenter = EtVector3( 0.f, 0.f, 1.f ); EtMatrix matRotate; EtMatrixRotationY( &matRotate, fCenterAngle / 180.f * D3DX_PI ); EtVec3TransformNormal( &vCenter, &vCenter, &matRotate ); EtVector3 vTemp; int nStart = int(fCenterAngle - ( fAngle )); int nEnd = int(fCenterAngle + ( fAngle )); for( int i=nStart; i<=nEnd; i++ ) { EtMatrixRotationY( &matRotate, ( fCenterAngle - i ) / 180.f * D3DX_PI ); D3DXVec3TransformNormal( &vTemp, &vCenter, &matRotate ); EtVector3 vVtx = vPos + vTemp * fDistanceMin; vVtx.y = vPos.y + fHeightMax; m_vVecList[0].push_back( vVtx ); if( i != nStart && i != nEnd ) m_vVecList[0].push_back( vVtx ); vVtx.y = vPos.y + fHeightMin; m_vVecList[1].push_back( vVtx ); if( i != nStart && i != nEnd ) m_vVecList[1].push_back( vVtx ); vVtx = vPos + vTemp * fDistanceMax; vVtx.y = vPos.y + fHeightMax; m_vVecList[2].push_back( vVtx ); if( i != nStart && i != nEnd ) m_vVecList[2].push_back( vVtx ); vVtx.y = vPos.y + fHeightMin; m_vVecList[3].push_back( vVtx ); if( i != nStart && i != nEnd ) m_vVecList[3].push_back( vVtx ); if( i == nStart ) { m_vVecList[4].push_back( m_vVecList[0][ m_vVecList[0].size() - 1 ] ); m_vVecList[4].push_back( m_vVecList[1][ m_vVecList[1].size() - 1 ] ); m_vVecList[4].push_back( m_vVecList[2][ m_vVecList[2].size() - 1 ] ); m_vVecList[4].push_back( m_vVecList[3][ m_vVecList[3].size() - 1 ] ); m_vVecList[4].push_back( m_vVecList[1][ m_vVecList[1].size() - 1 ] ); m_vVecList[4].push_back( m_vVecList[3][ m_vVecList[3].size() - 1 ] ); m_vVecList[4].push_back( m_vVecList[0][ m_vVecList[0].size() - 1 ] ); m_vVecList[4].push_back( m_vVecList[2][ m_vVecList[2].size() - 1 ] ); } else if( i == nEnd ) { m_vVecList[4].push_back( m_vVecList[0][ m_vVecList[0].size() - 1 ] ); m_vVecList[4].push_back( m_vVecList[1][ m_vVecList[1].size() - 1 ] ); m_vVecList[4].push_back( m_vVecList[2][ m_vVecList[2].size() - 1 ] ); m_vVecList[4].push_back( m_vVecList[3][ m_vVecList[3].size() - 1 ] ); m_vVecList[4].push_back( m_vVecList[1][ m_vVecList[1].size() - 1 ] ); m_vVecList[4].push_back( m_vVecList[3][ m_vVecList[3].size() - 1 ] ); m_vVecList[4].push_back( m_vVecList[0][ m_vVecList[0].size() - 1 ] ); m_vVecList[4].push_back( m_vVecList[2][ m_vVecList[2].size() - 1 ] ); } } } void CSCRGravity::OnSelect( bool bFirst ) { EtVector3 vDist = ((CActionObject*)m_pSignal->GetParent()->GetParent())->GetAniDistance() + m_pSignal->GetProperty(5)->GetVariableVector3(); EtVector3 vPos[2]; for( int i=0; i<5; i++ ) { if( m_vVecList[i].size() < 2 ) continue; for( DWORD j=0; jGetParent()->GetParent())->GetAniDistance() + m_pSignal->GetProperty(5)->GetVariableVector3(); EtVector3 vPos[2]; for( int i=0; i<5; i++ ) { if( m_vVecList[i].size() < 2 ) continue; for( DWORD j=0; jIsPushMouseButton(0) ) { MatrixEx *pCamera = CRenderBase::GetInstance().GetLastUpdateCamera(); MatrixEx Cross; Cross.m_vPosition = m_pSignal->GetProperty(5)->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(5)->SetVariable( Cross.m_vPosition ); CWnd *pWnd = GetPaneWnd( PROPERTY_PANE ); pWnd->SendMessage( UM_PROPERTY_PANE_SET_MODIFY, 5, (LPARAM)m_pSignal->GetProperty(5) ); } else if( pReceiver->IsPushMouseButton(1) ) { EtVector3 vPos = m_pSignal->GetProperty(5)->GetVariableVector3(); vPos.y += -pReceiver->GetMouseVariation().y; m_pSignal->GetProperty(5)->SetVariable( vPos ); CWnd *pWnd = GetPaneWnd( PROPERTY_PANE ); pWnd->SendMessage( UM_PROPERTY_PANE_SET_MODIFY, 5, (LPARAM)m_pSignal->GetProperty(5) ); } } float fValue = pReceiver->GetMouseVariation().x - pReceiver->GetMouseVariation().y; if( GetAsyncKeyState( VK_LMENU ) & 0x8000 ) { if( pReceiver->IsPushMouseButton(0) ) { float fTemp = m_pSignal->GetProperty(0)->GetVariableFloat() + fValue; if( fTemp <= m_pSignal->GetProperty(6)->GetVariableFloat() ) fTemp = m_pSignal->GetProperty(6)->GetVariableFloat(); m_pSignal->GetProperty(0)->SetVariable( fTemp ); CWnd *pWnd = GetPaneWnd( PROPERTY_PANE ); pWnd->SendMessage( UM_PROPERTY_PANE_SET_MODIFY, 0, (LPARAM)m_pSignal->GetProperty(0) ); OnModify(); } else if( pReceiver->IsPushMouseButton(1) ) { float fTemp = m_pSignal->GetProperty(6)->GetVariableFloat() + fValue; if( fTemp >= m_pSignal->GetProperty(0)->GetVariableFloat() ) fTemp = m_pSignal->GetProperty(0)->GetVariableFloat(); m_pSignal->GetProperty(3)->SetVariable( fTemp ); CWnd *pWnd = GetPaneWnd( PROPERTY_PANE ); pWnd->SendMessage( UM_PROPERTY_PANE_SET_MODIFY, 6, (LPARAM)m_pSignal->GetProperty(6) ); OnModify(); } else if( pReceiver->IsPushMouseButton(2) ) { float fTemp = m_pSignal->GetProperty(7)->GetVariableFloat() + fValue; if( fTemp < 0.f ) fTemp = 0.f; if( fTemp >= 180.f ) fTemp = 180.f; m_pSignal->GetProperty(7)->SetVariable( fTemp ); CWnd *pWnd = GetPaneWnd( PROPERTY_PANE ); pWnd->SendMessage( UM_PROPERTY_PANE_SET_MODIFY, 7, (LPARAM)m_pSignal->GetProperty(7) ); OnModify(); } } if( GetAsyncKeyState( VK_LSHIFT ) & 0x8000 ) { if( pReceiver->IsPushMouseButton(0) ) { float fTemp = m_pSignal->GetProperty(9)->GetVariableFloat() + fValue; if( fTemp <= m_pSignal->GetProperty(10)->GetVariableFloat() ) fTemp = m_pSignal->GetProperty(10)->GetVariableFloat(); m_pSignal->GetProperty(9)->SetVariable( fTemp ); CWnd *pWnd = GetPaneWnd( PROPERTY_PANE ); pWnd->SendMessage( UM_PROPERTY_PANE_SET_MODIFY, 9, (LPARAM)m_pSignal->GetProperty(9) ); OnModify(); } else if( pReceiver->IsPushMouseButton(1) ) { float fTemp = m_pSignal->GetProperty(10)->GetVariableFloat() + fValue; if( fTemp >= m_pSignal->GetProperty(9)->GetVariableFloat() ) fTemp = m_pSignal->GetProperty(9)->GetVariableFloat(); m_pSignal->GetProperty(10)->SetVariable( fTemp ); CWnd *pWnd = GetPaneWnd( PROPERTY_PANE ); pWnd->SendMessage( UM_PROPERTY_PANE_SET_MODIFY, 10, (LPARAM)m_pSignal->GetProperty(10) ); OnModify(); } else if( pReceiver->IsPushMouseButton(2) ) { float fTemp = m_pSignal->GetProperty(8)->GetVariableFloat() + fValue; if( fTemp < 0.f ) fTemp = 0.f; if( fTemp >= 360.f ) fTemp = 360.f; m_pSignal->GetProperty(8)->SetVariable( fTemp ); CWnd *pWnd = GetPaneWnd( PROPERTY_PANE ); pWnd->SendMessage( UM_PROPERTY_PANE_SET_MODIFY, 8, (LPARAM)m_pSignal->GetProperty(8) ); OnModify(); } } } }