more eol-style
[xonotic/netradiant.git] / contrib / bobtoolz / DMap.cpp
index e827690f1ae7e471cc629247b1d4e8202f4cef8a..bc0b0661023ddae470f9b61afdcd16dbf05a241b 100644 (file)
-/*\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);
+}