2 GenSurf plugin for GtkRadiant
3 Copyright (C) 2001 David Hyde, Loki software and qeradiant.com
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public
16 License along with this library; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 #include "globaldefs.h"
29 #include "iscenegraph.h"
31 #define USE_QERTABLE_DEFINE
33 #include "qerplugin.h"
35 extern _QERFuncTable_1 g_FuncTable;
38 #include "iselection.h"
40 #define USE_ENTITYTABLE_DEFINE
44 extern _QEREntityTable __ENTITYTABLENAME;
46 #define USE_PATCHTABLE_DEFINE
50 extern _QERPatchTable __PATCHTABLENAME;
52 #define USE_BRUSHTABLE_DEFINE
56 extern _QERBrushTable __BRUSHTABLENAME;
69 //#if GDEF_OS_LINUX || GDEF_OS_MACOS
76 inline T min( T x, T y ) { return ( x < y ) ? x : y; }
78 inline T max( T x, T y ) { return ( x > y ) ? x : y; }
81 typedef struct { long x, y; } Point;
82 typedef struct { long left, top, right, bottom; } Rect;
90 inline bool PtInRect(Rect *rc, Point pt)
92 if (pt.x < rc->left) {
95 if (pt.x > rc->right) {
98 if (pt.y < rc->bottom) {
101 if (pt.y > rc->top) {
109 #define CONTENTS_SOLID 0x00000001
110 #define CONTENTS_DETAIL 0x08000000 // brushes to be added after vis leafs
111 #define CONTENTS_LADDER 0x20000000
112 #define SURF_HINT 0x100 // make a primary bsp splitter
113 #define SURF_SKIP 0x200 // completely ignore, allowing non-closed brushes
114 #define HINT_OFFSET 96
116 #define PI 3.14159265358979224
117 #define RadiansToDegrees(a) ( floor( a * 57.2957795 - 0.5 ) + 1. )
118 #define DegreesToRadians(a) ( a / 57.2957795 )
120 #define BOGUS_RANGE 65536
122 #define DotProduct(x,y) (x[0]*y[0]+x[1]*y[1]+x[2]*y[2])
123 #define VectorAdd(a,b,c) {c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];}
124 #define VectorClear(x) {x[0] = x[1] = x[2] = 0;}
125 #define VectorCopy(a,b) {b[0]=a[0];b[1]=a[1];b[2]=a[2];}
126 #define VectorScale(a,b,c) {c[0]=b*a[0];c[1]=b*a[1];c[2]=b*a[2];}
127 #define VectorSubtract(a,b,c) {c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];}
129 #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]; }
130 #define side(u1, v1, u2, v2, u3, v3) ( v3 - v1 ) * ( u2 - u1 ) - ( u3 - u1 ) * ( v2 - v1 )
140 #define MAX_FACES_PER_BRUSH 6
141 #define SLIVER_ANGLE DegreesToRadians( 20 )
142 #define MAX_NODES ( MAX_ROWS + 1 ) * ( MAX_ROWS + 1 )
143 #define MAX_TRIS (MAX_ROWS)*( MAX_ROWS )
167 vec3 p[4]; // variable sized
173 FACE face[MAX_FACES_PER_BRUSH];
176 typedef struct tagXYZ {
180 double pp[3]; // these used only for general 3D projection (not isometric)
186 // Q2 PAK file structures
188 char id[4]; // Should be 'PACK'
189 int dstart; // Offest in the file to the directory
190 int dsize; // Size in bytes of the directory, same as num_items*64
194 char name[56]; // The name of the item, normal C string
195 int start; // Offset in .pak file to start of item
196 int size; // Size of item in bytes
199 // SiN .SIN structures
200 #define SINPAKHEADER ( ( 'K' << 24 ) + ( 'A' << 16 ) + ( 'P' << 8 ) + 'S' )
201 #define MAX_PAK_FILENAME_LENGTH 120
204 char name[MAX_PAK_FILENAME_LENGTH];
205 int filepos, filelen;
209 int ident; // == IDPAKHEADER
214 // Half-Life WAD file structures
216 char identification[4]; // should be WAD2 or 2DAW
224 int size; // uncompressed
228 char name[16]; // must be null terminated
235 short compression_method;
240 int uncompressed_size;
261 int n[3]; // indices of neighboring triangles
268 //--------------- bitmap.c -----------------------------
271 double CalculateSnapValue(double value);
273 void GenerateBitmapMapping();
275 //--------------- face.c -------------------------------
276 void PlaneFromPoints(float *, float *, float *, PLANE *);
278 //void CrossProduct (vec3 v1, vec3 v2, vec3 cross);
279 //vec VectorNormalize (vec3 in, vec3 out);
280 //--------------- gendlg.c -----------------------------
281 GtkWidget *create_main_dialog();
283 void About(GtkWidget *parent);
285 //--------------- genmap.c -----------------------------
286 double AtLeast(double, double);
288 bool CanEdit(int, int);
290 void CloseFuncGroup();
292 bool FixedPoint(int, int);
298 double LessThan(double, double);
300 void MakeBrush(BRUSH *);
302 double MoreThan(double, double);
304 double Nearest(double, double);
306 double NoMoreThan(double, double);
308 void OpenFuncGroup();
312 int PlayerStartZ(double, double);
314 void SubdividePlasma(int, int, int, int);
318 void XYZtoV(XYZ *, vec3 *);
320 scene::Node *MakePatch(void);
322 //---------------- gensurf.c ---------------------------
325 void ReadIniFile(const char *);
327 void WriteIniFile(const char *);
329 void OpenSetup(GtkWidget *, int);
331 void SaveSetup(GtkWidget *);
333 //---------------- heretic.c ---------------------------
334 int GetDefSurfaceProps(char *);
336 //---------------- view.c ------------------------------
337 void CreateViewWindow();
341 void DrawPreview(Rect);
345 void GetScaleFactor(Rect);
349 void Scale(Rect, XYZ, Point *);
353 void UpdatePreview(bool);
355 //---------------- plugin.c -----------------------------
356 void UseFaceBounds();
358 extern _QERFuncTable_1 g_FuncTable;
359 extern _QERQglTable g_GLTable;
360 extern _QERUIGtkTable g_UIGtkTable;
361 extern _QEREntityTable g_EntityTable;
362 //#define MAX_ROWS 64
372 #define WAVE_COS_SIN 0
373 #define WAVE_HCYLINDER 1
374 #define WAVE_VCYLINDER 2
375 #define WAVE_BITMAP 3
376 #define WAVE_ROUGH_ONLY 4
377 #define WAVE_FORMULA 5
378 #define WAVE_FIRST WAVE_COS_SIN
379 #define WAVE_LAST WAVE_FORMULA
380 #define DLG_WAVE_LAST DLG_WAVE_01 + WAVE_LAST - WAVE_FIRST
382 #define MSG_VERTEX_SELECTED WM_USER + 1
384 typedef struct tagMYBITMAP {
386 char defpath[NAME_MAX];
390 unsigned char *colors;
393 typedef struct tagELEMENT {
398 extern char gszAppDir[NAME_MAX];
399 extern char gszCaption[64];
400 extern char gszHelpFile[NAME_MAX];
401 extern char gszIni[NAME_MAX];
402 extern char gszMapFile[NAME_MAX];
403 extern char gszVersion[64];
404 extern double Amplitude;
405 extern double Roughness;
406 extern double TexOffset[2];
407 extern double TexScale[2];
408 extern double WaveLength;
409 extern double Hll, Hur, Vll, Vur;
410 extern double Z00, Z01, Z10, Z11;
411 extern double yaw, pitch, roll;
412 extern ELEMENT Vertex[(MAX_ROWS + 1) * (MAX_ROWS + 1)];
415 extern int AutoOverwrite;
417 extern int FileAppend;
418 extern int FixBorders;
419 extern int HideBackFaces;
421 extern int NumVerticesSelected;
424 extern int RandomSeed;
426 extern int UseDetail;
427 extern int UseLadder;
428 extern int VertexMode;
429 extern int vid_x, vid_y;
431 extern int gNumNodes;
433 extern int view_x, view_y;
434 extern int view_cx, view_cy;
435 extern int UsePatches;
436 extern int SlantAngle;
437 extern int GimpHints;
438 extern int Antialiasing; // ^Fishman - Antializing for the preview window.
439 extern int AddTerrainKey; // ^Fishman - Add terrain key to func_group.
440 extern int SnapToGrid; // Hydra : snap to grid
441 extern int SP; // ^Fishman - Snap to grid.
444 /*extern HCURSOR ghCursorCurrent;
445 extern HCURSOR ghCursorDefault;
446 extern HCURSOR ghCursorVertex;
447 extern HINSTANCE ghInst;*/
448 extern ui::Window g_pRadiantWnd;
449 extern ui::Window g_pWnd;
450 /*extern HWND ghwndAngles;
451 extern HWND ghwndFix;
452 */extern GtkWidget *g_pWndPreview;
453 extern GtkWidget *g_pPreviewWidget;
454 extern MYBITMAP gbmp;
457 extern XYZ xyz[MAX_ROWS + 1][MAX_ROWS + 1];
460 extern bounding_box PlayerBox[NUMGAMES];
461 //extern char gszOutputDir[NUMGAMES][NAME_MAX];
462 extern char Texture[NUMGAMES][3][64];
463 //extern char gszTextureDir[NUMGAMES][NAME_MAX];
464 extern char GameName[NUMGAMES][16];
465 //extern char pakfile[NUMGAMES][NAME_MAX];
466 //extern char lastpakfile[NUMGAMES][NAME_MAX];
467 //extern int UsePak[NUMGAMES];
468 //extern char GameDir[NUMGAMES][NAME_MAX];
469 //extern char ExcelFunc[1024];
471 #endif // _GENSURF_H_