X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=radiant%2Fmap.h;h=62b480471abeb2ba94886eeac696f3ea9f38b4e9;hb=9dfae1c9b270ee369c6362903a9205b30751b95f;hp=39b96ff5604a70263d0c62147cfddde3b8904659;hpb=ab3a99dbbe84a0d130fea4d0ceb7b79d7ed07eb7;p=xonotic%2Fnetradiant.git diff --git a/radiant/map.h b/radiant/map.h index 39b96ff5..62b48047 100644 --- a/radiant/map.h +++ b/radiant/map.h @@ -1,72 +1,191 @@ /* -Copyright (C) 1999-2007 id Software, Inc. and contributors. -For a list of contributors, see the accompanying CONTRIBUTORS file. + Copyright (C) 1999-2006 Id Software, Inc. and contributors. + For a list of contributors, see the accompanying CONTRIBUTORS file. -This file is part of GtkRadiant. + This file is part of GtkRadiant. -GtkRadiant is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. + GtkRadiant is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. -GtkRadiant 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 General Public License for more details. + GtkRadiant 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 General Public License for more details. -You should have received a copy of the GNU General Public License -along with GtkRadiant; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ + You should have received a copy of the GNU General Public License + along with GtkRadiant; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ -// map.h -- the state of the current world that all views are displaying +#if !defined( INCLUDED_MAP_H ) +#define INCLUDED_MAP_H -extern char currentmap[1024]; +#include "iscenegraph.h" +#include "generic/callback.h" +#include "signal/signalfwd.h" +#include "string/stringfwd.h" -// head/tail of doubly linked lists -extern brush_t active_brushes; // brushes currently being displayed -extern brush_t selected_brushes; // highlighted +class Map; -extern CPtrArray& g_ptrSelectedFaces; -extern CPtrArray& g_ptrSelectedFaceBrushes; +extern Map g_map; -extern brush_t filtered_brushes; // brushes that have been filtered or regioned +class MapFormat; -extern entity_t entities; -extern entity_t *world_entity; // the world entity is NOT included in - // the entities chain +void Map_addValidCallback(Map &map, const SignalHandler &handler); -extern int modified; // for quit confirmations +bool Map_Valid(const Map &map); -extern vec3_t region_mins, region_maxs; -extern qboolean region_active; +class DeferredDraw { + Callback m_draw; + bool m_defer; + bool m_deferred; +public: + DeferredDraw(const Callback &draw) : m_draw(draw), m_defer(false), m_deferred(false) + { + } -extern brush_t *region_sides[6]; + void defer() + { + m_defer = true; + } -void Map_Init(); + void draw() + { + if (m_defer) { + m_deferred = true; + } else { + m_draw(); + } + } -void Map_LoadFile (const char *filename); -void Map_SaveFile (const char *filename, qboolean use_region); + void flush() + { + if (m_defer && m_deferred) { + m_draw(); + } + m_deferred = false; + m_defer = false; + } +}; -void Map_New (void); -void Map_Free (void); -void Map_BuildBrushData(void); +inline void DeferredDraw_onMapValidChanged(DeferredDraw &self) +{ + if (Map_Valid(g_map)) { + self.flush(); + } else { + self.defer(); + } +} -void Map_RegionOff (void); -void Map_RegionXY (void); -void Map_RegionTallBrush (void); -void Map_RegionBrush (void); -void Map_RegionSelectedBrushes (void); -qboolean Map_IsBrushFiltered (brush_t *b); +typedef ReferenceCaller DeferredDrawOnMapValidChangedCaller; -void Map_ImportFile (const char *filename); -void Map_SaveSelected(const char* filename); -//void Map_SaveSelected(MemStream* pMemFile, MemStream* pPatchFile = NULL); -//void Map_ImportBuffer (char* buf); -void Map_StartPosition(void); -void Region_SpawnPoint(FILE *f); +const char *Map_Name(const Map &map); -void Map_Import(IDataStream *in, const char* type, bool bAddSelected = false); -void Map_Export(IDataStream *out, const char* type, bool bRegionOnly = false , bool bSelectedOnly = false); +const MapFormat &Map_getFormat(const Map &map); +bool Map_Unnamed(const Map &map); + + +namespace scene { + class Node; + + class Graph; +} + +scene::Node *Map_GetWorldspawn(const Map &map); + +scene::Node *Map_FindWorldspawn(Map &map); + +scene::Node &Map_FindOrInsertWorldspawn(Map &map); + +template +class BasicVector3; + +typedef BasicVector3 Vector3; + +extern Vector3 region_mins, region_maxs; +extern bool region_active; + +// used to be #defines, multiple engine support suggests we should go towards dynamic +extern float g_MaxWorldCoord; +extern float g_MinWorldCoord; + +void Map_LoadFile(const char *filename); + +bool Map_SaveFile(const char *filename); + +void Map_New(); + +void Map_Free(); + +void Map_RegionOff(); + +bool Map_SaveRegion(const char *filename); + +class TextInputStream; + +class TextOutputStream; + +void Map_ImportSelected(TextInputStream &in, const MapFormat &format); + +void Map_ExportSelected(TextOutputStream &out, const MapFormat &format); + +bool Map_Modified(const Map &map); + +void Map_SetModified(Map &map, bool modified); + +bool Map_Save(); + +bool Map_SaveAs(); + +scene::Node &Node_Clone(scene::Node &node); + +void DoMapInfo(); + +void Scene_parentSelectedBrushesToEntity(scene::Graph &graph, scene::Node &parent); + +std::size_t Scene_countSelectedBrushes(scene::Graph &graph); + +void Scene_parentSelected(); + +void OnUndoSizeChanged(); + +void NewMap(); + +void OpenMap(); + +void ImportMap(); + +void SaveMapAs(); + +void SaveMap(); + +void ExportMap(); + +void SaveRegion(); + + +void Map_Traverse(scene::Node &root, const scene::Traversable::Walker &walker); + + +void SelectBrush(int entitynum, int brushnum); + +extern CopiedString g_strLastMap; +extern bool g_bLoadLastMap; + +void Map_Construct(); + +void Map_Destroy(); + + +void Map_gatherNamespaced(scene::Node &root); + +void Map_mergeClonedNames(); + + +const char *getMapsPath(); + +#endif