mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Merge branch 'tripwire-both-sides' into 'master'
Consistently easy tripwire See merge request KartKrew/Kart!540
This commit is contained in:
commit
fefb012134
1 changed files with 69 additions and 7 deletions
|
|
@ -1939,6 +1939,70 @@ static void P_LoadTextmap(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static fixed_t
|
||||||
|
P_MirrorTextureOffset
|
||||||
|
( fixed_t offset,
|
||||||
|
fixed_t source_width,
|
||||||
|
fixed_t actual_width)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
Adjusting the horizontal alignment is a bit ASS...
|
||||||
|
Textures on the opposite side of the line will begin
|
||||||
|
drawing from the opposite end.
|
||||||
|
|
||||||
|
Start with the texture width and subtract the seg
|
||||||
|
length to account for cropping/wrapping. Subtract the
|
||||||
|
offset to mirror the alignment.
|
||||||
|
*/
|
||||||
|
return source_width - actual_width - offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
static boolean P_CheckLineSideTripWire(line_t *ld, int p)
|
||||||
|
{
|
||||||
|
INT32 n;
|
||||||
|
|
||||||
|
side_t *sda;
|
||||||
|
side_t *sdb;
|
||||||
|
|
||||||
|
terrain_t *terrain;
|
||||||
|
|
||||||
|
boolean tripwire;
|
||||||
|
|
||||||
|
n = ld->sidenum[p];
|
||||||
|
|
||||||
|
if (n == 0xffff)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
sda = &sides[n];
|
||||||
|
|
||||||
|
terrain = K_GetTerrainForTextureNum(sda->midtexture);
|
||||||
|
tripwire = terrain && (terrain->flags & TRF_TRIPWIRE);
|
||||||
|
|
||||||
|
if (tripwire)
|
||||||
|
{
|
||||||
|
// copy midtexture to other side
|
||||||
|
n = ld->sidenum[!p];
|
||||||
|
|
||||||
|
if (n != 0xffff)
|
||||||
|
{
|
||||||
|
fixed_t linelength = FixedHypot(ld->dx, ld->dy);
|
||||||
|
texture_t *tex = textures[sda->midtexture];
|
||||||
|
|
||||||
|
sdb = &sides[n];
|
||||||
|
|
||||||
|
sdb->midtexture = sda->midtexture;
|
||||||
|
sdb->rowoffset = sda->rowoffset;
|
||||||
|
|
||||||
|
// mirror texture alignment
|
||||||
|
sdb->textureoffset = P_MirrorTextureOffset(
|
||||||
|
sda->textureoffset, tex->width * FRACUNIT,
|
||||||
|
linelength);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return tripwire;
|
||||||
|
}
|
||||||
|
|
||||||
static void P_ProcessLinedefsAfterSidedefs(void)
|
static void P_ProcessLinedefsAfterSidedefs(void)
|
||||||
{
|
{
|
||||||
size_t i = numlines;
|
size_t i = numlines;
|
||||||
|
|
@ -1946,16 +2010,14 @@ static void P_ProcessLinedefsAfterSidedefs(void)
|
||||||
|
|
||||||
for (; i--; ld++)
|
for (; i--; ld++)
|
||||||
{
|
{
|
||||||
INT32 midtexture = sides[ld->sidenum[0]].midtexture;
|
|
||||||
terrain_t *terrain = K_GetTerrainForTextureNum(midtexture);
|
|
||||||
|
|
||||||
ld->frontsector = sides[ld->sidenum[0]].sector; //e6y: Can't be -1 here
|
ld->frontsector = sides[ld->sidenum[0]].sector; //e6y: Can't be -1 here
|
||||||
ld->backsector = ld->sidenum[1] != 0xffff ? sides[ld->sidenum[1]].sector : 0;
|
ld->backsector = ld->sidenum[1] != 0xffff ? sides[ld->sidenum[1]].sector : 0;
|
||||||
|
|
||||||
if (terrain != NULL && (terrain->flags & TRF_TRIPWIRE))
|
// Check for tripwire, if either side matches then
|
||||||
{
|
// copy that (mid)texture to the other side.
|
||||||
ld->tripwire = true;
|
ld->tripwire =
|
||||||
}
|
P_CheckLineSideTripWire(ld, 0) ||
|
||||||
|
P_CheckLineSideTripWire(ld, 1);
|
||||||
|
|
||||||
switch (ld->special)
|
switch (ld->special)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue