Files
firestorm/Gameleap/code/mw4/Code/MW4GameEd/TransDlg.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

313 lines
6.9 KiB
C++

// TransDlg.cpp : implementation file
//
#include "stdafx.h"
#include "mw4gameed.h"
#include "TransDlg.h"
#include "EditorWaypoint.h"
#include <Adept\Map.hpp>
#include "OverviewWindow.h"
extern CMW4GameEdApp theApp;
/////////////////////////////////////////////////////////////////////////////
// CTransDlg dialog
CTransDlg::CTransDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTransDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CTransDlg)
m_YOffset = 0.0f;
m_X = 0.0f;
m_Y = 0.0f;
m_Yaw = 0.0f;
m_Z = 0.0f;
m_Pitch = 0.0f;
m_Roll = 0.0f;
//}}AFX_DATA_INIT
object = NULL;
}
CTransDlg::~CTransDlg()
{
object = NULL;
}
void CTransDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTransDlg)
DDX_Text(pDX, IDC_EDITYOFF, m_YOffset);
DDX_Text(pDX, IDC_EDITTRANSX, m_X);
DDX_Text(pDX, IDC_EDITTRANSY, m_Y);
DDX_Text(pDX, IDC_EDITTRANSYAW, m_Yaw);
DDX_Text(pDX, IDC_EDITTRANSZ, m_Z);
DDX_Text(pDX, IDC_EDITTRANSPITCH, m_Pitch);
DDX_Text(pDX, IDC_EDITTRANSROLL, m_Roll);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CTransDlg, CDialog)
//{{AFX_MSG_MAP(CTransDlg)
ON_EN_KILLFOCUS(IDC_EDITTRANSZ, OnKillfocusEdittransz)
ON_EN_KILLFOCUS(IDC_EDITTRANSYAW, OnKillfocusEdittransyaw)
ON_EN_KILLFOCUS(IDC_EDITTRANSY, OnKillfocusEdittransy)
ON_EN_KILLFOCUS(IDC_EDITTRANSX, OnKillfocusEdittransx)
ON_EN_KILLFOCUS(IDC_EDITTRANSROLL, OnKillfocusEdittransroll)
ON_EN_KILLFOCUS(IDC_EDITTRANSPITCH, OnKillfocusEdittranspitch)
ON_WM_CLOSE()
ON_BN_CLICKED(IDMYOK, OnMyok)
ON_EN_KILLFOCUS(IDC_EDITYOFF, OnKillfocusEdityoff)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTransDlg message handlers
float REDUCEANGLE(float &x)
{
float whole, dec, div, tmp = x;
whole = float(int(tmp));
dec = tmp - whole;
div = float(int(whole / 360));
x = whole - (div * 360) + dec;
return (x);
}
void CTransDlg::TransUpdate()
{
UpdateData(TRUE);
theApp.m_MissionSaved = false;
if (object && object->GetParentEntity())
{
LinearMatrix4D mat(true);
Point3D pos;
YawPitchRoll rot;
pos.x = m_X;
pos.y = m_Y+m_YOffset;
pos.z = m_Z;
ObjData->VOffset=m_YOffset;
rot.yaw = m_Yaw * Radians_Per_Degree;
rot.pitch = m_Pitch * Radians_Per_Degree;
rot.roll = m_Roll * Radians_Per_Degree;
mat.BuildTranslation(pos);
mat.BuildRotation(rot);
object->SetNewLocalToParent(mat);
object->SyncMatrices(true);
theApp.overviewWindow->UpdateCamera();
if (object->IsDerivedFrom(EditorBoundaryNode::DefaultData))
{
EditorBoundaryNode* node;
node = Cast_Object(EditorBoundaryNode*, object);
(*node->myBoundary)[node->index].x = pos.x;
(*node->myBoundary)[node->index].y = pos.z;
node->CheckValidPos();
node->UpdateLinkPointData();
}
else if (object->IsDerivedFrom(EditorLight::DefaultData))
{
EditorLight* light;
light = Cast_Object(EditorLight*,object);
light->SetLightToWorldMatrix(mat);
}
else if (object->IsDerivedFrom(EditorCameraShip::DefaultData))
{
EditorCameraShip* node;
node = Cast_Object(EditorCameraShip*,object);
node->cameraShip->SetNewLocalToParent(mat);
node->cameraShip->SyncMatrices(true);
}
else if (object->IsDerivedFrom(EditorPathNode::DefaultData))
{
EditorPathNode* node;
Point3D target_in_world;
target_in_world = object->GetLocalToWorld();
node = Cast_Object(EditorPathNode*,object);
node->pathSlot.GetCurrent()->pathSlot.GetCurrent()->pathPoints[node->index] = target_in_world;
node->UpdateLinkPointData();
}
else if (object->IsDerivedFrom(EditorLatticeNode::DefaultData))
{
EditorLatticeNode* node;
Point3D target_in_world;
target_in_world = object->GetLocalToWorld();
node = Cast_Object(EditorLatticeNode*,object);
node->railNode->Location(target_in_world);
node->railNode->UpdateRadiusPointData();
}
else if (object->IsDerivedFrom(EditorDropNode::DefaultData))
{
EditorDropNode* node;
node = Cast_Object(EditorDropNode*,object);
node->UpdatePoints();
}
else if (object->IsDerivedFrom(EditorDropZonePoint::DefaultData))
{
EditorDropZonePoint* node;
node = Cast_Object(EditorDropZonePoint*,object);
node->dropNode->UpdatePoints();
}
}
}
void CTransDlg::OnOK()
{
}
void CTransDlg::OnMyok()
{
TransUpdate();
CDialog::OnOK();
}
void CTransDlg::OnCancel()
{
m_X = m_Oldx;
m_Y = m_Oldy;
m_Z = m_Oldz;
m_YOffset=m_OldYOffset;
m_Yaw = m_Oldyaw;
m_Pitch = m_Oldpitch;
m_Roll = m_Oldroll;
UpdateData(FALSE);
TransUpdate();
// CDialog::OnCancel();
}
void CTransDlg::OnKillfocusEdittransx() { TransUpdate(); }
void CTransDlg::OnKillfocusEdittranspitch()
{
UpdateData(TRUE);
REDUCEANGLE(m_Pitch);
UpdateData(FALSE);
TransUpdate();
}
void CTransDlg::OnKillfocusEdittransroll()
{
UpdateData(TRUE);
REDUCEANGLE(m_Roll);
UpdateData(FALSE);
TransUpdate();
}
void CTransDlg::OnKillfocusEdittransyaw()
{
UpdateData(TRUE);
REDUCEANGLE(m_Yaw);
UpdateData(FALSE);
TransUpdate();
}
void CTransDlg::OnKillfocusEdittransy() { TransUpdate(); }
void CTransDlg::OnKillfocusEdittransz() { TransUpdate(); }
void CTransDlg::OnKillfocusEdityoff() { TransUpdate(); }
BOOL CTransDlg::OnInitDialog()
{
CDialog::OnInitDialog();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CTransDlg::SetValues()
{
if (object)
SetObject(object,ObjData);
}
void CTransDlg::SetValues(float x, float y, float z,float yoff, float yaw, float pitch, float roll, Adept::Entity* obj)
{
Check_Object(obj);
if (obj->IsDerivedFrom(Map::DefaultData)) // terrain is a no-no
return;
m_OldYOffset =m_YOffset = yoff;
m_Oldx = m_X = x;
m_Oldy = m_Y = y;
m_Oldz = m_Z = z;
m_Oldyaw = m_Yaw = yaw;
m_Oldpitch = m_Pitch = pitch;
m_Oldroll = m_Roll = roll;
object = obj;
UpdateData(FALSE);
TransUpdate();
}
void CTransDlg::SetObject(Adept::Entity* obj, CEditorEntityData *obdat)
{
// Do not Check_Object(obj) NULL is valid argument
if (!obj)
{
object = NULL;
ShowWindow(SW_HIDE);
return;
}
if (obj->IsDerivedFrom(Map::DefaultData)) // terrain is a no-no
return;
if (object && object != obj)
TransUpdate();
ObjData=obdat;
Verify(ObjData);
Point3D pos;
YawPitchRoll rot;
pos = obj->GetLocalToWorld();
rot = obj->GetLocalToWorld();
rot.yaw *= Degrees_Per_Radian;
rot.pitch *= Degrees_Per_Radian;
rot.roll *= Degrees_Per_Radian;
SetValues(pos.x,pos.y-ObjData->VOffset,pos.z,ObjData->VOffset,rot.yaw,rot.pitch,rot.roll,obj);
SetWindowText(obj->instanceName);
}
void CTransDlg::CheckObject(Adept::Entity* obj)
{
Check_Object(obj);
if (object == obj)
SetObject(NULL,ObjData);
}
void CTransDlg::OnClose()
{
TransUpdate();
// CDialog::OnOK();
CDialog::OnClose();
}