/* 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 */ #include "StdAfx.h" #include "dialogs/dialogs-gtk.h" #include "DEntity.h" #include "DMap.h" #include "misc.h" #include "lists.h" #include "funchandlers.h" // for ctf texture changer list clrList_Blue; list clrList_Red; BOOL clrLst1Loaded = FALSE; BOOL clrLst2Loaded = FALSE; // ------------- //========================// // Helper Functions // //========================// void LoadLists() { char buffer[256]; if(!clrLst1Loaded) { clrLst1Loaded = LoadExclusionList(GetFilename(buffer, "plugins/bt/ctf-blue.txt"), &clrList_Blue); LoadExclusionList(GetFilename(buffer, "plugins/bt/blue.txt"), &clrList_Blue); } if(!clrLst2Loaded) { clrLst2Loaded = LoadExclusionList(GetFilename(buffer, "plugins/bt/ctf-red.txt"), &clrList_Red); LoadExclusionList(GetFilename(buffer, "plugins/bt/red.txt"), &clrList_Red); } } //========================// // Main Functions // //========================// void DoCTFColourChanger() { if(!clrLst1Loaded || !clrLst2Loaded) { DoMessageBox("CTF texture lists not found, this function will terminate.", "Error", MB_OK); return; } int ret = DoCTFColourChangeBox(); if(ret == IDCANCEL) return; int cnt = Min(clrList_Blue.size(), clrList_Red.size()); list::const_iterator Texture_change; list::const_iterator Texture_new; float fDummy[2]; int eCnt = g_FuncTable.m_pfnGetEntityCount(); DMap world; world.LoadAll(TRUE); if(ret == IDYES) { Texture_change = clrList_Blue.begin(); Texture_new = clrList_Red.begin(); } else { Texture_change = clrList_Red.begin(); Texture_new = clrList_Blue.begin(); } for(int i = 0; i < cnt; i++) { world.ResetTextures((*Texture_change).c_str(), fDummy, fDummy, 0, (*Texture_new).c_str(), TRUE); Texture_change++; Texture_new++; } } void DoSwapLights() { /* DMap world; world.LoadAll(); for(list::const_iterator loopEnt = world.entityList.begin(); loopEnt != world.entityList.end(); loopEnt++) { DEntity* e = (*loopEnt); DEPair* epLightColour = e->FindEPairByKey("_color"); if(epLightColour) { float r, g, b; sscanf(epLightColour->value, "%f %f %f", &r, &g, &b); sprintf(epLightColour->value, "%f %f %f", b, g, r); DMap::RebuildEntity(e); } }*/ int cnt = g_FuncTable.m_pfnGetEntityCount(); for(int i = 0; i < cnt; i++) { void* ent = g_FuncTable.m_pfnGetEntityHandle(i); for(epair_t* epList = *g_FuncTable.m_pfnGetEntityKeyValList(ent); epList; epList= epList->next) { if(!stricmp("_color", epList->key)) { float r, g, b; sscanf(epList->value, "%f %f %f", &r, &g, &b); sprintf(epList->value, "%f %f %f", b, g, r); } } } } void DoChangeAngles() { int cnt = g_FuncTable.m_pfnGetEntityCount(); for(int i = 0; i < cnt; i++) { void* ent = g_FuncTable.m_pfnGetEntityHandle(i); for(epair_t* epList = *g_FuncTable.m_pfnGetEntityKeyValList(ent); epList; epList= epList->next) { if(!stricmp("angle", epList->key)) { float angle; sscanf(epList->value, "%f", &angle); angle += 180; while(angle > 360) angle -= 360; sprintf(epList->value, "%f", angle); } } } } void DoSwapSpawns() { int cnt = g_FuncTable.m_pfnGetEntityCount(); for(int i = 0; i < cnt; i++) { void* ent = g_FuncTable.m_pfnGetEntityHandle(i); for(epair_t* epList = *g_FuncTable.m_pfnGetEntityKeyValList(ent); epList; epList= epList->next) { if(!stricmp("classname", epList->key)) { if(!strcmp(epList->value, "team_CTF_redplayer")) sprintf(epList->value, "team_CTF_blueplayer"); else if(!strcmp(epList->value, "team_CTF_blueplayer")) sprintf(epList->value, "team_CTF_redplayer"); if(!strcmp(epList->value, "team_CTF_redspawn")) sprintf(epList->value, "team_CTF_bluespawn"); else if(!strcmp(epList->value, "team_CTF_bluespawn")) sprintf(epList->value, "team_CTF_redspawn"); if(!strcmp(epList->value, "team_CTF_redflag")) sprintf(epList->value, "team_CTF_blueflag"); else if(!strcmp(epList->value, "team_CTF_blueflag")) sprintf(epList->value, "team_CTF_redflag") ; if(!strcmp(epList->value, "team_redobelisk")) sprintf(epList->value, "team_blueobelisk"); else if(!strcmp(epList->value, "team_blueobelisk")) sprintf(epList->value, "team_redobelisk"); } } } } /*void test() { DMap world; world.LoadAll(); for(list::const_iterator ents = world.entityList.begin(); ents != world.entityList.end(); ents++) { (*ents)->RemoveFromRadiant(); } }*/