454 lines
10 KiB
C
454 lines
10 KiB
C
|
/*
|
||
|
===========================================================================
|
||
|
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
|