// vim: set ts=4 sw=4 tw=99 noet: // // AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). // Copyright (C) The AMX Mod X Development Team. // // This software is licensed under the GNU General Public License, version 3 or higher. // Additional exceptions apply. For full license details, see LICENSE.txt or visit: // https://alliedmods.net/amxmodx-license // // Natural Selection Module // #ifndef LOCATIONMANAGER_H #define LOCATIONMANAGER_H #include <amtl/am-vector.h> #include "GameManager.h" #include "TitleManager.h" typedef struct location_data_s { char name[128]; vec3_t mins; vec3_t maxs; const char *titlelookup; } location_data_t; class LocationManager { private: ke::Vector<location_data_t> m_LocationList; public: LocationManager() { Clear(); }; inline void Clear(void) { m_LocationList.clear(); m_LocationList.ensure(32); }; inline void Add(const char *Name, edict_t *Entity) { location_data_t Temp; Temp.mins=Entity->v.mins; Temp.maxs=Entity->v.maxs; strncpy(Temp.name,Name,sizeof(Temp.name)-1); ke::AString NameString(UTIL_ToLowerCase(Name)); Temp.titlelookup=TitleMan.Lookup(NameString); m_LocationList.append(Temp); }; inline const char *Lookup(vec3_t origin, cell titlelookup) { unsigned int i=0; location_data_t Temp; while (i<m_LocationList.length()) { Temp=m_LocationList[i++]; if (origin.x <= Temp.maxs.x && origin.y <= Temp.maxs.y && origin.x >= Temp.mins.x && origin.y >= Temp.mins.y) { if (titlelookup==0) { return &(m_LocationList[i-1].name[0]); } else { if (m_LocationList[i-1].titlelookup!=NULL) { return m_LocationList[i-1].titlelookup; } return &(m_LocationList[i-1].name[0]); } } } return ""; }; }; extern LocationManager LocationMan; #endif // LOCATIONMANAGER_H