https://github.com/id-Software/Quake-III-Arena
Tip revision: dbe4ddb10315479fc00086f08e25d968b4b43c49 authored by Travis Bradshaw on 31 January 2012, 19:41:34 UTC
The Quake III Arena sources as originally released under the GPL license on August 20, 2005.
The Quake III Arena sources as originally released under the GPL license on August 20, 2005.
Tip revision: dbe4ddb
QERTYPES.H
/*
===========================================================================
Copyright (C) 1999-2005 Id Software, Inc.
This file is part of Quake III Arena source code.
Quake III Arena 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 2 of the License,
or (at your option) any later version.
Quake III Arena 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 Foobar; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
===========================================================================
*/
// qertypes.h
//
// common types
// merged from brush.h, etc. for plugin support
//
#ifndef _QERTYPE_H
#define _QERTYPE_H
#ifndef __BYTEBOOL__
#define __BYTEBOOL__
typedef boolean qboolean;
//typedef unsigned char byte;
#endif
#define MAXPOINTS 16
typedef float vec_t;
typedef vec_t vec2_t[2];
typedef vec_t vec3_t[3];
#include "splines/math_vector.h"
#ifndef M_PI
#define M_PI 3.14159265358979323846 // matches value in gcc v2 math.h
#endif
class texdef_t
{
public:
texdef_t()
{
name = new char[1];
name[0] = '\0';
}
~texdef_t()
{
delete []name;
name = NULL;
}
const char *Name( void )
{
if ( name ) {
return name;
}
return "";
}
void SetName(const char *p)
{
if (name)
{
delete []name;
}
if (p)
{
name = strcpy(new char[strlen(p)+1], p);
}
else
{
name = new char[1];
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;
}
//char name[128];
char *name;
float shift[2];
float rotate;
float scale[2];
int contents;
int flags;
int value;
};
// Timo
// new brush primitive texdef
typedef struct brushprimit_texdef_s
{
vec_t coords[2][3];
} brushprimit_texdef_t;
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;
};
#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
qboolean bFromShader; // created from a shader
float fTrans; // amount of transparency
int nShaderFlags; // qer_ shader flags
vec3_t color; // for flat shade mode
qboolean 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;
// NOTE: don't trust this definition!
// you should read float points[..][5]
// see NewWinding definition
#define MAX_POINTS_ON_WINDING 64
typedef struct
{
int numpoints;
int maxpoints;
float points[8][5]; // variable sized
} winding_t;
typedef struct
{
vec3_t normal;
double dist;
int type;
} plane_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
vec3_t planepts[3];
texdef_t texdef;
plane_t plane;
winding_t *face_winding;
vec3_t d_color;
qtexture_t *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 {
vec3_t 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 16
#define MAX_PATCH_HEIGHT 16
// 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 //
typedef struct {
vec3_t xyz;
float st[2];
float lightmap[2];
vec3_t normal;
} drawVert_t;
// used in brush primitive AND entities
typedef struct epair_s
{
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;
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;
} patchMesh_t;
typedef struct {
int index;
qtexture_t *texture;
texdef_t texdef;
} terrainFace_t;
typedef struct {
float height;
float scale;
terrainFace_t tri;
vec4_t rgba;
vec3_t normal;
vec3_t xyz;
} terrainVert_t;
#define MAX_TERRAIN_TEXTURES 128
typedef struct {
int width, height;
vec3_t mins, maxs;
vec3_t origin;
float scale_x;
float scale_y;
int numtextures;
qtexture_t *textures[ MAX_TERRAIN_TEXTURES ];
terrainVert_t *heightmap; // width * height
epair_t *epairs;
brush_s *pSymbiot;
bool bSelected;
bool bDirty;
int nListID;
} terrainMesh_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;
qboolean terrainBrush;
//int nPatchID;
patchMesh_t *pPatch;
terrainMesh_t *pTerrain;
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
// brush primitive only
epair_t *epairs;
} brush_t;
#define MAX_FLAGS 8
typedef struct trimodel_t
{
vec3_t v[3];
float st[3][2];
} trimodel;
typedef struct entitymodel_t
{
struct entitymodel_t *pNext;
int nTriCount;
trimodel *pTriList;
int nTextureBind;
int nSkinWidth;
int nSkinHeight;
int nModelPosition;
} entitymodel;
// eclass show flags
#define ECLASS_LIGHT 0x00000001
#define ECLASS_ANGLE 0x00000002
#define ECLASS_PATH 0x00000004
#define ECLASS_MISCMODEL 0x00000008
#define ECLASS_PLUGINENTITY 0x00000010
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];
/*
int nTriCount;
trimodel *pTriList;
int nTextureBind;
int nSkinWidth, nSkinHeight;
*/
entitymodel *model;
char *modelpath;
char *skinpath;
int nFrame;
unsigned int nShowFlags;
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_GROUP 0x0800
#define W_MEDIA 0x1000
#define W_ALL 0xFFFFFFFF
// used in some Drawing routines
enum VIEWTYPE {YZ, XZ, XY};
enum terrainnoise_t { NOISE_NONE, NOISE_PLUS, NOISE_PLUSMINUS };
enum terrainbrush_t { TERRAIN_BRUSH_CIRCLE, TERRAIN_BRUSH_SQUARE };
enum terrainfalloff_t { TERRAIN_FALLOFF_LINEAR, TERRAIN_FALLOFF_CURVED };
#endif