Files
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

206 lines
5.3 KiB
C++

// StateParamView.cpp : implementation file
//
#include "stdafx.h"
#include "AnimScript.h"
#include "StateParamView.h"
#include "AnimScriptDoc.h"
#include "mw4headers.hpp"
#include "Vehicle.hpp"
#include "MechAnimationState.hpp"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CStateParamView
IMPLEMENT_DYNCREATE(CStateParamView, CFormView)
CStateParamView::CStateParamView()
: CFormView(CStateParamView::IDD)
{
//{{AFX_DATA_INIT(CStateParamView)
//}}AFX_DATA_INIT
}
CStateParamView::~CStateParamView()
{
}
void CStateParamView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CStateParamView)
DDX_Control(pDX, IDC_CREATE, m_ctrlCreateButton);
DDX_Control(pDX, IDC_STATEPARAM_TITLE, m_ctrlTitle);
DDX_Control(pDX, IDC_COMBO_ANIMTYPE, m_ctrlAnimType);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CStateParamView, CFormView)
//{{AFX_MSG_MAP(CStateParamView)
ON_BN_CLICKED(IDC_CREATE, OnCreateExec)
ON_WM_CREATE()
ON_CBN_SELENDOK(IDC_COMBO_ANIMTYPE, OnSelendokComboAnimtype)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CStateParamView diagnostics
#ifdef _DEBUG
void CStateParamView::AssertValid() const
{
CFormView::AssertValid();
}
void CStateParamView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CStateParamView message handlers
void CStateParamView::OnInitialUpdate()
{
CAnimScriptDoc* pDoc = (CAnimScriptDoc *)GetDocument();
CFormView::OnInitialUpdate();
m_ctrlAnimType.EnableWindow(false);
m_ctrlAnimType.ResetContent();
POSITION pos = pDoc->m_listAnimTypes.GetHeadPosition();
while (pos)
{
CObject *pObj = pDoc->m_listAnimTypes.GetNext(pos);
CAnimTypeNode *pNode = (CAnimTypeNode *)pObj;
int index = m_ctrlAnimType.AddString(pNode->m_strName);
m_ctrlAnimType.SetItemData(index,(DWORD)pNode);
}
// Second pass - set the index on data because the items may be sorted when entered
for (int x=0;x<m_ctrlAnimType.GetCount();x++)
{
CAnimTypeNode *pNode = (CAnimTypeNode *)m_ctrlAnimType.GetItemData(x);
pNode->m_iIndex = x;
}
}
void CStateParamView::OnCreateExec()
{
CAnimScriptDoc* pDoc = (CAnimScriptDoc *)GetDocument();
CAnimNode *pNode = pDoc->m_pSelectedNode;
if (pNode)
{
if (pNode->m_bValid)
{
pNode->m_bValid = false;
}
else
{
pNode->m_bValid = true;
CAnimTypeNode *pType = (CAnimTypeNode *)pNode->GetParam(PARAM_ANIMTYPE);
if (NULL == pType)
{
pType = (CAnimTypeNode *)m_ctrlAnimType.GetItemData(0);
assert(NULL != pType);
pNode->SetParam(PARAM_ANIMTYPE,pType);
}
pNode->LoadState(NULL);
}
for (int x=0;x<3;x++)
m_arrPages[x].OnCreateExec();
pDoc->UpdateAllViews(NULL,0,NULL);
}
}
void CStateParamView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
CAnimScriptDoc* pDoc = (CAnimScriptDoc *)GetDocument();
CAnimNode *pNode = pDoc->m_pSelectedNode;
CString strTitle = "Parameters";
CString strCreate = "Create";
int iCurSel = -1;
bool bEnable = false;
if (pNode)
{
strTitle = pNode->GetName();
if (pNode->m_bValid)
{
bEnable = true;
strCreate = "Delete";
CAnimTypeNode *pType = (CAnimTypeNode *)pNode->GetParam(PARAM_ANIMTYPE);
iCurSel = (pType)?pType->m_iIndex:-1;
}
}
m_ctrlAnimType.EnableWindow(bEnable);
m_ctrlAnimType.SetCurSel(iCurSel);
m_ctrlTitle.SetWindowText(strTitle);
m_ctrlCreateButton.SetWindowText(strCreate);
for (int x=0;x<3;x++)
m_arrPages[x].OnApply();
}
int CStateParamView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFormView::OnCreate(lpCreateStruct) == -1)
return -1;
CAnimScriptDoc* pDoc = (CAnimScriptDoc *)GetDocument();
char szTitle[][30] =
{
"Animation",
"Transition",
"Animation Type Parameters"
};
// Create the Property Sheet
for (int x=0;x<3;x++)
{
m_arrPages[x].m_pDocument = pDoc;
m_arrPages[x].m_iPageType = x;
m_arrPages[x].m_psp.pszTitle = szTitle[x];
m_arrPages[x].m_psp.dwFlags |= PSP_USETITLE;
m_ctrlPropertySheet.AddPage(&m_arrPages[x]);
}
m_ctrlPropertySheet.EnableStackedTabs(false);
m_ctrlPropertySheet.Create(this,WS_VISIBLE | WS_CHILD);
CRect rc;
GetClientRect(&rc);
// TODO: Need to have the property sheet at this location
CWnd *pWnd = this->GetDlgItem(IDC_PROPSHEET_POS);
//CRect rc1;
//pWnd->GetWindowRect(&rc1);
CPoint pt(280,5);
//pWnd->ScreenToClient(&pt);
rc.OffsetRect(pt);
m_ctrlPropertySheet.SetWindowPos(this,rc.left,rc.top,rc.right,rc.bottom,SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOZORDER |SWP_NOACTIVATE);
return 0;
}
void CStateParamView::OnSelendokComboAnimtype()
{
int index = m_ctrlAnimType.GetCurSel();
if (index>=0)
{
CAnimTypeNode *pNode = (CAnimTypeNode *)m_ctrlAnimType.GetItemData(index);
// index should be equal to pNode->m_iIndex
assert(index == pNode->m_iIndex);
CAnimScriptDoc* pDoc = (CAnimScriptDoc *)GetDocument();
if (pDoc->m_pSelectedNode)
{
pDoc->m_pSelectedNode->SetParam(PARAM_ANIMTYPE,pNode);
pDoc->m_pSelectedNode->CreateAnimTypeParams(pNode);
pDoc->UpdateAllViews(NULL,1,NULL);
}
}
}