X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=radiant%2Fmap.h;h=a359d46159a676405df4523b4961573c41f1d10a;hb=refs%2Fheads%2FMario%2Fdebug_slowdown;hp=39b96ff5604a70263d0c62147cfddde3b8904659;hpb=99980506540d9546dad31223a6eadf126ba68121;p=xonotic%2Fnetradiant.git diff --git a/radiant/map.h b/radiant/map.h index 39b96ff5..a359d461 100644 --- a/radiant/map.h +++ b/radiant/map.h @@ -1,72 +1,165 @@ /* -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. + + 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. + + 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 + */ + +#if !defined( INCLUDED_MAP_H ) +#define INCLUDED_MAP_H + +#include "iscenegraph.h" +#include "generic/callback.h" +#include "signal/signalfwd.h" +#include "string/stringfwd.h" + +class Map; +extern Map g_map; + +class MapFormat; + +void Map_addValidCallback( Map& map, const SignalHandler& handler ); +bool Map_Valid( const Map& map ); -This file is part of GtkRadiant. +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 ){ +} +void defer(){ + m_defer = true; +} +void draw(){ + if ( m_defer ) { + m_deferred = true; + } + else + { + m_draw(); + } +} +void flush(){ + if ( m_defer && m_deferred ) { + m_draw(); + } + m_deferred = false; + m_defer = false; +} +}; -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. +inline void DeferredDraw_onMapValidChanged( DeferredDraw& self ){ + if ( Map_Valid( g_map ) ) { + self.flush(); + } + else + { + self.defer(); + } +} +typedef ReferenceCaller DeferredDrawOnMapValidChangedCaller; -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 -*/ -// map.h -- the state of the current world that all views are displaying +const char* Map_Name( const Map& map ); +const MapFormat& Map_getFormat( const Map& map ); +bool Map_Unnamed( const Map& map ); -extern char currentmap[1024]; -// head/tail of doubly linked lists -extern brush_t active_brushes; // brushes currently being displayed -extern brush_t selected_brushes; // highlighted +namespace scene +{ +class Node; +class Graph; +} -extern CPtrArray& g_ptrSelectedFaces; -extern CPtrArray& g_ptrSelectedFaceBrushes; +scene::Node* Map_GetWorldspawn( const Map& map ); +scene::Node* Map_FindWorldspawn( Map& map ); +scene::Node& Map_FindOrInsertWorldspawn( Map& map ); -extern brush_t filtered_brushes; // brushes that have been filtered or regioned +template class BasicVector3; +typedef BasicVector3 Vector3; -extern entity_t entities; -extern entity_t *world_entity; // the world entity is NOT included in - // the entities chain +extern Vector3 region_mins, region_maxs; +extern bool region_active; -extern int modified; // for quit confirmations +// used to be #defines, multiple engine support suggests we should go towards dynamic +extern float g_MaxWorldCoord; +extern float g_MinWorldCoord; -extern vec3_t region_mins, region_maxs; -extern qboolean region_active; +void Map_LoadFile( const char* filename ); +bool Map_SaveFile( const char* filename ); -extern brush_t *region_sides[6]; +void Map_New(); +void Map_Free(); -void Map_Init(); +void Map_RegionOff(); -void Map_LoadFile (const char *filename); -void Map_SaveFile (const char *filename, qboolean use_region); +bool Map_SaveRegion( const char* filename ); -void Map_New (void); -void Map_Free (void); -void Map_BuildBrushData(void); +class TextInputStream; +class TextOutputStream; -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); +void Map_ImportSelected( TextInputStream& in, const MapFormat& format ); +void Map_ExportSelected( TextOutputStream& out, const MapFormat& format ); -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); +bool Map_Modified( const Map& map ); +void Map_SetModified( Map& map, bool modified ); -void Map_StartPosition(void); -void Region_SpawnPoint(FILE *f); +bool Map_Save(); +bool Map_SaveAs(); -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); +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