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

264 lines
5.7 KiB
C++

// MissionPropsPanel.cpp : implementation file
//
#include "stdafx.h"
#include "mw4gameed2.h"
#include "MissionPropsPanel.h"
#include "ObjectManager.h"
#include "GameInterface.h"
#include "GameTypesPanel.h"
#include <Adept\Adept.hpp>
using namespace Adept;
/////////////////////////////////////////////////////////////////////////////
// CMissionPropsPanel dialog
CMissionPropsPanel::CMissionPropsPanel(ObjectManager *gobj,UndoCommand **cmd,CWnd* pParent )
: CPanelDlg(CMissionPropsPanel::IDD, pParent)
{
ObjMan=gobj;
CmdList=cmd;
//{{AFX_DATA_INIT(CMissionPropsPanel)
m_Night = FALSE;
m_Respawn = FALSE;
m_RunningLight = FALSE;
m_SearchLight = FALSE;
m_HSEff = 0.0f;
m_WatLevel = _T("");
//}}AFX_DATA_INIT
}
void CMissionPropsPanel::DoDataExchange(CDataExchange* pDX)
{
CPanelDlg::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMissionPropsPanel)
DDX_Control(pDX, IDC_NIGHTWEATHER, m_NightWeather);
DDX_Control(pDX, IDC_DAYWEATHER, m_DayWeather);
DDX_Control(pDX, IDC_DAYSKYLIST, m_DaySkyList);
DDX_Control(pDX, IDC_NIGHTSKYLIST, m_NightSkyList);
DDX_Check(pDX, IDC_NIGHTMISSION, m_Night);
DDX_Check(pDX, IDC_RESPAWN, m_Respawn);
DDX_Check(pDX, IDC_RUNNINGLIGHTS, m_RunningLight);
DDX_Check(pDX, IDC_SEARCHLIGHTS, m_SearchLight);
DDX_Text(pDX, IDC_HSEFF, m_HSEff);
DDX_Text(pDX, IDC_WATLEVEL, m_WatLevel);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CMissionPropsPanel, CPanelDlg)
//{{AFX_MSG_MAP(CMissionPropsPanel)
ON_BN_CLICKED(IDC_MPGAMES, OnMpgames)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMissionPropsPanel message handlers
void CMissionPropsPanel::OnOK()
{
UpdateData(TRUE);
ObjMan->MisDat.SetRespawn(m_Respawn==TRUE?true:false);
ObjMan->MisDat.SetRunningLights(m_RunningLight==TRUE?true:false);
ObjMan->MisDat.SetSearchLights(m_SearchLight==TRUE?true:false);
ObjMan->MisDat.SetHeatSinkEfficiency(m_HSEff);
int sel;
CString str;
sel=m_DaySkyList.GetCurSel();
if(sel!=-1)
SetDaySky(*((CString *)m_DaySkyList.GetItemDataPtr(sel)));
sel=m_NightSkyList.GetCurSel();
if(sel!=-1)
SetNightSky(*((CString *)m_NightSkyList.GetItemDataPtr(sel)));
sel=m_DayWeather.GetCurSel();
if(sel!=-1)
{
ResourceID *rid=(ResourceID *)m_DayWeather.GetItemDataPtr(sel);
if(rid)
ObjMan->MisDat.SetWeather(*rid);
else
ObjMan->MisDat.SetWeather(ResourceID::Null);
}
sel=m_NightWeather.GetCurSel();
if(sel!=-1)
{
ResourceID *rid=(ResourceID *)m_NightWeather.GetItemDataPtr(sel);
if(rid)
ObjMan->MisDat.SetNightWeather(*rid);
else
ObjMan->MisDat.SetNightWeather(ResourceID::Null);
}
int i;
for(i=0;i<m_NightSkyList.GetCount();i++) delete m_NightSkyList.GetItemDataPtr(i);
for(i=0;i<m_DaySkyList.GetCount();i++) delete m_DaySkyList.GetItemDataPtr(i);
MakeMissionNight(m_Night==TRUE?true:false);
}
void CMissionPropsPanel::FillEffectList(CComboBox *box)
{
box->ResetContent();
box->AddString("<None>");
if(Adept::ResourceManager::Instance==NULL) return;
Adept::Resource curres;
curres.First(NULL);
CString res_name,base_name,dir_name;
int item;
int depth,sp,i;
while(curres.ReadAndNext())
{
res_name=(char *)curres.GetName();
res_name.MakeLower();
if(res_name.Right(5).Compare(".data")==NULL)
{ // This is a Data File
base_name=res_name.Mid(res_name.ReverseFind('\\')+1);
base_name=base_name.Left(base_name.GetLength()-5);
sp=res_name.Find("effects\\");
depth=0;
if(sp>=0)
for(i=sp;i<res_name.GetLength();i++)
if(res_name[i]=='\\')
depth++; // Count Tree Depth
if( sp!=-1 && depth==2)
{
item=box->AddString(base_name);
box->SetItemDataPtr(item,new ResourceID(curres.GetResourceID()));
}
}
}
}
void CMissionPropsPanel::OnCancel()
{
}
BOOL CMissionPropsPanel::OnInitDialog()
{
CPanelDlg::OnInitDialog();
m_Night=IsMissionNight();
m_Respawn=ObjMan->MisDat.GetRespawn()?TRUE:FALSE;
m_RunningLight=ObjMan->MisDat.GetRunningLights()?TRUE:FALSE;
m_SearchLight=ObjMan->MisDat.GetSearchLights()?TRUE:FALSE;
FillEffectList(&m_DayWeather);
FillEffectList(&m_NightWeather);
int sel;
m_HSEff=ObjMan->MisDat.GetHeatSinkEfficiency();
LoadSkys(&m_DaySkyList);
LoadSkys(&m_NightSkyList);
m_DaySkyList.SetCurSel(m_DaySkyList.FindString(-1,DaySkyName()));
m_NightSkyList.SetCurSel(m_NightSkyList.FindString(-1,NightSkyName()));
m_WatLevel.Format("%5.3fm",GetWaterLevel());
UpdateData(FALSE);
ResourceID resid;
resid=ObjMan->MisDat.GetWeather();
sel=0;
if(resid!=ResourceID::Null)
{
sel=-1;
int i;
for(i=0;i<m_DayWeather.GetCount() && sel<0;i++)
{
void *ptr=m_DayWeather.GetItemDataPtr(i);
if(ptr)
{
if(*((ResourceID *)ptr)==resid) sel=i;
}
else
{
if(ResourceID::Null==resid) sel=i;
}
}
}
m_DayWeather.SetCurSel(sel);
resid=ObjMan->MisDat.GetNightWeather();
sel=0;
if(resid!=ResourceID::Null)
{
sel=-1;
int i;
for(i=0;i<m_NightWeather.GetCount() && sel<0;i++)
{
void *ptr=m_NightWeather.GetItemDataPtr(i);
if(ptr)
{
if(*((ResourceID *)ptr)==resid) sel=i;
}
else
{
if(ResourceID::Null==resid) sel=i;
}
}
}
m_NightWeather.SetCurSel(sel);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CMissionPropsPanel::OnMpgames()
{
CGameTypesPanel dlg(ObjMan,CmdList,this);
if(dlg.DoModal()==IDOK)
{
}
CString msg;
if(ObjMan->AddEssentialObjects(msg))
{
MessageBox(msg,"Mission Modified",MB_OK);
}
}