e8131e0b3d77cb3c4befda98a63ef7c5660a0745
[xonotic/netradiant.git] / plugins / entity / plugin.cpp
1 /*
2    Copyright (C) 2001-2006, William Joseph.
3    All Rights Reserved.
4
5    This file is part of GtkRadiant.
6
7    GtkRadiant is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2 of the License, or
10    (at your option) any later version.
11
12    GtkRadiant is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with GtkRadiant; if not, write to the Free Software
19    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
20  */
21
22 #include "plugin.h"
23
24 #include "debugging/debugging.h"
25
26 #include "iscenegraph.h"
27 #include "irender.h"
28 #include "iselection.h"
29 #include "ientity.h"
30 #include "iundo.h"
31 #include "ieclass.h"
32 #include "igl.h"
33 #include "ireference.h"
34 #include "ifilter.h"
35 #include "preferencesystem.h"
36 #include "qerplugin.h"
37 #include "namespace.h"
38 #include "modelskin.h"
39
40 #include "typesystem.h"
41
42 #include "entity.h"
43 #include "skincache.h"
44
45 #include "modulesystem/singletonmodule.h"
46
47 class EntityDependencies :
48         public GlobalRadiantModuleRef,
49         public GlobalOpenGLModuleRef,
50         public GlobalUndoModuleRef,
51         public GlobalSceneGraphModuleRef,
52         public GlobalShaderCacheModuleRef,
53         public GlobalSelectionModuleRef,
54         public GlobalReferenceModuleRef,
55         public GlobalFilterModuleRef,
56         public GlobalPreferenceSystemModuleRef,
57         public GlobalNamespaceModuleRef,
58         public GlobalModelSkinCacheModuleRef
59 {
60 };
61
62 class EntityQ3API : public TypeSystemRef
63 {
64 EntityCreator* m_entityq3;
65 public:
66 typedef EntityCreator Type;
67 STRING_CONSTANT( Name, "quake3" );
68
69 EntityQ3API(){
70         Entity_Construct();
71
72         m_entityq3 = &GetEntityCreator();
73
74         GlobalReferenceCache().setEntityCreator( *m_entityq3 );
75 }
76 ~EntityQ3API(){
77         Entity_Destroy();
78 }
79 EntityCreator* getTable(){
80         return m_entityq3;
81 }
82 };
83
84 typedef SingletonModule<EntityQ3API, EntityDependencies> EntityQ3Module;
85
86 EntityQ3Module g_EntityQ3Module;
87
88
89 class EntityWolfAPI : public TypeSystemRef
90 {
91 EntityCreator* m_entitywolf;
92 public:
93 typedef EntityCreator Type;
94 STRING_CONSTANT( Name, "wolf" );
95
96 EntityWolfAPI(){
97         Entity_Construct( eGameTypeRTCW );
98
99         m_entitywolf = &GetEntityCreator();
100
101         GlobalReferenceCache().setEntityCreator( *m_entitywolf );
102 }
103 ~EntityWolfAPI(){
104         Entity_Destroy();
105 }
106 EntityCreator* getTable(){
107         return m_entitywolf;
108 }
109 };
110
111 typedef SingletonModule<EntityWolfAPI, EntityDependencies> EntityWolfModule;
112
113 EntityWolfModule g_EntityWolfModule;
114
115
116 class EntityDoom3API : public TypeSystemRef
117 {
118 EntityCreator* m_entitydoom3;
119 public:
120 typedef EntityCreator Type;
121 STRING_CONSTANT( Name, "doom3" );
122
123 EntityDoom3API(){
124         Entity_Construct( eGameTypeDoom3 );
125
126         m_entitydoom3 = &GetEntityCreator();
127
128         GlobalReferenceCache().setEntityCreator( *m_entitydoom3 );
129 }
130 ~EntityDoom3API(){
131         Entity_Destroy();
132 }
133 EntityCreator* getTable(){
134         return m_entitydoom3;
135 }
136 };
137
138 typedef SingletonModule<EntityDoom3API, EntityDependencies> EntityDoom3Module;
139
140 EntityDoom3Module g_EntityDoom3Module;
141
142
143 extern "C" void RADIANT_DLLEXPORT Radiant_RegisterModules( ModuleServer& server ){
144         initialiseModule( server );
145
146         g_EntityQ3Module.selfRegister();
147         g_EntityWolfModule.selfRegister();
148         g_EntityDoom3Module.selfRegister();
149         Doom3ModelSkinCacheModule_selfRegister( server );
150 }