mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2024-11-10 23:32:09 +00:00
Make MapEdit (QuakeEd) compile.
It won't work yet as there's no gorm file and there's code that has been commented out, but it finally compiles.
This commit is contained in:
parent
7dc1ccdbea
commit
44dd62d369
32 changed files with 785 additions and 686 deletions
|
@ -2,9 +2,13 @@
|
|||
#define CameraView_h
|
||||
|
||||
#include <AppKit/AppKit.h>
|
||||
#include "mathlib.h"
|
||||
|
||||
#include "QF/mathlib.h"
|
||||
|
||||
#include "SetBrush.h"
|
||||
|
||||
#include "render.h"
|
||||
|
||||
extern id cameraview_i;
|
||||
|
||||
extern byte renderlist[1024*1024*4];
|
||||
|
|
|
@ -1,6 +1,13 @@
|
|||
#include "qedefs.h"
|
||||
#include "QF/sys.h"
|
||||
|
||||
#include "CameraView.h"
|
||||
#include "Map.h"
|
||||
#include "QuakeEd.h"
|
||||
#include "XYView.h"
|
||||
#include "ZView.h"
|
||||
|
||||
id cameraview_i;
|
||||
extern NSBezierPath *path;
|
||||
|
||||
BOOL timedrawing = 0;
|
||||
|
||||
|
@ -75,10 +82,10 @@ initWithFrame:
|
|||
[map_i makeAllPerform: @selector(feetToFloor)];
|
||||
if (sb_floor_dist == 99999)
|
||||
{
|
||||
qprintf ("already on top floor");
|
||||
Sys_Printf ("already on top floor");
|
||||
return self;
|
||||
}
|
||||
qprintf ("up floor");
|
||||
Sys_Printf ("up floor");
|
||||
origin[2] += sb_floor_dist;
|
||||
[quakeed_i updateCamera];
|
||||
return self;
|
||||
|
@ -91,10 +98,10 @@ initWithFrame:
|
|||
[map_i makeAllPerform: @selector(feetToFloor)];
|
||||
if (sb_floor_dist == -99999)
|
||||
{
|
||||
qprintf ("already on bottom floor");
|
||||
Sys_Printf ("already on bottom floor");
|
||||
return self;
|
||||
}
|
||||
qprintf ("down floor");
|
||||
Sys_Printf ("down floor");
|
||||
origin[2] += sb_floor_dist;
|
||||
[quakeed_i updateCamera];
|
||||
return self;
|
||||
|
@ -121,7 +128,7 @@ homeView
|
|||
|
||||
[quakeed_i updateAll];
|
||||
|
||||
qprintf ("homed view angle");
|
||||
Sys_Printf ("homed view angle");
|
||||
|
||||
return self;
|
||||
}
|
||||
|
@ -223,7 +230,7 @@ float mid_x, mid_y;
|
|||
float topscale = (240.0/3)/160;
|
||||
float bottomscale = (240.0*2/3)/160;
|
||||
|
||||
extern plane_t frustum[5];
|
||||
extern plane_t rfrustum[5];
|
||||
|
||||
void MakeCampt (vec3_t in, campt_t *pt)
|
||||
{
|
||||
|
@ -267,15 +274,16 @@ void CameraMoveto(vec3_t p)
|
|||
{
|
||||
campt_t *pt;
|
||||
|
||||
if (upath->numberOfPoints > 2048)
|
||||
if ([path elementCount] > 2048)
|
||||
lineflush ();
|
||||
|
||||
pt = &campts[cam_cur];
|
||||
cam_cur ^= 1;
|
||||
MakeCampt (p,pt);
|
||||
if (!pt->clipflags)
|
||||
{ // onscreen, so move there immediately
|
||||
UPmoveto (upath, pt->screen[0], pt->screen[1]);
|
||||
if (!pt->clipflags) {
|
||||
// onscreen, so move there immediately
|
||||
NSPoint point = {pt->screen[0], pt->screen[1]};
|
||||
[path moveToPoint: point];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -285,22 +293,23 @@ void ClipLine (vec3_t p1, vec3_t p2, int planenum)
|
|||
vec3_t new;
|
||||
plane_t *pl;
|
||||
float scale;
|
||||
NSPoint point;
|
||||
|
||||
if (planenum == 5)
|
||||
{ // draw it!
|
||||
if (planenum == 5) {
|
||||
// draw it!
|
||||
scale = mid_x/p1[2];
|
||||
new[0] = mid_x + p1[0]*scale;
|
||||
new[1] = mid_y + p1[1]*scale;
|
||||
UPmoveto (upath, new[0], new[1]);
|
||||
point.x = mid_x + p1[0]*scale;
|
||||
point.y = mid_y + p1[1]*scale;
|
||||
[path moveToPoint: point];
|
||||
|
||||
scale = mid_x/p2[2];
|
||||
new[0] = mid_x + p2[0]*scale;
|
||||
new[1] = mid_y + p2[1]*scale;
|
||||
UPlineto (upath, new[0], new[1]);
|
||||
point.x = mid_x + p2[0]*scale;
|
||||
point.y = mid_y + p2[1]*scale;
|
||||
[path lineToPoint: point];
|
||||
return;
|
||||
}
|
||||
|
||||
pl = &frustum[planenum];
|
||||
pl = &rfrustum[planenum];
|
||||
|
||||
d = DotProduct (p1, pl->normal) - pl->dist;
|
||||
d2 = DotProduct (p2, pl->normal) - pl->dist;
|
||||
|
@ -348,9 +357,11 @@ void CameraLineto(vec3_t p)
|
|||
|
||||
if (! bits )
|
||||
{
|
||||
NSPoint point1 = {p1->screen[0], p1->screen[1]};
|
||||
NSPoint point2 = {p2->screen[0], p2->screen[1]};
|
||||
c_on++;
|
||||
UPmoveto (upath, p1->screen[0], p1->screen[1]);
|
||||
UPlineto (upath, p2->screen[0], p2->screen[1]);
|
||||
[path moveToPoint: point1];
|
||||
[path lineToPoint: point2];
|
||||
return; // entirely on screen
|
||||
}
|
||||
|
||||
|
@ -463,10 +474,10 @@ drawSelf
|
|||
*/
|
||||
- drawSelf:(NSRect)rects :(int)rectCount
|
||||
{
|
||||
static float drawtime; // static to shut up compiler warning
|
||||
float drawtime = 0;
|
||||
|
||||
if (timedrawing)
|
||||
drawtime = I_FloatTime ();
|
||||
drawtime = Sys_DoubleTime ();
|
||||
|
||||
if (drawmode == dr_texture || drawmode == dr_flat)
|
||||
[self drawSolid];
|
||||
|
@ -476,7 +487,7 @@ drawSelf
|
|||
if (timedrawing)
|
||||
{
|
||||
//XXX NSPing ();
|
||||
drawtime = I_FloatTime() - drawtime;
|
||||
drawtime = Sys_DoubleTime () - drawtime;
|
||||
printf ("CameraView drawtime: %5.3f\n", drawtime);
|
||||
}
|
||||
|
||||
|
@ -564,7 +575,7 @@ modalMoveLoop
|
|||
int i;
|
||||
// vec3_t temp;
|
||||
|
||||
qprintf ("moving camera position");
|
||||
Sys_Printf ("moving camera position");
|
||||
|
||||
VectorCopy (origin, originbase);
|
||||
|
||||
|
@ -810,7 +821,7 @@ mouseDown
|
|||
{
|
||||
if (drawmode != dr_texture)
|
||||
{
|
||||
qprintf ("No texture setting except in texture mode!\n");
|
||||
Sys_Printf ("No texture setting except in texture mode!\n");
|
||||
NopSound ();
|
||||
return;
|
||||
}
|
||||
|
@ -826,7 +837,7 @@ mouseDown
|
|||
{
|
||||
if (drawmode != dr_texture)
|
||||
{
|
||||
qprintf ("No texture setting except in texture mode!\n");
|
||||
Sys_Printf ("No texture setting except in texture mode!\n");
|
||||
NopSound ();
|
||||
return;
|
||||
}
|
||||
|
@ -836,7 +847,7 @@ mouseDown
|
|||
}
|
||||
|
||||
|
||||
qprintf ("bad flags for click");
|
||||
Sys_Printf ("bad flags for click");
|
||||
NopSound ();
|
||||
|
||||
return;
|
||||
|
@ -863,13 +874,13 @@ rightMouseDown
|
|||
//
|
||||
if (flags == 0)
|
||||
{
|
||||
qprintf ("looking");
|
||||
Sys_Printf ("looking");
|
||||
[self viewDrag: &pt];
|
||||
qprintf ("");
|
||||
Sys_Printf ("%s", "");
|
||||
return;
|
||||
}
|
||||
|
||||
qprintf ("bad flags for click");
|
||||
Sys_Printf ("bad flags for click");
|
||||
NopSound ();
|
||||
|
||||
return;
|
||||
|
|
|
@ -1,6 +1,12 @@
|
|||
#ifndef Clipper_h
|
||||
#define Clipper_h
|
||||
|
||||
#include <AppKit/AppKit.h>
|
||||
|
||||
#include "QF/mathlib.h"
|
||||
|
||||
#include "SetBrush.h"
|
||||
|
||||
extern id clipper_i;
|
||||
|
||||
@interface Clipper : NSObject
|
||||
|
|
|
@ -1,9 +1,15 @@
|
|||
|
||||
#include "qedefs.h"
|
||||
|
||||
#include <AppKit/NSGraphics.h>
|
||||
#include <AppKit/DPSOperators.h>
|
||||
|
||||
#include "QF/sys.h"
|
||||
|
||||
#include "Clipper.h"
|
||||
#include "Map.h"
|
||||
#include "XYView.h"
|
||||
#include "CameraView.h"
|
||||
#include "QuakeEd.h"
|
||||
|
||||
id clipper_i;
|
||||
|
||||
@implementation Clipper
|
||||
|
@ -42,7 +48,7 @@ id clipper_i;
|
|||
}
|
||||
else
|
||||
{
|
||||
qprintf ("no clipplane");
|
||||
Sys_Printf ("no clipplane");
|
||||
NSBeep ();
|
||||
}
|
||||
|
||||
|
|
|
@ -1,27 +1,28 @@
|
|||
#ifndef Entity_h
|
||||
#define Entity_h
|
||||
|
||||
#define MAX_KEY 64
|
||||
#define MAX_VALUE 128
|
||||
typedef struct epair_s
|
||||
{
|
||||
#include <AppKit/AppKit.h>
|
||||
|
||||
#include "QF/mathlib.h"
|
||||
|
||||
typedef struct epair_s {
|
||||
struct epair_s *next;
|
||||
char key[MAX_KEY];
|
||||
char value[MAX_VALUE];
|
||||
char *key;
|
||||
char *value;
|
||||
} epair_t;
|
||||
|
||||
// an Entity is a list of brush objects, with additional key / value info
|
||||
|
||||
@interface Entity : NSObject <NSCopying, NSMutableCopying>
|
||||
@interface Entity : NSMutableArray
|
||||
{
|
||||
epair_t *epairs;
|
||||
BOOL modifiable;
|
||||
}
|
||||
|
||||
- initClass: (char *)classname;
|
||||
- initFromTokens;
|
||||
- initFromScript: (struct script_s *) script;
|
||||
|
||||
- free;
|
||||
- (void)dealloc;
|
||||
|
||||
- (BOOL)modifiable;
|
||||
- setModifiable: (BOOL)m;
|
||||
|
@ -32,7 +33,7 @@ typedef struct epair_s
|
|||
|
||||
- (char *)valueForQKey: (char *)k;
|
||||
- getVector: (vec3_t)v forKey: (char *)k;
|
||||
- setKey:(char *)k toValue:(char *)v;
|
||||
- setKey:(const char *)k toValue:(const char *)v;
|
||||
- (int)numPairs;
|
||||
- (epair_t *)epairs;
|
||||
- removeKeyPair: (char *)key;
|
||||
|
|
|
@ -1,5 +1,14 @@
|
|||
|
||||
#include "qedefs.h"
|
||||
#include "QF/dstring.h"
|
||||
#include "QF/script.h"
|
||||
#include "QF/sys.h"
|
||||
|
||||
#include "Entity.h"
|
||||
#include "EntityClass.h"
|
||||
#include "TexturePalette.h"
|
||||
#include "SetBrush.h"
|
||||
#include "Map.h"
|
||||
#include "CameraView.h"
|
||||
|
||||
@implementation Entity
|
||||
|
||||
|
@ -15,13 +24,10 @@ vec3_t bad_maxs = {8, 8, 8};
|
|||
|
||||
// get class
|
||||
new = [entity_classes_i classForName: [self valueForQKey: "classname"]];
|
||||
if (new)
|
||||
{
|
||||
if (new) {
|
||||
v = [new mins];
|
||||
v2 = [new maxs];
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
v = bad_mins;
|
||||
v2 = bad_maxs;
|
||||
}
|
||||
|
@ -43,31 +49,6 @@ vec3_t bad_maxs = {8, 8, 8};
|
|||
return self;
|
||||
}
|
||||
|
||||
- copyWithZone:(NSZone *)zone
|
||||
{
|
||||
id new, nb;
|
||||
epair_t *e;
|
||||
int i;
|
||||
|
||||
new = [[Entity alloc] init];
|
||||
[new setModifiable: modifiable];
|
||||
|
||||
for (e=epairs ; e ; e=e->next)
|
||||
{ // don't copy target and targetname fields
|
||||
if (strncmp(e->key,"target",6))
|
||||
[new setKey: e->key toValue: e->value];
|
||||
}
|
||||
|
||||
for (i=0 ; i<numElements ; i++)
|
||||
{
|
||||
nb = [[self objectAt: i] copy];
|
||||
[nb setParent: new];
|
||||
[new addObject: nb];
|
||||
}
|
||||
|
||||
return new;
|
||||
}
|
||||
|
||||
- initClass: (char *)classname
|
||||
{
|
||||
id new;
|
||||
|
@ -108,16 +89,18 @@ vec3_t bad_maxs = {8, 8, 8};
|
|||
}
|
||||
|
||||
|
||||
- free
|
||||
- (void)dealloc
|
||||
{
|
||||
epair_t *e, *n;
|
||||
|
||||
for (e=epairs ; e ; e=n)
|
||||
{
|
||||
n = e->next;
|
||||
free (e->key);
|
||||
free (e->value);
|
||||
free (e);
|
||||
}
|
||||
return [super free];
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (BOOL)modifiable
|
||||
|
@ -131,19 +114,17 @@ vec3_t bad_maxs = {8, 8, 8};
|
|||
return self;
|
||||
}
|
||||
|
||||
- removeObject: o
|
||||
- (void)removeObject: o
|
||||
{
|
||||
o = [super removeObject: o];
|
||||
if (numElements)
|
||||
return o;
|
||||
[super removeObject: o];
|
||||
if ([self count])
|
||||
return;
|
||||
// the entity is empty, so remove the entire thing
|
||||
if ( self == [map_i objectAt: 0])
|
||||
return o; // never remove the world
|
||||
if ( self == [map_i objectAtIndex: 0])
|
||||
return; // never remove the world
|
||||
|
||||
[map_i removeObject: self];
|
||||
[self free];
|
||||
|
||||
return o;
|
||||
[self release];
|
||||
}
|
||||
|
||||
|
||||
|
@ -184,33 +165,27 @@ vec3_t bad_maxs = {8, 8, 8};
|
|||
return self;
|
||||
}
|
||||
|
||||
- setKey:(char *)k toValue:(char *)v
|
||||
- setKey:(const char *)k toValue:(const char *)v
|
||||
{
|
||||
epair_t *e;
|
||||
|
||||
if (strlen(k) > MAX_KEY)
|
||||
Error ("setKey: %s > MAX_KEY", k);
|
||||
if (strlen(v) > MAX_VALUE)
|
||||
Error ("setKey: %s > MAX_VALUE", v);
|
||||
|
||||
while (*k && *k <= ' ')
|
||||
k++;
|
||||
if (!*k)
|
||||
return self; // don't set NULL values
|
||||
|
||||
for (e=epairs ; e ; e=e->next)
|
||||
if (!strcmp(k,e->key))
|
||||
{
|
||||
memset (e->value, 0, sizeof(e->value));
|
||||
strcpy (e->value, v);
|
||||
for (e=epairs ; e ; e=e->next) {
|
||||
if (!strcmp (k, e->key)) {
|
||||
free (e->value);
|
||||
e->value = strdup (v);
|
||||
return self;
|
||||
}
|
||||
}
|
||||
|
||||
e = malloc (sizeof(epair_t));
|
||||
memset (e, 0, sizeof(epair_t));
|
||||
|
||||
strcpy (e->key, k);
|
||||
strcpy (e->value, v);
|
||||
e->key = strdup (k);
|
||||
e->value = strdup (v);
|
||||
e->next = epairs;
|
||||
epairs = e;
|
||||
|
||||
|
@ -287,7 +262,7 @@ If the entity does not have a "targetname" key, a unique one is generated
|
|||
maxt = 0;
|
||||
for (i=1 ; i<count ; i++)
|
||||
{
|
||||
ent = [map_i objectAt: i];
|
||||
ent = [map_i objectAtIndex: i];
|
||||
t = [ent valueForQKey: "targetname"];
|
||||
if (!t || t[0] != 't')
|
||||
continue;
|
||||
|
@ -313,9 +288,9 @@ FILE METHODS
|
|||
|
||||
int nument;
|
||||
|
||||
- initFromTokens
|
||||
- initFromScript: (script_t *) script
|
||||
{
|
||||
char key[MAXTOKEN];
|
||||
char *key;
|
||||
id eclass, brush;
|
||||
char *spawn;
|
||||
vec3_t emins, emaxs;
|
||||
|
@ -327,31 +302,30 @@ int nument;
|
|||
|
||||
[self init];
|
||||
|
||||
if (!GetToken (true))
|
||||
if (!Script_GetToken (script, true))
|
||||
{
|
||||
[self free];
|
||||
[self dealloc];
|
||||
return nil;
|
||||
}
|
||||
|
||||
if (strcmp (token, "{") )
|
||||
Error ("initFromFileP: { not found");
|
||||
if (strcmp (Script_Token (script), "{") )
|
||||
Sys_Error ("initFromFileP: { not found");
|
||||
|
||||
do
|
||||
{
|
||||
if (!GetToken (true))
|
||||
do {
|
||||
if (!Script_GetToken (script, true))
|
||||
break;
|
||||
if (!strcmp (token, "}") )
|
||||
if (!strcmp (Script_Token (script), "}") )
|
||||
break;
|
||||
if (!strcmp (token, "{") )
|
||||
{ // read a brush
|
||||
brush = [[SetBrush alloc] initFromTokens: self];
|
||||
if (!strcmp (Script_Token (script), "{") ) {
|
||||
// read a brush
|
||||
brush = [[SetBrush alloc] initFromScript: script owner:self];
|
||||
[self addObject: brush];
|
||||
}
|
||||
else
|
||||
{ // read a key / value pair
|
||||
strcpy (key, token);
|
||||
GetToken (false);
|
||||
[self setKey: key toValue:token];
|
||||
} else {
|
||||
// read a key / value pair
|
||||
key = strdup (Script_Token (script));
|
||||
Script_GetToken (script, false);
|
||||
[self setKey: key toValue:Script_Token (script)];
|
||||
free (key);
|
||||
}
|
||||
} while (1);
|
||||
|
||||
|
@ -368,7 +342,7 @@ int nument;
|
|||
if ([self count] && esize != esize_model)
|
||||
{
|
||||
printf ("WARNING:Entity with brushes and wrong model type\n");
|
||||
[self empty];
|
||||
[self removeAllObjects];
|
||||
}
|
||||
|
||||
if (![self count] && esize == esize_model)
|
||||
|
@ -397,7 +371,7 @@ int nument;
|
|||
c = [self count];
|
||||
for (i=0 ; i<c ; i++)
|
||||
{
|
||||
brush = [self objectAt: i];
|
||||
brush = [self objectAtIndex: i];
|
||||
[brush setEntityColor: color];
|
||||
}
|
||||
|
||||
|
@ -412,7 +386,7 @@ int nument;
|
|||
id new;
|
||||
char value[80];
|
||||
vec3_t mins, maxs, org;
|
||||
float *v;
|
||||
const vec_t *v;
|
||||
BOOL temporg;
|
||||
char oldang[80];
|
||||
|
||||
|
@ -426,8 +400,8 @@ int nument;
|
|||
sprintf (value, "%i", (int)([cameraview_i yawAngle]*180/M_PI));
|
||||
[self setKey: "angle" toValue: value];
|
||||
}
|
||||
else if ( self != [map_i objectAt: 0]
|
||||
&& [[self objectAt: 0] regioned] )
|
||||
else if ( self != [map_i objectAtIndex: 0]
|
||||
&& [[self objectAtIndex: 0] regioned] )
|
||||
return self; // skip the entire entity definition
|
||||
}
|
||||
|
||||
|
@ -436,7 +410,7 @@ int nument;
|
|||
// set an origin epair
|
||||
if (!modifiable)
|
||||
{
|
||||
[[self objectAt: 0] getMins: mins maxs: maxs];
|
||||
[[self objectAtIndex: 0] getMins: mins maxs: maxs];
|
||||
if (temporg)
|
||||
{
|
||||
[cameraview_i getOrigin: mins];
|
||||
|
@ -462,8 +436,8 @@ int nument;
|
|||
// fixed size entities don't save out brushes
|
||||
if ( modifiable )
|
||||
{
|
||||
for (i=0 ; i<numElements ; i++)
|
||||
[[self objectAt: i] writeToFILE: f region: reg];
|
||||
for (i = 0 ; i < [self count]; i++)
|
||||
[[self objectAtIndex: i] writeToFILE: f region: reg];
|
||||
}
|
||||
|
||||
fprintf (f,"}\n");
|
||||
|
|
|
@ -2,7 +2,8 @@
|
|||
#define EntityClass_h
|
||||
|
||||
#include <AppKit/AppKit.h>
|
||||
#include "mathlib.h"
|
||||
|
||||
#include "QF/mathlib.h"
|
||||
|
||||
typedef enum {esize_model, esize_fixed} esize_t;
|
||||
|
||||
|
@ -15,10 +16,10 @@ typedef enum {esize_model, esize_fixed} esize_t;
|
|||
vec3_t mins, maxs;
|
||||
vec3_t color;
|
||||
char *comments;
|
||||
char flagnames[MAX_FLAGS][32];
|
||||
char *flagnames[MAX_FLAGS];
|
||||
}
|
||||
|
||||
- initFromText: (char *)text;
|
||||
- initFromText: (const char *)text source: (const char *)filename;
|
||||
- (char *)classname;
|
||||
- (esize_t)esize;
|
||||
- (float *)mins; // only for esize_fixed
|
||||
|
|
|
@ -1,8 +1,36 @@
|
|||
#include <dirent.h>
|
||||
|
||||
#include "qedefs.h"
|
||||
#include "QF/dstring.h"
|
||||
#include "QF/quakeio.h"
|
||||
#include "QF/script.h"
|
||||
#include "QF/sys.h"
|
||||
#include "QF/va.h"
|
||||
|
||||
#include "EntityClass.h"
|
||||
|
||||
@implementation EntityClass
|
||||
|
||||
static int
|
||||
parse_vector (script_t *script, vec3_t vec)
|
||||
{
|
||||
int r;
|
||||
|
||||
if (!Script_GetToken (script, 0))
|
||||
return 0;
|
||||
if (strcmp (script->token->str, "("))
|
||||
return 0;
|
||||
|
||||
r = sscanf (script->p, "%f %f %f)", &vec[0], &vec[1], &vec[2]);
|
||||
if (r != 3)
|
||||
return 0;
|
||||
|
||||
while (strcmp (script->token->str, ")")) {
|
||||
if (!Script_GetToken (script, 0))
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
// the classname, color triple, and bounding box are parsed out of comments
|
||||
// A ? size means take the exact brush size.
|
||||
//
|
||||
|
@ -13,89 +41,64 @@
|
|||
//
|
||||
// /*QUAKED func_door (0 .5 .8) ? START_OPEN STONE_SOUND DOOR_DONT_LINK GOLD_KEY SILVER_KEY
|
||||
|
||||
char *debugname;
|
||||
- initFromText: (char *)text
|
||||
- initFromText: (const char *)text source: (const char *)filename
|
||||
{
|
||||
char *t;
|
||||
int len;
|
||||
int r, i;
|
||||
char parms[256], *p;
|
||||
const char *t;
|
||||
size_t len;
|
||||
int i;
|
||||
script_t *script;
|
||||
|
||||
[super init];
|
||||
|
||||
text += strlen("/*QUAKED ");
|
||||
|
||||
// grab the name
|
||||
text = COM_Parse (text);
|
||||
name = malloc (strlen(com_token)+1);
|
||||
strcpy (name, com_token);
|
||||
debugname = name;
|
||||
script = Script_New ();
|
||||
Script_Start (script, filename, text);
|
||||
|
||||
// grab the color
|
||||
r = sscanf (text," (%f %f %f)", &color[0], &color[1], &color[2]);
|
||||
if (r != 3)
|
||||
return NULL;
|
||||
// grab the name
|
||||
if (!Script_GetToken (script, 0))
|
||||
return 0;
|
||||
if (!strcmp (script->token->str, "*/"))
|
||||
return 0;
|
||||
name = strdup (script->token->str);
|
||||
|
||||
while (*text != ')')
|
||||
{
|
||||
if (!*text)
|
||||
return NULL;
|
||||
text++;
|
||||
}
|
||||
text++;
|
||||
// grab the color
|
||||
if (!parse_vector (script, color))
|
||||
return 0;
|
||||
|
||||
// get the size
|
||||
text = COM_Parse (text);
|
||||
if (com_token[0] == '(')
|
||||
{ // parse the size as two vectors
|
||||
// get the size
|
||||
if (!strcmp (script->token->str, "(")) {
|
||||
Script_UngetToken (script);
|
||||
if (!parse_vector (script, mins))
|
||||
return 0;
|
||||
if (!parse_vector (script, maxs))
|
||||
return 0;
|
||||
esize = esize_fixed;
|
||||
r = sscanf (text,"%f %f %f) (%f %f %f)", &mins[0], &mins[1], &mins[2], &maxs[0], &maxs[1], &maxs[2]);
|
||||
if (r != 6)
|
||||
return NULL;
|
||||
|
||||
for (i=0 ; i<2 ; i++)
|
||||
{
|
||||
while (*text != ')')
|
||||
{
|
||||
if (!*text)
|
||||
return NULL;
|
||||
text++;
|
||||
}
|
||||
text++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{ // use the brushes
|
||||
} else if (!strcmp (script->token->str, "?")) {
|
||||
// use the brushes
|
||||
esize = esize_model;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// get the flags
|
||||
|
||||
|
||||
// copy to the first /n
|
||||
p = parms;
|
||||
while (*text && *text != '\n')
|
||||
*p++ = *text++;
|
||||
*p = 0;
|
||||
text++;
|
||||
|
||||
// any remaining words are parm flags
|
||||
p = parms;
|
||||
for (i=0 ; i<8 ; i++)
|
||||
{
|
||||
p = COM_Parse (p);
|
||||
if (!p)
|
||||
// get the flags
|
||||
// any remaining words on the line are parm flags
|
||||
for (i = 0; i < MAX_FLAGS; i++) {
|
||||
if (!Script_TokenAvailable (script, 0))
|
||||
break;
|
||||
strcpy (flagnames[i], com_token);
|
||||
Script_GetToken (script, 0);
|
||||
flagnames[i] = strdup (script->token->str);
|
||||
}
|
||||
while (Script_TokenAvailable (script, 0))
|
||||
Script_GetToken (script, 0);
|
||||
|
||||
// find the length until close comment
|
||||
for (t=text ; t[0] && !(t[0]=='*' && t[1]=='/') ; t++)
|
||||
for (t = script->p; t[0] && !(t[0] == '*' && t[1] == '/'); t++)
|
||||
;
|
||||
|
||||
// copy the comment block out
|
||||
len = t-text;
|
||||
comments = malloc (len+1);
|
||||
len = t - text;
|
||||
comments = malloc (len + 1);
|
||||
memcpy (comments, text, len);
|
||||
comments[len] = 0;
|
||||
|
||||
|
@ -136,7 +139,7 @@ char *debugname;
|
|||
- (char *)flagName: (unsigned)flagnum
|
||||
{
|
||||
if (flagnum >= MAX_FLAGS)
|
||||
Error ("EntityClass flagName: bad number");
|
||||
Sys_Error ("EntityClass flagName: bad number");
|
||||
return flagnames[flagnum];
|
||||
}
|
||||
|
||||
|
@ -176,24 +179,34 @@ scanFile
|
|||
*/
|
||||
- (void)scanFile: (char *)filename
|
||||
{
|
||||
int size;
|
||||
int size, line;
|
||||
char *data;
|
||||
id cl;
|
||||
int i;
|
||||
char path[1024];
|
||||
QFile *file;
|
||||
|
||||
sprintf (path,"%s/%s", source_path, filename);
|
||||
|
||||
size = LoadFile (path, (void *)&data);
|
||||
file = Qopen (path, "rt");
|
||||
if (!file)
|
||||
return;
|
||||
size = Qfilesize (file);
|
||||
data = malloc (size + 1);
|
||||
size = Qread (file, data, size);
|
||||
data[size] = 0;
|
||||
Qclose (file);
|
||||
|
||||
for (i=0 ; i<size ; i++)
|
||||
if (!strncmp(data+i, "/*QUAKED",8))
|
||||
{
|
||||
cl = [[EntityClass alloc] initFromText: data+i];
|
||||
line = 1;
|
||||
for (i=0 ; i<size ; i++) {
|
||||
if (!strncmp(data+i, "/*QUAKED",8)) {
|
||||
cl = [[EntityClass alloc] initFromText: (data + i)
|
||||
source: va ("%s:%d", filename, line)];
|
||||
if (cl)
|
||||
[self insertEC: cl];
|
||||
else
|
||||
printf ("Error parsing: %s in %s\n",debugname, filename);
|
||||
} else if (data[i] == '\n') {
|
||||
line++;
|
||||
}
|
||||
}
|
||||
|
||||
free (data);
|
||||
|
@ -208,7 +221,7 @@ scanDirectory
|
|||
- (void)scanDirectory
|
||||
{
|
||||
int count, i;
|
||||
struct direct **namelist, *ent;
|
||||
struct dirent **namelist, *ent;
|
||||
|
||||
[self removeAllObjects];
|
||||
|
||||
|
@ -239,8 +252,9 @@ id entity_classes_i;
|
|||
|
||||
entity_classes_i = self;
|
||||
|
||||
nullclass = [[EntityClass alloc] initFromText:
|
||||
"/*QUAKED UNKNOWN_CLASS (0 0.5 0) ?"];
|
||||
nullclass = [[EntityClass alloc]
|
||||
initFromText: "/*QUAKED UNKNOWN_CLASS (0 0.5 0) ?*/"
|
||||
source: va ("%s:%d", __FILE__, __LINE__ - 1)];
|
||||
|
||||
return self;
|
||||
}
|
||||
|
|
|
@ -12,7 +12,7 @@ MapEdit_RESOURCE_FILES= \
|
|||
MapEdit.gorm
|
||||
|
||||
MapEdit_OBJC_FILES= \
|
||||
CameraView.m Clipper.m EntityClass.m KeypairView.m PopScrollView.m ZView.m misc.m render.m
|
||||
CameraView.m Clipper.m EntityClass.m KeypairView.m PopScrollView.m ZView.m render.m
|
||||
|
||||
MapEdit_HEADERS= \
|
||||
EntityClass.h
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
#ifndef KeypairView_h
|
||||
#define KeypairView_h
|
||||
|
||||
#include <AppKit/AppKit.h>
|
||||
|
||||
extern id keypairview_i;
|
||||
|
||||
@interface KeypairView:NSView
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
|
||||
#include "qedefs.h"
|
||||
#include "KeypairView.h"
|
||||
#include "Map.h"
|
||||
#include "Entity.h"
|
||||
#include "Things.h"
|
||||
|
||||
id keypairview_i;
|
||||
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
#ifndef Map_h
|
||||
#define Map_h
|
||||
|
||||
#include <AppKit/AppKit.h>
|
||||
|
||||
#include "QF/mathlib.h"
|
||||
|
||||
// Map is a list of Entity objects
|
||||
|
||||
extern id map_i;
|
||||
|
|
|
@ -1,9 +1,22 @@
|
|||
|
||||
#include "qedefs.h"
|
||||
|
||||
#include <sys/time.h>
|
||||
#include <time.h>
|
||||
|
||||
#include "QF/quakeio.h"
|
||||
#include "QF/script.h"
|
||||
#include "QF/sys.h"
|
||||
|
||||
#include "Map.h"
|
||||
#include "Entity.h"
|
||||
#include "TexturePalette.h"
|
||||
#include "SetBrush.h"
|
||||
#include "XYView.h"
|
||||
#include "CameraView.h"
|
||||
#include "QuakeEd.h"
|
||||
#include "Things.h"
|
||||
#include "InspectorControl.h"
|
||||
#include "Project.h"
|
||||
|
||||
|
||||
id map_i;
|
||||
|
||||
|
@ -46,7 +59,7 @@ FILE METHODS
|
|||
else
|
||||
{
|
||||
[w removeObjectAtIndex: 0];
|
||||
[o free];
|
||||
[o release];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -55,8 +68,8 @@ FILE METHODS
|
|||
{
|
||||
o = [self objectAtIndex: 0];
|
||||
[self removeObjectAtIndex: 0];
|
||||
[o freeObjects];
|
||||
[o free];
|
||||
[o removeAllObjects];
|
||||
[o release];
|
||||
}
|
||||
|
||||
return self;
|
||||
|
@ -169,6 +182,7 @@ FILE METHODS
|
|||
|
||||
- writeStats
|
||||
{
|
||||
/*XXX
|
||||
FILE *f;
|
||||
extern int c_updateall;
|
||||
struct timeval tp;
|
||||
|
@ -180,6 +194,7 @@ FILE METHODS
|
|||
fprintf (f,"%i %i\n", (int)tp.tv_sec, c_updateall);
|
||||
c_updateall = 0;
|
||||
fclose (f);
|
||||
*/
|
||||
return self;
|
||||
}
|
||||
|
||||
|
@ -223,17 +238,26 @@ readMapFile
|
|||
int i, c;
|
||||
vec3_t org;
|
||||
float angle;
|
||||
QFile *file;
|
||||
script_t *script;
|
||||
size_t size;
|
||||
|
||||
[self saveSelected];
|
||||
|
||||
qprintf ("loading %s\n", fname);
|
||||
Sys_Printf ("loading %s\n", fname);
|
||||
|
||||
LoadFile (fname, (void **)&dat);
|
||||
StartTokenParsing (dat);
|
||||
file = Qopen (fname, "rt");
|
||||
size = Qfilesize (file);
|
||||
dat = malloc (size + 1);
|
||||
size = Qread (file, dat, size);
|
||||
Qclose (file);
|
||||
dat[size] = 0;
|
||||
|
||||
do
|
||||
{
|
||||
new = [[Entity alloc] initFromTokens];
|
||||
script = Script_New ();
|
||||
Script_Start (script, fname, dat);
|
||||
|
||||
do {
|
||||
new = [[Entity alloc] initFromScript: script];
|
||||
if (!new)
|
||||
break;
|
||||
[self addObject: new];
|
||||
|
@ -288,11 +312,11 @@ writeMapFile
|
|||
FILE *f;
|
||||
int i;
|
||||
|
||||
qprintf ("writeMapFile: %s", fname);
|
||||
Sys_Printf ("writeMapFile: %s", fname);
|
||||
|
||||
f = fopen (fname,"w");
|
||||
if (!f)
|
||||
Error ("couldn't write %s", fname);
|
||||
Sys_Error ("couldn't write %s", fname);
|
||||
|
||||
for (i=0 ; i<[self count] ; i++)
|
||||
[[self objectAtIndex: i] writeToFILE: f region: reg];
|
||||
|
@ -353,7 +377,7 @@ make a target connection from the original entity.
|
|||
oldent = [self currentEntity];
|
||||
if (oldent == [self objectAtIndex: 0])
|
||||
{
|
||||
qprintf ("Must have a non-world entity selected to connect");
|
||||
Sys_Printf ("Must have a non-world entity selected to connect");
|
||||
return self;
|
||||
}
|
||||
|
||||
|
@ -361,13 +385,13 @@ make a target connection from the original entity.
|
|||
ent = [self currentEntity];
|
||||
if (ent == oldent)
|
||||
{
|
||||
qprintf ("Must click on a different entity to connect");
|
||||
Sys_Printf ("Must click on a different entity to connect");
|
||||
return self;
|
||||
}
|
||||
|
||||
if (ent == [self objectAtIndex: 0])
|
||||
{
|
||||
qprintf ("Must click on a non-world entity to connect");
|
||||
Sys_Printf ("Must click on a non-world entity to connect");
|
||||
return self;
|
||||
}
|
||||
|
||||
|
@ -422,13 +446,13 @@ to intervening world brushes
|
|||
|
||||
if (besttime == 99999)
|
||||
{
|
||||
qprintf ("trace missed");
|
||||
Sys_Printf ("trace missed");
|
||||
return self;
|
||||
}
|
||||
|
||||
if ( [bestbrush regioned] )
|
||||
{
|
||||
qprintf ("WANRING: clicked on regioned brush");
|
||||
Sys_Printf ("WANRING: clicked on regioned brush");
|
||||
return self;
|
||||
}
|
||||
|
||||
|
@ -448,12 +472,12 @@ to intervening world brushes
|
|||
}
|
||||
|
||||
[bestbrush setSelected: YES];
|
||||
qprintf ("selected entity %i brush %i face %i", [self indexOfObject:bestent], [bestent indexOfObject: bestbrush], bestface);
|
||||
Sys_Printf ("selected entity %i brush %i face %i", (int) [self indexOfObject:bestent], (int) [bestent indexOfObject: bestbrush], bestface);
|
||||
}
|
||||
else
|
||||
{
|
||||
[bestbrush setSelected: NO];
|
||||
qprintf ("deselected entity %i brush %i face %i", [self indexOfObject:bestent], [bestent indexOfObject: bestbrush], bestface);
|
||||
Sys_Printf ("deselected entity %i brush %i face %i", (int) [self indexOfObject:bestent], (int) [bestent indexOfObject: bestbrush], bestface);
|
||||
}
|
||||
|
||||
[quakeed_i enableFlushWindow];
|
||||
|
@ -548,14 +572,14 @@ getTextureRay
|
|||
|
||||
if ( ![bestent modifiable])
|
||||
{
|
||||
qprintf ("can't modify spawned entities");
|
||||
Sys_Printf ("can't modify spawned entities");
|
||||
return self;
|
||||
}
|
||||
|
||||
td = [bestbrush texturedefForFace: bestface];
|
||||
[texturepalette_i setTextureDef: td];
|
||||
|
||||
qprintf ("grabbed texturedef and sizes");
|
||||
Sys_Printf ("grabbed texturedef and sizes");
|
||||
|
||||
[bestbrush getMins: mins maxs: maxs];
|
||||
|
||||
|
@ -604,19 +628,19 @@ setTextureRay
|
|||
|
||||
if (besttime == 99999)
|
||||
{
|
||||
qprintf ("trace missed");
|
||||
Sys_Printf ("trace missed");
|
||||
return self;
|
||||
}
|
||||
|
||||
if ( ![bestent modifiable])
|
||||
{
|
||||
qprintf ("can't modify spawned entities");
|
||||
Sys_Printf ("can't modify spawned entities");
|
||||
return self;
|
||||
}
|
||||
|
||||
if ( [bestbrush regioned] )
|
||||
{
|
||||
qprintf ("WANRING: clicked on regioned brush");
|
||||
Sys_Printf ("WANRING: clicked on regioned brush");
|
||||
return self;
|
||||
}
|
||||
|
||||
|
@ -626,12 +650,12 @@ setTextureRay
|
|||
if (allsides)
|
||||
{
|
||||
[bestbrush setTexturedef: &td];
|
||||
qprintf ("textured entity %i brush %i", [self indexOfObject:bestent], [bestent indexOfObject: bestbrush]);
|
||||
Sys_Printf ("textured entity %i brush %i", (int) [self indexOfObject:bestent], (int) [bestent indexOfObject: bestbrush]);
|
||||
}
|
||||
else
|
||||
{
|
||||
[bestbrush setTexturedef: &td forFace: bestface];
|
||||
qprintf ("deselected entity %i brush %i face %i", [self indexOfObject:bestent], [bestent indexOfObject: bestbrush], bestface);
|
||||
Sys_Printf ("deselected entity %i brush %i face %i", (int) [self indexOfObject:bestent], (int) [bestent indexOfObject: bestbrush], bestface);
|
||||
}
|
||||
[quakeed_i enableFlushWindow];
|
||||
|
||||
|
@ -669,12 +693,12 @@ OPERATIONS ON SELECTIONS
|
|||
if ([brush regioned])
|
||||
continue;
|
||||
total++;
|
||||
[brush perform:sel];
|
||||
[brush performSelector:sel];
|
||||
}
|
||||
}
|
||||
|
||||
// if (!total)
|
||||
// qprintf ("nothing selected");
|
||||
// Sys_Printf ("nothing selected");
|
||||
|
||||
return self;
|
||||
}
|
||||
|
@ -696,7 +720,7 @@ OPERATIONS ON SELECTIONS
|
|||
continue;
|
||||
if ([brush regioned])
|
||||
continue;
|
||||
[brush perform:sel];
|
||||
[brush performSelector:sel];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -718,7 +742,7 @@ OPERATIONS ON SELECTIONS
|
|||
brush = [ent objectAtIndex: j];
|
||||
if ([brush regioned])
|
||||
continue;
|
||||
[brush perform:sel];
|
||||
[brush performSelector:sel];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -738,7 +762,7 @@ OPERATIONS ON SELECTIONS
|
|||
for (j = c2-1 ; j >=0 ; j--)
|
||||
{
|
||||
brush = [ent objectAtIndex: j];
|
||||
[brush perform:sel];
|
||||
[brush performSelector:sel];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -757,7 +781,7 @@ void sel_identity (void)
|
|||
{
|
||||
if ( ![currentEntity modifiable])
|
||||
{
|
||||
qprintf ("can't modify spawned entities");
|
||||
Sys_Printf ("can't modify spawned entities");
|
||||
return self;
|
||||
}
|
||||
|
||||
|
@ -912,14 +936,14 @@ UI operations
|
|||
o = [self selectedBrush];
|
||||
if (!o)
|
||||
{
|
||||
qprintf ("nothing selected");
|
||||
Sys_Printf ("nothing selected");
|
||||
return self;
|
||||
}
|
||||
o = [o parent];
|
||||
c = [o count];
|
||||
for (i=0 ; i<c ; i++)
|
||||
[[o objectAtIndex: i] setSelected: YES];
|
||||
qprintf ("%i brushes selected", c);
|
||||
Sys_Printf ("%i brushes selected", c);
|
||||
|
||||
[quakeed_i updateAll];
|
||||
|
||||
|
@ -930,14 +954,14 @@ UI operations
|
|||
{
|
||||
if (currentEntity != [self objectAtIndex: 0])
|
||||
{
|
||||
qprintf ("ERROR: can't makeEntity inside an entity");
|
||||
Sys_Printf ("ERROR: can't makeEntity inside an entity");
|
||||
NSBeep ();
|
||||
return self;
|
||||
}
|
||||
|
||||
if ( [self numSelected] == 0)
|
||||
{
|
||||
qprintf ("ERROR: must have a seed brush to make an entity");
|
||||
Sys_Printf ("ERROR: must have a seed brush to make an entity");
|
||||
NSBeep ();
|
||||
return self;
|
||||
}
|
||||
|
@ -967,7 +991,7 @@ UI operations
|
|||
|
||||
if ([self numSelected] != 1)
|
||||
{
|
||||
qprintf ("must have a single brush selected");
|
||||
Sys_Printf ("must have a single brush selected");
|
||||
return self;
|
||||
}
|
||||
|
||||
|
@ -977,7 +1001,7 @@ UI operations
|
|||
|
||||
[self makeUnselectedPerform: selector];
|
||||
|
||||
qprintf ("identified contents");
|
||||
Sys_Printf ("identified contents");
|
||||
[quakeed_i updateAll];
|
||||
|
||||
return self;
|
||||
|
@ -1002,7 +1026,7 @@ UI operations
|
|||
|
||||
if ([self numSelected] != 1)
|
||||
{
|
||||
qprintf ("must have a single brush selected");
|
||||
Sys_Printf ("must have a single brush selected");
|
||||
return self;
|
||||
}
|
||||
|
||||
|
@ -1030,7 +1054,7 @@ UI operations
|
|||
|
||||
if ([self numSelected] != 1)
|
||||
{
|
||||
qprintf ("must have a single brush selected");
|
||||
Sys_Printf ("must have a single brush selected");
|
||||
return self;
|
||||
}
|
||||
|
||||
|
@ -1061,7 +1085,7 @@ subtractSelection
|
|||
id o, o2;
|
||||
id sellist, sourcelist;
|
||||
|
||||
qprintf ("performing brush subtraction...");
|
||||
Sys_Printf ("performing brush subtraction...");
|
||||
|
||||
sourcelist = [[NSMutableArray alloc] init];
|
||||
sellist = [[NSMutableArray alloc] init];
|
||||
|
@ -1090,32 +1114,32 @@ subtractSelection
|
|||
{
|
||||
o2 = [sourcelist objectAtIndex: j];
|
||||
[o2 carve];
|
||||
[carve_in freeObjects];
|
||||
[carve_in removeAllObjects];
|
||||
}
|
||||
|
||||
[sourcelist free]; // the individual have been moved/freed
|
||||
[sourcelist release]; // the individual have been moved/freed
|
||||
sourcelist = carve_out;
|
||||
carve_out = [[NSMutableArray alloc] init];
|
||||
}
|
||||
|
||||
// add the selection back to the remnants
|
||||
[currentEntity removeAllObjects];
|
||||
[currentEntity appendList: sourcelist];
|
||||
[currentEntity appendList: sellist];
|
||||
[currentEntity addObjectsFromArray: sourcelist];
|
||||
[currentEntity addObjectsFromArray: sellist];
|
||||
|
||||
[sourcelist free];
|
||||
[sellist free];
|
||||
[carve_in free];
|
||||
[carve_out free];
|
||||
[sourcelist release];
|
||||
[sellist release];
|
||||
[carve_in release];
|
||||
[carve_out release];
|
||||
|
||||
if (![currentEntity count])
|
||||
{
|
||||
o = currentEntity;
|
||||
[self removeObject: o];
|
||||
[o free];
|
||||
[o release];
|
||||
}
|
||||
|
||||
qprintf ("subtracted selection");
|
||||
Sys_Printf ("subtracted selection");
|
||||
[quakeed_i updateAll];
|
||||
|
||||
return self;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
|
||||
#include "qedefs.h"
|
||||
#include "PopScrollView.h"
|
||||
|
||||
@implementation PopScrollView
|
||||
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
#ifndef QuakeEd_h
|
||||
#define QuakeEd_h
|
||||
|
||||
#include <AppKit/AppKit.h>
|
||||
|
||||
extern id quakeed_i;
|
||||
|
||||
extern BOOL filter_light, filter_path, filter_entities;
|
||||
extern BOOL filter_clip_brushes, filter_water_brushes, filter_world;
|
||||
|
||||
extern UserPath *upath;
|
||||
|
||||
extern id g_cmd_out_i;
|
||||
|
||||
double I_FloatTime (void);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
|
||||
#include "qedefs.h"
|
||||
#include "QuakeEd.h"
|
||||
|
||||
id quakeed_i;
|
||||
id entclasses_i;
|
||||
|
@ -29,8 +29,6 @@ void NopSound (void)
|
|||
NSBeep ();
|
||||
}
|
||||
|
||||
UserPath *upath;
|
||||
|
||||
|
||||
void My_Malloc_Error (int code)
|
||||
{
|
||||
|
|
|
@ -1,9 +1,13 @@
|
|||
#ifndef SetBrush_h
|
||||
#define SetBrush_h
|
||||
|
||||
#define MAX_FACES 16
|
||||
#include <AppKit/AppKit.h>
|
||||
|
||||
typedef float vec5_t[5];
|
||||
#include "QF/mathlib.h"
|
||||
|
||||
#include "TexturePalette.h"
|
||||
|
||||
#define MAX_FACES 16
|
||||
|
||||
typedef struct
|
||||
{
|
||||
|
@ -61,7 +65,7 @@ winding_t *NewWinding (int points);
|
|||
}
|
||||
|
||||
- initOwner: own mins:(float *)mins maxs:(float *)maxs texture:(texturedef_t *)tex;
|
||||
- initFromTokens: own;
|
||||
- initFromScript: (struct script_s *) script owner: own;
|
||||
- setMins:(float *)mins maxs:(float *)maxs;
|
||||
|
||||
- parent;
|
||||
|
|
|
@ -1,4 +1,11 @@
|
|||
#include "qedefs.h"
|
||||
#include "QF/script.h"
|
||||
#include "QF/sys.h"
|
||||
|
||||
#include "SetBrush.h"
|
||||
#include "Entity.h"
|
||||
#include "EntityClass.h"
|
||||
#include "Map.h"
|
||||
#include "Preferences.h"
|
||||
|
||||
@implementation SetBrush
|
||||
|
||||
|
@ -74,10 +81,10 @@ void CheckFace (face_t *f)
|
|||
|
||||
w = f->w;
|
||||
if (!w)
|
||||
Error ("CheckFace: no winding");
|
||||
Sys_Error ("CheckFace: no winding");
|
||||
|
||||
if (w->numpoints < 3)
|
||||
Error ("CheckFace: %i points",w->numpoints);
|
||||
Sys_Error ("CheckFace: %i points",w->numpoints);
|
||||
|
||||
for (i=0 ; i<w->numpoints ; i++)
|
||||
{
|
||||
|
@ -85,21 +92,21 @@ void CheckFace (face_t *f)
|
|||
|
||||
for (j=0 ; j<3 ; j++)
|
||||
if (p1[j] > BOGUS_RANGE || p1[j] < -BOGUS_RANGE)
|
||||
Error ("CheckFace: BUGUS_RANGE: %f",p1[j]);
|
||||
Sys_Error ("CheckFace: BUGUS_RANGE: %f",p1[j]);
|
||||
|
||||
j = i+1 == w->numpoints ? 0 : i+1;
|
||||
|
||||
// check the point is on the face plane
|
||||
d = DotProduct (p1, f->plane.normal) - f->plane.dist;
|
||||
if (d < -ON_EPSILON || d > ON_EPSILON)
|
||||
Error ("CheckFace: point off plane");
|
||||
Sys_Error ("CheckFace: point off plane");
|
||||
|
||||
// check the edge isn't degenerate
|
||||
p2 = w->points[j];
|
||||
VectorSubtract (p2, p1, dir);
|
||||
|
||||
if (VectorLength (dir) < ON_EPSILON)
|
||||
Error ("CheckFace: degenerate edge");
|
||||
Sys_Error ("CheckFace: degenerate edge");
|
||||
|
||||
CrossProduct (f->plane.normal, dir, edgenormal);
|
||||
VectorNormalize (edgenormal);
|
||||
|
@ -113,7 +120,7 @@ void CheckFace (face_t *f)
|
|||
continue;
|
||||
d = DotProduct (w->points[j], edgenormal);
|
||||
if (d > edgedist)
|
||||
Error ("CheckFace: non-convex");
|
||||
Sys_Error ("CheckFace: non-convex");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -136,12 +143,12 @@ NewWinding
|
|||
winding_t *NewWinding (int points)
|
||||
{
|
||||
winding_t *w;
|
||||
int size;
|
||||
size_t size;
|
||||
|
||||
if (points > MAX_POINTS_ON_WINDING)
|
||||
Error ("NewWinding: %i points", points);
|
||||
Sys_Error ("NewWinding: %i points", points);
|
||||
|
||||
size = (int)((winding_t *)0)->points[points];
|
||||
size = (size_t)((winding_t *)0)->points[points];
|
||||
w = malloc (size);
|
||||
memset (w, 0, size);
|
||||
|
||||
|
@ -156,10 +163,10 @@ CopyWinding
|
|||
*/
|
||||
winding_t *CopyWinding (winding_t *w)
|
||||
{
|
||||
int size;
|
||||
size_t size;
|
||||
winding_t *c;
|
||||
|
||||
size = (int)((winding_t *)0)->points[w->numpoints];
|
||||
size = (size_t)((winding_t *)0)->points[w->numpoints];
|
||||
c = malloc (size);
|
||||
memcpy (c, w, size);
|
||||
return c;
|
||||
|
@ -263,7 +270,7 @@ winding_t *ClipWinding (winding_t *in, plane_t *split)
|
|||
}
|
||||
|
||||
if (neww->numpoints > maxpts)
|
||||
Error ("ClipWinding: points exceeded estimate");
|
||||
Sys_Error ("ClipWinding: points exceeded estimate");
|
||||
|
||||
// free the original winding
|
||||
free (in);
|
||||
|
@ -306,7 +313,7 @@ winding_t *BasePolyForPlane (face_t *f)
|
|||
}
|
||||
}
|
||||
if (x==-1)
|
||||
Error ("BasePolyForPlane: no axis found");
|
||||
Sys_Error ("BasePolyForPlane: no axis found");
|
||||
|
||||
VectorCopy (vec3_origin, vup);
|
||||
switch (x)
|
||||
|
@ -321,7 +328,7 @@ winding_t *BasePolyForPlane (face_t *f)
|
|||
}
|
||||
|
||||
v = DotProduct (vup, p->normal);
|
||||
VectorMA (vup, -v, p->normal, vup);
|
||||
VectorMultAdd (vup, -v, p->normal, vup);
|
||||
VectorNormalize (vup);
|
||||
|
||||
VectorScale (p->normal, p->dist, org);
|
||||
|
@ -621,23 +628,10 @@ initOwner:::
|
|||
return self;
|
||||
}
|
||||
|
||||
- copyFromZone:(NSZone *)zone
|
||||
{
|
||||
id new;
|
||||
|
||||
[self freeWindings];
|
||||
new = [super copyFromZone: zone];
|
||||
|
||||
[self calcWindings];
|
||||
[new calcWindings];
|
||||
|
||||
return new;
|
||||
}
|
||||
|
||||
- free
|
||||
- (void)dealloc
|
||||
{
|
||||
[self freeWindings];
|
||||
return [super free];
|
||||
return [super dealloc];
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -646,7 +640,7 @@ initOwner: fromTokens
|
|||
===========
|
||||
*/
|
||||
int numsb;
|
||||
- initFromTokens: own
|
||||
- initFromScript: (script_t *) script owner: own
|
||||
{
|
||||
face_t *f;
|
||||
int i,j;
|
||||
|
@ -659,44 +653,44 @@ int numsb;
|
|||
numfaces = 0;
|
||||
do
|
||||
{
|
||||
if (!GetToken (true))
|
||||
if (!Script_GetToken (script, true))
|
||||
break;
|
||||
if (!strcmp (token, "}") )
|
||||
if (!strcmp (Script_Token (script), "}") )
|
||||
break;
|
||||
|
||||
for (i=0 ; i<3 ; i++)
|
||||
{
|
||||
if (i != 0)
|
||||
GetToken (true);
|
||||
if (strcmp (token, "(") )
|
||||
Error ("parsing map file");
|
||||
Script_GetToken (script, true);
|
||||
if (strcmp (Script_Token (script), "(") )
|
||||
Sys_Error ("parsing map file");
|
||||
|
||||
for (j=0 ; j<3 ; j++)
|
||||
{
|
||||
GetToken (false);
|
||||
f->planepts[i][j] = atoi(token);
|
||||
Script_GetToken (script, false);
|
||||
f->planepts[i][j] = atoi(Script_Token (script));
|
||||
}
|
||||
|
||||
GetToken (false);
|
||||
if (strcmp (token, ")") )
|
||||
Error ("parsing map file");
|
||||
Script_GetToken (script, false);
|
||||
if (strcmp (Script_Token (script), ")") )
|
||||
Sys_Error ("parsing map file");
|
||||
}
|
||||
|
||||
GetToken (false);
|
||||
strcpy (f->texture.texture, token);
|
||||
GetToken (false);
|
||||
f->texture.shift[0] = atof(token);
|
||||
GetToken (false);
|
||||
f->texture.shift[1] = atof(token);
|
||||
GetToken (false);
|
||||
f->texture.rotate = atof(token);
|
||||
GetToken (false);
|
||||
f->texture.scale[0] = atof(token);
|
||||
GetToken (false);
|
||||
f->texture.scale[1] = atof(token);
|
||||
Script_GetToken (script, false);
|
||||
strcpy (f->texture.texture, Script_Token (script));
|
||||
Script_GetToken (script, false);
|
||||
f->texture.shift[0] = atof(Script_Token (script));
|
||||
Script_GetToken (script, false);
|
||||
f->texture.shift[1] = atof(Script_Token (script));
|
||||
Script_GetToken (script, false);
|
||||
f->texture.rotate = atof(Script_Token (script));
|
||||
Script_GetToken (script, false);
|
||||
f->texture.scale[0] = atof(Script_Token (script));
|
||||
Script_GetToken (script, false);
|
||||
f->texture.scale[1] = atof(Script_Token (script));
|
||||
|
||||
#if 0
|
||||
flags = atoi(token);
|
||||
flags = atoi(Script_Token (script));
|
||||
|
||||
flags &= 7;
|
||||
|
||||
|
@ -827,7 +821,7 @@ setTexturedef
|
|||
- setTexturedef: (texturedef_t *)tex forFace:(int)f
|
||||
{
|
||||
if ( (unsigned)f > numfaces)
|
||||
Error ("setTexturedef:forFace: bad face number %i",f);
|
||||
Sys_Error ("setTexturedef:forFace: bad face number %i",f);
|
||||
|
||||
faces[f].texture = *tex;
|
||||
faces[f].qtexture = NULL; // recache next render
|
||||
|
@ -1000,7 +994,7 @@ hitByRay
|
|||
*time = DotProduct (frontpoint, dir);
|
||||
|
||||
if (*time < 0)
|
||||
Error ("hitByRay: negative t");
|
||||
Sys_Error ("hitByRay: negative t");
|
||||
|
||||
*face = frontface;
|
||||
|
||||
|
@ -1027,9 +1021,9 @@ BOOL fakebrush;
|
|||
vec3_t forward, right;
|
||||
char *targname;
|
||||
vec3_t min, max, temp;
|
||||
char targ[64];
|
||||
char *targ;
|
||||
|
||||
strcpy (targ, [parent valueForQKey: "target"]);
|
||||
targ = [parent valueForQKey: "target"];
|
||||
|
||||
if (!targ || !targ[0])
|
||||
return self;
|
||||
|
@ -1040,12 +1034,12 @@ BOOL fakebrush;
|
|||
c = [map_i count];
|
||||
for (i=0 ; i<c ; i++)
|
||||
{
|
||||
obj = [map_i objectAt: i];
|
||||
obj = [map_i objectAtIndex: i];
|
||||
targname = [obj valueForQKey: "targetname"];
|
||||
if (strcmp (targ, targname))
|
||||
continue;
|
||||
|
||||
[[obj objectAt:0] getMins: min maxs: max];
|
||||
[[obj objectAtIndex:0] getMins: min maxs: max];
|
||||
dest[0] = (min[0] + max[0]) /2;
|
||||
dest[1] = (min[1] + max[1]) /2;
|
||||
|
||||
|
@ -1098,7 +1092,7 @@ BOOL fakebrush;
|
|||
if (copy)
|
||||
{
|
||||
[copy perform:call];
|
||||
[copy free];
|
||||
[copy dealloc];
|
||||
}
|
||||
fakebrush = NO;
|
||||
return YES;
|
||||
|
@ -1125,10 +1119,10 @@ XYDrawSelf
|
|||
[xyview_i addToScrollRange: bmins[0] : bmins[1]];
|
||||
[xyview_i addToScrollRange: bmaxs[0] : bmaxs[1]];
|
||||
|
||||
worldent = [map_i objectAt: 0];
|
||||
worldent = [map_i objectAtIndex: 0];
|
||||
currentent = [map_i currentEntity];
|
||||
|
||||
if (parent != worldent && self == [parent objectAt: 0])
|
||||
if (parent != worldent && self == [parent objectAtIndex: 0])
|
||||
keybrush = YES;
|
||||
else
|
||||
keybrush = NO;
|
||||
|
@ -1283,7 +1277,7 @@ CameraDrawSelf
|
|||
if ([self fakeBrush: @selector(CameraDrawSelf)])
|
||||
return self;
|
||||
|
||||
worldent = [map_i objectAt: 0];
|
||||
worldent = [map_i objectAtIndex: 0];
|
||||
currentent = [map_i currentEntity];
|
||||
|
||||
if (parent != worldent && worldent == currentent)
|
||||
|
@ -1587,7 +1581,7 @@ float *controlpoints[MAX_FACES*3];
|
|||
|
||||
if (k != 3)
|
||||
{
|
||||
// Error ("getXYShearPoints: didn't get three points on plane");
|
||||
// Sys_Error ("getXYShearPoints: didn't get three points on plane");
|
||||
numcontrolpoints = 0;
|
||||
return self;
|
||||
}
|
||||
|
@ -1623,7 +1617,7 @@ Set the regioned flag based on if the object is containted in region_min/max
|
|||
char *name;
|
||||
|
||||
// filter away entities
|
||||
if (parent != [map_i objectAt: 0])
|
||||
if (parent != [map_i objectAtIndex: 0])
|
||||
{
|
||||
if (filter_entities)
|
||||
{
|
||||
|
@ -1816,7 +1810,7 @@ vec3_t sb_mins, sb_maxs;
|
|||
}
|
||||
|
||||
[parent removeObject: self];
|
||||
[self free];
|
||||
[self dealloc];
|
||||
|
||||
return nil;
|
||||
}
|
||||
|
@ -1940,7 +1934,7 @@ id carve_in, carve_out;
|
|||
- addFace: (face_t *)f
|
||||
{
|
||||
if (numfaces == MAX_FACES)
|
||||
Error ("addFace: numfaces == MAX_FACES");
|
||||
Sys_Error ("addFace: numfaces == MAX_FACES");
|
||||
|
||||
faces[numfaces] = *f;
|
||||
faces[numfaces].texture = faces[0].texture;
|
||||
|
@ -1980,7 +1974,7 @@ id carve_in, carve_out;
|
|||
|
||||
#if 0
|
||||
if ( (i = NSMallocCheck()) )
|
||||
Error ("MallocCheck failure");
|
||||
Sys_Error ("MallocCheck failure");
|
||||
#endif
|
||||
|
||||
// check bboxes
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
#ifndef TexturePalette_h
|
||||
#define TexturePalette_h
|
||||
|
||||
#include <AppKit/AppKit.h>
|
||||
|
||||
#include "QF/qtypes.h"
|
||||
|
||||
typedef union
|
||||
{
|
||||
byte chan[4];
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#include "QF/qendian.h"
|
||||
|
||||
#include "qedefs.h"
|
||||
#include "TexturePalette.h"
|
||||
|
||||
id texturepalette_i;
|
||||
|
||||
|
@ -55,7 +56,7 @@ unsigned badtex_d[] =
|
|||
0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff
|
||||
};
|
||||
|
||||
qtexture_t badtex = {"notexture",16,16,NULL, badtex_d, {0,0,255,255}};
|
||||
qtexture_t badtex = {"notexture",16,16,NULL, badtex_d, {{0,0,255,255}}};
|
||||
|
||||
/*
|
||||
==============
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
|
||||
#include <AppKit/AppKit.h>
|
||||
|
||||
#include "Entity.h"
|
||||
|
||||
extern id things_i;
|
||||
|
||||
#define ENTITYNAMEKEY "spawn"
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
|
||||
#include "qedefs.h"
|
||||
#include "Things.h"
|
||||
#include "QuakeEd.h"
|
||||
#include "Map.h"
|
||||
#include "EntityClass.h"
|
||||
#include "KeypairView.h"
|
||||
#include "Project.h"
|
||||
|
||||
id things_i;
|
||||
|
||||
|
@ -21,7 +26,7 @@ id things_i;
|
|||
- loadEntityComment:(id)obj
|
||||
{
|
||||
[entity_comment_i selectAll:self];
|
||||
[entity_comment_i replaceSel:[obj comments]];
|
||||
[entity_comment_i replaceCharactersInRange:[entity_comment_i selectedRange] withString:[NSString stringWithCString:[obj comments]]];
|
||||
|
||||
return self;
|
||||
}
|
||||
|
@ -33,13 +38,13 @@ id things_i;
|
|||
|
||||
path = [project_i getProgDirectory];
|
||||
|
||||
[prog_path_i setStringValue: path];
|
||||
[prog_path_i setStringValue: [NSString stringWithCString:path]];
|
||||
|
||||
[[EntityClassList alloc] initForSourceDirectory: path];
|
||||
|
||||
[self loadEntityComment:[entity_classes_i objectAt:lastSelected]];
|
||||
[self loadEntityComment:[entity_classes_i objectAtIndex:lastSelected]];
|
||||
[entity_browser_i loadColumnZero];
|
||||
[[entity_browser_i matrixInColumn:0] selectCellAt:lastSelected :0];
|
||||
[[entity_browser_i matrixInColumn:0] selectCellAtRow:lastSelected column:0];
|
||||
|
||||
[entity_browser_i setDoubleAction: @selector(doubleClickEntity:)];
|
||||
|
||||
|
@ -52,7 +57,7 @@ id things_i;
|
|||
|
||||
matr = [sender matrixInColumn: 0];
|
||||
lastSelected = [matr selectedRow];
|
||||
[self loadEntityComment:[entity_classes_i objectAt:lastSelected]];
|
||||
[self loadEntityComment:[entity_classes_i objectAtIndex:lastSelected]];
|
||||
[quakeed_i makeFirstResponder: quakeed_i];
|
||||
|
||||
return self;
|
||||
|
@ -67,7 +72,7 @@ id things_i;
|
|||
|
||||
- (char *)spawnName
|
||||
{
|
||||
return [[entity_classes_i objectAt:lastSelected] classname];
|
||||
return [[entity_classes_i objectAtIndex:lastSelected] classname];
|
||||
}
|
||||
|
||||
|
||||
|
@ -83,22 +88,22 @@ id things_i;
|
|||
if (!path || !path[0])
|
||||
{
|
||||
path = [project_i getProgDirectory];
|
||||
[prog_path_i setStringValue: path];
|
||||
[prog_path_i setStringValue: [NSString stringWithCString:path]];
|
||||
}
|
||||
|
||||
// Free all entity info in memory...
|
||||
[entity_classes_i freeObjects];
|
||||
[entity_classes_i free];
|
||||
[entity_classes_i removeAllObjects];
|
||||
[entity_classes_i release];
|
||||
|
||||
// Now, RELOAD!
|
||||
[[EntityClassList alloc] initForSourceDirectory: path];
|
||||
|
||||
lastSelected = 0;
|
||||
ent = [entity_classes_i objectAt:lastSelected];
|
||||
[self loadEntityComment:[entity_classes_i objectAt:lastSelected]];
|
||||
ent = [entity_classes_i objectAtIndex:lastSelected];
|
||||
[self loadEntityComment:[entity_classes_i objectAtIndex:lastSelected]];
|
||||
|
||||
[entity_browser_i loadColumnZero];
|
||||
[[entity_browser_i matrixInColumn:0] selectCellAt:lastSelected :0];
|
||||
[[entity_browser_i matrixInColumn:0] selectCellAtRow:lastSelected column:0];
|
||||
|
||||
[self newCurrentEntity]; // in case flags changed
|
||||
|
||||
|
@ -113,14 +118,14 @@ id things_i;
|
|||
classent = [entity_classes_i classForName:class];
|
||||
if (!classent)
|
||||
return self;
|
||||
lastSelected = [entity_classes_i indexOf: classent];
|
||||
lastSelected = [entity_classes_i indexOfObject: classent];
|
||||
|
||||
if (lastSelected < 0)
|
||||
lastSelected = 0;
|
||||
|
||||
[self loadEntityComment:classent];
|
||||
[[entity_browser_i matrixInColumn:0] selectCellAt:lastSelected :0];
|
||||
[[entity_browser_i matrixInColumn:0] scrollCellToVisible:lastSelected :0];
|
||||
[[entity_browser_i matrixInColumn:0] selectCellAtRow:lastSelected column:0];
|
||||
[[entity_browser_i matrixInColumn:0] scrollCellToVisibleAtRow:lastSelected column:0];
|
||||
|
||||
return self;
|
||||
}
|
||||
|
@ -136,7 +141,7 @@ id things_i;
|
|||
|
||||
ent = [map_i currentEntity];
|
||||
classname = [ent valueForQKey: "classname"];
|
||||
if (ent != [map_i objectAt: 0])
|
||||
if (ent != [map_i objectAtIndex: 0])
|
||||
[self selectClass: classname]; // don't reset for world
|
||||
classent = [entity_classes_i classForName:classname];
|
||||
flagname = [ent valueForQKey: "spawnflags"];
|
||||
|
@ -149,11 +154,11 @@ id things_i;
|
|||
for (r=0 ; r<4 ; r++)
|
||||
for (c=0 ; c<3 ; c++)
|
||||
{
|
||||
cell = [flags_i cellAt: r : c];
|
||||
cell = [flags_i cellAtRow: r column: c];
|
||||
if (c < 2)
|
||||
{
|
||||
flagname = [classent flagName: c*4 + r];
|
||||
[cell setTitle: flagname];
|
||||
[cell setTitle: [NSString stringWithCString:flagname]];
|
||||
}
|
||||
[cell setIntValue: (flags & (1<< ((c*4)+r)) ) > 0];
|
||||
}
|
||||
|
@ -175,8 +180,8 @@ id things_i;
|
|||
//
|
||||
- setSelectedKey:(epair_t *)ep;
|
||||
{
|
||||
[keyInput_i setStringValue:ep->key];
|
||||
[valueInput_i setStringValue:ep->value];
|
||||
[keyInput_i setStringValue:[NSString stringWithCString:ep->key]];
|
||||
[valueInput_i setStringValue:[NSString stringWithCString:ep->value]];
|
||||
[valueInput_i selectText:self];
|
||||
return self;
|
||||
}
|
||||
|
@ -237,7 +242,7 @@ id things_i;
|
|||
const char *title;
|
||||
char value[10];
|
||||
|
||||
title = [[sender selectedCell] title];
|
||||
title = [[[sender selectedCell] title] cString];
|
||||
if (!strcmp(title,"Up"))
|
||||
strcpy (value, "-1");
|
||||
else if (!strcmp(title,"Dn"))
|
||||
|
@ -245,8 +250,8 @@ id things_i;
|
|||
else
|
||||
strcpy (value, title);
|
||||
|
||||
[keyInput_i setStringValue:"angle"];
|
||||
[valueInput_i setStringValue:value];
|
||||
[keyInput_i setStringValue:@"angle"];
|
||||
[valueInput_i setStringValue:[NSString stringWithCString:value]];
|
||||
[self addPair:NULL];
|
||||
|
||||
[self clearInputs];
|
||||
|
@ -269,7 +274,7 @@ id things_i;
|
|||
for (r=0 ; r<4 ; r++)
|
||||
for (c=0 ; c<3 ; c++)
|
||||
{
|
||||
cell = [flags_i cellAt: r : c];
|
||||
cell = [flags_i cellAtRow: r column: c];
|
||||
i = ([cell intValue] > 0);
|
||||
flags |= (i<< ((c*4)+r));
|
||||
}
|
||||
|
@ -304,10 +309,10 @@ id things_i;
|
|||
i = 0;
|
||||
while(max--)
|
||||
{
|
||||
object = [entity_classes_i objectAt:i];
|
||||
object = [entity_classes_i objectAtIndex:i];
|
||||
[matrix addRow];
|
||||
cell = [matrix cellAt:i++ :0];
|
||||
[cell setStringValue:[object classname]];
|
||||
cell = [matrix cellAtRow:i++ column:0];
|
||||
[cell setStringValue:[NSString stringWithCString:[object classname]]];
|
||||
[cell setLeaf:YES];
|
||||
[cell setLoaded:YES];
|
||||
}
|
||||
|
|
|
@ -8,9 +8,9 @@
|
|||
*/
|
||||
|
||||
#include "UserPath.h"
|
||||
#include <mach/mach_init.h>
|
||||
#include <appkit/graphics.h>
|
||||
#include <appkit/errors.h>
|
||||
//#include <mach/mach_init.h>
|
||||
//#include <appkit/graphics.h>
|
||||
//#include <appkit/errors.h>
|
||||
#include <math.h>
|
||||
#include <libc.h>
|
||||
|
||||
|
@ -137,16 +137,16 @@ int sendUserPath(UserPath *up)
|
|||
|
||||
exception.code = 0;
|
||||
if (up->opForUserPath != 0) {
|
||||
NS_DURING
|
||||
//NS_DURING
|
||||
DPSDoUserPath(up->points, up->numberOfPoints, dps_float, up->ops,
|
||||
up->numberOfOps, up->bbox, up->opForUserPath);
|
||||
if (up->ping) {
|
||||
NSPing();
|
||||
}
|
||||
|
||||
NS_HANDLER
|
||||
exception = NSLocalHandler;
|
||||
NS_ENDHANDLER
|
||||
//NS_HANDLER
|
||||
// exception = NSLocalHandler;
|
||||
//NS_ENDHANDLER
|
||||
if (exception.code) {
|
||||
NSReportError(&exception);
|
||||
if (exception.code == dps_err_ps) {
|
||||
|
|
|
@ -2,9 +2,13 @@
|
|||
#define XYView_h
|
||||
|
||||
#include <AppKit/AppKit.h>
|
||||
#include "mathlib.h"
|
||||
|
||||
#include "QF/mathlib.h"
|
||||
|
||||
#include "SetBrush.h"
|
||||
|
||||
#include "render.h"
|
||||
|
||||
extern id xyview_i;
|
||||
|
||||
#define MINSCALE 0.125
|
||||
|
@ -23,7 +27,6 @@ void linecolor (float r, float g, float b);
|
|||
void XYmoveto (vec3_t pt);
|
||||
void XYlineto (vec3_t pt);
|
||||
|
||||
typedef enum {dr_wire, dr_flat, dr_texture} drawmode_t;
|
||||
|
||||
|
||||
@interface XYView : NSView
|
||||
|
|
|
@ -1,8 +1,15 @@
|
|||
#include "qedefs.h"
|
||||
#include "XYView.h"
|
||||
#include "ZView.h"
|
||||
#include "CameraView.h"
|
||||
#include "Clipper.h"
|
||||
#include "QuakeEd.h"
|
||||
#include "Map.h"
|
||||
#include "Entity.h"
|
||||
#include "PopScrollView.h"
|
||||
|
||||
id xyview_i;
|
||||
|
||||
id scalemenu_i, gridmenu_i, scrollview_i, gridbutton_i, scalebutton_i;
|
||||
id scrollview_i, gridbutton_i, scalebutton_i;
|
||||
|
||||
vec3_t xy_viewnormal; // v_forward for xy view
|
||||
float xy_viewdist; // clip behind this plane
|
||||
|
@ -14,12 +21,12 @@ float xy_viewdist; // clip behind this plane
|
|||
initWithFrame:
|
||||
==================
|
||||
*/
|
||||
- initWithFrame:(const NSRect *)frameRect
|
||||
- initWithFrame:(NSRect)frameRect
|
||||
{
|
||||
[super initWithFrame:frameRect];
|
||||
[self allocateGState];
|
||||
|
||||
NSSetRect (&realbounds, 0,0,0,0);
|
||||
realbounds = NSMakeRect (0,0,0,0);
|
||||
|
||||
gridsize = 16;
|
||||
scale = 1.0;
|
||||
|
@ -31,37 +38,32 @@ initWithFrame:
|
|||
//
|
||||
// initialize the pop up menus
|
||||
//
|
||||
scalemenu_i = [[PopUpList alloc] init];
|
||||
[scalemenu_i setTarget: self];
|
||||
[scalemenu_i setAction: @selector(scaleMenuTarget:)];
|
||||
|
||||
[scalemenu_i addItem: "12.5%"];
|
||||
[scalemenu_i addItem: "25%"];
|
||||
[scalemenu_i addItem: "50%"];
|
||||
[scalemenu_i addItem: "75%"];
|
||||
[scalemenu_i addItem: "100%"];
|
||||
[scalemenu_i addItem: "200%"];
|
||||
[scalemenu_i addItem: "300%"];
|
||||
[[scalemenu_i itemList] selectCellAt: 4 : 0];
|
||||
|
||||
scalebutton_i = NSCreatePopUpListButton(scalemenu_i);
|
||||
scalebutton_i = [[NSPopUpButton alloc] init];
|
||||
[scalebutton_i setTarget: self];
|
||||
[scalebutton_i setAction: @selector(scaleMenuTarget:)];
|
||||
[scalebutton_i addItemWithTitle: @"12.5%"];
|
||||
[scalebutton_i addItemWithTitle: @"25%"];
|
||||
[scalebutton_i addItemWithTitle: @"50%"];
|
||||
[scalebutton_i addItemWithTitle: @"75%"];
|
||||
[scalebutton_i addItemWithTitle: @"100%"];
|
||||
[scalebutton_i addItemWithTitle: @"200%"];
|
||||
[scalebutton_i addItemWithTitle: @"300%"];
|
||||
[scalebutton_i selectItemAtIndex: 4];
|
||||
|
||||
|
||||
gridmenu_i = [[PopUpList alloc] init];
|
||||
[gridmenu_i setTarget: self];
|
||||
[gridmenu_i setAction: @selector(gridMenuTarget:)];
|
||||
gridbutton_i = [[NSPopUpButton alloc] init];
|
||||
[gridbutton_i setTarget: self];
|
||||
[gridbutton_i setAction: @selector(gridMenuTarget:)];
|
||||
|
||||
[gridmenu_i addItem: "grid 1"];
|
||||
[gridmenu_i addItem: "grid 2"];
|
||||
[gridmenu_i addItem: "grid 4"];
|
||||
[gridmenu_i addItem: "grid 8"];
|
||||
[gridmenu_i addItem: "grid 16"];
|
||||
[gridmenu_i addItem: "grid 32"];
|
||||
[gridmenu_i addItem: "grid 64"];
|
||||
[gridbutton_i addItemWithTitle: @"grid 1"];
|
||||
[gridbutton_i addItemWithTitle: @"grid 2"];
|
||||
[gridbutton_i addItemWithTitle: @"grid 4"];
|
||||
[gridbutton_i addItemWithTitle: @"grid 8"];
|
||||
[gridbutton_i addItemWithTitle: @"grid 16"];
|
||||
[gridbutton_i addItemWithTitle: @"grid 32"];
|
||||
[gridbutton_i addItemWithTitle: @"grid 64"];
|
||||
|
||||
[[gridmenu_i itemList] selectCellAt: 4 : 0];
|
||||
|
||||
gridbutton_i = NSCreatePopUpListButton(gridmenu_i);
|
||||
[gridbutton_i selectItemAtIndex: 4];
|
||||
|
||||
// initialize the scroll view
|
||||
scrollview_i = [[PopScrollView alloc]
|
||||
|
@ -70,11 +72,11 @@ initWithFrame:
|
|||
button2: gridbutton_i
|
||||
];
|
||||
[scrollview_i setLineScroll: 64];
|
||||
[scrollview_i setAutosizing: NS_WIDTHSIZABLE | NS_HEIGHTSIZABLE];
|
||||
[scrollview_i setAutoresizingMask: (NSViewWidthSizable | NSViewHeightSizable)];
|
||||
|
||||
// link objects together
|
||||
[[scrollview_i setDocView: self] free];
|
||||
|
||||
[scrollview_i setDocumentView: self];
|
||||
RELEASE (scrollview_i);
|
||||
return scrollview_i;
|
||||
|
||||
}
|
||||
|
@ -95,7 +97,7 @@ initWithFrame:
|
|||
|
||||
- drawMode: sender
|
||||
{
|
||||
drawmode = [sender selectedCol];
|
||||
drawmode = [sender selectedColumn];
|
||||
[quakeed_i updateXY];
|
||||
return self;
|
||||
}
|
||||
|
@ -103,7 +105,7 @@ initWithFrame:
|
|||
- setDrawMode: (drawmode_t)mode
|
||||
{
|
||||
drawmode = mode;
|
||||
[mode_radio_i selectCellAt:0: mode];
|
||||
[mode_radio_i selectCellAtRow:0 column: mode];
|
||||
[quakeed_i updateXY];
|
||||
return self;
|
||||
}
|
||||
|
@ -115,9 +117,7 @@ initWithFrame:
|
|||
}
|
||||
|
||||
/*
|
||||
===================
|
||||
setOrigin:scale:
|
||||
===================
|
||||
v
|
||||
*/
|
||||
- setOrigin: (NSPoint *)pt scale: (float)sc
|
||||
{
|
||||
|
@ -129,38 +129,38 @@ setOrigin:scale:
|
|||
//
|
||||
scale = sc;
|
||||
|
||||
[superview getFrame: &sframe];
|
||||
[superview getFrame: &newbounds];
|
||||
sframe = [[self superview] frame];
|
||||
newbounds = [[self superview] frame];
|
||||
newbounds.origin = *pt;
|
||||
newbounds.size.width /= scale;
|
||||
newbounds.size.height /= scale;
|
||||
sframe.size.width /= scale;
|
||||
sframe.size.height /= scale;
|
||||
|
||||
//
|
||||
// union with the realbounds
|
||||
//
|
||||
NSUnionRect (&realbounds, &newbounds);
|
||||
newbounds = NSUnionRect (realbounds, newbounds);
|
||||
|
||||
//
|
||||
// redisplay everything
|
||||
//
|
||||
[quakeed_i disableDisplay];
|
||||
//XXX[quakeed_i disableDisplay];
|
||||
|
||||
//
|
||||
// size this view
|
||||
//
|
||||
[self sizeTo: newbounds.size.width : newbounds.size.height];
|
||||
[self setDrawOrigin: newbounds.origin.x : newbounds.origin.y];
|
||||
[self moveTo: newbounds.origin.x : newbounds.origin.y];
|
||||
[self setBoundsSize: newbounds.size];
|
||||
[self setBoundsOrigin: newbounds.origin];
|
||||
//XXX[self moveTo: newbounds.origin.x : newbounds.origin.y];
|
||||
|
||||
//
|
||||
// scroll and scale the clip view
|
||||
//
|
||||
[superview setDrawSize
|
||||
: sframe.size.width/scale
|
||||
: sframe.size.height/scale];
|
||||
[superview setDrawOrigin: pt->x : pt->y];
|
||||
[[self superview] setBoundsSize: sframe.size];
|
||||
[[self superview] setBoundsOrigin: *pt];
|
||||
|
||||
[quakeed_i reenableDisplay];
|
||||
//XXX[quakeed_i reenableDisplay];
|
||||
[scrollview_i display];
|
||||
|
||||
return self;
|
||||
|
@ -171,7 +171,7 @@ setOrigin:scale:
|
|||
NSRect sbounds;
|
||||
NSPoint mid, delta;
|
||||
|
||||
[[xyview_i superview] getBounds: &sbounds];
|
||||
sbounds = [[xyview_i superview] bounds];
|
||||
|
||||
mid.x = sbounds.origin.x + sbounds.size.width/2;
|
||||
mid.y = sbounds.origin.y + sbounds.size.height/2;
|
||||
|
@ -197,7 +197,7 @@ When superview is resized
|
|||
{
|
||||
NSRect r;
|
||||
|
||||
[superview getBounds: &r];
|
||||
r = [[self superview] bounds];
|
||||
[self newRealBounds: &r];
|
||||
|
||||
return self;
|
||||
|
@ -221,25 +221,25 @@ If realbounds has shrunk, nothing will change.
|
|||
//
|
||||
// calculate the area visible in the cliprect
|
||||
//
|
||||
[superview getBounds: &sbounds];
|
||||
NSUnionRect (nb, &sbounds);
|
||||
sbounds = [[self superview] bounds];
|
||||
sbounds = NSUnionRect (*nb, sbounds);
|
||||
|
||||
//
|
||||
// size this view
|
||||
//
|
||||
[quakeed_i disableDisplay];
|
||||
//XXX[quakeed_i disableDisplay];
|
||||
|
||||
[self suspendNotifyAncestorWhenFrameChanged:YES];
|
||||
[self sizeTo: sbounds.size.width : sbounds.size.height];
|
||||
[self setDrawOrigin: sbounds.origin.x : sbounds.origin.y];
|
||||
[self moveTo: sbounds.origin.x : sbounds.origin.y];
|
||||
[self suspendNotifyAncestorWhenFrameChanged:NO];
|
||||
[self setPostsBoundsChangedNotifications:NO];
|
||||
[self setBoundsSize: sbounds.size];
|
||||
[self setBoundsOrigin: sbounds.origin];
|
||||
//XXX[self moveTo: sbounds.origin.x : sbounds.origin.y];
|
||||
[self setPostsBoundsChangedNotifications:YES];
|
||||
|
||||
[scrollview_i reflectScroll: superview];
|
||||
[quakeed_i reenableDisplay];
|
||||
[scrollview_i reflectScrolledClipView: [scrollview_i contentView]];
|
||||
//XXX[quakeed_i reenableDisplay];
|
||||
|
||||
[[scrollview_i horizScroller] display];
|
||||
[[scrollview_i vertScroller] display];
|
||||
[[scrollview_i horizontalScroller] display];
|
||||
[[scrollview_i verticalScroller] display];
|
||||
|
||||
return self;
|
||||
}
|
||||
|
@ -259,7 +259,7 @@ Called when the scaler popup on the window is used
|
|||
NSRect visrect, sframe;
|
||||
float nscale;
|
||||
|
||||
item = [[sender selectedCell] title];
|
||||
item = [[[sender selectedCell] title] cString];
|
||||
sscanf (item,"%f",&nscale);
|
||||
nscale /= 100;
|
||||
|
||||
|
@ -267,8 +267,8 @@ Called when the scaler popup on the window is used
|
|||
return NULL;
|
||||
|
||||
// keep the center of the view constant
|
||||
[superview getBounds: &visrect];
|
||||
[superview getFrame: &sframe];
|
||||
visrect = [[self superview] bounds];
|
||||
sframe = [[self superview] frame];
|
||||
visrect.origin.x += visrect.size.width/2;
|
||||
visrect.origin.y += visrect.size.height/2;
|
||||
|
||||
|
@ -287,8 +287,8 @@ zoomIn
|
|||
*/
|
||||
- zoomIn: (NSPoint *)constant
|
||||
{
|
||||
id itemlist;
|
||||
int selected, numrows, numcollumns;
|
||||
id itemlist, selectedItem;
|
||||
int selected, numrows;
|
||||
|
||||
NSRect visrect;
|
||||
NSPoint ofs, new;
|
||||
|
@ -296,20 +296,20 @@ zoomIn
|
|||
//
|
||||
// set the popup
|
||||
//
|
||||
itemlist = [scalemenu_i itemList];
|
||||
[itemlist getNumRows: &numrows numCols:&numcollumns];
|
||||
itemlist = [scalebutton_i itemArray];
|
||||
numrows = [itemlist count];
|
||||
|
||||
selected = [itemlist selectedRow] + 1;
|
||||
selectedItem = [scalebutton_i selectedItem];
|
||||
selected = [itemlist indexOfObject: selectedItem] + 1;
|
||||
if (selected >= numrows)
|
||||
return NULL;
|
||||
|
||||
[itemlist selectCellAt: selected : 0];
|
||||
[scalebutton_i setTitle: [[itemlist selectedCell] title]];
|
||||
[scalebutton_i selectItemAtIndex: selected];
|
||||
|
||||
//
|
||||
// zoom the view
|
||||
//
|
||||
[superview getBounds: &visrect];
|
||||
visrect = [[self superview] bounds];
|
||||
ofs.x = constant->x - visrect.origin.x;
|
||||
ofs.y = constant->y - visrect.origin.y;
|
||||
|
||||
|
@ -329,8 +329,8 @@ zoomOut
|
|||
*/
|
||||
- zoomOut: (NSPoint *)constant
|
||||
{
|
||||
id itemlist;
|
||||
int selected, numrows, numcollumns;
|
||||
id itemlist, selectedItem;
|
||||
int selected;
|
||||
|
||||
NSRect visrect;
|
||||
NSPoint ofs, new;
|
||||
|
@ -338,20 +338,19 @@ zoomOut
|
|||
//
|
||||
// set the popup
|
||||
//
|
||||
itemlist = [scalemenu_i itemList];
|
||||
[itemlist getNumRows: &numrows numCols:&numcollumns];
|
||||
itemlist = [scalebutton_i itemArray];
|
||||
|
||||
selected = [itemlist selectedRow] - 1;
|
||||
selectedItem = [scalebutton_i selectedItem];
|
||||
selected = [itemlist indexOfObject: selectedItem] - 1;
|
||||
if (selected < 0)
|
||||
return NULL;
|
||||
|
||||
[itemlist selectCellAt: selected : 0];
|
||||
[scalebutton_i setTitle: [[itemlist selectedCell] title]];
|
||||
[scalebutton_i selectItemAtIndex: selected];
|
||||
|
||||
//
|
||||
// zoom the view
|
||||
//
|
||||
[superview getBounds: &visrect];
|
||||
visrect = [[self superview] bounds];
|
||||
ofs.x = constant->x - visrect.origin.x;
|
||||
ofs.y = constant->y - visrect.origin.y;
|
||||
|
||||
|
@ -377,7 +376,7 @@ Called when the scaler popup on the window is used
|
|||
char const *item;
|
||||
int grid;
|
||||
|
||||
item = [[sender selectedCell] title];
|
||||
item = [[[sender selectedCell] title] cString];
|
||||
sscanf (item,"grid %d",&grid);
|
||||
|
||||
if (grid == gridsize)
|
||||
|
@ -461,23 +460,22 @@ superviewChanged
|
|||
*/
|
||||
|
||||
vec3_t cur_linecolor;
|
||||
NSBezierPath *path;
|
||||
|
||||
void linestart (float r, float g, float b)
|
||||
{
|
||||
beginUserPath (upath,NO);
|
||||
cur_linecolor[0] = r;
|
||||
cur_linecolor[1] = g;
|
||||
cur_linecolor[2] = b;
|
||||
[path removeAllPoints];
|
||||
VectorSet (r, g, b, cur_linecolor);
|
||||
}
|
||||
|
||||
void lineflush (void)
|
||||
{
|
||||
if (!upath->numberOfPoints)
|
||||
if ([path isEmpty])
|
||||
return;
|
||||
endUserPath (upath, dps_ustroke);
|
||||
//endUserPath (upath, dps_ustroke);
|
||||
PSsetrgbcolor (cur_linecolor[0], cur_linecolor[1], cur_linecolor[2]);
|
||||
sendUserPath (upath);
|
||||
beginUserPath (upath,NO);
|
||||
[path stroke];
|
||||
[path removeAllPoints];
|
||||
}
|
||||
|
||||
void linecolor (float r, float g, float b)
|
||||
|
@ -485,21 +483,21 @@ void linecolor (float r, float g, float b)
|
|||
if (cur_linecolor[0] == r && cur_linecolor[1] == g && cur_linecolor[2] == b)
|
||||
return; // do nothing
|
||||
lineflush ();
|
||||
cur_linecolor[0] = r;
|
||||
cur_linecolor[1] = g;
|
||||
cur_linecolor[2] = b;
|
||||
VectorSet (r, g, b, cur_linecolor);
|
||||
}
|
||||
|
||||
void XYmoveto (vec3_t pt)
|
||||
{
|
||||
if (upath->numberOfPoints > 2048)
|
||||
NSPoint point = {pt[0], pt[1]};
|
||||
if ([path elementCount] > 2048)
|
||||
lineflush ();
|
||||
UPmoveto (upath, pt[0], pt[1]);
|
||||
[path moveToPoint: point];
|
||||
}
|
||||
|
||||
void XYlineto (vec3_t pt)
|
||||
{
|
||||
UPlineto (upath, pt[0], pt[1]);
|
||||
NSPoint point = {pt[0], pt[1]};
|
||||
[path lineToPoint: point];
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -513,19 +511,20 @@ Rect is in global world (unscaled) coordinates
|
|||
============
|
||||
*/
|
||||
|
||||
- drawGrid: (const NSRect *)rect
|
||||
- drawGrid: (NSRect)rect
|
||||
{
|
||||
int x,y, stopx, stopy;
|
||||
float top,bottom,right,left;
|
||||
char text[10];
|
||||
BOOL showcoords;
|
||||
NSPoint point;
|
||||
|
||||
showcoords = [quakeed_i showCoordinates];
|
||||
|
||||
left = rect->origin.x-1;
|
||||
bottom = rect->origin.y-1;
|
||||
right = rect->origin.x+rect->size.width+2;
|
||||
top = rect->origin.y+rect->size.height+2;
|
||||
left = rect.origin.x-1;
|
||||
bottom = rect.origin.y-1;
|
||||
right = rect.origin.x+rect.size.width+2;
|
||||
top = rect.origin.y+rect.size.height+2;
|
||||
|
||||
PSsetlinewidth (0.15);
|
||||
|
||||
|
@ -555,24 +554,30 @@ Rect is in global world (unscaled) coordinates
|
|||
if (stopy >= top)
|
||||
stopy -= gridsize;
|
||||
|
||||
beginUserPath (upath,NO);
|
||||
[path removeAllPoints];
|
||||
|
||||
for ( ; y<=stopy ; y+= gridsize)
|
||||
if (y&63)
|
||||
{
|
||||
UPmoveto (upath, left, y);
|
||||
UPlineto (upath, right, y);
|
||||
point.x = left;
|
||||
point.y = y;
|
||||
[path moveToPoint: point];
|
||||
point.x = right;
|
||||
[path lineToPoint: point];
|
||||
}
|
||||
|
||||
for ( ; x<=stopx ; x+= gridsize)
|
||||
if (x&63)
|
||||
{
|
||||
UPmoveto (upath, x, top);
|
||||
UPlineto (upath, x, bottom);
|
||||
point.x = x;
|
||||
point.y = top;
|
||||
[path moveToPoint: point];
|
||||
point.y = bottom;
|
||||
[path lineToPoint: point];
|
||||
}
|
||||
endUserPath (upath, dps_ustroke);
|
||||
//endUserPath (upath, dps_ustroke);
|
||||
PSsetrgbcolor (0.8,0.8,1.0); // thin grid color
|
||||
sendUserPath (upath);
|
||||
[path stroke];
|
||||
|
||||
}
|
||||
|
||||
|
@ -601,18 +606,19 @@ PSsetrgbcolor (0.8,0.8,1.0); // thin grid color
|
|||
if (stopy >= top)
|
||||
stopy -= 64;
|
||||
|
||||
beginUserPath (upath,NO);
|
||||
[path removeAllPoints];
|
||||
|
||||
for ( ; y<=stopy ; y+= 64)
|
||||
{
|
||||
if (showcoords)
|
||||
{
|
||||
sprintf (text, "%i",y);
|
||||
PSmoveto(left,y);
|
||||
PSshow(text);
|
||||
PSmoveto (left, y);
|
||||
PSshow (text);
|
||||
}
|
||||
UPmoveto (upath, left, y);
|
||||
UPlineto (upath, right, y);
|
||||
[path moveToPoint: point];
|
||||
point.x = right;
|
||||
[path lineToPoint: point];
|
||||
}
|
||||
|
||||
for ( ; x<=stopx ; x+= 64)
|
||||
|
@ -620,16 +626,19 @@ PSsetrgbcolor (0.8,0.8,1.0); // thin grid color
|
|||
if (showcoords)
|
||||
{
|
||||
sprintf (text, "%i",x);
|
||||
PSmoveto(x,bottom+2);
|
||||
PSshow(text);
|
||||
PSmoveto (x, bottom + 2);
|
||||
PSshow (text);
|
||||
}
|
||||
UPmoveto (upath, x, top);
|
||||
UPlineto (upath, x, bottom);
|
||||
point.x = x;
|
||||
point.y = top;
|
||||
[path moveToPoint: point];
|
||||
point.y = bottom;
|
||||
[path lineToPoint: point];
|
||||
}
|
||||
|
||||
endUserPath (upath, dps_ustroke);
|
||||
//endUserPath (upath, dps_ustroke);
|
||||
PSsetgray (12.0/16);
|
||||
sendUserPath (upath);
|
||||
[path stroke];
|
||||
}
|
||||
|
||||
return self;
|
||||
|
@ -640,7 +649,7 @@ PSsetrgbcolor (0.8,0.8,1.0); // thin grid color
|
|||
drawWire
|
||||
==================
|
||||
*/
|
||||
- drawWire: (const NSRect *)rects
|
||||
- drawWire: (NSRect)rects
|
||||
{
|
||||
NSRect visRect;
|
||||
int i,j, c, c2;
|
||||
|
@ -652,9 +661,9 @@ drawWire
|
|||
|
||||
if ([quakeed_i showCoordinates]) // if coords are showing, update everything
|
||||
{
|
||||
[self getVisibleRect:&visRect];
|
||||
rects = &visRect;
|
||||
xy_draw_rect = *rects;
|
||||
visRect = [self visibleRect];
|
||||
rects = visRect;
|
||||
xy_draw_rect = rects;
|
||||
}
|
||||
|
||||
|
||||
|
@ -672,11 +681,11 @@ drawWire
|
|||
c = [map_i count];
|
||||
for (i=0 ; i<c ; i++)
|
||||
{
|
||||
ent = [map_i objectAt: i];
|
||||
ent = [map_i objectAtIndex: i];
|
||||
c2 = [ent count];
|
||||
for (j = c2-1 ; j >=0 ; j--)
|
||||
{
|
||||
brush = [ent objectAt: j];
|
||||
brush = [ent objectAtIndex: j];
|
||||
if ( [brush selected] )
|
||||
continue;
|
||||
if ([brush regioned])
|
||||
|
@ -685,7 +694,7 @@ drawWire
|
|||
}
|
||||
if (i > 0 && drawnames)
|
||||
{ // draw entity names
|
||||
brush = [ent objectAt: 0];
|
||||
brush = [ent objectAtIndex: 0];
|
||||
if (![brush regioned])
|
||||
{
|
||||
[brush getMins: mins maxs: maxs];
|
||||
|
@ -703,7 +712,7 @@ drawWire
|
|||
newrect.origin.y -= gridsize;
|
||||
newrect.size.width += 2*gridsize;
|
||||
newrect.size.height += 2*gridsize;
|
||||
if (!NSEqualRect (&newrect, &realbounds))
|
||||
if (!NSEqualRects (newrect, realbounds))
|
||||
[self newRealBounds: &newrect];
|
||||
|
||||
return self;
|
||||
|
@ -717,10 +726,10 @@ drawSolid
|
|||
*/
|
||||
- drawSolid
|
||||
{
|
||||
unsigned char *planes[5];
|
||||
const unsigned char *planes[5];
|
||||
NSRect visRect;
|
||||
|
||||
[self getVisibleRect:&visRect];
|
||||
visRect = [self visibleRect];
|
||||
|
||||
//
|
||||
// draw the image into imagebuffer
|
||||
|
@ -762,11 +771,11 @@ drawSolid
|
|||
// display the output
|
||||
//
|
||||
[self lockFocus];
|
||||
[[self window] setBackingType:NS_RETAINED];
|
||||
[[self window] setBackingType:NSBackingStoreRetained];
|
||||
|
||||
planes[0] = (unsigned char *)r_picbuffer;
|
||||
NSDrawBitmap(
|
||||
&visRect,
|
||||
visRect,
|
||||
r_width,
|
||||
r_height,
|
||||
8,
|
||||
|
@ -775,12 +784,12 @@ drawSolid
|
|||
r_width*4,
|
||||
NO,
|
||||
NO,
|
||||
NS_RGBColorSpace,
|
||||
NSCalibratedRGBColorSpace,
|
||||
planes
|
||||
);
|
||||
|
||||
NSPing ();
|
||||
[[self window] setBackingType:NS_BUFFERED];
|
||||
//NSPing ();
|
||||
[[self window] setBackingType:NSBackingStoreBuffered];
|
||||
[self unlockFocus];
|
||||
|
||||
return self;
|
||||
|
@ -792,19 +801,20 @@ drawSelf
|
|||
===================
|
||||
*/
|
||||
NSRect xy_draw_rect;
|
||||
- drawSelf:(const NSRect *)rects :(int)rectCount
|
||||
- drawSelf:(NSRect)rects :(int)rectCount
|
||||
{
|
||||
static float drawtime; // static to shut up compiler warning
|
||||
|
||||
if (timedrawing)
|
||||
drawtime = I_FloatTime ();
|
||||
|
||||
xy_draw_rect = *rects;
|
||||
xy_draw_rect = rects;
|
||||
newrect.origin.x = newrect.origin.y = 99999;
|
||||
newrect.size.width = newrect.size.height = -2*99999;
|
||||
|
||||
// setup for text
|
||||
PSselectfont("Helvetica-Medium",10/scale);
|
||||
//PSselectfont("Helvetica-Medium",10/scale);
|
||||
GSSetFont (DEFCTXT, [NSFont fontWithName:@"Helvetica-Medium" size: 10/scale]);
|
||||
PSrotate(0);
|
||||
|
||||
if (drawmode == dr_texture || drawmode == dr_flat)
|
||||
|
@ -814,7 +824,7 @@ NSRect xy_draw_rect;
|
|||
|
||||
if (timedrawing)
|
||||
{
|
||||
NSPing ();
|
||||
//NSPing ();
|
||||
drawtime = I_FloatTime() - drawtime;
|
||||
printf ("CameraView drawtime: %5.3f\n", drawtime);
|
||||
}
|
||||
|
@ -846,8 +856,8 @@ static NSPoint oldreletive;
|
|||
NSPoint startpt, newpt;
|
||||
NSPoint reletive, delta;
|
||||
|
||||
startpt = startevent->location;
|
||||
[self convertPoint:&startpt fromView:NULL];
|
||||
startpt = [startevent locationInWindow];
|
||||
startpt = [self convertPoint:startpt fromView:NULL];
|
||||
|
||||
oldreletive.x = oldreletive.y = 0;
|
||||
|
||||
|
@ -859,19 +869,25 @@ static NSPoint oldreletive;
|
|||
|
||||
while (1)
|
||||
{
|
||||
event = [NSApp getNextEvent: NS_LMOUSEUPMASK | NS_LMOUSEDRAGGEDMASK
|
||||
| NS_RMOUSEUPMASK | NS_RMOUSEDRAGGEDMASK | NS_APPDEFINEDMASK];
|
||||
unsigned eventMask = NSLeftMouseUpMask | NSLeftMouseDraggedMask
|
||||
| NSRightMouseUpMask | NSRightMouseDraggedMask
|
||||
| NSApplicationDefinedMask;
|
||||
event = [NSApp nextEventMatchingMask: eventMask
|
||||
untilDate: [NSDate distantFuture]
|
||||
inMode: NSEventTrackingRunLoopMode
|
||||
dequeue: YES];
|
||||
|
||||
if (event->type == NS_LMOUSEUP || event->type == NS_RMOUSEUP)
|
||||
|
||||
if ([event type] == NSLeftMouseUp || [event type] == NSRightMouseUp)
|
||||
break;
|
||||
if (event->type == NS_APPDEFINED)
|
||||
if ([event type] == NSApplicationDefined)
|
||||
{ // doesn't work. grrr.
|
||||
[quakeed_i applicationDefined:event];
|
||||
//[quakeed_i applicationDefined:event];
|
||||
continue;
|
||||
}
|
||||
|
||||
newpt = event->location;
|
||||
[self convertPoint:&newpt fromView:NULL];
|
||||
newpt = [event locationInWindow];
|
||||
newpt = [self convertPoint:newpt fromView:NULL];
|
||||
|
||||
if (ug)
|
||||
{
|
||||
|
@ -929,8 +945,8 @@ void ScrollCallback (float dx, float dy)
|
|||
NSPoint neworg;
|
||||
float scale;
|
||||
|
||||
[ [xyview_i superview] getBounds: &basebounds];
|
||||
[xyview_i convertRectFromSuperview: &basebounds];
|
||||
basebounds = [[xyview_i superview] bounds];
|
||||
[xyview_i convertRect: basebounds fromView: [xyview_i superview]];
|
||||
|
||||
neworg.x = basebounds.origin.x - dx;
|
||||
neworg.y = basebounds.origin.y - dy;
|
||||
|
@ -983,8 +999,8 @@ void DirectionCallback (float dx, float dy)
|
|||
|
||||
qprintf ("changing camera direction");
|
||||
|
||||
pt= theEvent->location;
|
||||
[self convertPoint:&pt fromView:NULL];
|
||||
pt= [theEvent locationInWindow];
|
||||
pt = [self convertPoint:pt fromView:NULL];
|
||||
|
||||
direction[0] = pt.x;
|
||||
direction[1] = pt.y;
|
||||
|
@ -1038,8 +1054,8 @@ void NewCallback (float dx, float dy)
|
|||
|
||||
qprintf ("sizing new brush");
|
||||
|
||||
pt= theEvent->location;
|
||||
[self convertPoint:&pt fromView:NULL];
|
||||
pt= [theEvent locationInWindow];
|
||||
pt = [self convertPoint:pt fromView:NULL];
|
||||
|
||||
neworg[0] = [self snapToGrid: pt.x];
|
||||
neworg[1] = [self snapToGrid: pt.y];
|
||||
|
@ -1095,8 +1111,8 @@ void ControlCallback (float dx, float dy)
|
|||
if ([map_i numSelected] != 1)
|
||||
return NO;
|
||||
|
||||
pt= theEvent->location;
|
||||
[self convertPoint:&pt fromView:NULL];
|
||||
pt= [theEvent locationInWindow];
|
||||
pt = [self convertPoint:pt fromView:NULL];
|
||||
|
||||
dragpoint[0] = pt.x;
|
||||
dragpoint[1] = pt.y;
|
||||
|
@ -1108,8 +1124,8 @@ void ControlCallback (float dx, float dy)
|
|||
|
||||
qprintf ("dragging brush plane");
|
||||
|
||||
pt= theEvent->location;
|
||||
[self convertPoint:&pt fromView:NULL];
|
||||
pt= [theEvent locationInWindow];
|
||||
pt = [self convertPoint:pt fromView:NULL];
|
||||
|
||||
[self dragFrom: theEvent
|
||||
useGrid: YES
|
||||
|
@ -1136,8 +1152,8 @@ void ControlCallback (float dx, float dy)
|
|||
return NO;
|
||||
br = [map_i selectedBrush];
|
||||
|
||||
pt= theEvent->location;
|
||||
[self convertPoint:&pt fromView:NULL];
|
||||
pt= [theEvent locationInWindow];
|
||||
pt = [self convertPoint:pt fromView:NULL];
|
||||
|
||||
// if the XY point is inside the brush, make the point on top
|
||||
p1[0] = pt.x;
|
||||
|
@ -1167,8 +1183,8 @@ void ControlCallback (float dx, float dy)
|
|||
|
||||
qprintf ("dragging brush plane");
|
||||
|
||||
pt= theEvent->location;
|
||||
[self convertPoint:&pt fromView:NULL];
|
||||
pt= [theEvent locationInWindow];
|
||||
pt = [self convertPoint:pt fromView:NULL];
|
||||
|
||||
[self dragFrom: theEvent
|
||||
useGrid: YES
|
||||
|
@ -1203,20 +1219,20 @@ mouseDown
|
|||
vec3_t p1, p2;
|
||||
int flags;
|
||||
|
||||
pt= theEvent->location;
|
||||
[self convertPoint:&pt fromView:NULL];
|
||||
pt= [theEvent locationInWindow];
|
||||
pt = [self convertPoint:pt fromView:NULL];
|
||||
|
||||
p1[0] = p2[0] = pt.x;
|
||||
p1[1] = p2[1] = pt.y;
|
||||
p1[2] = xy_viewnormal[2] * -4096;
|
||||
p2[2] = xy_viewnormal[2] * 4096;
|
||||
|
||||
flags = theEvent->flags & (NS_SHIFTMASK | NS_CONTROLMASK | NS_ALTERNATEMASK | NS_COMMANDMASK);
|
||||
flags = [theEvent modifierFlags] & (NSShiftKeyMask | NSControlKeyMask | NSAlternateKeyMask | NSCommandKeyMask);
|
||||
|
||||
//
|
||||
// shift click to select / deselect a brush from the world
|
||||
//
|
||||
if (flags == NS_SHIFTMASK)
|
||||
if (flags == NSShiftKeyMask)
|
||||
{
|
||||
[map_i selectRay: p1 : p2 : YES];
|
||||
return self;
|
||||
|
@ -1225,7 +1241,7 @@ mouseDown
|
|||
//
|
||||
// cmd-shift click to set a target/targetname entity connection
|
||||
//
|
||||
if (flags == (NS_SHIFTMASK|NS_COMMANDMASK) )
|
||||
if (flags == (NSShiftKeyMask|NSCommandKeyMask) )
|
||||
{
|
||||
[map_i entityConnect: p1 : p2];
|
||||
return self;
|
||||
|
@ -1237,7 +1253,7 @@ mouseDown
|
|||
if ( flags == 0 )
|
||||
{
|
||||
// if double click, position Z checker
|
||||
if (theEvent->data.mouse.click > 1)
|
||||
if ([theEvent clickCount] > 1)
|
||||
{
|
||||
qprintf ("positioned Z checker");
|
||||
[zview_i setPoint: &pt];
|
||||
|
@ -1247,7 +1263,7 @@ mouseDown
|
|||
}
|
||||
|
||||
// check eye
|
||||
if ( [cameraview_i XYmouseDown: &pt flags: theEvent->flags] )
|
||||
if ( [cameraview_i XYmouseDown: &pt flags: [theEvent modifierFlags]] )
|
||||
return self; // camera move
|
||||
|
||||
// check z post
|
||||
|
@ -1279,12 +1295,12 @@ mouseDown
|
|||
//
|
||||
// control click = position and drag camera
|
||||
//
|
||||
if (flags == NS_CONTROLMASK)
|
||||
if (flags == NSControlKeyMask)
|
||||
{
|
||||
[cameraview_i setXYOrigin: &pt];
|
||||
[quakeed_i newinstance];
|
||||
[cameraview_i display];
|
||||
[cameraview_i XYmouseDown: &pt flags: theEvent->flags];
|
||||
[cameraview_i XYmouseDown: &pt flags: [theEvent modifierFlags]];
|
||||
qprintf ("");
|
||||
return self;
|
||||
}
|
||||
|
@ -1292,7 +1308,7 @@ mouseDown
|
|||
//
|
||||
// command click = drag Z checker
|
||||
//
|
||||
if (flags == NS_COMMANDMASK)
|
||||
if (flags == NSCommandKeyMask)
|
||||
{
|
||||
// check single plane dragging
|
||||
[self shearDragFrom: theEvent];
|
||||
|
@ -1309,7 +1325,7 @@ return self;
|
|||
//
|
||||
// alt click = set entire brush texture
|
||||
//
|
||||
if (flags == NS_ALTERNATEMASK)
|
||||
if (flags == NSAlternateKeyMask)
|
||||
{
|
||||
if (drawmode != dr_texture)
|
||||
{
|
||||
|
@ -1325,7 +1341,7 @@ return self;
|
|||
//
|
||||
// ctrl-alt click = set single face texture
|
||||
//
|
||||
if (flags == (NS_CONTROLMASK | NS_ALTERNATEMASK) )
|
||||
if (flags == (NSControlKeyMask | NSAlternateKeyMask) )
|
||||
{
|
||||
if (drawmode != dr_texture)
|
||||
{
|
||||
|
@ -1353,22 +1369,22 @@ rightMouseDown
|
|||
NSPoint pt;
|
||||
int flags;
|
||||
|
||||
pt= theEvent->location;
|
||||
[self convertPoint:&pt fromView:NULL];
|
||||
pt= [theEvent locationInWindow];
|
||||
pt = [self convertPoint:pt fromView:NULL];
|
||||
|
||||
flags = theEvent->flags & (NS_SHIFTMASK | NS_CONTROLMASK | NS_ALTERNATEMASK | NS_COMMANDMASK);
|
||||
flags = [theEvent modifierFlags] & (NSShiftKeyMask | NSControlKeyMask | NSAlternateKeyMask | NSCommandKeyMask);
|
||||
|
||||
if (flags == NS_COMMANDMASK)
|
||||
if (flags == NSCommandKeyMask)
|
||||
{
|
||||
return [self scrollDragFrom: theEvent];
|
||||
}
|
||||
|
||||
if (flags == NS_ALTERNATEMASK)
|
||||
if (flags == NSAlternateKeyMask)
|
||||
{
|
||||
return [clipper_i XYClick: pt];
|
||||
}
|
||||
|
||||
if (flags == 0 || flags == NS_CONTROLMASK)
|
||||
if (flags == 0 || flags == NSControlKeyMask)
|
||||
{
|
||||
return [self directionDragFrom: theEvent];
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
id button1;
|
||||
}
|
||||
|
||||
- initFrame:(NSRect)frameRect button1: b1;
|
||||
- initWithFrame:(NSRect)frameRect button1: b1;
|
||||
- tile;
|
||||
|
||||
@end
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#include "qedefs.h"
|
||||
#include "ZScrollView.h"
|
||||
|
||||
@implementation ZScrollView
|
||||
|
||||
|
@ -10,7 +10,7 @@ Initizes a scroll view with a button at it's lower right corner
|
|||
====================
|
||||
*/
|
||||
|
||||
- initWithFrame:(const NSRect *)frameRect button1:b1
|
||||
- initWithFrame:(NSRect)frameRect button1:b1
|
||||
{
|
||||
[super initWithFrame: frameRect];
|
||||
|
||||
|
@ -18,10 +18,10 @@ Initizes a scroll view with a button at it's lower right corner
|
|||
|
||||
button1 = b1;
|
||||
|
||||
[self setHorizScrollerRequired: YES];
|
||||
[self setVertScrollerRequired: YES];
|
||||
[self setHasHorizontalScroller: YES];
|
||||
[self setHasVerticalScroller: YES];
|
||||
|
||||
[self setBorderType: NS_BEZEL];
|
||||
[self setBorderType: NSBezelBorder];
|
||||
|
||||
return self;
|
||||
}
|
||||
|
@ -40,11 +40,11 @@ Adjust the size for the pop up scale menu
|
|||
NSRect scrollerframe;
|
||||
|
||||
[super tile];
|
||||
[_horizScroller getFrame: &scrollerframe];
|
||||
[button1 setFrame: &scrollerframe];
|
||||
scrollerframe = [_horizScroller frame];
|
||||
[button1 setFrame: scrollerframe];
|
||||
|
||||
scrollerframe.size.width = 0;
|
||||
[_horizScroller setFrame: &scrollerframe];
|
||||
[_horizScroller setFrame: scrollerframe];
|
||||
|
||||
return self;
|
||||
}
|
||||
|
@ -55,16 +55,16 @@ Adjust the size for the pop up scale menu
|
|||
{
|
||||
return YES;
|
||||
}
|
||||
|
||||
/*
|
||||
- superviewSizeChanged:(const NSSize *)oldSize
|
||||
{
|
||||
[super superviewSizeChanged: oldSize];
|
||||
|
||||
[[self docView] newSuperBounds];
|
||||
[[self documentView] newSuperBounds];
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
|
||||
@end
|
||||
|
|
|
@ -2,7 +2,10 @@
|
|||
#define ZView_h
|
||||
|
||||
#include <AppKit/AppKit.h>
|
||||
#include "mathlib.h"
|
||||
|
||||
#include "QF/mathlib.h"
|
||||
|
||||
#include "render.h"
|
||||
|
||||
extern id zview_i;
|
||||
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
|
||||
#include "qedefs.h"
|
||||
#include "ZView.h"
|
||||
#include "ZScrollView.h"
|
||||
#include "QuakeEd.h"
|
||||
#include "Map.h"
|
||||
#include "XYView.h"
|
||||
#include "CameraView.h"
|
||||
|
||||
id zview_i;
|
||||
|
||||
|
@ -8,6 +13,8 @@ id zscrollview_i, zscalemenu_i, zscalebutton_i;
|
|||
float zplane;
|
||||
float zplanedir;
|
||||
|
||||
extern NSBezierPath *path;
|
||||
|
||||
@implementation ZView
|
||||
|
||||
/*
|
||||
|
@ -48,7 +55,7 @@ initWithFrame:
|
|||
|
||||
// initialize the scroll view
|
||||
zscrollview_i = [[ZScrollView alloc]
|
||||
initFrame: frameRect
|
||||
initWithFrame: frameRect
|
||||
button1: zscalebutton_i
|
||||
];
|
||||
[zscrollview_i setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable];
|
||||
|
@ -335,18 +342,18 @@ Rect is in global world (unscaled) coordinates
|
|||
if (y<bottom)
|
||||
y+= gridsize;
|
||||
|
||||
beginUserPath (upath,NO);
|
||||
[path removeAllPoints];
|
||||
|
||||
for ( ; y<=stopy ; y+= gridsize)
|
||||
if (y&31)
|
||||
{
|
||||
UPmoveto (upath, left, y);
|
||||
UPlineto (upath, right, y);
|
||||
[path moveToPoint: NSMakePoint (left, y)];
|
||||
[path lineToPoint: NSMakePoint (right, y)];
|
||||
}
|
||||
|
||||
endUserPath (upath, dps_ustroke);
|
||||
//endUserPath (upath, dps_ustroke);
|
||||
PSsetrgbcolor (0.8,0.8,1.0); // thin grid color
|
||||
sendUserPath (upath);
|
||||
[path stroke];
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -362,17 +369,17 @@ Rect is in global world (unscaled) coordinates
|
|||
if (stopy >= top)
|
||||
stopy -= 32;
|
||||
|
||||
beginUserPath (upath,NO);
|
||||
[path removeAllPoints];
|
||||
|
||||
for ( ; y<=stopy ; y+= 64)
|
||||
{
|
||||
UPmoveto (upath, left, y);
|
||||
UPlineto (upath, right, y);
|
||||
[path moveToPoint: NSMakePoint (left, y)];
|
||||
[path lineToPoint: NSMakePoint (right, y)];
|
||||
}
|
||||
|
||||
endUserPath (upath, dps_ustroke);
|
||||
//endUserPath (upath, dps_ustroke);
|
||||
PSsetgray (12.0/16.0);
|
||||
sendUserPath (upath);
|
||||
[path stroke];
|
||||
|
||||
//
|
||||
// tiles
|
||||
|
@ -387,9 +394,9 @@ Rect is in global world (unscaled) coordinates
|
|||
if (stopy >= top)
|
||||
stopy -= 64;
|
||||
|
||||
beginUserPath (upath,NO);
|
||||
[path removeAllPoints];
|
||||
PSsetgray (0); // for text
|
||||
PSselectfont("Helvetica-Medium",10/scale);
|
||||
GSSetFont (DEFCTXT, [NSFont fontWithName:@"Helvetica-Medium" size: 10/scale]);
|
||||
PSrotate(0);
|
||||
|
||||
for ( ; y<=stopy ; y+= 64)
|
||||
|
@ -400,17 +407,17 @@ Rect is in global world (unscaled) coordinates
|
|||
PSmoveto(left,y);
|
||||
PSshow(text);
|
||||
}
|
||||
UPmoveto (upath, left+24, y);
|
||||
UPlineto (upath, right, y);
|
||||
[path moveToPoint: NSMakePoint (left + 24, y)];
|
||||
[path lineToPoint: NSMakePoint (right, y)];
|
||||
}
|
||||
|
||||
// divider
|
||||
UPmoveto (upath, 0, _bounds.origin.y);
|
||||
UPlineto (upath, 0, _bounds.origin.y + _bounds.size.height);
|
||||
[path moveToPoint: NSMakePoint (0, _bounds.origin.y)];
|
||||
[path lineToPoint: NSMakePoint (0, _bounds.origin.y + _bounds.size.height)];
|
||||
|
||||
endUserPath (upath, dps_ustroke);
|
||||
//endUserPath (upath, dps_ustroke);
|
||||
PSsetgray (10.0/16.0);
|
||||
sendUserPath (upath);
|
||||
[path stroke];
|
||||
|
||||
//
|
||||
// origin
|
||||
|
@ -448,11 +455,11 @@ drawSelf
|
|||
maxheight = -999999;
|
||||
|
||||
// allways draw the entire bar
|
||||
[self getVisibleRect:&visRect];
|
||||
visRect = [self visibleRect];
|
||||
rects = &visRect;
|
||||
|
||||
// erase window
|
||||
NSEraseRect (&rects[0]);
|
||||
NSEraseRect (rects[0]);
|
||||
|
||||
// draw grid
|
||||
[self drawGrid: &rects[0]];
|
||||
|
@ -534,21 +541,27 @@ static NSPoint oldreletive;
|
|||
|
||||
gridsize = [xyview_i gridsize];
|
||||
|
||||
startpt = startevent->location;
|
||||
[self convertPoint:&startpt fromView:NULL];
|
||||
startpt = [startevent locationInWindow];
|
||||
startpt = [self convertPoint:startpt fromView:NULL];
|
||||
|
||||
oldreletive.x = oldreletive.y = 0;
|
||||
reletive.x = 0;
|
||||
|
||||
while (1)
|
||||
{
|
||||
event = [NSApp getNextEvent:
|
||||
NSLeftMouseUpMask | NSLeftMouseDraggedMask
|
||||
| NSRightMouseUpMask | NSRightMouseDraggedMask];
|
||||
if (event->type == NSLeftMouseUp || event->type == NSRightMouseUp)
|
||||
unsigned eventMask = NSLeftMouseUpMask | NSLeftMouseDraggedMask
|
||||
| NSRightMouseUpMask | NSRightMouseDraggedMask
|
||||
| NSApplicationDefinedMask;
|
||||
event = [NSApp nextEventMatchingMask: eventMask
|
||||
untilDate: [NSDate distantFuture]
|
||||
inMode: NSEventTrackingRunLoopMode
|
||||
dequeue: YES];
|
||||
|
||||
if ([event type] == NSLeftMouseUp || [event type] == NSRightMouseUp)
|
||||
break;
|
||||
|
||||
newpt = event->location;
|
||||
[self convertPoint:&newpt fromView:NULL];
|
||||
newpt = [event locationInWindow];
|
||||
newpt = [self convertPoint:newpt fromView:NULL];
|
||||
|
||||
reletive.y = newpt.y - startpt.y;
|
||||
|
||||
|
@ -602,8 +615,8 @@ void ZScrollCallback (float dy)
|
|||
NSPoint neworg;
|
||||
float scale;
|
||||
|
||||
[ [zview_i _super_view] getBounds: &basebounds];
|
||||
[zview_i convertRectFromSuperview: &basebounds];
|
||||
basebounds = [[zview_i superview] bounds];
|
||||
basebounds = [zview_i convertRect: basebounds fromView: [zview_i superview]];
|
||||
|
||||
neworg.y = basebounds.origin.y - dy;
|
||||
|
||||
|
@ -644,8 +657,8 @@ void ZControlCallback (float dy)
|
|||
if ([map_i numSelected] != 1)
|
||||
return NO;
|
||||
|
||||
pt= theEvent->location;
|
||||
[self convertPoint:&pt fromView:NULL];
|
||||
pt= [theEvent locationInWindow];
|
||||
pt = [self convertPoint:pt fromView:NULL];
|
||||
|
||||
dragpoint[0] = origin[0];
|
||||
dragpoint[1] = origin[1];
|
||||
|
@ -657,8 +670,8 @@ void ZControlCallback (float dy)
|
|||
|
||||
qprintf ("dragging brush plane");
|
||||
|
||||
pt= theEvent->location;
|
||||
[self convertPoint:&pt fromView:NULL];
|
||||
pt= [theEvent locationInWindow];
|
||||
pt = [self convertPoint:pt fromView:NULL];
|
||||
|
||||
[self dragFrom: theEvent
|
||||
useGrid: YES
|
||||
|
@ -685,14 +698,14 @@ mouseDown
|
|||
int flags;
|
||||
vec3_t p1;
|
||||
|
||||
pt= theEvent->location;
|
||||
[self convertPoint:&pt fromView:NULL];
|
||||
pt= [theEvent locationInWindow];
|
||||
pt = [self convertPoint:pt fromView:NULL];
|
||||
|
||||
p1[0] = origin[0];
|
||||
p1[1] = origin[1];
|
||||
p1[2] = pt.y;
|
||||
|
||||
flags = theEvent->flags & (NSShiftKeyMask | NSControlKeyMask | NSAlternateKeyMask | NSCommandKeyMask);
|
||||
flags = [theEvent modifierFlags] & (NSShiftKeyMask | NSControlKeyMask | NSAlternateKeyMask | NSCommandKeyMask);
|
||||
|
||||
//
|
||||
// shift click to select / deselect a brush from the world
|
||||
|
@ -719,7 +732,7 @@ mouseDown
|
|||
{
|
||||
[cameraview_i setZOrigin: pt.y];
|
||||
[quakeed_i updateAll];
|
||||
[cameraview_i ZmouseDown: &pt flags:theEvent->flags];
|
||||
[cameraview_i ZmouseDown: &pt flags:[theEvent modifierFlags]];
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -729,7 +742,7 @@ mouseDown
|
|||
if ( flags == 0 )
|
||||
{
|
||||
// check eye
|
||||
if ( [cameraview_i ZmouseDown: &pt flags:theEvent->flags] )
|
||||
if ( [cameraview_i ZmouseDown: &pt flags:[theEvent modifierFlags]] )
|
||||
return;
|
||||
|
||||
if ([map_i numSelected])
|
||||
|
@ -760,10 +773,10 @@ rightMouseDown
|
|||
NSPoint pt;
|
||||
int flags;
|
||||
|
||||
pt= theEvent->location;
|
||||
[self convertPoint:&pt fromView:NULL];
|
||||
pt= [theEvent locationInWindow];
|
||||
pt = [self convertPoint:pt fromView:NULL];
|
||||
|
||||
flags = theEvent->flags & (NSShiftKeyMask | NSControlKeyMask | NSAlternateKeyMask | NSCommandKeyMask);
|
||||
flags = [theEvent modifierFlags] & (NSShiftKeyMask | NSControlKeyMask | NSAlternateKeyMask | NSCommandKeyMask);
|
||||
|
||||
|
||||
//
|
||||
|
@ -808,13 +821,13 @@ modalMoveLoop
|
|||
//
|
||||
goto drawentry;
|
||||
|
||||
while (event->type != NSLeftMouseUp)
|
||||
while ([event type] != NSLeftMouseUp)
|
||||
{
|
||||
//
|
||||
// calculate new point
|
||||
//
|
||||
newpt = event->location;
|
||||
[converter convertPoint:&newpt fromView:NULL];
|
||||
newpt = [event locationInWindow];
|
||||
newpt = [converter convertPoint:newpt fromView:NULL];
|
||||
|
||||
delta[0] = newpt.x-basept->x;
|
||||
delta[1] = newpt.y-basept->y;
|
||||
|
@ -830,10 +843,12 @@ drawentry:
|
|||
//
|
||||
[quakeed_i newinstance];
|
||||
[self display];
|
||||
NSPing ();
|
||||
|
||||
event = [NSApp getNextEvent:
|
||||
NSLeftMouseUpMask | NSLeftMouseDraggedMask];
|
||||
unsigned eventMask = NSLeftMouseUpMask | NSLeftMouseDraggedMask;
|
||||
event = [NSApp nextEventMatchingMask: eventMask
|
||||
untilDate: [NSDate distantFuture]
|
||||
inMode: NSEventTrackingRunLoopMode
|
||||
dequeue: YES];
|
||||
}
|
||||
|
||||
//
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
|
||||
#include "qedefs.h"
|
||||
|
||||
|
||||
char token[MAXTOKEN];
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
#ifndef render_h
|
||||
#define render_h
|
||||
|
||||
#include "SetBrush.h"
|
||||
|
||||
typedef enum {dr_wire, dr_flat, dr_texture} drawmode_t;
|
||||
|
||||
extern int r_width, r_height;
|
||||
extern unsigned *r_picbuffer;
|
||||
extern float *r_zbuffer;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
|
||||
#include "qedefs.h"
|
||||
#include "render.h"
|
||||
|
||||
extern vec3_t xy_viewnormal;
|
||||
|
||||
//define NOLIGHT
|
||||
|
||||
|
@ -511,7 +512,7 @@ REN_BeginCamera
|
|||
===================
|
||||
*/
|
||||
float r_width_2, r_height_3;
|
||||
plane_t frustum[5];
|
||||
plane_t rfrustum[5];
|
||||
|
||||
void REN_BeginCamera (void)
|
||||
{
|
||||
|
@ -520,58 +521,58 @@ void REN_BeginCamera (void)
|
|||
|
||||
|
||||
// clip to right side
|
||||
frustum[0].normal[0] = -1;
|
||||
frustum[0].normal[1] = 0;
|
||||
frustum[0].normal[2] = 1;
|
||||
frustum[0].dist = 0;
|
||||
rfrustum[0].normal[0] = -1;
|
||||
rfrustum[0].normal[1] = 0;
|
||||
rfrustum[0].normal[2] = 1;
|
||||
rfrustum[0].dist = 0;
|
||||
|
||||
// clip to left side
|
||||
frustum[1].normal[0] = 1;
|
||||
frustum[1].normal[1] = 0;
|
||||
frustum[1].normal[2] = 1;
|
||||
frustum[1].dist = 0;
|
||||
rfrustum[1].normal[0] = 1;
|
||||
rfrustum[1].normal[1] = 0;
|
||||
rfrustum[1].normal[2] = 1;
|
||||
rfrustum[1].dist = 0;
|
||||
|
||||
// clip to top side
|
||||
frustum[2].normal[0] = 0;
|
||||
frustum[2].normal[1] = -1;
|
||||
frustum[2].normal[2] = r_height_3 / r_width_2;
|
||||
frustum[2].dist = 0;
|
||||
rfrustum[2].normal[0] = 0;
|
||||
rfrustum[2].normal[1] = -1;
|
||||
rfrustum[2].normal[2] = r_height_3 / r_width_2;
|
||||
rfrustum[2].dist = 0;
|
||||
|
||||
// clip to bottom side
|
||||
frustum[3].normal[0] = 0;
|
||||
frustum[3].normal[1] = 1;
|
||||
frustum[3].normal[2] = 2*r_height_3 / r_width_2;
|
||||
frustum[3].dist = 0;
|
||||
rfrustum[3].normal[0] = 0;
|
||||
rfrustum[3].normal[1] = 1;
|
||||
rfrustum[3].normal[2] = 2*r_height_3 / r_width_2;
|
||||
rfrustum[3].dist = 0;
|
||||
|
||||
// near Z
|
||||
frustum[4].normal[0] = 0;
|
||||
frustum[4].normal[1] = 0;
|
||||
frustum[4].normal[2] = 1;
|
||||
frustum[4].dist = 1;
|
||||
rfrustum[4].normal[0] = 0;
|
||||
rfrustum[4].normal[1] = 0;
|
||||
rfrustum[4].normal[2] = 1;
|
||||
rfrustum[4].dist = 1;
|
||||
}
|
||||
|
||||
|
||||
void REN_BeginXY (void)
|
||||
{
|
||||
frustum[0].normal[0] = 1;
|
||||
frustum[0].normal[1] = 0;
|
||||
frustum[0].normal[2] = 0;
|
||||
frustum[0].dist = 0;
|
||||
rfrustum[0].normal[0] = 1;
|
||||
rfrustum[0].normal[1] = 0;
|
||||
rfrustum[0].normal[2] = 0;
|
||||
rfrustum[0].dist = 0;
|
||||
|
||||
frustum[1].normal[0] = -1;
|
||||
frustum[1].normal[1] = 0;
|
||||
frustum[1].normal[2] = 0;
|
||||
frustum[1].dist = -r_width;
|
||||
rfrustum[1].normal[0] = -1;
|
||||
rfrustum[1].normal[1] = 0;
|
||||
rfrustum[1].normal[2] = 0;
|
||||
rfrustum[1].dist = -r_width;
|
||||
|
||||
frustum[2].normal[0] = 0;
|
||||
frustum[2].normal[1] = 1;
|
||||
frustum[2].normal[2] = 0;
|
||||
frustum[2].dist = 0;
|
||||
rfrustum[2].normal[0] = 0;
|
||||
rfrustum[2].normal[1] = 1;
|
||||
rfrustum[2].normal[2] = 0;
|
||||
rfrustum[2].dist = 0;
|
||||
|
||||
frustum[3].normal[0] = 0;
|
||||
frustum[3].normal[1] = -1;
|
||||
frustum[3].normal[2] = 0;
|
||||
frustum[3].dist = -r_height;
|
||||
rfrustum[3].normal[0] = 0;
|
||||
rfrustum[3].normal[1] = -1;
|
||||
rfrustum[3].normal[2] = 0;
|
||||
rfrustum[3].dist = -r_height;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -623,7 +624,7 @@ void REN_DrawCameraFace (face_t *idpol)
|
|||
//
|
||||
for (i=0 ; i<4 ; i++)
|
||||
{
|
||||
w = ClipWinding (w, &frustum[i]);
|
||||
w = ClipWinding (w, &rfrustum[i]);
|
||||
if (!w)
|
||||
return;
|
||||
}
|
||||
|
@ -698,7 +699,7 @@ void REN_DrawXYFace (face_t *idpol)
|
|||
//
|
||||
for (i=0 ; i<4 ; i++)
|
||||
{
|
||||
w = ClipWinding (w, &frustum[i]);
|
||||
w = ClipWinding (w, &rfrustum[i]);
|
||||
if (!w)
|
||||
return;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue