123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430 |
- /*
- ===========================================================================
- Doom 3 GPL Source Code
- Copyright (C) 1999-2011 id Software LLC, a ZeniMax Media company.
- This file is part of the Doom 3 GPL Source Code (?Doom 3 Source Code?).
- Doom 3 Source Code 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 3 of the License, or
- (at your option) any later version.
- Doom 3 Source Code 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 Doom 3 Source Code. If not, see <http://www.gnu.org/licenses/>.
- In addition, the Doom 3 Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Doom 3 Source Code. If not, please request a copy in writing from id Software at the address below.
- If you have questions concerning this license or the applicable additional terms, you may contact in writing id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA.
- ===========================================================================
- */
- #ifndef _QERTYPE_H
- #define _QERTYPE_H
- #define MAXPOINTS 16
- class texdef_t
- {
- public:
- texdef_t()
- {
- name = "";
- shift[0] = shift[1] = 0.0;
- rotate = 0;
- scale[0] = scale[1] = 0;
- value = 0;
- }
- ~texdef_t()
- {
- if ( name && name[0] ) {
- delete []name;
- }
- name = NULL;
- }
- void SetName( const char *p )
- {
- if ( name && name[0] ) {
- delete []name;
- }
- if ( p && p[0] ) {
- name = strcpy( new char[strlen(p)+1], p );
- }
- else {
- name = "";
- }
- }
- 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];
- value = rhs.value;
- }
- return *this;
- }
- //char name[128];
- char * name;
- float shift[2];
- float rotate;
- float scale[2];
- int value;
- };
- // Timo
- // new brush primitive texdef
- //typedef struct brushprimit_texdef_s
- //{
- // float coords[2][3];
- //} brushprimit_texdef_t;
- class brushprimit_texdef_t {
- public:
- float coords[2][3];
- brushprimit_texdef_t() {
- memset(&coords, 0, sizeof(coords));
- coords[0][0] = 1.0;
- coords[1][1] = 1.0;
- }
- };
- class texturewin_t
- {
- public:
- texturewin_t() {
- memset(&brushprimit_texdef.coords, 0, sizeof(brushprimit_texdef.coords));
- brushprimit_texdef.coords[0][0] = 1.0;
- brushprimit_texdef.coords[1][1] = 1.0;
- }
- ~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;
- };
- #define QER_TRANS 0x00000001
- #define QER_NOCARVE 0x00000002
- typedef struct qtexture_s
- {
- struct qtexture_s *next;
- char name[64]; // includes partial directory and extension
- int width, height;
- int contents;
- int flags;
- int value;
- int texture_number; // gl bind number
-
- // name of the .shader file
- char shadername[1024]; // old shader stuff
- bool bFromShader; // created from a shader
- float fTrans; // amount of transparency
- int nShaderFlags; // qer_ shader flags
- idVec3 color; // for flat shade mode
- bool inuse; // true = is present on the level
- // cast this one to an IPluginQTexture if you are using it
- // NOTE: casting can be done with a GETPLUGINQTEXTURE defined in isurfaceplugin.h
- // TODO: if the __ISURFACEPLUGIN_H_ header is used, use a union { void *pData; IPluginQTexture *pPluginQTexture } kind of thing ?
- void *pData;
- //++timo FIXME: this is the actual filename of the texture
- // this will be removed after shader code cleanup
- char filename[64];
- } qtexture_t;
- //++timo texdef and brushprimit_texdef are static
- // TODO : do dynamic ?
- typedef struct face_s
- {
- struct face_s *next;
- struct face_s *original; //used for vertex movement
- idVec3 planepts[3];
- idVec3 orgplanepts[3]; // used for arbitrary rotation
- texdef_t texdef;
- idPlane plane;
- idPlane originalPlane;
- bool dirty;
- idWinding *face_winding;
- idVec3 d_color;
- const idMaterial *d_texture;
- // Timo new brush primit 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;
- } face_t;
- typedef struct {
- idVec3 xyz;
- float sideST[2];
- float capST[2];
- } curveVertex_t;
- typedef struct {
- curveVertex_t v[2];
- } sideVertex_t;
- #define MIN_PATCH_WIDTH 3
- #define MIN_PATCH_HEIGHT 3
- #define MAX_PATCH_WIDTH 64
- #define MAX_PATCH_HEIGHT 64
- // patch type info
- // type in lower 16 bits, flags in upper
- // endcaps directly follow this patch in the list
- // types
- #define PATCH_GENERIC 0x00000000 // generic flat patch
- #define PATCH_CYLINDER 0x00000001 // cylinder
- #define PATCH_BEVEL 0x00000002 // bevel
- #define PATCH_ENDCAP 0x00000004 // endcap
- #define PATCH_HEMISPHERE 0x00000008 // hemisphere
- #define PATCH_CONE 0x00000010 // cone
- #define PATCH_TRIANGLE 0x00000020 // simple tri, assumes 3x3 patch
- // behaviour styles
- #define PATCH_CAP 0x00001000 // flat patch applied as a cap
- #define PATCH_SEAM 0x00002000 // flat patch applied as a seam
- #define PATCH_THICK 0x00004000 // patch applied as a thick portion
- // styles
- #define PATCH_BEZIER 0x00000000 // default bezier
- #define PATCH_BSPLINE 0x10000000 // bspline
- #define PATCH_TYPEMASK 0x00000fff //
- #define PATCH_BTYPEMASK 0x0000f000 //
- #define PATCH_STYLEMASK 0xffff0000 //
- struct brush_s;
- typedef struct brush_s brush_t;
- typedef struct {
- int width, height; // in control points, not patches
- int horzSubdivisions;
- int vertSubdivisions;
- bool explicitSubdivisions;
- int contents, flags, value, type;
- const idMaterial *d_texture;
- idDrawVert *verts;
- //idDrawVert *ctrl;
- brush_t * pSymbiot;
- bool bSelected;
- bool bOverlay;
- int nListID;
- int nListIDCam;
- int nListSelected;
- idDict * 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;
- ID_INLINE idDrawVert &ctrl( int col, int row ) {
- if ( col < 0 || col >= width || row < 0 || row >= height ) {
- common->Warning( "patchMesh_t::ctrl: control point out of range" );
- return verts[0];
- }
- else {
- return verts[row * width + col];
- }
- }
- } patchMesh_t;
- enum {
- LIGHT_TARGET,
- LIGHT_RIGHT,
- LIGHT_UP,
- LIGHT_RADIUS,
- LIGHT_X,
- LIGHT_Y,
- LIGHT_Z,
- LIGHT_START,
- LIGHT_END,
- LIGHT_CENTER
- };
- typedef struct brush_s
- {
- struct brush_s *prev, *next; // links in active/selected
- struct brush_s *oprev, *onext; // links in entity
- brush_t * list; //keep a handy link to the list its in
- struct entity_s *owner;
- idVec3 mins, maxs;
- idVec3 lightCenter; // for moving the shading center of point lights
- idVec3 lightRight;
- idVec3 lightTarget;
- idVec3 lightUp;
- idVec3 lightRadius;
- idVec3 lightOffset;
- idVec3 lightColor;
- idVec3 lightStart;
- idVec3 lightEnd;
- bool pointLight;
- bool startEnd;
- int lightTexture;
- bool trackLightOrigin; // this brush is a special case light brush
- bool entityModel;
- face_t *brush_faces;
- bool bModelFailed;
- //
- // curve brush extensions
- // all are derived from brush_faces
- bool hiddenBrush;
- bool forceWireFrame;
- bool forceVisibile;
- 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: HTREEITEM is MFC, some plugins really don't like it
- #ifdef QERTYPES_USE_MFC
- int numberId; // brush number
- HTREEITEM itemOwner; // owner for grouping
- #else
- int numberId;
- DWORD itemOwner;
- #endif
- idRenderModel *modelHandle;
- // brush primitive only
- idDict epairs;
- } brush_t;
- #define MAX_FLAGS 8
- typedef struct trimodel_t
- {
- idVec3 v[3];
- float st[3][2];
- } trimodel;
- // eclass show flags
- #define ECLASS_LIGHT 0x00000001
- #define ECLASS_ANGLE 0x00000002
- #define ECLASS_PATH 0x00000004
- #define ECLASS_MISCMODEL 0x00000008
- #define ECLASS_PLUGINENTITY 0x00000010
- #define ECLASS_PROJECTEDLIGHT 0x00000020
- #define ECLASS_WORLDSPAWN 0x00000040
- #define ECLASS_SPEAKER 0x00000080
- #define ECLASS_PARTICLE 0x00000100
- #define ECLASS_ROTATABLE 0x00000200
- #define ECLASS_CAMERAVIEW 0x00000400
- #define ECLASS_MOVER 0x00000800
- #define ECLASS_ENV 0x00001000
- #define ECLASS_COMBATNODE 0x00002000
- #define ECLASS_LIQUID 0x00004000
- enum EVAR_TYPES {
- EVAR_STRING,
- EVAR_INT,
- EVAR_FLOAT,
- EVAR_BOOL,
- EVAR_COLOR,
- EVAR_MATERIAL,
- EVAR_MODEL,
- EVAR_GUI,
- EVAR_SOUND
- };
- typedef struct evar_s {
- int type;
- idStr name;
- idStr desc;
- } evar_t;
- typedef struct eclass_s
- {
- struct eclass_s *next;
- idStr name;
- bool fixedsize;
- bool unknown; // wasn't found in source
- idVec3 mins, maxs;
- idVec3 color;
- texdef_t texdef;
- idStr comments;
- idStr desc;
- idRenderModel *modelHandle;
- idRenderModel *entityModel;
- int nFrame;
- unsigned int nShowFlags;
- idStr defMaterial;
- idDict args;
- idDict defArgs;
- idList<evar_t> vars;
- HMODULE hPlug;
- } eclass_t;
- 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_IFON 0x0100
- #define W_XZ 0x0200 //--| only used for patch vertex manip stuff
- #define W_YZ 0x0400 //--|
- #define W_MEDIA 0x1000
- #define W_GAME 0x2000
- #define W_ALL 0xFFFFFFFF
- // used in some Drawing routines
- enum VIEWTYPE {YZ, XZ, XY};
- #endif
|