mirror of
https://github.com/id-Software/GtkRadiant.git
synced 2026-03-20 17:09:39 +01:00
The GtkRadiant sources as originally released under the GPL license.
This commit is contained in:
432
contrib/gtkgensurf/gensurf.h
Normal file
432
contrib/gtkgensurf/gensurf.h
Normal file
@@ -0,0 +1,432 @@
|
||||
/*
|
||||
GenSurf plugin for GtkRadiant
|
||||
Copyright (C) 2001 David Hyde, Loki software and qeradiant.com
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef _GENSURF_H_
|
||||
#define _GENSURF_H_
|
||||
|
||||
#include <string.h>
|
||||
#include "qertypes.h"
|
||||
#include <stdio.h>
|
||||
|
||||
#include "mathlib.h"
|
||||
#include "iscenegraph.h"
|
||||
#define USE_QERTABLE_DEFINE
|
||||
#include "qerplugin.h"
|
||||
extern _QERFuncTable_1 g_FuncTable;
|
||||
|
||||
#include "irender.h"
|
||||
#include "iselection.h"
|
||||
|
||||
#define USE_ENTITYTABLE_DEFINE
|
||||
#include "ientity.h"
|
||||
extern _QEREntityTable __ENTITYTABLENAME;
|
||||
|
||||
#define USE_PATCHTABLE_DEFINE
|
||||
#include "ipatch.h"
|
||||
extern _QERPatchTable __PATCHTABLENAME;
|
||||
|
||||
#define USE_BRUSHTABLE_DEFINE
|
||||
#include "ibrush.h"
|
||||
extern _QERBrushTable __BRUSHTABLENAME;
|
||||
|
||||
#include "igl.h"
|
||||
#include "ientity.h"
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#include "iui_gtk.h"
|
||||
|
||||
#include "gendlgs.h"
|
||||
|
||||
|
||||
#define PLUGIN
|
||||
#define Q3RADIANT
|
||||
|
||||
//#if defined(__linux__) || defined(__APPLE__)
|
||||
#if 1
|
||||
#include <algorithm>
|
||||
#else
|
||||
template <class T>
|
||||
inline T min (T x, T y) { return (x < y) ? x : y; }
|
||||
template <class T>
|
||||
inline T max (T x, T y) { return (x > y) ? x : y; }
|
||||
#endif
|
||||
|
||||
typedef struct { long x, y; } Point;
|
||||
typedef struct { long left, top, right, bottom; } Rect;
|
||||
|
||||
#define NAME_MAX 255
|
||||
|
||||
typedef void* LPVOID;
|
||||
typedef char* LPSTR;
|
||||
|
||||
//#endif
|
||||
inline bool PtInRect (Rect *rc, Point pt)
|
||||
{
|
||||
if (pt.x < rc->left) return false;
|
||||
if (pt.x > rc->right) return false;
|
||||
if (pt.y < rc->bottom) return false;
|
||||
if (pt.y > rc->top) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
#define NUMGAMES 7
|
||||
|
||||
#define CONTENTS_SOLID 0x00000001
|
||||
#define CONTENTS_DETAIL 0x08000000 // brushes to be added after vis leafs
|
||||
#define CONTENTS_LADDER 0x20000000
|
||||
#define SURF_HINT 0x100 // make a primary bsp splitter
|
||||
#define SURF_SKIP 0x200 // completely ignore, allowing non-closed brushes
|
||||
#define HINT_OFFSET 96
|
||||
|
||||
#define PI 3.14159265358979224
|
||||
#define RadiansToDegrees(a) (floor(a*57.2957795 - 0.5)+1.)
|
||||
#define DegreesToRadians(a) (a/57.2957795)
|
||||
|
||||
#define BOGUS_RANGE 65536
|
||||
/*
|
||||
#define DotProduct(x,y) (x[0]*y[0]+x[1]*y[1]+x[2]*y[2])
|
||||
#define VectorAdd(a,b,c) {c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];}
|
||||
#define VectorClear(x) {x[0] = x[1] = x[2] = 0;}
|
||||
#define VectorCopy(a,b) {b[0]=a[0];b[1]=a[1];b[2]=a[2];}
|
||||
#define VectorScale(a,b,c) {c[0]=b*a[0];c[1]=b*a[1];c[2]=b*a[2];}
|
||||
#define VectorSubtract(a,b,c) {c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];}
|
||||
*/
|
||||
#define XYZVectorSubtract(a,b,c) {c[0]=(float)a[0]-(float)b[0];c[1]=(float)a[1]-(float)b[1];c[2]=(float)a[2]-(float)b[2];}
|
||||
#define side(u1,v1,u2,v2,u3,v3) (v3-v1)*(u2-u1) - (u3-u1)*(v2-v1)
|
||||
|
||||
#define QUAKE2 0
|
||||
#define HALFLIFE 1
|
||||
#define SIN 2
|
||||
#define HERETIC2 3
|
||||
#define KINGPIN 4
|
||||
#define GENESIS3D 5
|
||||
#define QUAKE3 6
|
||||
|
||||
#define MAX_FACES_PER_BRUSH 6
|
||||
#define SLIVER_ANGLE DegreesToRadians(20)
|
||||
#define MAX_NODES (MAX_ROWS+1)*(MAX_ROWS+1)
|
||||
#define MAX_TRIS (MAX_ROWS)*(MAX_ROWS)
|
||||
|
||||
typedef float vec;
|
||||
typedef vec vec3[3];
|
||||
typedef vec vec2[2];
|
||||
|
||||
typedef struct
|
||||
{
|
||||
vec3 v[3];
|
||||
char texture[64];
|
||||
float Shift[2];
|
||||
float Rotate;
|
||||
float Scale[2];
|
||||
int Contents;
|
||||
int Surface;
|
||||
int Value;
|
||||
} FACE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
vec3 normal;
|
||||
vec dist;
|
||||
} PLANE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int numpoints;
|
||||
vec3 p[4]; // variable sized
|
||||
} MY_WINDING;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int Number;
|
||||
int NumFaces;
|
||||
FACE face[MAX_FACES_PER_BRUSH];
|
||||
} BRUSH;
|
||||
|
||||
typedef struct tagXYZ
|
||||
{
|
||||
int fixed;
|
||||
int done;
|
||||
double p[3];
|
||||
double pp[3]; // these used only for general 3D projection (not isometric)
|
||||
double fixed_value;
|
||||
double range;
|
||||
double rate;
|
||||
} XYZ;
|
||||
|
||||
// Q2 PAK file structures
|
||||
typedef struct
|
||||
{
|
||||
char id[4]; // Should be 'PACK'
|
||||
int dstart; // Offest in the file to the directory
|
||||
int dsize; // Size in bytes of the directory, same as num_items*64
|
||||
} pak_header_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char name[56]; // The name of the item, normal C string
|
||||
int start; // Offset in .pak file to start of item
|
||||
int size; // Size of item in bytes
|
||||
} pak_item_t;
|
||||
|
||||
// SiN .SIN structures
|
||||
#define SINPAKHEADER (('K'<<24)+('A'<<16)+('P'<<8)+'S')
|
||||
#define MAX_PAK_FILENAME_LENGTH 120
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char name[MAX_PAK_FILENAME_LENGTH];
|
||||
int filepos, filelen;
|
||||
} dpackfile_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int ident; // == IDPAKHEADER
|
||||
int dirofs;
|
||||
int dirlen;
|
||||
} dpackheader_t;
|
||||
|
||||
// Half-Life WAD file structures
|
||||
typedef struct
|
||||
{
|
||||
char identification[4]; // should be WAD2 or 2DAW
|
||||
int numlumps;
|
||||
int infotableofs;
|
||||
} wadinfo_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int filepos;
|
||||
int disksize;
|
||||
int size; // uncompressed
|
||||
char type;
|
||||
char compression;
|
||||
char pad1, pad2;
|
||||
char name[16]; // must be null terminated
|
||||
} lumpinfo_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int signature;
|
||||
short version;
|
||||
short bitflag;
|
||||
short compression_method;
|
||||
short modfiletime;
|
||||
short modfiledate;
|
||||
int crc;
|
||||
int compressed_size;
|
||||
int uncompressed_size;
|
||||
short filename_size;
|
||||
short extra_size;
|
||||
} zipheader_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
double x[2];
|
||||
double y[2];
|
||||
double z[2];
|
||||
} bounding_box;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
float p[3];
|
||||
int used;
|
||||
int tri;
|
||||
float error;
|
||||
int fixed;
|
||||
} NODE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int v[3];
|
||||
int n[3]; // indices of neighboring triangles
|
||||
PLANE plane;
|
||||
int flag;
|
||||
float min[3];
|
||||
float max[3];
|
||||
} TRI;
|
||||
|
||||
//--------------- bitmap.c -----------------------------
|
||||
bool OpenBitmap ();
|
||||
double CalculateSnapValue(double value);
|
||||
void GenerateBitmapMapping ();
|
||||
//--------------- face.c -------------------------------
|
||||
void PlaneFromPoints (float *, float *, float *, PLANE *);
|
||||
//void CrossProduct (vec3 v1, vec3 v2, vec3 cross);
|
||||
//vec VectorNormalize (vec3 in, vec3 out);
|
||||
//--------------- gendlg.c -----------------------------
|
||||
GtkWidget* create_main_dialog ();
|
||||
void About (GtkWidget *parent);
|
||||
//--------------- genmap.c -----------------------------
|
||||
double AtLeast(double,double);
|
||||
bool CanEdit(int, int);
|
||||
void CloseFuncGroup();
|
||||
bool FixedPoint(int,int);
|
||||
void GenerateMap();
|
||||
void GenerateXYZ();
|
||||
double LessThan(double,double);
|
||||
void MakeBrush(BRUSH *);
|
||||
double MoreThan(double,double);
|
||||
double Nearest(double,double);
|
||||
double NoMoreThan(double,double);
|
||||
void OpenFuncGroup();
|
||||
void PlasmaCloud();
|
||||
int PlayerStartZ(double,double);
|
||||
void SubdividePlasma(int,int,int,int);
|
||||
bool ValidSurface();
|
||||
void XYZtoV(XYZ *, vec3 *);
|
||||
scene::Node* MakePatch(void);
|
||||
|
||||
//---------------- gensurf.c ---------------------------
|
||||
bool GenSurfInit ();
|
||||
void ReadIniFile (const char *);
|
||||
void WriteIniFile (const char *);
|
||||
void OpenSetup (GtkWidget*,int);
|
||||
void SaveSetup (GtkWidget*);
|
||||
//---------------- heretic.c ---------------------------
|
||||
int GetDefSurfaceProps(char *);
|
||||
//---------------- view.c ------------------------------
|
||||
void CreateViewWindow ();
|
||||
void DrawGrid(Rect);
|
||||
void DrawPreview(Rect);
|
||||
void evaluate();
|
||||
void GetScaleFactor(Rect);
|
||||
void project(XYZ *);
|
||||
void Scale(Rect,XYZ,Point *);
|
||||
void ShowPreview ();
|
||||
void UpdatePreview (bool);
|
||||
|
||||
//---------------- plugin.c -----------------------------
|
||||
void UseFaceBounds();
|
||||
|
||||
extern _QERFuncTable_1 g_FuncTable;
|
||||
extern _QERQglTable g_GLTable;
|
||||
extern _QERUIGtkTable g_UIGtkTable;
|
||||
extern _QEREntityTable g_EntityTable;
|
||||
//#define MAX_ROWS 64
|
||||
#define MAX_ROWS 128
|
||||
|
||||
#define PLANE_XY0 0
|
||||
#define PLANE_XY1 1
|
||||
#define PLANE_YZ0 2
|
||||
#define PLANE_XZ0 3
|
||||
#define PLANE_YZ1 4
|
||||
#define PLANE_XZ1 5
|
||||
|
||||
#define WAVE_COS_SIN 0
|
||||
#define WAVE_HCYLINDER 1
|
||||
#define WAVE_VCYLINDER 2
|
||||
#define WAVE_BITMAP 3
|
||||
#define WAVE_ROUGH_ONLY 4
|
||||
#define WAVE_FORMULA 5
|
||||
#define WAVE_FIRST WAVE_COS_SIN
|
||||
#define WAVE_LAST WAVE_FORMULA
|
||||
#define DLG_WAVE_LAST DLG_WAVE_01+WAVE_LAST-WAVE_FIRST
|
||||
|
||||
#define MSG_VERTEX_SELECTED WM_USER+1
|
||||
|
||||
typedef struct tagMYBITMAP
|
||||
{
|
||||
char name[NAME_MAX];
|
||||
char defpath[NAME_MAX];
|
||||
double black_value;
|
||||
double white_value;
|
||||
int width, height;
|
||||
unsigned char* colors;
|
||||
} MYBITMAP;
|
||||
|
||||
typedef struct tagELEMENT {
|
||||
int i;
|
||||
int j;
|
||||
} ELEMENT;
|
||||
|
||||
extern char gszAppDir[NAME_MAX];
|
||||
extern char gszCaption[64];
|
||||
extern char gszHelpFile[NAME_MAX];
|
||||
extern char gszIni[NAME_MAX];
|
||||
extern char gszMapFile[NAME_MAX];
|
||||
extern char gszVersion[64];
|
||||
extern double Amplitude;
|
||||
extern double Roughness;
|
||||
extern double TexOffset[2];
|
||||
extern double TexScale[2];
|
||||
extern double WaveLength;
|
||||
extern double Hll, Hur, Vll, Vur;
|
||||
extern double Z00, Z01, Z10, Z11;
|
||||
extern double yaw, pitch, roll;
|
||||
extern ELEMENT Vertex[(MAX_ROWS+1)*(MAX_ROWS+1)];
|
||||
extern int AddHints;
|
||||
extern int ArghRad2;
|
||||
extern int AutoOverwrite;
|
||||
extern int Decimate;
|
||||
extern int FileAppend;
|
||||
extern int FixBorders;
|
||||
extern int HideBackFaces;
|
||||
extern int NH, NV;
|
||||
extern int NumVerticesSelected;
|
||||
extern int Plane;
|
||||
extern int Preview;
|
||||
extern int RandomSeed;
|
||||
extern int Skybox;
|
||||
extern int UseDetail;
|
||||
extern int UseLadder;
|
||||
extern int VertexMode;
|
||||
extern int vid_x, vid_y;
|
||||
extern int WaveType;
|
||||
extern int gNumNodes;
|
||||
extern int gNumTris;
|
||||
extern int view_x, view_y;
|
||||
extern int view_cx, view_cy;
|
||||
extern int UsePatches;
|
||||
extern int SlantAngle;
|
||||
extern int GimpHints;
|
||||
extern int Antialiasing; // ^Fishman - Antializing for the preview window.
|
||||
extern int AddTerrainKey; // ^Fishman - Add terrain key to func_group.
|
||||
extern int SnapToGrid; // Hydra : snap to grid
|
||||
extern int SP; // ^Fishman - Snap to grid.
|
||||
|
||||
|
||||
/*extern HCURSOR ghCursorCurrent;
|
||||
extern HCURSOR ghCursorDefault;
|
||||
extern HCURSOR ghCursorVertex;
|
||||
extern HINSTANCE ghInst;*/
|
||||
extern GtkWidget *g_pRadiantWnd;
|
||||
extern GtkWidget *g_pWnd;
|
||||
/*extern HWND ghwndAngles;
|
||||
extern HWND ghwndFix;
|
||||
*/extern GtkWidget *g_pWndPreview;
|
||||
extern GtkWidget *g_pPreviewWidget;
|
||||
extern MYBITMAP gbmp;
|
||||
extern NODE *gNode;
|
||||
extern TRI *gTri;
|
||||
extern XYZ xyz[MAX_ROWS+1][MAX_ROWS+1];
|
||||
|
||||
extern int Game;
|
||||
extern bounding_box PlayerBox[NUMGAMES];
|
||||
//extern char gszOutputDir[NUMGAMES][NAME_MAX];
|
||||
extern char Texture[NUMGAMES][3][64];
|
||||
//extern char gszTextureDir[NUMGAMES][NAME_MAX];
|
||||
extern char GameName[NUMGAMES][16];
|
||||
//extern char pakfile[NUMGAMES][NAME_MAX];
|
||||
//extern char lastpakfile[NUMGAMES][NAME_MAX];
|
||||
//extern int UsePak[NUMGAMES];
|
||||
//extern char GameDir[NUMGAMES][NAME_MAX];
|
||||
//extern char ExcelFunc[1024];
|
||||
|
||||
#endif // _GENSURF_H_
|
||||
Reference in New Issue
Block a user