/*
-Copyright (C) 1999-2007 id Software, Inc. and contributors.
-For a list of contributors, see the accompanying CONTRIBUTORS file.
+ Copyright (C) 1999-2007 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
+ */
// qertypes.h
//
typedef bool qboolean;
-#define MAXPOINTS 16
+#define MAXPOINTS 16
// merged from qedefs.h ------
-#define MAX_EDGES 512
-#define MAX_POINTS 1024
+#define MAX_EDGES 512
+#define MAX_POINTS 1024
-#define COLOR_TEXTUREBACK 0
-#define COLOR_GRIDBACK 1
-#define COLOR_GRIDMINOR 2
-#define COLOR_GRIDMAJOR 3
-#define COLOR_CAMERABACK 4
+#define COLOR_TEXTUREBACK 0
+#define COLOR_GRIDBACK 1
+#define COLOR_GRIDMINOR 2
+#define COLOR_GRIDMAJOR 3
+#define COLOR_CAMERABACK 4
#define COLOR_ENTITY 5
#define COLOR_GRIDBLOCK 6
#define COLOR_GRIDTEXT 7
class texdef_t
{
private:
- char *name;
+char *name;
public:
- texdef_t()
- {
- name = new char[1];
- name[0] = '\0';
- shift[0] = 0.0f;
- shift[1] = 0.0f;
- rotate = 0.0f;
- scale[0] = 1.0f;
- scale[1] = 1.0f;
- contents = 0;
- flags = 0;
- value = 0;
- }
- texdef_t(const texdef_t& other)
- {
- name = NULL;
- SetName(other.name);
- shift[0] = other.shift[0];
- shift[1] = other.shift[1];
- rotate = other.rotate;
- scale[0] = other.scale[0];
- scale[1] = other.scale[1];
- contents = other.contents;
- flags = other.flags;
- value = other.value;
- }
- ~texdef_t()
- {
- if (name)
- {
- delete []name;
- name = (char*)NULL;
- }
- }
-
- void SetName(const char *p)
- {
- if (name)
- {
- delete []name;
- name = NULL;
- }
- if (p)
- {
- name = strcpy(new char[strlen(p)+1], p);
- }
- else
- {
- name = new char[1];
- name[0] = '\0';
- }
- }
-
- const char * GetName() const
- {
- return name;
- }
-
- // NOTE TTimo when loading prefs as binary, we load a bogus value in texdef..
- void DropName()
- {
- name = NULL;
- SetName(NULL);
- }
-
- texdef_t& operator =(const texdef_t& rhs)
- {
- if (&rhs != this)
- {
- SetName(rhs.name);
- shift[0] = rhs.shift[0];
- shift[1] = rhs.shift[1];
- rotate = rhs.rotate;
- scale[0] = rhs.scale[0];
- scale[1] = rhs.scale[1];
- contents = rhs.contents;
- flags = rhs.flags;
- value = rhs.value;
- }
- return *this;
- }
- float shift[2];
- float rotate;
- float scale[2];
- int contents;
- int flags;
- int value;
+texdef_t(){
+ name = new char[1];
+ name[0] = '\0';
+ shift[0] = 0.0f;
+ shift[1] = 0.0f;
+ rotate = 0.0f;
+ scale[0] = 1.0f;
+ scale[1] = 1.0f;
+ contents = 0;
+ flags = 0;
+ value = 0;
+}
+texdef_t( const texdef_t& other ){
+ name = NULL;
+ SetName( other.name );
+ shift[0] = other.shift[0];
+ shift[1] = other.shift[1];
+ rotate = other.rotate;
+ scale[0] = other.scale[0];
+ scale[1] = other.scale[1];
+ contents = other.contents;
+ flags = other.flags;
+ value = other.value;
+}
+~texdef_t(){
+ if ( name ) {
+ delete []name;
+ name = (char*)NULL;
+ }
+}
+
+void SetName( const char *p ){
+ if ( name ) {
+ delete []name;
+ name = NULL;
+ }
+ if ( p ) {
+ name = strcpy( new char[strlen( p ) + 1], p );
+ }
+ else
+ {
+ name = new char[1];
+ name[0] = '\0';
+ }
+}
+
+const char * GetName() const {
+ return name;
+}
+
+// NOTE TTimo when loading prefs as binary, we load a bogus value in texdef..
+void DropName(){
+ name = NULL;
+ SetName( NULL );
+}
+
+texdef_t& operator =( const texdef_t& rhs ){
+ if ( &rhs != this ) {
+ SetName( rhs.name );
+ shift[0] = rhs.shift[0];
+ shift[1] = rhs.shift[1];
+ rotate = rhs.rotate;
+ scale[0] = rhs.scale[0];
+ scale[1] = rhs.scale[1];
+ contents = rhs.contents;
+ flags = rhs.flags;
+ value = rhs.value;
+ }
+ return *this;
+}
+float shift[2];
+float rotate;
+float scale[2];
+int contents;
+int flags;
+int value;
};
#else
class texdef_t
{
private:
- char name[QPATH];
+char name[QPATH];
public:
- texdef_t() { name[0] = '\0'; }
- ~texdef_t() { }
-
- void SetName(const char *p)
- {
- strncpy(name, p, QPATH);
- }
-
- const char * GetName() const
- {
- return name;
- }
-
- // NOTE TTimo when loading prefs as binary, we load a bogus value in texdef..
- void DropName()
- {
- name[0] = '\0';
- }
-
- texdef_t& operator =(const texdef_t& rhs)
- {
- if (&rhs != this)
- {
- SetName(rhs.name);
- shift[0] = rhs.shift[0];
- shift[1] = rhs.shift[1];
- rotate = rhs.rotate;
- scale[0] = rhs.scale[0];
- scale[1] = rhs.scale[1];
- contents = rhs.contents;
- flags = rhs.flags;
- value = rhs.value;
- }
- return *this;
- }
- float shift[2];
- float rotate;
- float scale[2];
- int contents;
- int flags;
- int value;
+texdef_t() { name[0] = '\0'; }
+~texdef_t() { }
+
+void SetName( const char *p ){
+ strncpy( name, p, QPATH );
+}
+
+const char * GetName() const {
+ return name;
+}
+
+// NOTE TTimo when loading prefs as binary, we load a bogus value in texdef..
+void DropName(){
+ name[0] = '\0';
+}
+
+texdef_t& operator =( const texdef_t& rhs ){
+ if ( &rhs != this ) {
+ SetName( rhs.name );
+ shift[0] = rhs.shift[0];
+ shift[1] = rhs.shift[1];
+ rotate = rhs.rotate;
+ scale[0] = rhs.scale[0];
+ scale[1] = rhs.scale[1];
+ contents = rhs.contents;
+ flags = rhs.flags;
+ value = rhs.value;
+ }
+ return *this;
+}
+float shift[2];
+float rotate;
+float scale[2];
+int contents;
+int flags;
+int value;
};
#endif
// new brush primitive texdef
typedef struct brushprimit_texdef_s
{
- vec_t coords[2][3];
+ vec_t coords[2][3];
} brushprimit_texdef_t;
// this structure is used in Radiant to reflect the state of the texture window
class texturewin_t
{
public:
- texturewin_t()
- {
- }
- ~texturewin_t()
- {
- }
- int width, height;
- int originy;
- // add brushprimit_texdef_t for brush primitive coordinates storage
- brushprimit_texdef_t brushprimit_texdef;
- int m_nTotalHeight;
- // surface plugin, must be casted to a IPluginTexdef*
- void* pTexdef;
- texdef_t texdef;
- // shader
- // NOTE: never NULL, initialized in Texture_Init
- // NOTE: the reference name of the shader is texdef.name (see QERApp_ReloadShaders for an example)
- IShader *pShader;
+texturewin_t(){
+}
+~texturewin_t(){
+}
+int width, height;
+int originy;
+// add brushprimit_texdef_t for brush primitive coordinates storage
+brushprimit_texdef_t brushprimit_texdef;
+int m_nTotalHeight;
+// surface plugin, must be casted to a IPluginTexdef*
+void* pTexdef;
+texdef_t texdef;
+// shader
+// NOTE: never NULL, initialized in Texture_Init
+// NOTE: the reference name of the shader is texdef.name (see QERApp_ReloadShaders for an example)
+IShader *pShader;
};
#define QER_TRANS 0x00000001
// shaders have reference couting, but qtexture_t don't (they're way too deep into Radiant)
typedef struct qtexture_s
{
- struct qtexture_s *next;
- // name of the texture file (the physical image file we are using)
- // NOTE: used for lookup, must be unique .. vfs path of the texture, lowercase, NO FILE EXTENSION
- // ex textures/gothic_wall/iron
- // NOTE: the "textures/" prefix might seem unnecessary .. but it's better to stick to the vfs name
- char name[64];
- int width, height;
- GLuint texture_number; // gl bind number (the qtexture_t are usually loaded and binded by the shaders module)
- vec3_t color; // for flat shade mode
- qboolean inuse; // true = is present on the level (for the texture browser interface)
+ struct qtexture_s *next;
+ // name of the texture file (the physical image file we are using)
+ // NOTE: used for lookup, must be unique .. vfs path of the texture, lowercase, NO FILE EXTENSION
+ // ex textures/gothic_wall/iron
+ // NOTE: the "textures/" prefix might seem unnecessary .. but it's better to stick to the vfs name
+ char name[64];
+ int width, height;
+ GLuint texture_number; // gl bind number (the qtexture_t are usually loaded and binded by the shaders module)
+ vec3_t color; // for flat shade mode
+ qboolean inuse; // true = is present on the level (for the texture browser interface)
} qtexture_t;
// NOTE: don't trust this definition!
#define MAX_POINTS_ON_WINDING 64
typedef struct
{
- int numpoints;
- int maxpoints;
- float points[8][5]; // variable sized
+ int numpoints;
+ int maxpoints;
+ float points[8][5]; // variable sized
} winding_t;
typedef struct
{
- vec3_t normal;
- double dist;
- int type;
+ vec3_t normal;
+ double dist;
+ int type;
} plane_t;
// pShader is a shortcut to the shader
// to initialize the pShader, use QERApp_Shader_ForName(texdef.name)
typedef struct face_s
{
- struct face_s *next;
- struct face_s *prev;
- struct face_s *original; //used for vertex movement
- vec3_t planepts[3];
- texdef_t texdef;
- plane_t plane;
-
+ struct face_s *next;
+ struct face_s *prev;
+ struct face_s *original; //used for vertex movement
+ vec3_t planepts[3];
+ texdef_t texdef;
+ plane_t plane;
+
// Nurail: Face Undo
- int undoId;
- int redoId;
+ int undoId;
+ int redoId;
- winding_t *face_winding;
+ winding_t *face_winding;
- vec3_t d_color;
- vec_t d_shade;
- // calls through here have indirections (pure virtual)
- // it would be good if the rendering loop would avoid scanning there (for the GL binding number for example)
- IShader *pShader;
+ vec3_t d_color;
+ vec_t d_shade;
+ // calls through here have indirections (pure virtual)
+ // it would be good if the rendering loop would avoid scanning there (for the GL binding number for example)
+ IShader *pShader;
//++timo FIXME: remove!
- qtexture_t *d_texture;
+ qtexture_t *d_texture;
// Timo new brush primit texdef
- brushprimit_texdef_t brushprimit_texdef;
+ brushprimit_texdef_t brushprimit_texdef;
// cast this one to an IPluginTexdef if you are using it
// NOTE: casting can be done with a GETPLUGINTEXDEF defined in isurfaceplugin.h
// TODO: if the __ISURFACEPLUGIN_H_ header is used, use a union { void *pData; IPluginTexdef *pPluginTexdef } kind of thing ?
- void *pData;
+ void *pData;
} face_t;
typedef struct {
- vec3_t xyz;
- float sideST[2];
- float capST[2];
+ vec3_t xyz;
+ float sideST[2];
+ float capST[2];
} curveVertex_t;
typedef struct {
- curveVertex_t v[2];
+ curveVertex_t v[2];
} sideVertex_t;
-#define MIN_PATCH_WIDTH 3
-#define MIN_PATCH_HEIGHT 3
+#define MIN_PATCH_WIDTH 3
+#define MIN_PATCH_HEIGHT 3
-#define MAX_PATCH_WIDTH 16
-#define MAX_PATCH_HEIGHT 16
+#define MAX_PATCH_WIDTH 16
+#define MAX_PATCH_HEIGHT 16
// patch type info
// type in lower 16 bits, flags in upper
#define PATCH_BEZIER 0x00000000 // default bezier
#define PATCH_BSPLINE 0x10000000 // bspline
-#define PATCH_TYPEMASK 0x00000fff //
-#define PATCH_BTYPEMASK 0x0000f000 //
-#define PATCH_STYLEMASK 0xffff0000 //
+#define PATCH_TYPEMASK 0x00000fff //
+#define PATCH_BTYPEMASK 0x0000f000 //
+#define PATCH_STYLEMASK 0xffff0000 //
typedef struct {
- vec3_t xyz;
- float st[2];
- float lightmap[2];
- vec3_t normal;
+ vec3_t xyz;
+ float st[2];
+ float lightmap[2];
+ vec3_t normal;
} drawVert_t;
// spog - used for patch LOD trees
// used in brush primitive AND entities
typedef struct epair_s
{
- struct epair_s *next;
- char *key;
- char *value;
+ struct epair_s *next;
+ char *key;
+ char *value;
} epair_t;
struct brush_s;
typedef struct brush_s brush_t;
typedef struct {
- int width, height; // in control points, not patches
- int contents, flags, value, type;
- qtexture_t *d_texture;
- IShader *pShader;
- drawVert_t ctrl[MAX_PATCH_WIDTH][MAX_PATCH_HEIGHT];
- brush_t *pSymbiot;
- qboolean bSelected;
- qboolean bOverlay;
- qboolean bDirty;
- int nListID;
- epair_t *epairs;
- // cast this one to an IPluginTexdef if you are using it
- // NOTE: casting can be done with a GETPLUGINTEXDEF defined in isurfaceplugin.h
- // TODO: if the __ISURFACEPLUGIN_H_ header is used, use a union { void *pData; IPluginTexdef *pPluginTexdef } kind of thing ?
- void *pData;
- // spog - curve LOD binary trees and lists
- BTNode_t *rowLOD[((MAX_PATCH_WIDTH-1)/2) * MAX_PATCH_HEIGHT]; // = ((MAX_PATCH_WIDTH-1)/2) * MAX_PATCH_HEIGHT
- BTNode_t *colLOD[((MAX_PATCH_HEIGHT-1)/2) * MAX_PATCH_WIDTH]; // = ((MAX_PATCH_HEIGHT-1)/2) * MAX_PATCH_WIDTH
- bool rowDirty[((MAX_PATCH_WIDTH-1)-1)/2];
- bool colDirty[((MAX_PATCH_HEIGHT-1)-1)/2];
- bool LODUpdated;
- void *drawLists; // pointer to std::list
+ int width, height; // in control points, not patches
+ int contents, flags, value, type;
+ qtexture_t *d_texture;
+ IShader *pShader;
+ drawVert_t ctrl[MAX_PATCH_WIDTH][MAX_PATCH_HEIGHT];
+ brush_t *pSymbiot;
+ qboolean bSelected;
+ qboolean bOverlay;
+ qboolean bDirty;
+ int nListID;
+ epair_t *epairs;
+ // cast this one to an IPluginTexdef if you are using it
+ // NOTE: casting can be done with a GETPLUGINTEXDEF defined in isurfaceplugin.h
+ // TODO: if the __ISURFACEPLUGIN_H_ header is used, use a union { void *pData; IPluginTexdef *pPluginTexdef } kind of thing ?
+ void *pData;
+ // spog - curve LOD binary trees and lists
+ BTNode_t *rowLOD[( ( MAX_PATCH_WIDTH - 1 ) / 2 ) * MAX_PATCH_HEIGHT]; // = ((MAX_PATCH_WIDTH-1)/2) * MAX_PATCH_HEIGHT
+ BTNode_t *colLOD[( ( MAX_PATCH_HEIGHT - 1 ) / 2 ) * MAX_PATCH_WIDTH]; // = ((MAX_PATCH_HEIGHT-1)/2) * MAX_PATCH_WIDTH
+ bool rowDirty[( ( MAX_PATCH_WIDTH - 1 ) - 1 ) / 2];
+ bool colDirty[( ( MAX_PATCH_HEIGHT - 1 ) - 1 ) / 2];
+ bool LODUpdated;
+ void *drawLists; // pointer to std::list
} patchMesh_t;
typedef struct brush_s
{
- struct brush_s *prev, *next; // links in active/selected
- struct brush_s *oprev, *onext; // links in entity
- struct entity_s *owner;
- vec3_t mins, maxs;
- face_t *brush_faces;
-
- qboolean bModelFailed;
- //
- // curve brush extensions
- // all are derived from brush_faces
- qboolean patchBrush;
- qboolean hiddenBrush;
-
- //int nPatchID;
-
- patchMesh_t *pPatch;
- struct entity_s *pUndoOwner;
-
- int undoId; //undo ID
- int redoId; //redo ID
- int ownerId; //entityId of the owner entity for undo
-
- // TTimo: this is not legal, we are not supposed to put UI toolkit dependant stuff in the interfaces
- // NOTE: the grouping stuff never worked, there is embryonary code everywhere though
- int numberId;
- void* itemOwner; // GtkCTreeNode* ?
-
- // brush primitive only
- epair_t *epairs;
-
- // brush filtered toggle
- bool bFiltered;
- bool bCamCulled;
- bool bBrushDef;
+ struct brush_s *prev, *next; // links in active/selected
+ struct brush_s *oprev, *onext; // links in entity
+ struct entity_s *owner;
+ vec3_t mins, maxs;
+ face_t *brush_faces;
+
+ qboolean bModelFailed;
+ //
+ // curve brush extensions
+ // all are derived from brush_faces
+ qboolean patchBrush;
+ qboolean hiddenBrush;
+
+ //int nPatchID;
+
+ patchMesh_t *pPatch;
+ struct entity_s *pUndoOwner;
+
+ int undoId; //undo ID
+ int redoId; //redo ID
+ int ownerId; //entityId of the owner entity for undo
+
+ // TTimo: this is not legal, we are not supposed to put UI toolkit dependant stuff in the interfaces
+ // NOTE: the grouping stuff never worked, there is embryonary code everywhere though
+ int numberId;
+ void* itemOwner; // GtkCTreeNode* ?
+
+ // brush primitive only
+ epair_t *epairs;
+
+ // brush filtered toggle
+ bool bFiltered;
+ bool bCamCulled;
+ bool bBrushDef;
} brush_t;
-#define MAX_FLAGS 16
+#define MAX_FLAGS 16
typedef struct vertmodel_t
{
- float v[3];
- float st[2];
- float normal[3];
+ float v[3];
+ float st[2];
+ float normal[3];
} vertmodel;
typedef struct triindex_t
{
- int indexes[3];
+ int indexes[3];
} triindex;
// TTimo: NOTE: we don't have dedicated stuff to copy/allocate/delete this structure like we do for entity_t and brush_t
// TTimo 04/01/2001 removing the GString* for toolkit-independent interfaces .. cast it ..
typedef struct entitymodel_t
{
- struct entitymodel_t *pNext;
- int nTriCount;
- //trimodel *pTriList;
- //md3Triangle_t *pTriList;
- triindex *pTriList;
- vertmodel *pVertList;
- int numVerts;
- int nTextureBind;
- void *strSkin; // toolkit-independent .. cast to a GString*
- int nSkinWidth;
- int nSkinHeight;
- int nModelPosition;
+ struct entitymodel_t *pNext;
+ int nTriCount;
+ //trimodel *pTriList;
+ //md3Triangle_t *pTriList;
+ triindex *pTriList;
+ vertmodel *pVertList;
+ int numVerts;
+ int nTextureBind;
+ void *strSkin; // toolkit-independent .. cast to a GString*
+ int nSkinWidth;
+ int nSkinHeight;
+ int nModelPosition;
} entitymodel;
// eclass show flags
#define ECLASS_MISCMODEL 0x00000008
#ifdef USEPLUGINENTITIES
-#define ECLASS_PLUGINENTITY 0x00000010
+#define ECLASS_PLUGINENTITY 0x00000010
#endif // USEPLUGINENTITIES
typedef struct eclass_s
{
struct eclass_s *next;
- char *name;
- qboolean fixedsize;
- qboolean unknown; // wasn't found in source
- vec3_t mins, maxs;
- vec3_t color;
- texdef_t texdef;
- char *comments;
- char flagnames[MAX_FLAGS][32];
-
- entitymodel *model;
- char *modelpath;
- //++timo NOTE: I don't know what this is used for exactly. But don't trust it for the real skin paths on models (screws up with long/short path names)
- //++hydra NOTE: this, hopefully, will be used to use specific shaders on the bounding boxes of the eclass instead of a color.
- char *skinpath;
- int nFrame;
- unsigned int nShowFlags;
-
- void* hPlug;
+ char *name;
+ qboolean fixedsize;
+ qboolean unknown; // wasn't found in source
+ vec3_t mins, maxs;
+ vec3_t color;
+ texdef_t texdef;
+ char *comments;
+ char flagnames[MAX_FLAGS][32];
+
+ entitymodel *model;
+ char *modelpath;
+ //++timo NOTE: I don't know what this is used for exactly. But don't trust it for the real skin paths on models (screws up with long/short path names)
+ //++hydra NOTE: this, hopefully, will be used to use specific shaders on the bounding boxes of the eclass instead of a color.
+ char *skinpath;
+ int nFrame;
+ unsigned int nShowFlags;
+
+ void* hPlug;
} eclass_t;
-extern eclass_t *eclass;
+extern eclass_t *eclass;
/*
** window bits
*/
-#define W_CAMERA 0x0001
-#define W_XY 0x0002
-#define W_XY_OVERLAY 0x0004
-#define W_Z 0x0008
-#define W_TEXTURE 0x0010
-#define W_Z_OVERLAY 0x0020
-#define W_CONSOLE 0x0040
-#define W_ENTITY 0x0080
+#define W_CAMERA 0x0001
+#define W_XY 0x0002
+#define W_XY_OVERLAY 0x0004
+#define W_Z 0x0008
+#define W_TEXTURE 0x0010
+#define W_Z_OVERLAY 0x0020
+#define W_CONSOLE 0x0040
+#define W_ENTITY 0x0080
#define W_CAMERA_IFON 0x0100
#define W_XZ 0x0200 //--| only used for patch vertex manip stuff
#define W_YZ 0x0400 //--|
-#define W_GROUP 0x0800
-#define W_MEDIA 0x1000
-#define W_ALL 0xFFFFFFFF
+#define W_GROUP 0x0800
+#define W_MEDIA 0x1000
+#define W_ALL 0xFFFFFFFF
// used in some Drawing routines
enum VIEWTYPE {YZ, XZ, XY};
class string_t
{
public:
- inline string_t()
- {
- copy("");
- }
- inline string_t(const string_t& other)
- {
- copy(other.m_string);
- }
- inline string_t(const char* string)
- {
- copy(string);
- }
- inline ~string_t()
- {
- destroy();
- }
- inline const string_t& operator=(const string_t& other)
- {
- destroy();
- copy(other.m_string);
- return *this;
- }
- inline const string_t& operator=(const char* string)
- {
- destroy();
- copy(string);
- return *this;
- }
- inline bool operator<(const string_t& other) const
- {
- return compare(other) < 0;
- }
- inline bool operator>(const string_t& other) const
- {
- return compare(other) > 0;
- }
- inline bool operator==(const string_t& other) const
- {
- return compare(other) == 0;
- }
- inline bool operator!=(const string_t& other) const
- {
- return compare(other) != 0;
- }
- inline const char* c_str() const
- {
- return m_string;
- }
+inline string_t(){
+ copy( "" );
+}
+inline string_t( const string_t& other ){
+ copy( other.m_string );
+}
+inline string_t( const char* string ){
+ copy( string );
+}
+inline ~string_t(){
+ destroy();
+}
+inline const string_t& operator=( const string_t& other ){
+ destroy();
+ copy( other.m_string );
+ return *this;
+}
+inline const string_t& operator=( const char* string ){
+ destroy();
+ copy( string );
+ return *this;
+}
+inline bool operator<( const string_t& other ) const {
+ return compare( other ) < 0;
+}
+inline bool operator>( const string_t& other ) const {
+ return compare( other ) > 0;
+}
+inline bool operator==( const string_t& other ) const {
+ return compare( other ) == 0;
+}
+inline bool operator!=( const string_t& other ) const {
+ return compare( other ) != 0;
+}
+inline const char* c_str() const {
+ return m_string;
+}
private:
- inline void copy(const char* string)
- {
- m_string = new char[strlen(string)+1];
- strcpy(m_string, string);
- }
- inline void destroy()
- {
- delete[] m_string;
- }
- inline int compare(const string_t& other) const
- {
- return strcmp(m_string, other.m_string);
- }
-
- char* m_string;
+inline void copy( const char* string ){
+ m_string = new char[strlen( string ) + 1];
+ strcpy( m_string, string );
+}
+inline void destroy(){
+ delete[] m_string;
+}
+inline int compare( const string_t& other ) const {
+ return strcmp( m_string, other.m_string );
+}
+
+char* m_string;
};
class filetype_t
{
public:
- filetype_t()
- : name(""), pattern("")
- {}
- filetype_t(const char* _name, const char* _pattern)
- : name(_name), pattern(_pattern)
- {}
- const char* name;
- const char* pattern;
+filetype_t()
+ : name( "" ), pattern( "" )
+{}
+filetype_t( const char* _name, const char* _pattern )
+ : name( _name ), pattern( _pattern )
+{}
+const char* name;
+const char* pattern;
};
// using constructors / destructors on C structs is bad practice
struct entity_interfaces_t
{
- IRender *pRender;
- ISelect *pSelect;
- IEdit *pEdit;
+ IRender *pRender;
+ ISelect *pSelect;
+ IEdit *pEdit;
};
// MODEL END
-
+
typedef struct entity_s
{
- struct entity_s *prev, *next;
-
- /*!
- \todo can use a brushes list, or the blind data below
- for now, blind data should be interpreted as CPtrArray*, only use in the IMAP API
- */
- brush_t brushes; // head/tail of list
- void *pData;
-
- int undoId, redoId, entityId; // used for undo/redo
- vec3_t origin;
- eclass_t *eclass;
- epair_t *epairs;
- entity_interfaces_t model;
+ struct entity_s *prev, *next;
+
+ /*!
+ \todo can use a brushes list, or the blind data below
+ for now, blind data should be interpreted as CPtrArray*, only use in the IMAP API
+ */
+ brush_t brushes; // head/tail of list
+ void *pData;
+
+ int undoId, redoId, entityId; // used for undo/redo
+ vec3_t origin;
+ eclass_t *eclass;
+ epair_t *epairs;
+ entity_interfaces_t model;
#ifdef USEPLUGINENTITIES
- IPluginEntity *pPlugEnt;
+ IPluginEntity *pPlugEnt;
#endif // USEPLUGINENTITIES
- // http://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=252
- // this is cam code addition?
- vec3_t color;
+ // this is cam code addition?
+ vec3_t color;
// Arnout: HACK-ish and change for 1.3 (in 1.3 we have a blind data pointer according to TTimo)
float fLightEnvelope1[3];
typedef struct
{
- int p1, p2;
- face_t *f1, *f2;
+ int p1, p2;
+ face_t *f1, *f2;
} pedge_t;
// window system independent camera view code
// NOTE TTimo taken from xy.h
typedef struct
{
- int width, height;
+ int width, height;
- qboolean timing;
+ qboolean timing;
- vec3_t origin; // at center of window
- float scale;
+ vec3_t origin; // at center of window
+ float scale;
- float topclip, bottomclip;
+ float topclip, bottomclip;
- qboolean d_dirty;
+ qboolean d_dirty;
} xy_t;
// spog - struct used for nodes in filters list
struct bfilter_t //c++ style
{
- bfilter_t *next;
- int attribute; // 1=brush->face->pShader->getName()
- // 2=brush->pPatch->pShader->getFlags()
- // 3=brush->owner->eclass->name
- // 4=brush->owner->eclass->nShowFlags
- // 5=brush->face->texdef.flags (q2)
- // 6=brush->face->texdef.contents (q2)
- int mask;
- char *string;
- bool active;
+ bfilter_t *next;
+ int attribute; // 1=brush->face->pShader->getName()
+ // 2=brush->pPatch->pShader->getFlags()
+ // 3=brush->owner->eclass->name
+ // 4=brush->owner->eclass->nShowFlags
+ // 5=brush->face->texdef.flags (q2)
+ // 6=brush->face->texdef.contents (q2)
+ int mask;
+ const char *string;
+ bool active;
};
// djbob: no longer any need to add only to end, versioning removed, it is no longer saved as binary
// preferences.cpp LoadPref / SavePref
typedef struct
{
- int iTexMenu; // nearest, linear, etc
- float fGamma; // gamma for textures
- vec3_t colors[COLOR_LAST];
- int exclude;
- int include;
- texdef_t m_SIIncrement; // increments for the surface inspector
- texdef_t m_PIIncrement; // increments for the patch inspector
- vec3_t AxisColors[3]; // colors used for X, Y Z axis
- // these are in the View > Show menu with Show coordinates
- qboolean show_names;
- qboolean show_coordinates;
- qboolean show_angles;
- qboolean show_outline;
- qboolean show_axis;
- qboolean bNoSelectedOutlines;
- bfilter_t *filters; // FIXME spog - might be better in another location?
- int iSelectedOutlinesStyle;
+ int iTexMenu; // nearest, linear, etc
+ float fGamma; // gamma for textures
+ vec3_t colors[COLOR_LAST];
+ int exclude;
+ int include;
+ texdef_t m_SIIncrement; // increments for the surface inspector
+ texdef_t m_PIIncrement; // increments for the patch inspector
+ vec3_t AxisColors[3]; // colors used for X, Y Z axis
+ // these are in the View > Show menu with Show coordinates
+ qboolean show_names;
+ qboolean show_coordinates;
+ qboolean show_angles;
+ qboolean show_outline;
+ qboolean show_axis;
+ qboolean bNoSelectedOutlines;
+ bfilter_t *filters; // FIXME spog - might be better in another location?
+ int iSelectedOutlinesStyle;
} SavedInfo_t;
typedef enum
{
- sel_brush,
- sel_brush_on,
- sel_brush_off,
- // sel_sticky_brush,
- // sel_face,
- sel_vertex,
- sel_edge,
- sel_singlevertex,
- sel_curvepoint,
- sel_area,
- sel_areatall,
- sel_facets_on,
- sel_facets_off,
+ sel_brush,
+ sel_brush_on,
+ sel_brush_off,
+ // sel_sticky_brush,
+ // sel_face,
+ sel_vertex,
+ sel_edge,
+ sel_singlevertex,
+ sel_curvepoint,
+ sel_area,
+ sel_areatall,
+ sel_facets_on,
+ sel_facets_off,
} select_t;
// most of the QE globals are stored in this structure
typedef struct
{
- qboolean d_showgrid;
- float d_gridsize;
- qboolean d_bSmallGrid; // we use this flag to hack our way into editing of <1 grids
-
- int d_num_entities;
-
- entity_t *d_project_entity;
-
- // defines the boundaries of the current work area
- // is used to guess brushes and drop points third coordinate when creating from 2D view
- vec3_t d_work_min,d_work_max;
- // not stored in registry, default is off
- qboolean d_show_work;
-
- vec3_t d_points[MAX_POINTS];
- int d_numpoints;
- pedge_t d_edges[MAX_EDGES];
- int d_numedges;
-
- int d_num_move_points;
- float *d_move_points[4096];
-
- qtexture_t *d_qtextures;
- // used to speedup access, specially in QERApp_Try_Texture_ForName
- // must always be kept up-to-date with d_qtextures*
- //++timo FIXME at some point in the future it would even be better to remove d_qtextures and use this instead
- GHashTable *d_qtexmap;
-
- texturewin_t d_texturewin;
-
- int d_pointfile_display_list;
-
- xy_t d_xyOld;
-
- SavedInfo_t d_savedinfo;
-
- int d_workcount;
-
- // connect entities uses the last two brushes selected
- int d_select_count;
- brush_t *d_select_order[2];
- vec3_t d_select_translate; // for dragging w/o making new display lists
- select_t d_select_mode;
-
- int d_parsed_brushes;
-
- qboolean show_blocks;
- int blockSize;
-
- // NOTE TTimo
- // a lot of this data should be in a property bag and available to the other modules through an API
- // this is generated from game configuration and the project settings, and should be still be part of it
-
- // tells if we are internally using brush primitive (texture coordinates and map format)
- // this is a shortcut for IntForKey( g_qeglobals.d_project_entity, "brush_primit" )
- // NOTE: must keep the two ones in sync
- bool m_bBrushPrimitMode;
-
- /*!
- win32: engine full path.
- unix: user home full path + engine dir.
- */
- Str m_strHomeGame;
- /*!
- cache for m_strHomeGame + mod subdirectory.
- */
- Str m_strHomeMaps;
-
- // used while importing brush data from file or memory buffer
- // tells if conversion between map format and internal preferences ( m_bBrushPrimitMode ) is needed
- qboolean bNeedConvert;
- qboolean bOldBrushes;
- qboolean bPrimitBrushes;
-
- vec3_t d_vAreaTL;
- vec3_t d_vAreaBR;
-
- // tells if we are using .INI files for prefs instead of registry
- qboolean use_ini;
- // even in .INI mode we use the registry for all void* prefs
- char use_ini_registry[64];
- // disabled all INI / registry read write .. used when shutting down after registry cleanup
- qboolean disable_ini;
-
- // tells we are using a BSP frontend plugin
- qboolean bBSPFrontendPlugin;
-
- // handle to the console log file
- // we use low level I/O to get rid of buffering and have everything on file if we crash
- int hLogFile;
-
- qboolean bTextureCompressionSupported; // is texture compression supported by hardware?
- GLint texture_components;
-
- // temporary values that should be initialised only once at run-time
- // there are too many uneccessary calls to Sys_QGL_ExtensionSupported
- // NOTE TTimo: those are unused atm (set right, but not used)
- // http://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=623
- bool m_bOpenGLCompressionSupported;
- bool m_bS3CompressionSupported;
-
- // set to true after OpenGL has been initialized and extensions have been tested
- bool m_bOpenGLReady;
+ qboolean d_showgrid;
+ float d_gridsize;
+ qboolean d_bSmallGrid; // we use this flag to hack our way into editing of <1 grids
+
+ int d_num_entities;
+
+ entity_t *d_project_entity;
+
+ // defines the boundaries of the current work area
+ // is used to guess brushes and drop points third coordinate when creating from 2D view
+ vec3_t d_work_min,d_work_max;
+ // not stored in registry, default is off
+ qboolean d_show_work;
+
+ vec3_t d_points[MAX_POINTS];
+ int d_numpoints;
+ pedge_t d_edges[MAX_EDGES];
+ int d_numedges;
+
+ int d_num_move_points;
+ float *d_move_points[4096];
+
+ qtexture_t *d_qtextures;
+ // used to speedup access, specially in QERApp_Try_Texture_ForName
+ // must always be kept up-to-date with d_qtextures*
+ //++timo FIXME at some point in the future it would even be better to remove d_qtextures and use this instead
+ GHashTable *d_qtexmap;
+
+ texturewin_t d_texturewin;
+
+ int d_pointfile_display_list;
+
+ xy_t d_xyOld;
+
+ SavedInfo_t d_savedinfo;
+
+ int d_workcount;
+
+ // connect entities uses the last two brushes selected
+ int d_select_count;
+ brush_t *d_select_order[2];
+ vec3_t d_select_translate; // for dragging w/o making new display lists
+ select_t d_select_mode;
+
+ int d_parsed_brushes;
+
+ qboolean show_blocks;
+ int blockSize;
+
+ // NOTE TTimo
+ // a lot of this data should be in a property bag and available to the other modules through an API
+ // this is generated from game configuration and the project settings, and should be still be part of it
+
+ // tells if we are internally using brush primitive (texture coordinates and map format)
+ // this is a shortcut for IntForKey( g_qeglobals.d_project_entity, "brush_primit" )
+ // NOTE: must keep the two ones in sync
+ bool m_bBrushPrimitMode;
+
+ /*!
+ win32: engine full path.
+ unix: user home full path + engine dir.
+ */
+ Str m_strHomeGame;
+ /*!
+ cache for m_strHomeGame + mod subdirectory.
+ */
+ Str m_strHomeMaps;
+
+ // used while importing brush data from file or memory buffer
+ // tells if conversion between map format and internal preferences ( m_bBrushPrimitMode ) is needed
+ qboolean bNeedConvert;
+ qboolean bOldBrushes;
+ qboolean bPrimitBrushes;
+
+ vec3_t d_vAreaTL;
+ vec3_t d_vAreaBR;
+
+ // tells if we are using .INI files for prefs instead of registry
+ qboolean use_ini;
+ // even in .INI mode we use the registry for all void* prefs
+ char use_ini_registry[64];
+ // disabled all INI / registry read write .. used when shutting down after registry cleanup
+ qboolean disable_ini;
+
+ // tells we are using a BSP frontend plugin
+ qboolean bBSPFrontendPlugin;
+
+ // handle to the console log file
+ // we use low level I/O to get rid of buffering and have everything on file if we crash
+ int hLogFile;
+
+ qboolean bTextureCompressionSupported; // is texture compression supported by hardware?
+ GLint texture_components;
+
+ // temporary values that should be initialised only once at run-time
+ // there are too many uneccessary calls to Sys_QGL_ExtensionSupported
+ // NOTE TTimo: those are unused atm (set right, but not used)
+ bool m_bOpenGLCompressionSupported;
+ bool m_bS3CompressionSupported;
+
+ // set to true after OpenGL has been initialized and extensions have been tested
+ bool m_bOpenGLReady;
} QEGlobals_t;