X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=radiant%2Fmap.h;h=c68b02751e270df0790012a283216e01dd98ccca;hb=abb0694de849b6a844eea71cf2b6a4c0def53af5;hp=2e6799088078eba42fdd31f7f4ccba4095efbc30;hpb=830125fad042fad35dc029b6eb57c8156ad7e176;p=xonotic%2Fnetradiant.git diff --git a/radiant/map.h b/radiant/map.h index 2e679908..c68b0275 100644 --- a/radiant/map.h +++ b/radiant/map.h @@ -1,5 +1,5 @@ /* - Copyright (C) 1999-2007 id Software, Inc. and contributors. + 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. @@ -19,53 +19,147 @@ 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 + +#include "iscenegraph.h" +#include "generic/callback.h" +#include "signal/signalfwd.h" +#include "string/stringfwd.h" + +class Map; +extern Map g_map; + +class MapFormat; -extern char currentmap[1024]; +void Map_addValidCallback( Map& map, const SignalHandler& handler ); +bool Map_Valid( const Map& map ); -// head/tail of doubly linked lists -extern brush_t active_brushes; // brushes currently being displayed -extern brush_t selected_brushes; // highlighted +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; +} +}; -extern CPtrArray& g_ptrSelectedFaces; -extern CPtrArray& g_ptrSelectedFaceBrushes; +inline void DeferredDraw_onMapValidChanged( DeferredDraw& self ){ + if ( Map_Valid( g_map ) ) { + self.flush(); + } + else + { + self.defer(); + } +} +typedef ReferenceCaller DeferredDrawOnMapValidChangedCaller; -extern brush_t filtered_brushes; // brushes that have been filtered or regioned -extern entity_t entities; -extern entity_t *world_entity; // the world entity is NOT included in - // the entities chain -extern int modified; // for quit confirmations +const char* Map_Name( const Map& map ); +const MapFormat& Map_getFormat( const Map& map ); +bool Map_Unnamed( const Map& map ); -extern vec3_t region_mins, region_maxs; -extern qboolean region_active; -extern brush_t *region_sides[6]; +namespace scene +{ +class Node; +class Graph; +} -void Map_Init(); +scene::Node* Map_GetWorldspawn( const Map& map ); +scene::Node* Map_FindWorldspawn( Map& map ); +scene::Node& Map_FindOrInsertWorldspawn( Map& map ); -void Map_LoadFile( const char *filename ); -void Map_SaveFile( const char *filename, qboolean use_region ); +template class BasicVector3; +typedef BasicVector3 Vector3; -void Map_New( void ); -void Map_Free( void ); -void Map_BuildBrushData( void ); +extern Vector3 region_mins, region_maxs; +extern bool region_active; -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 ); +// used to be #defines, multiple engine support suggests we should go towards dynamic +extern float g_MaxWorldCoord; +extern float g_MinWorldCoord; -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_LoadFile( const char* filename ); +bool Map_SaveFile( const char* filename ); -void Map_StartPosition( void ); -void Region_SpawnPoint( FILE *f ); +void Map_New(); +void Map_Free(); -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 ); +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