mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-11-10 23:02:03 +00:00
Engine: add funtion 'yax_vnextsec(wall, cf)' to C API. It's often useful when
dealing with sectors on the two sides of a bunch. Make yax_globallev and yax_globalbunch variables non-static. Rewrite a TROR-related bit in the engine code using the new function. git-svn-id: https://svn.eduke32.com/eduke32@2018 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
3b634f28ae
commit
7f1133a493
3 changed files with 29 additions and 16 deletions
|
@ -99,6 +99,7 @@ void yax_setbunch(int16_t i, int16_t cf, int16_t bunchnum);
|
||||||
void yax_setbunches(int16_t i, int16_t cb, int16_t fb);
|
void yax_setbunches(int16_t i, int16_t cb, int16_t fb);
|
||||||
int16_t yax_getnextwall(int16_t wal, int16_t cf);
|
int16_t yax_getnextwall(int16_t wal, int16_t cf);
|
||||||
void yax_setnextwall(int16_t wal, int16_t cf, int16_t thenextwall);
|
void yax_setnextwall(int16_t wal, int16_t cf, int16_t thenextwall);
|
||||||
|
int16_t yax_vnextsec(int16_t line, int16_t cf);
|
||||||
void yax_update(int32_t resetstat);
|
void yax_update(int32_t resetstat);
|
||||||
int32_t yax_getneighborsect(int32_t x, int32_t y, int32_t sectnum, int32_t cf, int16_t *ret_bunchnum);
|
int32_t yax_getneighborsect(int32_t x, int32_t y, int32_t sectnum, int32_t cf, int16_t *ret_bunchnum);
|
||||||
|
|
||||||
|
|
|
@ -261,9 +261,9 @@ void yax_updategrays(int32_t posze)
|
||||||
int32_t g_nodraw = 0;
|
int32_t g_nodraw = 0;
|
||||||
int32_t scansector_retfast = 0;
|
int32_t scansector_retfast = 0;
|
||||||
static int32_t scansector_collectsprites = 1;
|
static int32_t scansector_collectsprites = 1;
|
||||||
static int32_t yax_globalcf = -1;
|
static int32_t yax_globalcf = -1, yax_nomaskpass=0;
|
||||||
static int32_t yax_globallev = YAX_MAXDRAWS;
|
int32_t yax_globallev = YAX_MAXDRAWS;
|
||||||
static int32_t yax_globalbunch = -1;
|
int32_t yax_globalbunch = -1;
|
||||||
|
|
||||||
// duplicated tsprites
|
// duplicated tsprites
|
||||||
// [i]:
|
// [i]:
|
||||||
|
@ -277,11 +277,16 @@ static int16_t yax_tsprite[1 + 2*YAX_MAXDRAWS][MAXSPRITESONSCREEN];
|
||||||
int16_t yax_bunchnum[MAXSECTORS][2];
|
int16_t yax_bunchnum[MAXSECTORS][2];
|
||||||
int16_t yax_nextwall[MAXWALLS][2];
|
int16_t yax_nextwall[MAXWALLS][2];
|
||||||
|
|
||||||
static int32_t yax_islockededge(int16_t line, int16_t cf)
|
static int32_t yax_islockededge(int32_t line, int32_t cf)
|
||||||
{
|
{
|
||||||
return !!(wall[line].cstat&(YAX_NEXTWALLBIT(cf)));
|
return !!(wall[line].cstat&(YAX_NEXTWALLBIT(cf)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int32_t yax_isislandwall(int32_t line, int32_t cf)
|
||||||
|
{
|
||||||
|
return (yax_vnextsec(line, cf)>=0);
|
||||||
|
}
|
||||||
|
|
||||||
#define YAX_BUNCHNUM(Sect, Cf) (*(§or[Sect].ceilingxpanning + 8*Cf))
|
#define YAX_BUNCHNUM(Sect, Cf) (*(§or[Sect].ceilingxpanning + 8*Cf))
|
||||||
|
|
||||||
//// bunch getters/setters
|
//// bunch getters/setters
|
||||||
|
@ -374,6 +379,19 @@ void yax_setnextwall(int16_t wal, int16_t cf, int16_t thenextwall)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// make one step in the vertical direction, and if the wall we arrive at
|
||||||
|
// is red, return its nextsector.
|
||||||
|
int16_t yax_vnextsec(int16_t line, int16_t cf)
|
||||||
|
{
|
||||||
|
int16_t ynw = yax_getnextwall(line, cf);
|
||||||
|
|
||||||
|
if (ynw < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
return wall[ynw].nextsector;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//// in-struct --> array transfer (only resetstat==0); list construction
|
//// in-struct --> array transfer (only resetstat==0); list construction
|
||||||
// resetstat: 0: reset and read data from structs and construct linked lists etc.
|
// resetstat: 0: reset and read data from structs and construct linked lists etc.
|
||||||
// 1: only reset
|
// 1: only reset
|
||||||
|
@ -4607,11 +4625,9 @@ static void drawalls(int32_t bunch)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((nextsectnum < 0) || (wal->cstat&32)) //White/1-way wall
|
if ((nextsectnum < 0) || (wal->cstat&32)) //White/1-way wall
|
||||||
{
|
{
|
||||||
#ifdef YAX_ENABLE
|
|
||||||
int16_t ynw[2];
|
|
||||||
#endif
|
|
||||||
globalorientation = (int32_t)wal->cstat;
|
globalorientation = (int32_t)wal->cstat;
|
||||||
if (nextsectnum < 0) globalpicnum = wal->picnum;
|
if (nextsectnum < 0) globalpicnum = wal->picnum;
|
||||||
else globalpicnum = wal->overpicnum;
|
else globalpicnum = wal->overpicnum;
|
||||||
|
@ -4643,14 +4659,11 @@ static void drawalls(int32_t bunch)
|
||||||
|
|
||||||
if (gotswall == 0) { gotswall = 1; prepwall(z,wal); }
|
if (gotswall == 0) { gotswall = 1; prepwall(z,wal); }
|
||||||
wallscan(x1,x2,uplc,dplc,swall,lwall);
|
wallscan(x1,x2,uplc,dplc,swall,lwall);
|
||||||
|
|
||||||
#ifdef YAX_ENABLE
|
#ifdef YAX_ENABLE
|
||||||
// TODO: slopes?
|
// TODO: slopes?
|
||||||
ynw[0] = yax_getnextwall(wallnum, 0);
|
|
||||||
ynw[1] = yax_getnextwall(wallnum, 1);
|
|
||||||
|
|
||||||
if (globalposz > sec->floorz && ((ynw[1]>=0 && wall[ynw[1]].nextwall>=0)
|
if (globalposz > sec->floorz && yax_isislandwall(wallnum, YAX_FLOOR))
|
||||||
// || (nextsectnum>=0 && yax_getbunch(sectnum,1)>=0)
|
|
||||||
))
|
|
||||||
{
|
{
|
||||||
for (x=x1; x<=x2; x++)
|
for (x=x1; x<=x2; x++)
|
||||||
if (dplc[x] > umost[x] && umost[x] <= dmost[x])
|
if (dplc[x] > umost[x] && umost[x] <= dmost[x])
|
||||||
|
@ -4659,9 +4672,7 @@ static void drawalls(int32_t bunch)
|
||||||
if (umost[x] > dmost[x]) numhits--;
|
if (umost[x] > dmost[x]) numhits--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (globalposz < sec->ceilingz && ((ynw[0]>=0 && wall[ynw[0]].nextwall>=0)
|
else if (globalposz < sec->ceilingz && yax_isislandwall(wallnum, YAX_CEILING))
|
||||||
// || (nextsectnum>=0 && yax_getbunch(sectnum,0)>=0)
|
|
||||||
))
|
|
||||||
{
|
{
|
||||||
for (x=x1; x<=x2; x++)
|
for (x=x1; x<=x2; x++)
|
||||||
if (uplc[x] < dmost[x] && umost[x] <= dmost[x])
|
if (uplc[x] < dmost[x] && umost[x] <= dmost[x])
|
||||||
|
|
|
@ -76,8 +76,9 @@ int32_t animateoffs(int16_t tilenum, int16_t fakevar);
|
||||||
extern void polymost_scansector(int32_t sectnum);
|
extern void polymost_scansector(int32_t sectnum);
|
||||||
#endif
|
#endif
|
||||||
int32_t engine_addtsprite(int16_t z, int16_t sectnum);
|
int32_t engine_addtsprite(int16_t z, int16_t sectnum);
|
||||||
extern int32_t g_nodraw, scansector_retfast;
|
|
||||||
#ifdef YAX_ENABLE
|
#ifdef YAX_ENABLE
|
||||||
|
extern int32_t g_nodraw, scansector_retfast;
|
||||||
|
extern int32_t yax_globallev, yax_globalbunch;
|
||||||
extern uint8_t haveymost[YAX_MAXBUNCHES>>3];
|
extern uint8_t haveymost[YAX_MAXBUNCHES>>3];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue