Files
firestorm/Gameleap/code/mw4/Tools/TCTb/CamInfoDlg.cpp
T
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

397 lines
10 KiB
C++

// CamInfoDlg.cpp : implementation file
//
#include "stdafx.h"
#include "TCTb.h"
#include "CamInfoDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define VALIDATE_TIMER 1234
#define VALIDATE_TIME 1000
/////////////////////////////////////////////////////////////////////////////
// CCamInfoDlg dialog
CCamInfoDlg::CCamInfoDlg(CWnd* pParent /*=NULL*/)
: CDialog(CCamInfoDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CCamInfoDlg)
m_CamLocX = 0.0;
m_CamLocZ = 0.0;
m_CamLocY = 0.0;
m_CamTrkAlt = 0.0;
m_TarLocX = 0.0;
m_TarLocY = 0.0;
m_TarLocZ = 0.0;
m_TarTAlt = 0.0;
m_TmeSli = 0;
m_VelSli = 0;
m_FOVSli = 0;
m_FarClip = 0.0;
m_NearClip = 0.0;
m_FOVText = 0;
//}}AFX_DATA_INIT
CamInfo=NULL;
FCon=0;
NoUpdate=false;
}
void CCamInfoDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCamInfoDlg)
DDX_Control(pDX, IDC_NEARCLIP, m_NearClipCtrl);
DDX_Control(pDX, IDC_FARCLIP, m_FarClipCtrl);
DDX_Control(pDX, IDC_FOVTEXT, m_FOVTextCtrl);
DDX_Control(pDX, IDC_FOVSLI, m_FOVSliCtrl);
DDX_Control(pDX, IDC_VELTEXT, m_VelText);
DDX_Control(pDX, IDC_VELSLI, m_VelSliCtrl);
DDX_Control(pDX, IDC_CAMLOCZ, m_CLOCZCtrl);
DDX_Control(pDX, IDC_CAMLOCY, m_CLOCYCtrl);
DDX_Control(pDX, IDC_CAMLOCX, m_CLOCXCtrl);
DDX_Control(pDX, IDC_SPOSSLI, m_TSliCtrl);
DDX_Control(pDX, IDC_POSTEXT, m_PosText);
DDX_Control(pDX, IDC_CAMTALT, m_CTAlt);
DDX_Control(pDX, IDC_TLOCTT, m_TTT);
DDX_Control(pDX, IDC_TARTALT, m_TTACtrl);
DDX_Control(pDX, IDC_TARLOCZ, m_TLZCtrl);
DDX_Control(pDX, IDC_TARLOCY, m_TLYCtrl);
DDX_Control(pDX, IDC_TARLOCX, m_TLXCtrl);
DDX_Text(pDX, IDC_CAMLOCX, m_CamLocX);
DDX_Text(pDX, IDC_CAMLOCZ, m_CamLocZ);
DDX_Text(pDX, IDC_CAMLOCY, m_CamLocY);
DDX_Text(pDX, IDC_CAMTALT, m_CamTrkAlt);
DDX_Text(pDX, IDC_TARLOCX, m_TarLocX);
DDX_Text(pDX, IDC_TARLOCY, m_TarLocY);
DDX_Text(pDX, IDC_TARLOCZ, m_TarLocZ);
DDX_Text(pDX, IDC_TARTALT, m_TarTAlt);
DDX_Slider(pDX, IDC_SPOSSLI, m_TmeSli);
DDX_Slider(pDX, IDC_VELSLI, m_VelSli);
DDX_Slider(pDX, IDC_FOVSLI, m_FOVSli);
DDX_Text(pDX, IDC_FARCLIP, m_FarClip);
DDV_MinMaxDouble(pDX, m_FarClip, 1.e-003, 99999999.);
DDX_Text(pDX, IDC_NEARCLIP, m_NearClip);
DDV_MinMaxDouble(pDX, m_NearClip, 1.e-003, 9999999.);
DDX_Text(pDX, IDC_FOVTEXT, m_FOVText);
DDV_MinMaxInt(pDX, m_FOVText, 1, 180);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CCamInfoDlg, CDialog)
//{{AFX_MSG_MAP(CCamInfoDlg)
ON_WM_CLOSE()
ON_BN_CLICKED(IDC_CLOCTT, OnCloctt)
ON_BN_CLICKED(IDC_USETARGET, OnUsetarget)
ON_BN_CLICKED(IDC_TLOCTT, OnTloctt)
ON_BN_CLICKED(IDC_TRACK, OnTrack)
ON_BN_CLICKED(IDC_FREE, OnFree)
ON_WM_CREATE()
ON_BN_CLICKED(IDC_ANIMATE, OnAnimate)
ON_WM_HSCROLL()
ON_WM_RBUTTONUP()
ON_WM_RBUTTONDOWN()
ON_EN_CHANGE(IDC_CAMLOCX, OnChangeCamlocx)
ON_EN_CHANGE(IDC_CAMLOCY, OnChangeCamlocy)
ON_EN_CHANGE(IDC_CAMLOCZ, OnChangeCamlocz)
ON_EN_CHANGE(IDC_TARLOCX, OnChangeTarlocx)
ON_EN_CHANGE(IDC_TARLOCY, OnChangeTarlocy)
ON_EN_CHANGE(IDC_TARLOCZ, OnChangeTarlocz)
ON_BN_CLICKED(IDC_RESETCURVE, OnResetcurve)
ON_EN_CHANGE(IDC_FARCLIP, OnChangeFarclip)
ON_EN_CHANGE(IDC_NEARCLIP, OnChangeNearclip)
ON_WM_TIMER()
ON_EN_CHANGE(IDC_TARTALT, OnChangeTartalt)
ON_EN_CHANGE(IDC_FOVTEXT, OnChangeFovtext)
ON_EN_CHANGE(IDC_CAMTALT, OnChangeCamtalt)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCamInfoDlg message handlers
void CCamInfoDlg::UpdateInfo()
{
if(!CamInfo) return;
if(NoUpdate) return;
m_CamLocX=CamInfo->Loc.x;
m_CamLocY=CamInfo->Loc.y;
m_CamLocZ=CamInfo->Loc.z;
m_TarLocX=CamInfo->TargetLoc.x;
m_TarLocY=CamInfo->TargetLoc.y;
m_TarLocZ=CamInfo->TargetLoc.z;
m_TarTAlt=CamInfo->TarTrackAlt;
m_CamTrkAlt=CamInfo->CamTrackAlt;
m_NearClip=CamInfo->NearClip;
m_FarClip=CamInfo->FarClip;
m_FOVSli=m_FOVText=(int)(CamInfo->FOV*Degrees_Per_Radian);
m_TmeSli=((int)(CamInfo->GetTime()*100));
m_VelSli=((int)(CamInfo->GetVel()*100));
CheckDlgButton(IDC_USETARGET,CamInfo->UseTarget);
CheckDlgButton(IDC_ANIMATE,CamInfo->Animate);
CheckDlgButton(IDC_CLOCTT,CamInfo->CamATrkFlg);
CheckDlgButton(IDC_TLOCTT,CamInfo->TarATrkFlg);
CheckRadioButton(IDC_FREE,IDC_TRACK,CamInfo->GetMode()==CameraInfo::CM_TRACK?IDC_TRACK:IDC_FREE);
UpdateData(FALSE);
UpdateControlStates();
}
void CCamInfoDlg::OnCancel()
{
// TODO: Add extra cleanup here
// CDialog::OnCancel();
}
void CCamInfoDlg::OnOK()
{
// TODO: Add extra validation here
// CDialog::OnOK();
}
void CCamInfoDlg::OnClose()
{
// TODO: Add your message handler code here and/or call default
// ShowWindow(SW_MINIMIZE);
ShowWindow(SW_HIDE);
// CDialog::OnClose();
}
void CCamInfoDlg::UpdateControlStates()
{
m_TLXCtrl.EnableWindow(IsDlgButtonChecked(IDC_USETARGET));
m_TLYCtrl.EnableWindow(IsDlgButtonChecked(IDC_USETARGET));
m_TLZCtrl.EnableWindow(IsDlgButtonChecked(IDC_USETARGET));
m_TTACtrl.EnableWindow(IsDlgButtonChecked(IDC_USETARGET));
m_TTT.EnableWindow(IsDlgButtonChecked(IDC_USETARGET));
if(IsDlgButtonChecked(IDC_USETARGET))
m_TTACtrl.EnableWindow(IsDlgButtonChecked(IDC_TLOCTT));
m_CTAlt.EnableWindow(IsDlgButtonChecked(IDC_CLOCTT));
//m_TSliCtrl.EnableWindow(!IsDlgButtonChecked(IDC_ANIMATE));
CheckDlgButton(IDC_ANIMATE,CamInfo->Animate);
CString tstr;
tstr.Format("%i%%",m_TmeSli);
m_PosText.SetWindowText(tstr);
tstr.Format("%i%%",m_VelSli);
m_VelText.SetWindowText(tstr);
}
void CCamInfoDlg::OnCloctt()
{
UpdateControlStates();
CamInfo->CamATrkFlg=IsDlgButtonChecked(IDC_CLOCTT)?true:false;
}
void CCamInfoDlg::OnTloctt()
{
UpdateControlStates();
CamInfo->TarATrkFlg=IsDlgButtonChecked(IDC_TLOCTT)?true:false;
}
void CCamInfoDlg::OnUsetarget()
{
CamInfo->UseTarget=IsDlgButtonChecked(IDC_USETARGET)?true:false;
}
void CCamInfoDlg::SetCamInfo(CameraInfo *CIn)
{
CamInfo=CIn;
}
void CCamInfoDlg::OnTrack()
{
CamInfo->SetMode(CameraInfo::CM_TRACK);
}
void CCamInfoDlg::OnFree()
{
CamInfo->SetMode(CameraInfo::CM_FREE);
}
int CCamInfoDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
return 0;
}
BOOL CCamInfoDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_TSliCtrl.SetRange(0,100);
m_VelSliCtrl.SetRange(-100,100);
m_FOVSliCtrl.SetRange(1,180);
m_TSliCtrl.SetFocus();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CCamInfoDlg::OnAnimate()
{
CamInfo->Animate=IsDlgButtonChecked(IDC_ANIMATE)?true:false;
UpdateControlStates();
}
void CCamInfoDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
CString tstr;
if(pScrollBar==(CScrollBar* )&m_TSliCtrl || pScrollBar==(CScrollBar* )&m_VelSliCtrl)
CamInfo->SetMode(CameraInfo::CM_TRACK);
if(pScrollBar==(CScrollBar* )&m_TSliCtrl)
{
CamInfo->Animate=false;
CheckDlgButton(IDC_ANIMATE,CamInfo->Animate);
tstr.Format("%i%%",m_TSliCtrl.GetPos());
m_PosText.SetWindowText(tstr);
CamInfo->SetTime(m_TSliCtrl.GetPos()/100.0f);
}
if(pScrollBar==(CScrollBar* )&m_VelSliCtrl)
{
tstr.Format("%i%%",m_VelSliCtrl.GetPos());
m_VelText.SetWindowText(tstr);
CamInfo->SetVel(m_VelSliCtrl.GetPos()/100.0f);
CheckDlgButton(IDC_ANIMATE,TRUE);
CamInfo->Animate=true;
}
if(pScrollBar==(CScrollBar* )&m_FOVSliCtrl)
{
tstr.Format("%i",m_FOVSliCtrl.GetPos());
m_FOVTextCtrl.SetWindowText(tstr);
CamInfo->FOV=m_FOVSliCtrl.GetPos()*Radians_Per_Degree;
}
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
void CCamInfoDlg::OnRButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CDialog::OnRButtonUp(nFlags, point);
}
void CCamInfoDlg::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CDialog::OnRButtonDown(nFlags, point);
}
void CCamInfoDlg::OnResetcurve()
{
if(!CamInfo || !CamInfo->ViewLoop) return;
CamInfo->ViewLoop->ResetCurve();
}
void CCamInfoDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
Validate();
CDialog::OnTimer(nIDEvent);
}
void CCamInfoDlg::Validate()
{
KillTimer(VALIDATE_TIMER);
if(!CamInfo) return;
UpdateData(TRUE);
if(m_FarClip<m_NearClip) m_FarClip=m_NearClip;
CamInfo->NearClip=(float)m_NearClip;
CamInfo->FarClip=(float)m_FarClip;
CamInfo->Loc.x=(float)m_CamLocX;
CamInfo->Loc.y=(float)m_CamLocY;
CamInfo->Loc.z=(float)m_CamLocZ;
CamInfo->TargetLoc.x=(float)m_TarLocX;
CamInfo->TargetLoc.y=(float)m_TarLocY;
CamInfo->TargetLoc.z=(float)m_TarLocZ;
CamInfo->FOV=(float)m_FOVText*Radians_Per_Degree;
CamInfo->CamTrackAlt=(float)m_CamTrkAlt;
CamInfo->TarTrackAlt=(float)m_TarTAlt;
NoUpdate=false;
}
void CCamInfoDlg::DelayedValidate(int tme)
{
NoUpdate=true;
KillTimer(VALIDATE_TIMER);
SetTimer(VALIDATE_TIMER,tme,NULL);
}
void CCamInfoDlg::OnChangeTartalt() { DelayedValidate(VALIDATE_TIME); }
void CCamInfoDlg::OnChangeFovtext() { DelayedValidate(VALIDATE_TIME); }
void CCamInfoDlg::OnChangeCamtalt() { DelayedValidate(VALIDATE_TIME); }
void CCamInfoDlg::OnChangeFarclip() { DelayedValidate(VALIDATE_TIME); }
void CCamInfoDlg::OnChangeNearclip() { DelayedValidate(VALIDATE_TIME); }
void CCamInfoDlg::OnChangeTarlocx() { DelayedValidate(VALIDATE_TIME); }
void CCamInfoDlg::OnChangeTarlocz() { DelayedValidate(VALIDATE_TIME);}
void CCamInfoDlg::OnChangeTarlocy()
{
DelayedValidate(VALIDATE_TIME);
CheckDlgButton(IDC_TLOCTT,false);
CamInfo->TarATrkFlg=false;
}
void CCamInfoDlg::OnChangeCamlocx()
{
if(!CamInfo) return;
CamInfo->SetMode(CameraInfo::CM_FREE);
DelayedValidate(VALIDATE_TIME);
}
void CCamInfoDlg::OnChangeCamlocy()
{
if(!CamInfo) return;
DelayedValidate(VALIDATE_TIME);
CheckDlgButton(IDC_CLOCTT,false);
CamInfo->CamATrkFlg=false;
}
void CCamInfoDlg::OnChangeCamlocz()
{
if(!CamInfo) return;
CamInfo->SetMode(CameraInfo::CM_FREE);
DelayedValidate(VALIDATE_TIME);
}