368 lines
12 KiB
C++
368 lines
12 KiB
C++
// ParamInputDlg.cpp : implementation file
|
||
//
|
||
|
||
#include "stdafx.h"
|
||
#include "EtWorldPainter.h"
|
||
#include "ParamInputDlg.h"
|
||
#include "GlobalValue.h"
|
||
#include "TEtWorld.h"
|
||
#include "TEtWorldGrid.h"
|
||
#include "TEtWorldSector.h"
|
||
#include "TEtWorldProp.h"
|
||
#include "TEtWorldEventControl.h"
|
||
#include "TEtWorldEventArea.h"
|
||
#include "TEtTrigger.h"
|
||
#include "UserMessage.h"
|
||
|
||
|
||
// CParamInputDlg dialog
|
||
|
||
IMPLEMENT_DYNAMIC(CParamInputDlg, CDialog)
|
||
|
||
CParamInputDlg::CParamInputDlg(CWnd* pParent /*=NULL*/)
|
||
: CDialog(CParamInputDlg::IDD, pParent)
|
||
{
|
||
m_StartPos = CPoint( -1, -1 );
|
||
m_Type = (CEtTrigger::ParamTypeEnum)-1;
|
||
m_pVariable = NULL;
|
||
}
|
||
|
||
CParamInputDlg::~CParamInputDlg()
|
||
{
|
||
SAFE_DELETE( m_pVariable );
|
||
}
|
||
|
||
void CParamInputDlg::DoDataExchange(CDataExchange* pDX)
|
||
{
|
||
CDialog::DoDataExchange(pDX);
|
||
}
|
||
|
||
|
||
BEGIN_MESSAGE_MAP(CParamInputDlg, CDialog)
|
||
ON_WM_ERASEBKGND()
|
||
ON_WM_PAINT()
|
||
ON_BN_CLICKED( 1001, &OnBnClickedPick )
|
||
ON_BN_CLICKED( IDOK, &OnBnClickedOK )
|
||
ON_BN_CLICKED( IDCANCEL, &OnBnClickedCancel )
|
||
END_MESSAGE_MAP()
|
||
|
||
|
||
// CParamInputDlg message handlers
|
||
|
||
BOOL CParamInputDlg::OnEraseBkgnd(CDC* pDC)
|
||
{
|
||
// TODO: Add your message handler code here and/or call default
|
||
return TRUE;
|
||
}
|
||
|
||
void CParamInputDlg::SetInitFlag( CEtTrigger::ParamTypeEnum Type, CPoint &p, CUnionValueProperty *pDefaultVariable )
|
||
{
|
||
m_Type = Type;
|
||
m_StartPos = p;
|
||
switch( Type ) {
|
||
case CEtTrigger::Integer: m_pVariable = new CUnionValueProperty( CUnionValueProperty::Integer ); break;
|
||
case CEtTrigger::Float: m_pVariable = new CUnionValueProperty( CUnionValueProperty::Float ); break;
|
||
case CEtTrigger::String: m_pVariable = new CUnionValueProperty( CUnionValueProperty::String ); break;
|
||
case CEtTrigger::Operator: m_pVariable = new CUnionValueProperty( CUnionValueProperty::Integer ); break;
|
||
case CEtTrigger::Position: m_pVariable = new CUnionValueProperty( CUnionValueProperty::Vector3 ); break;
|
||
case CEtTrigger::Prop: m_pVariable = new CUnionValueProperty( CUnionValueProperty::Integer ); break;
|
||
case CEtTrigger::EventArea: m_pVariable = new CUnionValueProperty( CUnionValueProperty::Integer ); break;
|
||
case CEtTrigger::Value: m_pVariable = new CUnionValueProperty( CUnionValueProperty::Integer ); break;
|
||
}
|
||
*m_pVariable = *pDefaultVariable;
|
||
}
|
||
|
||
BOOL CParamInputDlg::OnInitDialog()
|
||
{
|
||
CDialog::OnInitDialog();
|
||
|
||
CRect rcRect;
|
||
GetClientRect( &rcRect );
|
||
// TODO: Add extra initialization here
|
||
int nWidth = 150, nHeight = 24;
|
||
|
||
switch( m_Type ) {
|
||
case CEtTrigger::Integer:
|
||
{
|
||
CRect rcControl = CRect( 50, 3, nWidth - 4, 21 );
|
||
m_szDesc = "Integer";
|
||
m_EditBox.Create( WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER | ES_RIGHT, rcControl, this, 1001 );
|
||
m_EditBox.ShowWindow( SW_SHOW );
|
||
m_EditBox.SetFont( GetParent()->GetFont() );
|
||
m_EditBox.SetWindowText( *m_pVariable->GetBindStr() );
|
||
}
|
||
break;
|
||
case CEtTrigger::Float:
|
||
{
|
||
CRect rcControl = CRect( 50, 3, nWidth - 4, 21 );
|
||
m_szDesc = "Float";
|
||
m_EditBox.Create( WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER | ES_RIGHT, rcControl, this, 1001 );
|
||
m_EditBox.ShowWindow( SW_SHOW );
|
||
m_EditBox.SetFont( GetParent()->GetFont() );
|
||
m_EditBox.SetWindowText( *m_pVariable->GetBindStr() );
|
||
}
|
||
break;
|
||
case CEtTrigger::String:
|
||
{
|
||
CRect rcControl = CRect( 50, 3, nWidth - 4, 21 );
|
||
m_szDesc = "String";
|
||
m_EditBox.Create( WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER | ES_LEFT | ES_AUTOVSCROLL | ES_AUTOHSCROLL, rcControl, this, 1001 );
|
||
m_EditBox.ShowWindow( SW_SHOW );
|
||
m_EditBox.SetFont( GetParent()->GetFont() );
|
||
m_EditBox.SetWindowText( *m_pVariable->GetBindStr() );
|
||
}
|
||
break;
|
||
case CEtTrigger::Operator:
|
||
{
|
||
nHeight = 26;
|
||
CRect rcControl = CRect( 50, 3, nWidth - 4, 200 );
|
||
m_szDesc = "Operator";
|
||
m_Combo.Create( WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER | CBN_DROPDOWN | WS_VSCROLL, rcControl, this, 1001 );
|
||
m_Combo.InsertString( m_Combo.GetCount(), "==" );
|
||
m_Combo.InsertString( m_Combo.GetCount(), "!=" );
|
||
m_Combo.InsertString( m_Combo.GetCount(), ">" );
|
||
m_Combo.InsertString( m_Combo.GetCount(), "<" );
|
||
m_Combo.InsertString( m_Combo.GetCount(), ">=" );
|
||
m_Combo.InsertString( m_Combo.GetCount(), "<=" );
|
||
|
||
m_Combo.SetCurSel( m_pVariable->GetVariableInt() );
|
||
m_Combo.ShowWindow( SW_SHOW );
|
||
m_Combo.SetFont( GetParent()->GetFont() );
|
||
}
|
||
break;
|
||
case CEtTrigger::Position:
|
||
{
|
||
nWidth = 250;
|
||
nHeight = 45;
|
||
|
||
m_szDesc = "Position";
|
||
CRect rcControl = CRect( 50, 3, nWidth - 4, 21 );
|
||
m_Button.Create( "Pick", WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER, rcControl, this, 1001 );
|
||
m_Button.SetFont( GetParent()->GetFont() );
|
||
|
||
rcControl = CRect( 50, 24, nWidth - 4, 42 );
|
||
m_EditBox.Create( WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER, rcControl, this, 1002 );
|
||
CString szStr;
|
||
szStr.Format( "%.2f; %.2f; %.2f", m_pVariable->GetVariableVector3().x, m_pVariable->GetVariableVector3().y, m_pVariable->GetVariableVector3().z );
|
||
m_EditBox.SetWindowText( szStr );
|
||
m_EditBox.SetFont( GetParent()->GetFont() );
|
||
|
||
}
|
||
break;
|
||
case CEtTrigger::Prop:
|
||
{
|
||
nWidth = 350;
|
||
nHeight = 50;
|
||
|
||
m_szDesc = "Prop";
|
||
CRect rcControl = CRect( 50, 3, nWidth - 4, 21 );
|
||
m_Button.Create( "Pick", WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER, rcControl, this, 1001 );
|
||
m_Button.SetFont( GetParent()->GetFont() );
|
||
|
||
rcControl = CRect( 50, 24, nWidth - 4, 200 );
|
||
m_Combo.Create( WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER | CBN_DROPDOWN | WS_VSCROLL, rcControl, this, 1002 );
|
||
|
||
SectorIndex Sector = CGlobalValue::GetInstance().m_SelectGrid;
|
||
CTEtWorldSector *pSector = CTEtWorld::GetInstance().GetSector( Sector );
|
||
CString szTemp;
|
||
for( DWORD i=0; i<pSector->GetPropCount(); i++ ) {
|
||
CTEtWorldProp *pProp = (CTEtWorldProp*)pSector->GetPropFromIndex(i);
|
||
szTemp.Format( "%s (%d)", pProp->GetPropName(), pProp->GetCreateUniqueID() );
|
||
m_Combo.InsertString( m_Combo.GetCount(), szTemp );
|
||
}
|
||
|
||
m_Combo.SetCurSel(0);
|
||
m_Combo.SetFont( GetParent()->GetFont() );
|
||
}
|
||
break;
|
||
case CEtTrigger::EventArea:
|
||
{
|
||
nWidth = 250;
|
||
nHeight = 50;
|
||
m_szDesc = "EventArea";
|
||
CRect rcControl = CRect( 70, 3, nWidth - 4, 21 );
|
||
m_Button.Create( "Pick", WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER, rcControl, this, 1001 );
|
||
m_Button.SetFont( GetParent()->GetFont() );
|
||
|
||
rcControl = CRect( 70, 24, nWidth - 4, 200 );
|
||
m_Combo.Create( WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER | CBN_DROPDOWN | WS_VSCROLL, rcControl, this, 1002 );
|
||
|
||
SectorIndex Sector = CGlobalValue::GetInstance().m_SelectGrid;
|
||
CTEtWorldSector *pSector = CTEtWorld::GetInstance().GetSector( Sector );
|
||
CString szTemp;
|
||
int nSelectIndex = -1;
|
||
int nOffset = 0;
|
||
for( DWORD i=0; i<pSector->GetControlCount(); i++ ) {
|
||
CTEtWorldEventControl *pControl = (CTEtWorldEventControl *)pSector->GetControlFromIndex(i);
|
||
for( DWORD j=0; j<pControl->GetAreaCount(); j++ ) {
|
||
CEtWorldEventArea *pArea = pControl->GetAreaFromIndex(j);
|
||
szTemp.Format( "%s - %s(%d)", pControl->GetName(), pArea->GetName(), pArea->GetCreateUniqueID() );
|
||
m_Combo.InsertString( m_Combo.GetCount(), szTemp );
|
||
if( pArea->GetCreateUniqueID() == m_pVariable->GetVariableInt() ) {
|
||
nSelectIndex = nOffset;
|
||
}
|
||
nOffset++;
|
||
}
|
||
}
|
||
if( nSelectIndex == -1 ) nSelectIndex = 0;
|
||
m_Combo.SetCurSel(nSelectIndex);
|
||
m_Combo.SetFont( GetParent()->GetFont() );
|
||
|
||
}
|
||
break;
|
||
case CEtTrigger::Value:
|
||
{
|
||
nHeight = 26;
|
||
nWidth = 250;
|
||
CRect rcControl = CRect( 50, 3, nWidth - 4, 200 );
|
||
m_szDesc = "Value";
|
||
m_Combo.Create( WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER | CBN_DROPDOWN | WS_VSCROLL, rcControl, this, 1001 );
|
||
|
||
SectorIndex Sector = CGlobalValue::GetInstance().m_SelectGrid;
|
||
CTEtWorldSector *pSector = CTEtWorld::GetInstance().GetSector( Sector );
|
||
CTEtTrigger *pTrigger = (CTEtTrigger *)pSector->GetTrigger();
|
||
|
||
CEtTrigger::DefineValue *pValue;
|
||
for( DWORD i=0; i<pTrigger->GetDefineValueCount(); i++ ) {
|
||
pValue = pTrigger->GetDefineValueFromIndex(i);
|
||
m_Combo.InsertString( m_Combo.GetCount(), pValue->szName.c_str() );
|
||
if( pValue->nUniqueID == m_pVariable->GetVariableInt() ) {
|
||
m_Combo.SetCurSel( i );
|
||
}
|
||
}
|
||
|
||
m_Combo.ShowWindow( SW_SHOW );
|
||
m_Combo.SetFont( GetParent()->GetFont() );
|
||
}
|
||
break;
|
||
}
|
||
|
||
MoveWindow( m_StartPos.x, m_StartPos.y, nWidth, nHeight );
|
||
|
||
return TRUE; // return TRUE unless you set the focus to a control
|
||
// EXCEPTION: OCX Property Pages should return FALSE
|
||
}
|
||
|
||
void CParamInputDlg::OnPaint()
|
||
{
|
||
CPaintDC dc(this); // device context for painting
|
||
// TODO: Add your message handler code here
|
||
// Do not call CDialog::OnPaint() for painting messages
|
||
CRect rcRect;
|
||
GetClientRect( &rcRect );
|
||
dc.FillSolidRect( &rcRect, RGB( 255, 255, 220 ) );
|
||
dc.Draw3dRect( &rcRect, RGB( 0, 0, 0 ), RGB( 0, 0, 0 ) );
|
||
|
||
CFont *pFontParent = GetParent()->GetFont();
|
||
CFont *pOldFont = dc.SelectObject( pFontParent );
|
||
|
||
dc.SetBkMode( TRANSPARENT );
|
||
dc.SetTextColor( RGB( 0, 0, 0 ) );
|
||
dc.TextOut( 3, 4, m_szDesc );
|
||
|
||
dc.SelectObject( pOldFont );
|
||
}
|
||
|
||
|
||
void CParamInputDlg::OnBnClickedPick()
|
||
{
|
||
OutputDebug( "<EFBFBD><EFBFBD>ư <20><><EFBFBD>ȴ<EFBFBD>" );
|
||
|
||
CGlobalValue::GetInstance().m_nPickType = m_Type;
|
||
|
||
CDialog::OnOK();
|
||
}
|
||
|
||
void CParamInputDlg::OnBnClickedOK()
|
||
{
|
||
OutputDebug( "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" );
|
||
CGlobalValue::GetInstance().m_nPickType = -1;
|
||
|
||
switch( m_Type ) {
|
||
case CEtTrigger::Integer:
|
||
{
|
||
CString szStr;
|
||
m_EditBox.GetWindowText( szStr );
|
||
m_pVariable->SetVariable( (int)atoi(szStr) );
|
||
}
|
||
break;
|
||
case CEtTrigger::Float:
|
||
{
|
||
CString szStr;
|
||
m_EditBox.GetWindowText( szStr );
|
||
m_pVariable->SetVariable( (float)atof(szStr) );
|
||
}
|
||
break;
|
||
case CEtTrigger::String:
|
||
{
|
||
CString szStr;
|
||
m_EditBox.GetWindowText( szStr );
|
||
m_pVariable->SetVariable( (char*)szStr.GetBuffer() );
|
||
}
|
||
break;
|
||
case CEtTrigger::Operator:
|
||
m_pVariable->SetVariable( (int)m_Combo.GetCurSel() );
|
||
break;
|
||
case CEtTrigger::Position:
|
||
{
|
||
CString szStr;
|
||
m_EditBox.GetWindowText( szStr );
|
||
EtVector3 vPos;
|
||
sscanf_s( szStr, "%f; %f; %f", &vPos.x, &vPos.y, &vPos.z );
|
||
|
||
m_pVariable->SetVariable( vPos );
|
||
}
|
||
break;
|
||
case CEtTrigger::Prop:
|
||
{
|
||
/*
|
||
CString szStr;
|
||
m_EditBox.GetWindowText( szStr );
|
||
EtVector3 vPos;
|
||
sscanf_s( szStr, "%f; %f; %f", &vPos.x, &vPos.y, &vPos.z );
|
||
*/
|
||
SectorIndex Sector = CGlobalValue::GetInstance().m_SelectGrid;
|
||
CTEtWorldSector *pSector = CTEtWorld::GetInstance().GetSector( Sector );
|
||
CEtWorldProp *pProp = pSector->GetPropFromIndex( m_Combo.GetCurSel() );
|
||
m_pVariable->SetVariable( pProp->GetCreateUniqueID() );
|
||
}
|
||
break;
|
||
case CEtTrigger::EventArea:
|
||
{
|
||
CString szStr;
|
||
int nIndex = -1;
|
||
char szTemp[2][256];
|
||
m_Combo.GetLBText( m_Combo.GetCurSel(), szStr );
|
||
sscanf_s( "%s - %s(%d)", szTemp[0], szTemp[1], &nIndex );
|
||
m_pVariable->SetVariable( nIndex );
|
||
}
|
||
break;
|
||
case CEtTrigger::Value:
|
||
{
|
||
SectorIndex Sector = CGlobalValue::GetInstance().m_SelectGrid;
|
||
CTEtWorldSector *pSector = CTEtWorld::GetInstance().GetSector( Sector );
|
||
CTEtTrigger *pTrigger = (CTEtTrigger *)pSector->GetTrigger();
|
||
|
||
CString szStr;
|
||
m_Combo.GetLBText( m_Combo.GetCurSel(), szStr );
|
||
|
||
CEtTrigger::DefineValue *pValue;
|
||
for( DWORD i=0; i<pTrigger->GetDefineValueCount(); i++ ) {
|
||
pValue = pTrigger->GetDefineValueFromIndex(i);
|
||
if( strcmp( szStr.GetBuffer(), pValue->szName.c_str() ) == NULL ) {
|
||
m_pVariable->SetVariable( pValue->nUniqueID );
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
|
||
CDialog::OnOK();
|
||
}
|
||
|
||
void CParamInputDlg::OnBnClickedCancel()
|
||
{
|
||
OutputDebug( "<EFBFBD>˼<EFBFBD>" );
|
||
CGlobalValue::GetInstance().m_nPickType = -1;
|
||
CDialog::OnCancel();
|
||
}
|