/* * 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 . */ // BriefBitmapEdit.cpp : implementation file // #include "stdafx.h" #include "editor.h" #include "BriefBitmapEdit.h" #include "BriefEdit.h" #include "BriefMissionFlagsDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CBriefBitmapEdit dialog CBriefBitmapEdit::CBriefBitmapEdit(int curr_screen,LPTCBMPDESC d,CWnd* pParent /*=NULL*/) : CDialog(CBriefBitmapEdit::IDD, pParent) { //{{AFX_DATA_INIT(CBriefBitmapEdit) m_sFilename = _T(""); m_fSpeed = 0.0f; m_fStartTime = 0.0f; m_iX = 0; m_iY = 0; m_iEffectType = -1; m_sDesc = _T(""); m_NoRenderUntilStart = FALSE; //}}AFX_DATA_INIT //set to default values memset(&desc,0,sizeof(TCBMPDESC)); desc.type = TC_BMP_STATIC; m_Screen = curr_screen; desc.mission_mask_set = 0; desc.mission_mask_unset = 0; if(d){ //set to values passed in desc.caps = d->caps; if(d->caps&TCBD_XY){ desc.x = d->x; desc.y = d->y; } if(d->caps&TCBD_LOOPING){ desc.looping = d->looping; } if(d->caps&TCBD_WAITTIME){ desc.waittime = d->waittime; } if(d->caps&TCBD_SPEED){ desc.speed = d->speed; } if(d->flags&TC_NOEARLYRENDER) { m_NoRenderUntilStart = true; } desc.type = d->type; desc.flags = d->flags; strcpy(desc.filename,d->filename); desc.mission_mask_set = d->mission_mask_set; desc.mission_mask_unset = d->mission_mask_unset; } switch(desc.type){ case TC_BMP_STATIC: m_iEffectType = 0; break; case TC_BMP_BLUR: if(desc.flags==TC_BMPF_IN) m_iEffectType = 1; else m_iEffectType = 2; break; case TC_BMP_SCANLINE: if(desc.flags==TC_BMPF_IN) m_iEffectType = 3; else m_iEffectType = 4; break; case TC_BMP_INVERT: if(desc.flags==TC_BMPF_IN) m_iEffectType = 5; else m_iEffectType = 6; break; case TC_BMP_STRETCH: if(desc.flags==TC_BMPF_IN) m_iEffectType = 7; else m_iEffectType = 8; break; } m_sFilename = desc.filename; m_fSpeed = desc.speed; m_fStartTime = desc.waittime; m_iX = desc.x; m_iY = desc.y; } void CBriefBitmapEdit::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CBriefBitmapEdit) DDX_Text(pDX, IDC_BRIEF_B_FILENAME, m_sFilename); DDX_Text(pDX, IDC_BRIEF_B_SPEED, m_fSpeed); DDV_MinMaxFloat(pDX, m_fSpeed, 0.f, 99999.f); DDX_Text(pDX, IDC_BRIEF_B_STARTTIME, m_fStartTime); DDV_MinMaxFloat(pDX, m_fStartTime, 0.f, 99999.f); DDX_Text(pDX, IDC_BRIEF_B_X, m_iX); DDV_MinMaxInt(pDX, m_iX, 0, 639); DDX_Text(pDX, IDC_BRIEF_B_Y, m_iY); DDV_MinMaxInt(pDX, m_iY, 0, 479); DDX_Radio(pDX, IDC_BRIEF_B_STATIC, m_iEffectType); DDX_Text(pDX, IDC_BRIEF_B_DESC, m_sDesc); DDX_Check(pDX, IDC_BRIEF_B_NORENDER, m_NoRenderUntilStart); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CBriefBitmapEdit, CDialog) //{{AFX_MSG_MAP(CBriefBitmapEdit) ON_BN_CLICKED(IDC_BRIEF_B_CHOOSE, OnBriefBChoose) ON_CBN_SELCHANGE(IDC_BRIEF_B_PREDEF, OnSelchangeBriefBPredef) ON_BN_CLICKED(IDC_MISSIONFLAGS, OnMissionflags) ON_BN_CLICKED(IDC_BRIEF_B_NORENDER, OnBriefBNorender) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CBriefBitmapEdit message handlers void CBriefBitmapEdit::OnOK() { UpdateData(true); if(!cfexist(m_sFilename.GetBuffer(0))){ MessageBox("Not A Valid Filename","Error"); return; } desc.caps = TCBD_XY|TCBD_LOOPING|TCBD_WAITTIME|TCBD_SPEED; strcpy(desc.filename,m_sFilename); desc.speed = m_fSpeed; desc.waittime = m_fStartTime; desc.x = m_iX; desc.y = m_iY; switch(m_iEffectType){ case 0: desc.type = TC_BMP_STATIC; desc.flags = TC_BMPF_IN; break; case 1: desc.type = TC_BMP_BLUR; desc.flags = TC_BMPF_IN; break; case 2: desc.type = TC_BMP_BLUR; desc.flags = TC_BMPF_OUT; break; case 3: desc.type = TC_BMP_SCANLINE; desc.flags = TC_BMPF_IN; break; case 4: desc.type = TC_BMP_SCANLINE; desc.flags = TC_BMPF_OUT; break; case 5: desc.type = TC_BMP_INVERT; desc.flags = TC_BMPF_IN; break; case 6: desc.type = TC_BMP_INVERT; desc.flags = TC_BMPF_OUT; break; case 7: desc.type = TC_BMP_STRETCH; desc.flags = TC_BMPF_IN; break; case 8: desc.type = TC_BMP_STRETCH; desc.flags = TC_BMPF_OUT; break; } if(m_NoRenderUntilStart) desc.flags |= TC_NOEARLYRENDER; else desc.flags &= ~TC_NOEARLYRENDER; CDialog::OnOK(); } void CBriefBitmapEdit::OnBriefBChoose() { UpdateData(true); char szFilter[] = "Outrage Graphic Files (*.ogf)|*.ogf|32bit Uncompressed Targa (*.tga)|*.tga|PCX (*.pcx)|*.pcx|All Files (*.*)|*.*||"; CFileDialog dlg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_FILEMUSTEXIST,szFilter); if(dlg.DoModal()==IDOK){ //handle m_sFilename = dlg.GetFileName(); UpdateData(false); } } BOOL CBriefBitmapEdit::OnInitDialog() { CDialog::OnInitDialog(); CComboBox *combo = (CComboBox *)GetDlgItem(IDC_BRIEF_B_PREDEF); combo->AddString(""); combo->SetCurSel(0); int layout = -1; for(int i=0;i<(*PBnum_layouts);i++){ if(!stricmp(Briefing_screens[m_Screen].layout,PBlayouts[i].filename)) layout = i; } if(layout!=-1){ int count = PBlayouts[layout].num_bmps; for(int j=0;jAddString(buffer); } } UpdateData(false); return TRUE; } void CBriefBitmapEdit::OnSelchangeBriefBPredef() { CComboBox *combo = (CComboBox *)GetDlgItem(IDC_BRIEF_B_PREDEF); int item = combo->GetCurSel(); if(item<=0) return; UpdateData(true); int layout = -1; for(int i=0;i<(*PBnum_layouts);i++){ if(!stricmp(Briefing_screens[m_Screen].layout,PBlayouts[i].filename)) layout = i; } if(layout!=-1){ m_iX = PBlayouts[layout].bmps[item-1].x; m_iY = PBlayouts[layout].bmps[item-1].y; UpdateData(false); } } void CBriefBitmapEdit::OnMissionflags() { CBriefMissionFlagsDlg dlg(desc.mission_mask_set,desc.mission_mask_unset); if(dlg.DoModal()){ desc.mission_mask_set = dlg.m_Set; desc.mission_mask_unset = dlg.m_UnSet; } } void CBriefBitmapEdit::OnBriefBNorender() { }