You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
172 lines
4.4 KiB
172 lines
4.4 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// MapDiffDlg.cpp : implementation file |
|
// |
|
#include "stdafx.h" |
|
#include "GlobalFunctions.h" |
|
#include "History.h" |
|
#include "MainFrm.h" |
|
#include "MapDiffDlg.h" |
|
#include "MapDoc.h" |
|
#include "MapEntity.h" |
|
#include "MapSolid.h" |
|
#include "MapView2D.h" |
|
#include "MapWorld.h" |
|
#include "ObjectProperties.h" // For ObjectProperties::RefreshData |
|
#include "Options.h" |
|
#include "ToolManager.h" |
|
#include "VisGroup.h" |
|
#include "hammer.h" |
|
#include "MapOverlay.h" |
|
#include "GameConfig.h" |
|
|
|
// memdbgon must be the last include file in a .cpp file!!! |
|
#include <tier0/memdbgon.h> |
|
#include ".\mapdiffdlg.h" |
|
|
|
CMapDiffDlg *s_pDlg = NULL; |
|
CMapDoc *s_pCurrentMap = NULL; |
|
|
|
// MapDiffDlg dialog |
|
|
|
CMapDiffDlg::CMapDiffDlg(CWnd* pParent ) |
|
: CDialog(CMapDiffDlg::IDD, pParent) |
|
{ |
|
m_bCheckSimilar = true; |
|
} |
|
|
|
void CMapDiffDlg::DoDataExchange(CDataExchange* pDX) |
|
{ |
|
CDialog::DoDataExchange(pDX); |
|
|
|
DDX_Check(pDX, IDC_SIMILARCHECK, m_bCheckSimilar); |
|
DDX_Control(pDX, IDC_MAPNAME, m_mapName); |
|
} |
|
|
|
|
|
BEGIN_MESSAGE_MAP(CMapDiffDlg, CDialog) |
|
ON_BN_CLICKED(IDC_SIMILARCHECK, OnBnClickedSimilarcheck) |
|
ON_BN_CLICKED(IDC_MAPBROWSE, OnBnClickedMapbrowse) |
|
ON_BN_CLICKED(IDOK, OnBnClickedOk) |
|
ON_BN_CLICKED(IDCANCEL, OnBnClickedCancel) |
|
ON_WM_DESTROY() |
|
END_MESSAGE_MAP() |
|
|
|
void CMapDiffDlg::MapDiff(CWnd *pwndParent, CMapDoc *pCurrentMapDoc) |
|
{ |
|
if (!s_pDlg) |
|
{ |
|
s_pDlg = new CMapDiffDlg; |
|
s_pDlg->Create(IDD, pwndParent); |
|
s_pDlg->ShowWindow(SW_SHOW); |
|
s_pCurrentMap = pCurrentMapDoc; |
|
} |
|
} |
|
|
|
// MapDiffDlg message handlers |
|
|
|
void CMapDiffDlg::OnBnClickedSimilarcheck() |
|
{ |
|
// TODO: Add your control notification handler code here |
|
m_bCheckSimilar = !m_bCheckSimilar; |
|
} |
|
|
|
void CMapDiffDlg::OnBnClickedMapbrowse() |
|
{ |
|
CString m_pszFilename; |
|
|
|
// TODO: Add your control notification handler code here |
|
static char szInitialDir[MAX_PATH] = ""; |
|
if (szInitialDir[0] == '\0') |
|
{ |
|
strcpy(szInitialDir, g_pGameConfig->szMapDir); |
|
} |
|
|
|
// TODO: need to prevent (or handle) opening VMF files when using old map file formats |
|
CFileDialog dlg(TRUE, NULL, NULL, OFN_LONGNAMES | OFN_HIDEREADONLY | OFN_NOCHANGEDIR, "Valve Map Files (*.vmf)|*.vmf|Valve Map Files Autosaves (*.vmf_autosave)|*.vmf_autosave|Worldcraft RMFs (*.rmf)|*.rmf|Worldcraft Maps (*.map)|*.map||"); |
|
dlg.m_ofn.lpstrInitialDir = szInitialDir; |
|
int iRvl = dlg.DoModal(); |
|
|
|
if (iRvl == IDCANCEL) |
|
{ |
|
return; |
|
} |
|
|
|
// |
|
// Get the directory they browsed to for next time. |
|
// |
|
m_pszFilename = dlg.GetPathName(); |
|
m_mapName.SetWindowText( m_pszFilename ); |
|
} |
|
|
|
void CMapDiffDlg::OnBnClickedOk() |
|
{ |
|
// TODO: Add your control notification handler code here |
|
OnOK(); |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CMapDiffDlg::OnOK() |
|
{ |
|
CString strFilename; |
|
m_mapName.GetWindowText( strFilename ); |
|
CHammer *pApp = (CHammer*) AfxGetApp(); |
|
CMapDoc *pDoc = (CMapDoc*) pApp->pMapDocTemplate->OpenDocumentFile( strFilename ); |
|
CUtlVector <int> IDList; |
|
|
|
const CMapObjectList *pChildren = pDoc->GetMapWorld()->GetChildren(); |
|
|
|
FOR_EACH_OBJ( *pChildren, pos ) |
|
{ |
|
int nID = pChildren->Element(pos)->GetID(); |
|
IDList.AddToTail( nID ); |
|
} |
|
|
|
pDoc->OnCloseDocument(); |
|
|
|
CVisGroup *resultsVisGroup = NULL; |
|
pChildren = s_pCurrentMap->GetMapWorld()->GetChildren(); |
|
int nTotalSimilarities = 0; |
|
if ( m_bCheckSimilar ) |
|
{ |
|
FOR_EACH_OBJ( *pChildren, pos ) |
|
{ |
|
CMapClass *pChild = pChildren->Element(pos) ; |
|
int ID = pChild->GetID(); |
|
if ( IDList.Find( ID ) != -1 ) |
|
{ |
|
if ( resultsVisGroup == NULL ) |
|
{ |
|
resultsVisGroup = s_pCurrentMap->VisGroups_AddGroup( "Similar" ); |
|
nTotalSimilarities++; |
|
} |
|
pChild->AddVisGroup( resultsVisGroup ); |
|
} |
|
} |
|
} |
|
if ( nTotalSimilarities > 0 ) |
|
{ |
|
GetMainWnd()->MessageBox( "Similarities were found and placed into the \"Similar\" visgroup.", "Map Similarities Found", MB_OK | MB_ICONEXCLAMATION); |
|
} |
|
s_pCurrentMap->VisGroups_UpdateAll(); |
|
DestroyWindow(); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Called when our window is being destroyed. |
|
//----------------------------------------------------------------------------- |
|
void CMapDiffDlg::OnDestroy() |
|
{ |
|
delete this; |
|
s_pDlg = NULL; |
|
s_pCurrentMap = NULL; |
|
} |
|
|
|
|
|
void CMapDiffDlg::OnBnClickedCancel() |
|
{ |
|
// TODO: Add your control notification handler code here |
|
DestroyWindow(); |
|
}
|
|
|