| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278 |
- /*
- ** Command & Conquer Renegade(tm)
- ** Copyright 2025 Electronic Arts Inc.
- **
- ** 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/>.
- */
- // OptimizingVisDialog.cpp : implementation file
- //
- #include "stdafx.h"
- #include "leveledit.h"
- #include "optimizingvisdialog.h"
- #include "utils.h"
- #include "sceneeditor.h"
- #include "rendobj.h"
- #include "phys.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- //////////////////////////////////////////////////////////////////////////
- // Local Prototypes
- //////////////////////////////////////////////////////////////////////////
- static UINT fnOptimizeVisDialogThread (DWORD dwparam1, DWORD dwparam2, DWORD, HRESULT *, HWND *);
- /////////////////////////////////////////////////////////////////////////////
- //
- // OptimizingVisDialogClass
- //
- /////////////////////////////////////////////////////////////////////////////
- OptimizingVisDialogClass::OptimizingVisDialogClass(CWnd *parent)
- : m_Cancelled (false),
- m_ProgressStats (NULL),
- CDialog(OptimizingVisDialogClass::IDD, parent)
- {
- //{{AFX_DATA_INIT(OptimizingVisDialogClass)
- // NOTE: the ClassWizard will add member initialization here
- //}}AFX_DATA_INIT
- Create (OptimizingVisDialogClass::IDD, parent);
- return ;
- }
- /////////////////////////////////////////////////////////////////////////////
- //
- // DoDataExchange
- //
- /////////////////////////////////////////////////////////////////////////////
- void
- OptimizingVisDialogClass::DoDataExchange (CDataExchange *pDX)
- {
- CDialog::DoDataExchange (pDX);
- //{{AFX_DATA_MAP(OptimizingVisDialogClass)
- DDX_Control(pDX, IDC_PROGRESS_BAR, m_ProgressBar);
- //}}AFX_DATA_MAP
- return ;
- }
- BEGIN_MESSAGE_MAP(OptimizingVisDialogClass, CDialog)
- //{{AFX_MSG_MAP(OptimizingVisDialogClass)
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- //
- // OnInitDialog
- //
- /////////////////////////////////////////////////////////////////////////////
- BOOL
- OptimizingVisDialogClass::OnInitDialog (void)
- {
- CDialog::OnInitDialog ();
- m_ProgressBar.SetRange (0, 100);
- SetTimer (777, 1000, NULL);
- return TRUE;
- }
- /////////////////////////////////////////////////////////////////////////////
- //
- // OnCancel
- //
- /////////////////////////////////////////////////////////////////////////////
- void
- OptimizingVisDialogClass::OnCancel (void)
- {
- KillTimer (777);
- ::DestroyWindow (m_hWnd);
- ::PostQuitMessage (0);
- return ;
- }
- /////////////////////////////////////////////////////////////////////////////
- //
- // WindowProc
- //
- /////////////////////////////////////////////////////////////////////////////
- LRESULT
- OptimizingVisDialogClass::WindowProc
- (
- UINT message,
- WPARAM wParam,
- LPARAM lParam
- )
- {
- if (message == WM_TIMER) {
- Update_Stats ();
- }
- return CDialog::WindowProc (message, wParam, lParam);
- }
- /////////////////////////////////////////////////////////////////////////////
- //
- // Update_Stats
- //
- /////////////////////////////////////////////////////////////////////////////
- void
- OptimizingVisDialogClass::Update_Stats (void)
- {
- if (m_ProgressStats == NULL) {
- return ;
- }
- //
- // Update each of the status fields
- //
- SetDlgItemInt (IDC_INITIAL_BIT_COUNT_TEXT, m_ProgressStats->Get_Initial_Bit_Count ());
- SetDlgItemInt (IDC_INITIAL_SECTOR_COUNT_TEXT, m_ProgressStats->Get_Initial_Sector_Count ());
- SetDlgItemInt (IDC_FINAL_BIT_COUNT_TEXT, m_ProgressStats->Get_Final_Bit_Count ());
- SetDlgItemInt (IDC_FINAL_SECTOR_COUNT_TEXT, m_ProgressStats->Get_Final_Sector_Count ());
- SetDlgItemInt (IDC_INITIAL_OBJECT_COUNT_TEXT, m_ProgressStats->Get_Initial_Object_Count ());
- SetDlgItemInt (IDC_FINAL_OBJECT_COUNT_TEXT, m_ProgressStats->Get_Final_Object_Count ());
- SetDlgItemInt (IDC_INITIAL_DYNAMIC_CELL_COUNT_TEXT, m_ProgressStats->Get_Initial_Dynamic_Cell_Count ());
- SetDlgItemInt (IDC_FINAL_DYNAMIC_CELL_COUNT_TEXT, m_ProgressStats->Get_Final_Dynamic_Cell_Count ());
- SetDlgItemInt (IDC_DYNAMIC_CELLS_REMOVED_COUNT_TEXT, m_ProgressStats->Get_Dynamic_Cells_Removed ());
- SetDlgItemInt (IDC_OBJECTS_MERGED_TEXT, m_ProgressStats->Get_Objects_Merged ());
- SetDlgItemInt (IDC_SECTORS_MERGED_TEXT, m_ProgressStats->Get_Sectors_Merged ());
- //
- // Update the status text
- //
- int total = m_ProgressStats->Get_Total_Operation_Count ();
- int current = m_ProgressStats->Get_Completed_Operation_Count ();
-
- CString status_text;
- status_text.Format ("%d of %d operations completed.", current, total);
- SetDlgItemText (IDC_STATUS_TEXT,status_text);
- //
- // Update the progress bar
- //
- if (total > 0) {
- m_ProgressBar.SetPos ((current * 100) / total);
- }
- return ;
- }
- /////////////////////////////////////////////////////////////////////////////
- //
- // Set_Finished
- //
- /////////////////////////////////////////////////////////////////////////////
- void
- OptimizingVisDialogClass::Set_Finished (void)
- {
- ::EnableWindow (::GetDlgItem (m_hWnd, IDCANCEL), TRUE);
- Update_Stats ();
- m_ProgressBar.SetPos (100);
-
- return ;
- }
- /////////////////////////////////////////////////////////////////////////////
- //
- // Optimize
- //
- /////////////////////////////////////////////////////////////////////////////
- void
- OptimizingVisDialogClass::Optimize (void)
- {
- OptimizingVisDialogClass *dialog = NULL;
- VisOptProgressClass stats;
- //
- // Create the dialog on a separate thread
- //
- ::Create_UI_Thread (fnOptimizeVisDialogThread, 0, (DWORD)&dialog, 0, NULL, NULL);
- dialog->Set_Status_Object (&stats);
- //
- // Kick off the optimization
- //
- ::Get_Scene_Editor ()->Optimize_Visibility_Data (stats);
- //
- // Now make sure each dynamic object has updated visibility
- //
- ::Get_Scene_Editor ()->Reset_Dynamic_Object_Visibility_Status ();
- //
- // Cleanup the dialog
- //
- dialog->Set_Finished ();
- dialog->Set_Status_Object (NULL);
- return ;
- }
- /////////////////////////////////////////////////////////////////////////////
- //
- // fnOptimizeVisDialogThread
- //
- ////////////////////////////////////////////////////////////////////////////
- UINT
- fnOptimizeVisDialogThread
- (
- DWORD dwparam1,
- DWORD dwparam2,
- DWORD /*dwparam3*/,
- HRESULT* /*presult*/,
- HWND* /*phmain_wnd*/
- )
- {
- OptimizingVisDialogClass *dialog = new OptimizingVisDialogClass (NULL); //::AfxGetMainWnd ());
- dialog->ShowWindow (SW_SHOW);
- //
- // Return the dialog object to the caller
- //
- OptimizingVisDialogClass **return_val = (OptimizingVisDialogClass **)dwparam2;
- if (return_val != NULL) {
- (*return_val) = dialog;
- }
- return 1;
- }
- /////////////////////////////////////////////////////////////////////////////
- //
- // OptimizingVisDialogClass::Set_Status_Object
- //
- ////////////////////////////////////////////////////////////////////////////
- void
- OptimizingVisDialogClass::Set_Status_Object (VisOptProgressClass *status_object)
- {
- m_ProgressStats = status_object;
- Update_Stats();
-
- return ;
- }
|