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.
This commit is contained in:
Cyd
2026-06-24 21:28:16 -05:00
commit 2b8ca921cb
66341 changed files with 7923174 additions and 0 deletions
@@ -0,0 +1,361 @@
// GUIObjPanel.cpp : implementation file
//
#include "stdafx.h"
#include "MW4GameEd2.h"
#include "GUIObjPanel.h"
#include "EdGUIObject.h"
#include "UndoManager.h"
#include "CameraController.h"
#include "Refresher.h"
#include "ObjProps.h"
#define Round(x) floor((x)+.5f)
#define TruncateFloat(x) ( Round( (x)*10000.0f)/10000.0f)
/////////////////////////////////////////////////////////////////////////////
// GUIObjPanel dialog
GUIObjPanel::GUIObjPanel(EdGUIObject *gobj,UndoCommand **cmd,CWnd* pParent /*=NULL*/)
: CPanelDlg(GUIObjPanel::IDD, pParent)
{
MyObj=gobj;
CmdLst=cmd;
MyMultiProps=NULL;
//{{AFX_DATA_INIT(GUIObjPanel)
m_HElevation = 0.0f;
m_SnapGround = FALSE;
m_Pitch = 0.0f;
m_PosX = 0.0f;
m_PosY = 0.0f;
m_PosZ = 0.0f;
m_Roll = 0.0f;
m_Yaw = 0.0f;
//}}AFX_DATA_INIT
}
GUIObjPanel::GUIObjPanel(CObjProps *gobj,CWnd* pParent): CPanelDlg(GUIObjPanel::IDD, pParent) // standard constructor
{
MyMultiProps=gobj;
MyObj=NULL;
CmdLst=NULL;
m_HElevation = 0.0f;
m_SnapGround = FALSE;
m_Pitch = 0.0f;
m_PosX = 0.0f;
m_PosY = 0.0f;
m_PosZ = 0.0f;
m_Roll = 0.0f;
m_Yaw = 0.0f;
}
void GUIObjPanel::DoDataExchange(CDataExchange* pDX)
{
CPanelDlg::DoDataExchange(pDX);
//{{AFX_DATA_MAP(GUIObjPanel)
DDX_Text(pDX, IDC_ELEVATION, m_HElevation);
DDV_MinMaxFloat(pDX, m_HElevation, -10000.f, 10000.f);
DDX_Check(pDX, IDC_SNAP, m_SnapGround);
DDX_Text(pDX, IDC_PITCH, m_Pitch);
DDX_Text(pDX, IDC_POSX, m_PosX);
DDV_MinMaxFloat(pDX, m_PosX, -1.e+008f, 1.e+008f);
DDX_Text(pDX, IDC_POSY, m_PosY);
DDV_MinMaxFloat(pDX, m_PosY, -10000.f, 10000.f);
DDX_Text(pDX, IDC_POSZ, m_PosZ);
DDV_MinMaxFloat(pDX, m_PosZ, -1.e+008f, 1.e+008f);
DDX_Text(pDX, IDC_ROLL, m_Roll);
DDX_Text(pDX, IDC_YAW, m_Yaw);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(GUIObjPanel, CPanelDlg)
//{{AFX_MSG_MAP(GUIObjPanel)
ON_BN_CLICKED(IDC_CLEARROT, OnClearrot)
ON_BN_CLICKED(IDC_CAMERA_LOOKAT, OnCameraLookAt)
ON_BN_CLICKED(IDC_CAMERA_LOOKFROM, OnCameraLookFrom)
ON_BN_CLICKED(IDC_MOVEOBJECT_TOFOV, OnMoveObjectToFOV)
ON_BN_CLICKED(IDC_MOVEOBJECT_TOCAMERA, OnMoveObjectToCamera)
ON_EN_KILLFOCUS(IDC_POSX, OnKillfocusPosx)
ON_EN_KILLFOCUS(IDC_POSY, OnKillfocusPosy)
ON_EN_KILLFOCUS(IDC_POSZ, OnKillfocusPosz)
ON_EN_KILLFOCUS(IDC_ELEVATION, OnKillfocusElevation)
ON_EN_CHANGE(IDC_PITCH, OnChangePitch)
ON_EN_CHANGE(IDC_POSX, OnChangePosx)
ON_EN_CHANGE(IDC_POSY, OnChangePosy)
ON_EN_CHANGE(IDC_POSZ, OnChangePosz)
ON_EN_CHANGE(IDC_ROLL, OnChangeRoll)
ON_EN_CHANGE(IDC_YAW, OnChangeYaw)
ON_EN_CHANGE(IDC_ELEVATION, OnChangeElevation)
ON_BN_CLICKED(IDC_SNAP, OnSnap)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// GUIObjPanel message handlers
BOOL GUIObjPanel::OnInitDialog()
{
CPanelDlg::OnInitDialog();
Point3D loc;
YawPitchRoll rot;
Verify(!(MyMultiProps && MyObj));
if(MyMultiProps==NULL)
{
m_HElevation=MyObj->GetHoverElevation();
m_SnapGround=MyObj->GetSnapToGround();
m_SavedMatrix = MyObj->GetMat();
if (CameraController::GetInstance() != 0)
{
m_SavedYPR = CameraController::GetInstance()->GetYawPitchRange();
m_SavedLookAt = CameraController::GetInstance()->GetLookAt();
}
m_SavedSnapToGround = MyObj->GetSnapToGround();
loc=MyObj->GetPos();
rot=(YawPitchRoll)MyObj->GetRot();
}
else
{
m_HElevation=MyMultiProps->GetHoverElev();
m_SnapGround=MyMultiProps->GetSnap();
loc=MyMultiProps->GetPos();
rot=MyMultiProps->GetRot();
}
m_PosX=loc.x;
m_PosY=loc.y;
m_PosZ=loc.z;
m_Roll=rot.roll*Degrees_Per_Radian;
m_Yaw=rot.yaw*Degrees_Per_Radian;
m_Pitch=rot.pitch*Degrees_Per_Radian;
m_Roll=(float)TruncateFloat(m_Roll);
m_Yaw=(float)TruncateFloat(m_Yaw);
m_Pitch=(float)TruncateFloat(m_Pitch);
UpdateData(FALSE);
ElevationChange=PitchChange=RollChange=YawChange=PosXChange=PosYChange=PosZChange=SnapChange=false;
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void GUIObjPanel::OnOK()
{
UpdateData(TRUE);
Verify(!(MyMultiProps && MyObj));
if(MyMultiProps!=NULL)
{
if(ElevationChange) MyMultiProps->SetHoverElev(m_HElevation);
if(SnapChange) MyMultiProps->SetSnap(m_SnapGround==TRUE?true:false);
if(YawChange) MyMultiProps->SetYaw(m_Yaw*Radians_Per_Degree);
if(PitchChange) MyMultiProps->SetPitch(m_Pitch*Radians_Per_Degree);
if(RollChange) MyMultiProps->SetRoll(m_Roll*Radians_Per_Degree);
if(PosXChange) MyMultiProps->SetPosX(m_PosX);
if(PosYChange) MyMultiProps->SetPosY(m_PosY);
if(PosZChange) MyMultiProps->SetPosZ(m_PosZ);
}
else
{
UndoCommand *cmd=NULL;
MyObj->SetMat(m_SavedMatrix);
MyObj->SetHoverElevation(m_HElevation);
MyObj->SetSnapToGround(m_SnapGround==TRUE?true:false);
MyObj->SavePos(&cmd);
MyObj->SaveRot(&cmd);
YawPitchRoll newrot=YawPitchRoll(m_Yaw*Radians_Per_Degree,m_Pitch*Radians_Per_Degree,m_Roll*Radians_Per_Degree);
UnitQuaternion newrotquat;
newrotquat=newrot;
Point3D oldpos=MyObj->GetPos();
Point3D posoffset,newpos=Point3D(m_PosX,m_PosY,m_PosZ);
posoffset=newpos;
posoffset-=oldpos;
LinearMatrix4D mat(newpos);
mat.BuildRotation(newrotquat);
MyObj->SetMat(mat);
if(*CmdLst==NULL)
{
*CmdLst=cmd;
}
else
{
(*CmdLst)->Attach(cmd);
}
}
//CPanelDlg::OnOK();
}
void GUIObjPanel::OnCancel()
{
if(MyObj==NULL) return;
MyObj->SetMat(m_SavedMatrix);
if (CameraController::GetInstance() != 0)
{
CameraController::GetInstance()->SetYawPitchRange(m_SavedYPR);
CameraController::GetInstance()->SetLookAt(m_SavedLookAt,true);
}
MyObj->SetSnapToGround(m_SavedSnapToGround);
if (Refresher::Instance != 0)
{
Refresher::Instance->DrawRefresh();
}
// CDialog::OnCancel();
}
void GUIObjPanel::OnClearrot()
{
m_Pitch=m_Yaw=m_Roll=0.0f;
UpdateData(FALSE);
}
void GUIObjPanel::OnCameraLookAt()
{
if(MyObj==NULL) return;
if ((CameraController::GetInstance() == 0) ||
(Refresher::Instance == 0))
{
return;
}
if (CameraController::GetInstance()->StaysInsideBounds(MyObj->GetPos(),
CameraController::GetInstance()->GetYawPitchRange()) == true)
{
CameraController::GetInstance()->SetLookAtMode(true);
CameraController::GetInstance()->SetLookAt(MyObj->GetPos(),false);
CameraController::GetInstance()->Update();
Refresher::Instance->DrawRefresh();
}
}
void GUIObjPanel::OnCameraLookFrom()
{
if(MyObj==NULL) return;
if ((CameraController::GetInstance() == 0) ||
(Refresher::Instance == 0))
{
return;
}
CameraController::GetInstance()->SetLookAtMode(false);
YawPitchRoll yawpitchroll(MyObj->GetRot());
YawPitchRange ypr(Two_Pi - yawpitchroll.yaw,
Two_Pi - yawpitchroll.pitch,
CameraController::GetInstance()->GetYawPitchRange().range);
Stuff::LinearMatrix4D matrix(MyObj->GetMat());
matrix.BuildLookFrom(ypr);
ypr.yaw = yawpitchroll.yaw;
ypr.pitch = yawpitchroll.pitch;
if (CameraController::GetInstance()->StaysInsideBounds((Point3D)matrix,ypr) == true)
{
CameraController::GetInstance()->SetYawPitchRange(ypr);
CameraController::GetInstance()->SetLookAt((Point3D)matrix,false);
CameraController::GetInstance()->Update();
Refresher::Instance->DrawRefresh();
}
}
void GUIObjPanel::OnMoveObjectToFOV()
{
if(MyObj==NULL) return;
if ((CameraController::GetInstance() == 0)||
(Refresher::Instance == 0))
{
return;
}
MyObj->SetPos(CameraController::GetInstance()->GetLookAt());
Refresher::Instance->DrawRefresh();
Stuff::YawPitchRoll ypr(MyObj->GetMat());
m_HElevation = 0;
m_PosX = MyObj->GetPos().x;
m_PosY = MyObj->GetPos().y;
m_PosZ = MyObj->GetPos().z;
UpdateData(FALSE);
}
void GUIObjPanel::OnMoveObjectToCamera()
{
if(MyObj==NULL) return;
if ((CameraController::GetInstance() == 0) ||
(Refresher::Instance == 0))
{
return;
}
MyObj->SetSnapToGround(false);
Stuff::LinearMatrix4D matrix(CameraController::GetInstance()->GetLookAt());
matrix.BuildLookAt(CameraController::GetInstance()->GetYawPitchRange());
MyObj->SetMat(matrix);
Refresher::Instance->DrawRefresh();
m_SnapGround = false;
m_HElevation = 0;
m_Pitch = CameraController::GetInstance()->GetYawPitchRange().pitch * Degrees_Per_Radian;
m_PosX = MyObj->GetPos().x;
m_PosY = MyObj->GetPos().y;
m_PosZ = MyObj->GetPos().z;
m_Roll = 0;
m_Yaw = CameraController::GetInstance()->GetYawPitchRange().yaw * Degrees_Per_Radian;
UpdateData(FALSE);
}
void GUIObjPanel::OnKillfocusPosx()
{
UpdateData(TRUE); // Done here for range validation because of funny way that OnOK is called
}
void GUIObjPanel::OnKillfocusPosy()
{
UpdateData(TRUE); // Done here for range validation because of funny way that OnOK is called
}
void GUIObjPanel::OnKillfocusPosz()
{
UpdateData(TRUE); // Done here for range validation because of funny way that OnOK is called
}
void GUIObjPanel::OnKillfocusElevation()
{
UpdateData(TRUE); // Done here for range validation because of funny way that OnOK is called
}
void GUIObjPanel::OnChangePitch() {PitchChange=true;}
void GUIObjPanel::OnChangePosx() {PosXChange=true;}
void GUIObjPanel::OnChangePosy() {PosYChange=true;}
void GUIObjPanel::OnChangePosz() {PosZChange=true;}
void GUIObjPanel::OnChangeRoll() {RollChange=true;}
void GUIObjPanel::OnChangeYaw() {YawChange=true;}
void GUIObjPanel::OnChangeElevation() {ElevationChange=true;}
void GUIObjPanel::OnSnap() {SnapChange=true;}