Files
FC1/Editor/AIPointPanel.cpp
romkazvo 34d6c5d489 123
2023-08-07 19:29:24 +08:00

213 lines
4.8 KiB
C++

// AIPointPanel.cpp : implementation file
//
#include "stdafx.h"
#include "AIPointPanel.h"
#include "Objects\AIPoint.h"
// CAIPointPanel dialog
IMPLEMENT_DYNCREATE(CAIPointPanel, CDialog)
CAIPointPanel::CAIPointPanel(CWnd* pParent /*=NULL*/)
: CDialog(CAIPointPanel::IDD, pParent)
, m_type(0)
{
m_object = 0;
Create( IDD,pParent );
}
CAIPointPanel::~CAIPointPanel()
{
}
void CAIPointPanel::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_NODES, m_links);
DDX_Control(pDX, IDC_PICK, m_pickBtn);
DDX_Control(pDX, IDC_SELECT, m_selectBtn);
DDX_Control(pDX, IDC_REMOVE, m_removeBtn);
DDX_Radio(pDX, IDC_WAYPOINT, m_type);
}
BOOL CAIPointPanel::OnInitDialog()
{
CDialog::OnInitDialog();
m_links.SetBkColor( RGB(0xE0,0xE0,0xE0) );
m_pickBtn.SetPickCallback( this,"Pick AIPoint to Link",0 );
return TRUE; // return TRUE unless you set the focus to a control
}
BEGIN_MESSAGE_MAP(CAIPointPanel, CDialog)
ON_BN_CLICKED(IDC_SELECT, OnBnClickedSelect)
ON_BN_CLICKED(IDC_REMOVE, OnBnClickedRemove)
ON_LBN_DBLCLK(IDC_NODES, OnLbnDblclkLinks)
ON_LBN_SELCHANGE(IDC_NODES, OnLbnLinksSelChange)
ON_BN_CLICKED(IDC_WAYPOINT, OnBnClickedWaypoint)
ON_BN_CLICKED(IDC_HIDEPOINT, OnBnClickedHidepoint)
ON_BN_CLICKED(IDC_ENTRYPOINT, OnBnClickedEntrypoint)
ON_BN_CLICKED(IDC_EXITPOINT, OnBnClickedExitpoint)
END_MESSAGE_MAP()
void CAIPointPanel::SetObject( CAIPoint *object )
{
if (m_object)
{
for (int i = 0; i < m_object->GetLinkCount(); i++)
m_object->SelectLink(i,false);
}
assert( object );
m_object = object;
switch (object->GetAIType())
{
case EAIPOINT_WAYPOINT:
m_type = 0;
break;
case EAIPOINT_HIDE:
m_type = 1;
break;
case EAIPOINT_ENTRY:
m_type = 2;
break;
case EAIPOINT_EXIT:
m_type = 3;
break;
}
UpdateData(FALSE);
ReloadLinks();
}
//////////////////////////////////////////////////////////////////////////
void CAIPointPanel::StartPick()
{
// Simulate click on pick button.
m_pickBtn.OnClicked();
}
void CAIPointPanel::ReloadLinks()
{
m_links.ResetContent();
for (int i = 0; i < m_object->GetLinkCount(); i++)
{
CAIPoint *obj = m_object->GetLink(i);
if (obj)
m_links.AddString( obj->GetName() );
}
}
//////////////////////////////////////////////////////////////////////////
void CAIPointPanel::OnBnClickedSelect()
{
assert( m_object );
int sel = m_links.GetCurSel();
if (sel != LB_ERR)
{
CBaseObject *obj = m_object->GetLink(sel);
if (obj)
{
GetIEditor()->ClearSelection();
GetIEditor()->SelectObject( obj );
}
}
}
//////////////////////////////////////////////////////////////////////////
void CAIPointPanel::OnBnClickedRemove()
{
assert( m_object );
int sel = m_links.GetCurSel();
if (sel != LB_ERR)
{
CUndo undo( "Unlink AIPoint" );
CAIPoint *obj = m_object->GetLink(sel);
if (obj)
m_object->RemoveLink( obj );
ReloadLinks();
}
}
//////////////////////////////////////////////////////////////////////////
void CAIPointPanel::OnLbnDblclkLinks()
{
// Select current entity.
OnBnClickedSelect();
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
void CAIPointPanel::OnPick( CBaseObject *picked )
{
assert( m_object );
CUndo undo( "Link AIPoint" );
m_object->AddLink( (CAIPoint*)picked );
ReloadLinks();
//
// m_entityName.SetWindowText( picked->GetName() );
}
//////////////////////////////////////////////////////////////////////////
bool CAIPointPanel::OnPickFilter( CBaseObject *picked )
{
assert( picked != 0 );
return picked != m_object && picked->IsKindOf( RUNTIME_CLASS(CAIPoint) );
}
//////////////////////////////////////////////////////////////////////////
void CAIPointPanel::OnCancelPick()
{
}
//////////////////////////////////////////////////////////////////////////
void CAIPointPanel::OnBnClickedWaypoint()
{
assert( m_object );
m_object->SetAIType( EAIPOINT_WAYPOINT );
}
//////////////////////////////////////////////////////////////////////////
void CAIPointPanel::OnBnClickedHidepoint()
{
assert( m_object );
m_object->SetAIType( EAIPOINT_HIDE );
}
//////////////////////////////////////////////////////////////////////////
void CAIPointPanel::OnBnClickedEntrypoint()
{
assert( m_object );
m_object->SetAIType( EAIPOINT_ENTRY );
}
//////////////////////////////////////////////////////////////////////////
void CAIPointPanel::OnBnClickedExitpoint()
{
assert( m_object );
m_object->SetAIType( EAIPOINT_EXIT );
}
//////////////////////////////////////////////////////////////////////////
void CAIPointPanel::OnLbnLinksSelChange()
{
assert( m_object );
int sel = m_links.GetCurSel();
if (sel != LB_ERR)
{
// Unselect all others.
for (int i = 0; i < m_object->GetLinkCount(); i++)
{
if (sel == i)
m_object->SelectLink(i,true);
else
m_object->SelectLink(i,false);
}
}
}