-/*\r
-BobToolz plugin for GtkRadiant\r
-Copyright (C) 2001 Gordon Biggans\r
-\r
-This library is free software; you can redistribute it and/or\r
-modify it under the terms of the GNU Lesser General Public\r
-License as published by the Free Software Foundation; either\r
-version 2.1 of the License, or (at your option) any later version.\r
-\r
-This library is distributed in the hope that it will be useful,\r
-but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
-Lesser General Public License for more details.\r
-\r
-You should have received a copy of the GNU Lesser General Public\r
-License along with this library; if not, write to the Free Software\r
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
-*/\r
-\r
-// DMap.cpp: implementation of the DMap class.\r
-//\r
-//////////////////////////////////////////////////////////////////////\r
-\r
-#include "StdAfx.h"\r
-#include "DMap.h"\r
-\r
-\r
-//////////////////////////////////////////////////////////////////////\r
-// Construction/Destruction\r
-//////////////////////////////////////////////////////////////////////\r
-\r
-DMap::DMap()\r
-{\r
- m_nNextEntity = 1;\r
- AddEntity("worldspawn", 0);\r
-}\r
-\r
-DMap::~DMap()\r
-{\r
- ClearEntities();\r
-}\r
-\r
-DEntity* DMap::AddEntity(char *classname, int ID)\r
-{\r
- DEntity* newEntity;\r
- if(ID == -1)\r
- newEntity = new DEntity(classname, m_nNextEntity++);\r
- else\r
- newEntity = new DEntity(classname, ID);\r
-\r
- entityList.push_back(newEntity);\r
- \r
- return newEntity;\r
-}\r
-\r
-void DMap::ClearEntities()\r
-{\r
- m_nNextEntity = 1;\r
-\r
- for(list<DEntity *>::const_iterator deadEntity=entityList.begin(); deadEntity!=entityList.end(); deadEntity++)\r
- delete *deadEntity;\r
-\r
- entityList.clear();\r
-}\r
-\r
-DEntity* DMap::GetEntityForID(int ID)\r
-{\r
- DEntity* findEntity = NULL;\r
-\r
- for(list<DEntity *>::const_iterator chkEntity=entityList.begin(); chkEntity!=entityList.end(); chkEntity++)\r
- {\r
- if((*chkEntity)->m_nID == ID)\r
- {\r
- findEntity = (*chkEntity);\r
- break;\r
- }\r
- }\r
-\r
- if(!findEntity)\r
- findEntity = AddEntity("worldspawn", ID);\r
-\r
- return findEntity;\r
-}\r
-\r
-\r
-DEntity* DMap::GetWorldSpawn()\r
-{\r
- return GetEntityForID(0);\r
-}\r
-\r
-void DMap::BuildInRadiant(bool bAllowDestruction)\r
-{\r
- for(list<DEntity *>::const_iterator buildEntity=entityList.begin(); buildEntity!=entityList.end(); buildEntity++)\r
- (*buildEntity)->BuildInRadiant(bAllowDestruction);\r
-}\r
-\r
-void DMap::LoadAll(bool bLoadPatches)\r
-{\r
- ClearEntities();\r
-\r
- g_FuncTable.m_pfnDeselectAllBrushes();\r
-\r
- int count = g_FuncTable.m_pfnGetEntityCount();\r
-\r
- for(int i = 0; i < count; i++)\r
- {\r
- DEntity* loadEntity;\r
-\r
- if(i == 0)\r
- loadEntity = GetWorldSpawn();\r
- else\r
- loadEntity = AddEntity("", m_nNextEntity++);\r
-\r
- if(!loadEntity->LoadFromEntity(i, bLoadPatches))\r
- {\r
- delete loadEntity;\r
- entityList.pop_back();\r
- }\r
- }\r
-}\r
-\r
-int DMap::FixBrushes(bool rebuild)\r
-{\r
- int count = 0;\r
- for(list<DEntity *>::const_iterator fixEntity=entityList.begin(); fixEntity!=entityList.end(); fixEntity++)\r
- {\r
- int cnt;\r
-\r
- if(!stricmp("worldspawn", (*fixEntity)->m_Classname))\r
- cnt = (*fixEntity)->FixBrushes(rebuild);\r
- else\r
- {\r
- cnt = (*fixEntity)->FixBrushes(FALSE);\r
- \r
- if(cnt && rebuild)\r
- RebuildEntity(*fixEntity);\r
- }\r
-\r
- count += cnt;\r
- }\r
-\r
- return count;\r
-}\r
-\r
-void DMap::ResetTextures( const char* textureName, float fScale[2], float fShift[2], int rotation, const char* newTextureName, \r
- int bResetTextureName, int bResetScale[2], int bResetShift[2], int bResetRotation)\r
-{\r
- for(list<DEntity *>::const_iterator texEntity=entityList.begin(); texEntity!=entityList.end(); texEntity++)\r
- {\r
- if(!stricmp("worldspawn", (*texEntity)->m_Classname))\r
- (*texEntity)->ResetTextures(textureName, fScale, fShift, rotation, newTextureName, \r
- bResetTextureName, bResetScale, bResetShift, bResetRotation, TRUE);\r
- else\r
- {\r
- if((*texEntity)->ResetTextures( textureName, fScale, fShift, rotation, newTextureName, \r
- bResetTextureName, bResetScale, bResetShift, bResetRotation, FALSE))\r
- RebuildEntity(*texEntity);\r
- }\r
- } \r
-}\r
-\r
-void DMap::RebuildEntity(DEntity *ent)\r
-{\r
- ent->RemoveFromRadiant();\r
- ent->BuildInRadiant(FALSE);\r
-}\r
+/*
+BobToolz plugin for GtkRadiant
+Copyright (C) 2001 Gordon Biggans
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library 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
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+// DMap.cpp: implementation of the DMap class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "StdAfx.h"
+#include "DMap.h"
+
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+DMap::DMap()
+{
+ m_nNextEntity = 1;
+ AddEntity("worldspawn", 0);
+}
+
+DMap::~DMap()
+{
+ ClearEntities();
+}
+
+DEntity* DMap::AddEntity(char *classname, int ID)
+{
+ DEntity* newEntity;
+ if(ID == -1)
+ newEntity = new DEntity(classname, m_nNextEntity++);
+ else
+ newEntity = new DEntity(classname, ID);
+
+ entityList.push_back(newEntity);
+
+ return newEntity;
+}
+
+void DMap::ClearEntities()
+{
+ m_nNextEntity = 1;
+
+ for(list<DEntity *>::const_iterator deadEntity=entityList.begin(); deadEntity!=entityList.end(); deadEntity++)
+ delete *deadEntity;
+
+ entityList.clear();
+}
+
+DEntity* DMap::GetEntityForID(int ID)
+{
+ DEntity* findEntity = NULL;
+
+ for(list<DEntity *>::const_iterator chkEntity=entityList.begin(); chkEntity!=entityList.end(); chkEntity++)
+ {
+ if((*chkEntity)->m_nID == ID)
+ {
+ findEntity = (*chkEntity);
+ break;
+ }
+ }
+
+ if(!findEntity)
+ findEntity = AddEntity("worldspawn", ID);
+
+ return findEntity;
+}
+
+
+DEntity* DMap::GetWorldSpawn()
+{
+ return GetEntityForID(0);
+}
+
+void DMap::BuildInRadiant(bool bAllowDestruction)
+{
+ for(list<DEntity *>::const_iterator buildEntity=entityList.begin(); buildEntity!=entityList.end(); buildEntity++)
+ (*buildEntity)->BuildInRadiant(bAllowDestruction);
+}
+
+void DMap::LoadAll(bool bLoadPatches)
+{
+ ClearEntities();
+
+ g_FuncTable.m_pfnDeselectAllBrushes();
+
+ int count = g_FuncTable.m_pfnGetEntityCount();
+
+ for(int i = 0; i < count; i++)
+ {
+ DEntity* loadEntity;
+
+ if(i == 0)
+ loadEntity = GetWorldSpawn();
+ else
+ loadEntity = AddEntity("", m_nNextEntity++);
+
+ if(!loadEntity->LoadFromEntity(i, bLoadPatches))
+ {
+ delete loadEntity;
+ entityList.pop_back();
+ }
+ }
+}
+
+int DMap::FixBrushes(bool rebuild)
+{
+ int count = 0;
+ for(list<DEntity *>::const_iterator fixEntity=entityList.begin(); fixEntity!=entityList.end(); fixEntity++)
+ {
+ int cnt;
+
+ if(!stricmp("worldspawn", (*fixEntity)->m_Classname))
+ cnt = (*fixEntity)->FixBrushes(rebuild);
+ else
+ {
+ cnt = (*fixEntity)->FixBrushes(FALSE);
+
+ if(cnt && rebuild)
+ RebuildEntity(*fixEntity);
+ }
+
+ count += cnt;
+ }
+
+ return count;
+}
+
+void DMap::ResetTextures( const char* textureName, float fScale[2], float fShift[2], int rotation, const char* newTextureName,
+ int bResetTextureName, int bResetScale[2], int bResetShift[2], int bResetRotation)
+{
+ for(list<DEntity *>::const_iterator texEntity=entityList.begin(); texEntity!=entityList.end(); texEntity++)
+ {
+ if(!stricmp("worldspawn", (*texEntity)->m_Classname))
+ (*texEntity)->ResetTextures(textureName, fScale, fShift, rotation, newTextureName,
+ bResetTextureName, bResetScale, bResetShift, bResetRotation, TRUE);
+ else
+ {
+ if((*texEntity)->ResetTextures( textureName, fScale, fShift, rotation, newTextureName,
+ bResetTextureName, bResetScale, bResetShift, bResetRotation, FALSE))
+ RebuildEntity(*texEntity);
+ }
+ }
+}
+
+void DMap::RebuildEntity(DEntity *ent)
+{
+ ent->RemoveFromRadiant();
+ ent->BuildInRadiant(FALSE);
+}