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

219 lines
5.8 KiB
C++

////////////////////////////////////////////////////////////////////////////
//
// Crytek Engine Source File.
// Copyright (C), Crytek Studios, 2002.
// -------------------------------------------------------------------------
// File name: entityscriptdialog.cpp
// Version: v1.00
// Created: 25/1/2003 by Timur.
// Compilers: Visual Studio.NET
// Description:
// -------------------------------------------------------------------------
// History:
//
////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "EntityScriptDialog.h"
#include "Objects\EntityScript.h"
#include "StringDlg.h"
// CEntityScriptDialog dialog
IMPLEMENT_DYNAMIC(CEntityScriptDialog, CXTResizeDialog)
CEntityScriptDialog::CEntityScriptDialog(CWnd* pParent /*=NULL*/)
: CXTResizeDialog(CEntityScriptDialog::IDD, pParent)
{
m_script = 0;
m_grayBrush.CreateSolidBrush( RGB(0xE0,0xE0,0xE0) );
}
//////////////////////////////////////////////////////////////////////////
CEntityScriptDialog::~CEntityScriptDialog()
{
}
//////////////////////////////////////////////////////////////////////////
void CEntityScriptDialog::DoDataExchange(CDataExchange* pDX)
{
CXTResizeDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_RUN_METHOD, m_runButton);
DDX_Control(pDX, IDC_GOTO_METHOD, m_gotoMethodBtn);
DDX_Control(pDX, IDC_EDITSCRIPT, m_editScriptBtn);
DDX_Control(pDX, IDC_ADD_METHOD, m_addMethodBtn);
DDX_Control(pDX, IDC_RELOADSCRIPT, m_reloadScriptBtn);
DDX_Control(pDX, IDC_METHODS, m_methods);
DDX_LBString(pDX, IDC_METHODS, m_selectedMethod);
DDX_Control(pDX, IDC_NAME, m_scriptName );
}
//////////////////////////////////////////////////////////////////////////
BEGIN_MESSAGE_MAP(CEntityScriptDialog, CXTResizeDialog)
ON_BN_CLICKED(IDC_EDITSCRIPT, OnEditScript)
ON_BN_CLICKED(IDC_RELOADSCRIPT, OnReloadScript)
ON_WM_CTLCOLOR()
ON_LBN_DBLCLK(IDC_METHODS, OnDblclkMethods)
ON_BN_CLICKED(IDC_GOTO_METHOD, OnGotoMethod)
ON_BN_CLICKED(IDC_ADD_METHOD, OnAddMethod)
ON_BN_CLICKED(IDC_RUN_METHOD, OnRunMethod)
END_MESSAGE_MAP()
// CEntityScriptDialog message handlers
//////////////////////////////////////////////////////////////////////////
BOOL CEntityScriptDialog::OnInitDialog()
{
CXTResizeDialog::OnInitDialog();
SetResize( IDC_METHODS,SZ_RESIZE(1) );
SetResize( IDC_METHODS_FRAME,SZ_RESIZE(1) );
return TRUE;
}
//////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// CEntityScriptDialog message handlers
void CEntityScriptDialog::SetScript( CEntityScript *script,IEntity* entity )
{
if (script)
m_scriptName.SetWindowText( script->GetName() );
else
m_scriptName.SetWindowText( "" );
m_script = script;
m_entity = entity;
ReloadMethods();
//ReloadEvents();
}
//////////////////////////////////////////////////////////////////////////
void CEntityScriptDialog::OnEditScript()
{
if (!m_script)
return;
CEntityScript *script = m_script;
CFileUtil::EditTextFile( script->GetFile() );
}
//////////////////////////////////////////////////////////////////////////
void CEntityScriptDialog::ReloadMethods()
{
if (!m_script)
return;
// Parse entity lua file.
CEntityScript *script = m_script;
m_methods.ResetContent();
///if (script->Load( m_entity->GetEntityClass() ))
{
for (int i = 0; i < script->GetMethodCount(); i++)
{
m_methods.AddString( script->GetMethod(i) );
}
for (int i = 0; i < script->GetEventCount(); i++)
{
m_methods.AddString( CString(EVENT_PREFIX) + script->GetEvent(i) );
}
}
}
//////////////////////////////////////////////////////////////////////////
void CEntityScriptDialog::OnReloadScript()
{
if (!m_script)
return;
if (m_OnReloadScript)
m_OnReloadScript();
ReloadMethods();
}
//////////////////////////////////////////////////////////////////////////
HBRUSH CEntityScriptDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// CWnd::GetDlgCtrlID() to perform the most efficient test.
if (pWnd->GetDlgCtrlID() == IDC_METHODS)
{
// Set the text color to red
//pDC->SetTextColor(RGB(255, 0, 0));
// Set the background mode for text to transparent
// so background will show thru.
pDC->SetBkMode(TRANSPARENT);
// Return handle to our CBrush object
//hbr = (HBRUSH)GetStockObject( LTGRAY_BRUSH );
hbr = m_grayBrush;
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
//////////////////////////////////////////////////////////////////////////
void CEntityScriptDialog::OnDblclkMethods()
{
//UpdateData(TRUE);
//GotoMethod( m_selectedMethod );
OnRunMethod();
}
//////////////////////////////////////////////////////////////////////////
void CEntityScriptDialog::OnRunMethod()
{
if (!m_script)
return;
if (!m_entity)
return;
UpdateData(TRUE);
CEntityScript *script = m_script;
script->RunMethod( m_entity,m_selectedMethod );
}
//////////////////////////////////////////////////////////////////////////
void CEntityScriptDialog::GotoMethod( const CString &method )
{
if (!m_script)
return;
CEntityScript *script = m_script;
script->GotoMethod( method );
}
//////////////////////////////////////////////////////////////////////////
void CEntityScriptDialog::OnGotoMethod()
{
UpdateData(TRUE);
GotoMethod( m_selectedMethod );
}
//////////////////////////////////////////////////////////////////////////
void CEntityScriptDialog::OnAddMethod()
{
if (!m_script)
return;
CStringDlg dlg( "Enter Method Name" );
if (dlg.DoModal() == IDOK)
{
CString method = dlg.m_strString;
if (m_methods.FindString(-1,method) == LB_ERR)
{
CEntityScript *script = m_script;
script->AddMethod( method );
script->GotoMethod( method );
OnReloadScript();
}
}
}