mirror of
https://github.com/kevinbentley/Descent3.git
synced 2025-01-22 19:55:23 +00:00
31b63bb79f
Generated using script: for file in \$(find ./legacy -type f | \grep -E "\.cpp|\.h") do mv $file temp.xxx cp gplheader $file cat temp.xxx >> $file done
409 lines
8.3 KiB
C++
409 lines
8.3 KiB
C++
/*
|
|
* Descent 3
|
|
* Copyright (C) 2024 Parallax Software
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
// BriefManage.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "BriefManage.h"
|
|
#include "editor.h"
|
|
#include "ddio.h"
|
|
#include "manage.h"
|
|
#include "pserror.h"
|
|
#include "pstypes.h"
|
|
#include "gamefile.h"
|
|
#include "soundpage.h"
|
|
#include "editlinedialog.h"
|
|
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CBriefManage dialog
|
|
|
|
|
|
CBriefManage::CBriefManage(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CBriefManage::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CBriefManage)
|
|
// NOTE: the ClassWizard will add member initialization here
|
|
//}}AFX_DATA_INIT
|
|
}
|
|
|
|
|
|
void CBriefManage::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CBriefManage)
|
|
DDX_Control(pDX, IDC_LIST, m_List);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CBriefManage, CDialog)
|
|
//{{AFX_MSG_MAP(CBriefManage)
|
|
ON_BN_CLICKED(IDC_ADD, OnAdd)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CBriefManage message handlers
|
|
bool AddNewGameFile(char *fullpath,char *directory);
|
|
bool CheckInGamefile(char *tempbuffer,bool show_ok_confirmation);
|
|
void CBriefManage::OnAdd()
|
|
{
|
|
if(!Network_up){
|
|
MessageBox("You need to say YES on the data update when starting the editor");
|
|
return;
|
|
}
|
|
|
|
int sel = m_List.GetCurSel();
|
|
if(sel==LB_ERR){
|
|
MessageBox("Please select the file you want to add");
|
|
return;
|
|
}
|
|
|
|
char full_buffer[_MAX_PATH+100];
|
|
m_List.GetText(sel,full_buffer);
|
|
|
|
int page_type = -1;
|
|
char *ptr;
|
|
|
|
//break it down
|
|
ptr = full_buffer + strlen(full_buffer);
|
|
|
|
while( ptr>full_buffer && (*ptr)!='|') ptr--;
|
|
|
|
if(*ptr!='|'){
|
|
MessageBox("Internal Error");
|
|
Int3();//get jeff;
|
|
return;
|
|
}
|
|
|
|
*ptr = '\0';
|
|
ptr++;
|
|
|
|
if(page_type==-1 && strstr(ptr,"[sound]"))
|
|
page_type=PAGETYPE_SOUND;
|
|
if(page_type==-1 && strstr(ptr,"[file]"))
|
|
page_type=PAGETYPE_GAMEFILE;
|
|
|
|
if(page_type==-1){
|
|
MessageBox("Internal Error");
|
|
Int3(); //get Jeff
|
|
return;
|
|
}
|
|
|
|
if(page_type==PAGETYPE_SOUND){
|
|
MessageBox("You must add sounds in the sound dialog");
|
|
return;
|
|
}
|
|
|
|
switch(page_type)
|
|
{
|
|
case PAGETYPE_GAMEFILE:
|
|
{
|
|
char filename[255];
|
|
char real_filename[_MAX_PATH];
|
|
|
|
strcpy(filename,full_buffer);
|
|
|
|
// Get the filename of the representing image
|
|
CString filter = "";
|
|
|
|
if (!OpenFileDialog(this, (LPCTSTR)filter, filename, Current_files_dir, sizeof(Current_files_dir)))
|
|
return;
|
|
|
|
char directory[32],ext[32];
|
|
bool know_dir = false;
|
|
|
|
ddio_SplitPath(filename,NULL,real_filename,ext);
|
|
strcat(real_filename,ext);
|
|
|
|
if(!know_dir && !stricmp(ext,".ogf")){
|
|
know_dir = true;
|
|
strcpy(directory,"graphics");
|
|
}
|
|
|
|
if(!know_dir && !stricmp(ext,".tga")){
|
|
know_dir = true;
|
|
strcpy(directory,"graphics");
|
|
}
|
|
|
|
if(!know_dir && !stricmp(ext,".pcx")){
|
|
know_dir = true;
|
|
strcpy(directory,"graphics");
|
|
}
|
|
|
|
if(!know_dir && !stricmp(ext,".oof")){
|
|
know_dir = true;
|
|
strcpy(directory,"models");
|
|
}
|
|
|
|
if(!know_dir){
|
|
CEditLineDialog dlg("What directory does this belong in?","Directory", "graphics", false, this);
|
|
if(dlg.DoModal()!=IDOK)
|
|
return;
|
|
|
|
strcpy(directory,dlg.GetText());
|
|
|
|
bool is_ok = false;
|
|
|
|
if(!is_ok && !stricmp(directory,"briefings") )
|
|
is_ok = true;
|
|
|
|
if(!is_ok && !stricmp(directory,"graphics") )
|
|
is_ok = true;
|
|
|
|
if(!is_ok && !stricmp(directory,"levels") )
|
|
is_ok = true;
|
|
|
|
if(!is_ok && !stricmp(directory,"misc") )
|
|
is_ok = true;
|
|
|
|
if(!is_ok && !stricmp(directory,"models") )
|
|
is_ok = true;
|
|
|
|
if(!is_ok && !stricmp(directory,"music") )
|
|
is_ok = true;
|
|
|
|
if(!is_ok && !stricmp(directory,"scripts") )
|
|
is_ok = true;
|
|
|
|
if(!is_ok && !stricmp(directory,"sounds") )
|
|
is_ok = true;
|
|
|
|
if(!is_ok){
|
|
MessageBox("Invalid directory");
|
|
return;
|
|
}
|
|
}
|
|
|
|
if(!AddNewGameFile(filename,directory)){
|
|
char buffer[_MAX_PATH*2];
|
|
sprintf(buffer,"Unable to add:\r\n%s\r\nto %s",filename,directory);
|
|
MessageBox(buffer);
|
|
return;
|
|
}
|
|
|
|
//auto checkin
|
|
if (!mng_MakeLocker()){
|
|
return;
|
|
}
|
|
|
|
if(!CheckInGamefile(real_filename,true)){
|
|
MessageBox("Unable to auto-checkin");
|
|
}
|
|
|
|
mng_EraseLocker();
|
|
}break;
|
|
}
|
|
|
|
UpdateDialog();
|
|
}
|
|
|
|
BOOL CBriefManage::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
UpdateDialog();
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void CBriefManage::AddString(char *filename,int pagetype)
|
|
{
|
|
char buffer[_MAX_PATH+100];
|
|
char real_filename[_MAX_PATH];
|
|
char page_type[100];
|
|
char *pagename = filename;
|
|
|
|
switch(pagetype)
|
|
{
|
|
case PAGETYPE_SOUND:
|
|
{
|
|
//look for the page in the manage system
|
|
bool found;
|
|
|
|
found = false;
|
|
|
|
mngs_sound_page page;
|
|
|
|
if(mng_FindSpecificSoundPage(filename,&page )>0)
|
|
{
|
|
found = true;
|
|
}
|
|
|
|
if(!found){
|
|
//ok there wasn't one in the gamefiles make sure there isn't a tracklocked
|
|
if(mng_FindTrackLock(filename,PAGETYPE_SOUND)!=-1){
|
|
//there isn't one in the track lock...this is our first compile!
|
|
found = true;
|
|
}
|
|
}
|
|
|
|
if(found){
|
|
//we already have this in the manage system
|
|
return;
|
|
}
|
|
|
|
|
|
strcpy(page_type,"[sound]");
|
|
}break;
|
|
case PAGETYPE_GAMEFILE:
|
|
{
|
|
//look for the page in the manage system
|
|
bool found;
|
|
int i;
|
|
|
|
char ext[32];
|
|
ddio_SplitPath(filename,NULL,real_filename,ext);
|
|
strcat(real_filename,ext);
|
|
pagename = real_filename;
|
|
|
|
found = false;
|
|
for (i=0;i<MAX_GAMEFILES;i++){
|
|
if (Gamefiles[i].used && (!stricmp(real_filename,Gamefiles[i].name)) ){
|
|
found = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(!found){
|
|
//ok there wasn't one in the gamefiles make sure there isn't a tracklocked
|
|
if(mng_FindTrackLock(real_filename,PAGETYPE_GAMEFILE)!=-1){
|
|
//there isn't one in the track lock...this is our first compile!
|
|
found = true;
|
|
}
|
|
}
|
|
|
|
if(found){
|
|
//we already have this in the manage system
|
|
return;
|
|
}
|
|
|
|
|
|
strcpy(page_type,"[file]");
|
|
}
|
|
break;
|
|
default:
|
|
Int3();
|
|
return;
|
|
}
|
|
|
|
sprintf(buffer,"%s|%s",pagename,page_type);
|
|
|
|
//see if it's already in the list
|
|
if(m_List.FindStringExact(-1,buffer)==LB_ERR)
|
|
{
|
|
m_List.AddString(buffer);
|
|
}
|
|
}
|
|
|
|
void CBriefManage::UpdateDialog(void)
|
|
{
|
|
m_List.ResetContent();
|
|
|
|
int curr_screen = Briefing_root_screen;
|
|
int curr_effect;
|
|
tBriefScreen *screen;
|
|
tBriefEffect *effect;
|
|
|
|
//go through and see what we have
|
|
while(curr_screen!=-1)
|
|
{
|
|
screen = &Briefing_screens[curr_screen];
|
|
|
|
ASSERT(screen->used);
|
|
|
|
if(screen->layout[0]!='\0'){
|
|
//add the layout screen
|
|
AddString(screen->layout);
|
|
}
|
|
|
|
//go through all the effects for this screen
|
|
curr_effect = screen->root_effect;
|
|
while(curr_effect!=-1)
|
|
{
|
|
effect = &screen->effects[curr_effect];
|
|
ASSERT(effect->used);
|
|
|
|
switch(effect->type){
|
|
case BE_MOVIE:
|
|
case BE_TEXT:
|
|
case BE_BKG:
|
|
break; //no files in here
|
|
|
|
case BE_BMP:
|
|
if(*effect->bmp_desc.filename)
|
|
{
|
|
AddString(effect->bmp_desc.filename);
|
|
}
|
|
break;
|
|
|
|
case BE_POLY:
|
|
if(*effect->poly_desc.polyname)
|
|
{
|
|
AddString(effect->poly_desc.polyname);
|
|
}
|
|
break;
|
|
case BE_SND:
|
|
if(*effect->snd_desc.filename)
|
|
{
|
|
AddString(effect->snd_desc.filename,PAGETYPE_SOUND);
|
|
}
|
|
break;
|
|
case BE_BUTTON:
|
|
if(*effect->button_desc.filename)
|
|
{
|
|
AddString(effect->button_desc.filename);
|
|
}
|
|
|
|
if(*effect->button_desc.filename_focus)
|
|
{
|
|
AddString(effect->button_desc.filename_focus);
|
|
}
|
|
|
|
if(*effect->button_desc.flash_filename)
|
|
{
|
|
AddString(effect->button_desc.flash_filename);
|
|
}
|
|
|
|
if(*effect->button_desc.flash_filename_focus)
|
|
{
|
|
AddString(effect->button_desc.flash_filename_focus);
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
|
|
curr_effect = effect->next;
|
|
}
|
|
|
|
curr_screen = screen->next;
|
|
}
|
|
|
|
m_List.SetCurSel(0);
|
|
} |