X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;ds=sidebyside;f=include%2Fieclass.h;h=a50b74a8b2c23a1c35862805baf03dafc54cd581;hb=32201f62a3b9d50fff9b18dfe3aa262b68e5381b;hp=b06875edfb22576ab4abcb404b865e45ef4119c2;hpb=830125fad042fad35dc029b6eb57c8156ad7e176;p=xonotic%2Fnetradiant.git diff --git a/include/ieclass.h b/include/ieclass.h index b06875ed..a50b74a8 100644 --- a/include/ieclass.h +++ b/include/ieclass.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,65 +19,98 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -/*! \file ieclass.h - \brief entity files loader API - this describes the APIs involved when loading entity description files - (initially, .def and .fgd) - */ +/// \file ieclass.h +/// \brief Entity Class definition loader API. + + +#if !defined( INCLUDED_IECLASS_H ) +#define INCLUDED_IECLASS_H + +#include "generic/constant.h" -#ifndef _IECLASS_H_ -#define _IECLASS_H_ +#define MAX_FLAGS 16 -#define ECLASS_MAJOR "eclass" +// eclass show flags -typedef void ( *PFN_ECLASS_SCANFILE )( char *filename ); -typedef const char* ( *PFN_ECLASS_GETEXTENSION )(); +#define ECLASS_LIGHT 0x00000001 +#define ECLASS_ANGLE 0x00000002 +#define ECLASS_PATH 0x00000004 +#define ECLASS_MISCMODEL 0x00000008 -struct _EClassTable +class Shader; + +class EntityClass; +class ListAttributeType; + +class EntityClassCollector { - int m_nSize; - PFN_ECLASS_SCANFILE m_pfnScanFile; - PFN_ECLASS_GETEXTENSION m_pfnGetExtension; +public: +virtual void insert( EntityClass* eclass ) = 0; +virtual void insert( const char* name, const ListAttributeType& list ){ +} }; -#ifdef USE_ECLASSTABLE_DEFINE -#ifndef __ECLASSTABLENAME -#define __ECLASSTABLENAME g_EClassTable -#endif -#define EClass_ScanFile __ECLASSTABLENAME.m_pfnEClass_ScanFile -#define EClass_GetExtension __ECLASSTABLENAME.m_pfnEClass_GetExtension -#endif +struct EntityClassScanner +{ + INTEGER_CONSTANT( Version, 1 ); + STRING_CONSTANT( Name, "eclass" ); + + void ( *scanFile )( EntityClassCollector& collector, const char* filename ); + const char* ( *getExtension )( ); +}; + +#include "modulesystem.h" + +template +class ModuleRef; +typedef ModuleRef EClassModuleRef; + +template +class Modules; +typedef Modules EClassModules; -#define ECLASSMANAGER_MAJOR "eclassmanager" +template +class ModulesRef; +typedef ModulesRef EClassModulesRef; -typedef void ( *PFN_ECLASS_INSERTALPHABETIZED )( eclass_t *e ); -typedef eclass_t** ( *PFN_GET_ECLASS_E )(); -typedef void ( *PFN_SET_ECLASS_FOUND )( qboolean ); -typedef qboolean ( *PFN_GET_PARSING_SINGLE )(); -typedef eclass_t* ( *PFN_ECLASS_CREATE )( const char *name, float col1, float col2, float col3, const vec3_t *mins, const vec3_t *maxs, const char *comments ); -typedef eclass_t* ( *PFN_ECLASS_FORNAME )( const char* name, qboolean has_brushes ); -struct _EClassManagerTable + + + + +class EntityClassVisitor { - int m_nSize; - PFN_ECLASS_INSERTALPHABETIZED m_pfnEclass_InsertAlphabetized; - PFN_GET_ECLASS_E m_pfnGet_Eclass_E; - PFN_SET_ECLASS_FOUND m_pfnSet_Eclass_Found; - PFN_GET_PARSING_SINGLE m_pfnGet_Parsing_Single; - PFN_ECLASS_CREATE m_pfnEClass_Create; - PFN_ECLASS_FORNAME m_pfnEclass_ForName; +public: +virtual void visit( EntityClass* eclass ) = 0; }; -#ifdef USE_ECLASSMANAGER_DEFINE -#ifndef __ECLASSMANAGERTABLENAME -#define __ECLASSMANAGERTABLENAME g_EClassManagerTable -#endif -#define Eclass_InsertAlphabetized __ECLASSMANAGERTABLENAME.m_pfnEclass_InsertAlphabetized -#define Get_Eclass_E __ECLASSMANAGERTABLENAME.m_pfnGet_Eclass_E -#define Set_Eclass_Found __ECLASSMANAGERTABLENAME.m_pfnSet_Eclass_Found -#define Get_Parsing_Single __ECLASSMANAGERTABLENAME.m_pfnGet_Parsing_Single -#define EClass_Create __ECLASSMANAGERTABLENAME.m_pfnEClass_Create -#define Eclass_ForName __ECLASSMANAGERTABLENAME.m_pfnEclass_ForName -#endif +class ModuleObserver; + + +struct EntityClassManager +{ + INTEGER_CONSTANT( Version, 1 ); + STRING_CONSTANT( Name, "eclassmanager" ); + + EntityClass* ( *findOrInsert )( const char* name, bool has_brushes ); + const ListAttributeType* ( *findListType )(const char* name); + void ( *forEach )( EntityClassVisitor& visitor ); + void ( *attach )( ModuleObserver& observer ); + void ( *detach )( ModuleObserver& observer ); + void ( *realise )(); + void ( *unrealise )(); +}; + +template +class GlobalModule; +typedef GlobalModule GlobalEntityClassManagerModule; + +template +class GlobalModuleRef; +typedef GlobalModuleRef GlobalEntityClassManagerModuleRef; + +inline EntityClassManager& GlobalEntityClassManager(){ + return GlobalEntityClassManagerModule::getTable(); +} #endif