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)
|
||||
{
|
||||
size_t i = numlines;
|
||||
|
|
@ -1946,16 +2010,14 @@ static void P_ProcessLinedefsAfterSidedefs(void)
|
|||
|
||||
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->backsector = ld->sidenum[1] != 0xffff ? sides[ld->sidenum[1]].sector : 0;
|
||||
|
||||
if (terrain != NULL && (terrain->flags & TRF_TRIPWIRE))
|
||||
{
|
||||
ld->tripwire = true;
|
||||
}
|
||||
// Check for tripwire, if either side matches then
|
||||
// copy that (mid)texture to the other side.
|
||||
ld->tripwire =
|
||||
P_CheckLineSideTripWire(ld, 0) ||
|
||||
P_CheckLineSideTripWire(ld, 1);
|
||||
|
||||
switch (ld->special)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue