home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
1,001 Nights of Doom
/
1001NightsOfDoom1995wickedSensations.iso
/
nodebild
/
idbsp10.zip
/
DRAWING.C
< prev
next >
Wrap
C/C++ Source or Header
|
1994-05-28
|
5KB
|
282 lines
/* drawing.m */
#include "idbsp.h"
/* id window_i, view_i; */
STORAGE *window_i,*view_i;
float scale = 0.125;
NXRect worldbounds;
/*
================
=
= IDRectFromPoints
=
= Makes the rectangle just touch the two points
=
================
*/
void IDRectFromPoints(NXRect *rect, NXPoint const *p1, NXPoint const *p2 )
{
/* return a rectangle that encloses the two points */
if (p1->x < p2->x)
{
rect->origin.x = p1->x;
rect->size.width = p2->x - p1->x + 1;
}
else
{
rect->origin.x = p2->x;
rect->size.width = p1->x - p2->x + 1;
}
if (p1->y < p2->y)
{
rect->origin.y = p1->y;
rect->size.height = p2->y - p1->y + 1;
}
else
{
rect->origin.y = p2->y;
rect->size.height = p1->y - p2->y + 1;
}
}
/*
==================
=
= IDEnclosePoint
=
= Make the rect enclose the point if it doesn't allready
=
==================
*/
void IDEnclosePoint (NXRect *rect, NXPoint const *point)
{
float right, top;
right = rect->origin.x + rect->size.width - 1;
top = rect->origin.y + rect->size.height - 1;
if (point->x < rect->origin.x)
rect->origin.x = point->x;
if (point->y < rect->origin.y)
rect->origin.y = point->y;
if (point->x > right)
right = point->x;
if (point->y > top)
top = point->y;
rect->size.width = right - rect->origin.x + 1;
rect->size.height = top - rect->origin.y + 1;
}
/*
===========
=
= BoundLineStore
=
===========
*/
/* void BoundLineStore (id lines_i, NXRect *r) */
void BoundLineStore(STORAGE *lines_i,NXRect *r)
{
int i,c;
worldline_t *line_p;
/* c = [lines_i count]; */
c = lines_i->count;
if (!c)
Error ("BoundLineStore: empty list");
/* line_p = [lines_i elementAt:0]; */
line_p = lines_i->data;
IDRectFromPoints (r, &line_p->p1, &line_p->p2);
for (i=1 ; i<c ; i++)
{
/* line_p = [lines_i elementAt:i]; */
line_p = (worldline_t *)lines_i->data + i;
IDEnclosePoint (r, &line_p->p1);
IDEnclosePoint (r, &line_p->p2);
}
}
/*
===========
=
= DrawLineStore
=
= Draws all of the lines in the given storage object
=
===========
*/
/* void DrawLineStore (id lines_i) */
void DrawLineStore(STORAGE *lines_i)
{
#if 0
int i,c;
worldline_t *line_p;
if (!draw)
return;
/* c = [lines_i count]; */
c = lines_i->count;
for (i=0 ; i<c ; i++)
{
/* line_p = [lines_i elementAt:i]; */
line_p = (worldline_t *)lines_i->data + i;
PSmoveto (line_p->p1.x, line_p->p1.y);
PSlineto (line_p->p2.x, line_p->p2.y);
PSstroke ();
}
NXPing ();
#endif
}
/*
===========
=
= DrawLine
=
= Draws all of the lines in the given storage object
=
===========
*/
void DrawLineDef (maplinedef_t *ld)
{
#if 0
mapvertex_t *v1, *v2;
if (!draw)
return;
/*
v1 = [mapvertexstore_i elementAt: ld->v1];
v2 = [mapvertexstore_i elementAt: ld->v2];
*/
v1 = mapvertexstore_i->data + ld->v1;
v2 = mapvertexstore_i->data + ld->v2;
PSmoveto (v1->x, v1->y);
PSlineto (v2->x, v2->y);
PSstroke ();
NXPing ();
#endif
}
/*
===========
=
= DrawMap
=
===========
*/
void DrawMap (void)
{
NXRect scaled;
BoundLineStore (linestore_i, &worldbounds);
worldbounds.origin.x -= 8;
worldbounds.origin.y -= 8;
worldbounds.size.width += 16;
worldbounds.size.height += 16;
#if 0
if (!draw)
return;
scaled.origin.x = 300;
scaled.origin.y = 80;
scaled.size.width = worldbounds.size.width*scale;
scaled.size.height = worldbounds.size.height* scale;
/*
window_i =
[[Window alloc]
initContent: &scaled
style: NX_TITLEDSTYLE
backing: NX_RETAINED
buttonMask: 0
defer: NO
];
[window_i display];
[window_i orderFront: nil];
view_i = [window_i contentView];
[view_i
setDrawSize: worldbounds.size.width
: worldbounds.size.height];
[view_i
setDrawOrigin: worldbounds.origin.x
: worldbounds.origin.y];
[view_i lockFocus];
PSsetgray (NX_BLACK);
DrawLineStore (linestore_i);
*/
#endif
}
/*
===========
=
= EraseWindow
=
===========
*/
void EraseWindow (void)
{
#if 0
if (!draw)
return;
NXEraseRect (&worldbounds);
NXPing ();
#endif
}
/*
============================
=
= DrawDivLine
=
============================
*/
void DrawDivLine (divline_t *div)
{
#if 0
float vx,vy, dist;
if (!draw)
return;
PSsetgray (NX_BLACK);
dist = sqrt (pow(div->dx,2)+pow(div->dy,2));
vx = div->dx/dist;
vy = div->dy/dist;
dist = MAX(worldbounds.size.width,worldbounds.size.height);
PSmoveto (div->pt.x - vx*dist, div->pt.y - vy*dist);
PSlineto (div->pt.x + vx*dist, div->pt.y + vy*dist);
PSstroke ();
NXPing ();
#endif
}