mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-11 07:12:02 +00:00
- implemented 'copy portal to wall' linedef type.
This commit is contained in:
parent
196c9bc34d
commit
65022b780a
8 changed files with 75 additions and 9 deletions
|
@ -131,9 +131,10 @@ void GLSkyInfo::init(int sky1, PalEntry FadeColor)
|
|||
|
||||
//==========================================================================
|
||||
//
|
||||
// Calculate sky texture
|
||||
// Calculate sky texture for ceiling or floor
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
void GLWall::SkyPlane(sector_t *sector, int plane, bool allowreflect)
|
||||
{
|
||||
FPortal *portal = sector->portals[plane];
|
||||
|
@ -178,6 +179,35 @@ void GLWall::SkyPlane(sector_t *sector, int plane, bool allowreflect)
|
|||
}
|
||||
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// Calculate sky texture for a line
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
void GLWall::SkyLine(line_t *line)
|
||||
{
|
||||
ASkyViewpoint * skyboxx = line->skybox;
|
||||
GLSkyInfo skyinfo;
|
||||
|
||||
// JUSTHIT is used as an indicator that a skybox is in use.
|
||||
// This is to avoid recursion
|
||||
|
||||
if (!gl_noskyboxes && skyboxx && GLRenderer->mViewActor != skyboxx && !(skyboxx->flags&MF_JUSTHIT))
|
||||
{
|
||||
type = RENDERWALL_SKYBOX;
|
||||
skybox = skyboxx;
|
||||
}
|
||||
else
|
||||
{
|
||||
skyinfo.init(line->frontsector->sky, Colormap.FadeColor);
|
||||
type = RENDERWALL_SKY;
|
||||
sky = UniqueSkies.Get(&skyinfo);
|
||||
}
|
||||
PutWall(0);
|
||||
}
|
||||
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// Skies on one sided walls
|
||||
|
@ -191,6 +221,15 @@ void GLWall::SkyNormal(sector_t * fs,vertex_t * v1,vertex_t * v2)
|
|||
zbottom[1]=zceil[1];
|
||||
SkyPlane(fs, sector_t::ceiling, true);
|
||||
|
||||
if (seg->linedef->skybox != NULL)
|
||||
{
|
||||
ztop[0] = zceil[0];
|
||||
ztop[1] = zceil[1];
|
||||
zbottom[0] = zfloor[0];
|
||||
zbottom[1] = zfloor[1];
|
||||
SkyLine(seg->linedef);
|
||||
}
|
||||
|
||||
ztop[0]=zfloor[0];
|
||||
ztop[1]=zfloor[1];
|
||||
zbottom[0]=zbottom[1]=-32768.0f;
|
||||
|
|
|
@ -171,6 +171,7 @@ private:
|
|||
void FloodPlane(int pass);
|
||||
|
||||
void SkyPlane(sector_t *sector, int plane, bool allowmirror);
|
||||
void SkyLine(line_t *line);
|
||||
void SkyNormal(sector_t * fs,vertex_t * v1,vertex_t * v2);
|
||||
void SkyTop(seg_t * seg,sector_t * fs,sector_t * bs,vertex_t * v1,vertex_t * v2);
|
||||
void SkyBottom(seg_t * seg,sector_t * fs,sector_t * bs,vertex_t * v1,vertex_t * v2);
|
||||
|
|
|
@ -1569,13 +1569,16 @@ void GLWall::Process(seg_t *seg, sector_t * frontsector, sector_t * backsector)
|
|||
// sector's sky
|
||||
SkyNormal(frontsector, v1, v2);
|
||||
|
||||
// normal texture
|
||||
gltexture = FMaterial::ValidateTexture(seg->sidedef->GetTexture(side_t::mid), false, true);
|
||||
if (gltexture)
|
||||
if (seg->linedef->skybox == NULL)
|
||||
{
|
||||
DoTexture(RENDERWALL_M1S, seg, (seg->linedef->flags & ML_DONTPEGBOTTOM) > 0,
|
||||
realfront->GetPlaneTexZ(sector_t::ceiling), realfront->GetPlaneTexZ(sector_t::floor), // must come from the original!
|
||||
fch1, fch2, ffh1, ffh2, 0);
|
||||
// normal texture
|
||||
gltexture = FMaterial::ValidateTexture(seg->sidedef->GetTexture(side_t::mid), false, true);
|
||||
if (gltexture)
|
||||
{
|
||||
DoTexture(RENDERWALL_M1S, seg, (seg->linedef->flags & ML_DONTPEGBOTTOM) > 0,
|
||||
realfront->GetPlaneTexZ(sector_t::ceiling), realfront->GetPlaneTexZ(sector_t::floor), // must come from the original!
|
||||
fch1, fch2, ffh1, ffh2, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
else // two sided
|
||||
|
|
|
@ -478,6 +478,11 @@ void P_SerializeWorld (FArchive &arc)
|
|||
}
|
||||
arc << li->args[1] << li->args[2] << li->args[3] << li->args[4];
|
||||
|
||||
if (SaveVersion >= 4531)
|
||||
{
|
||||
arc << li->skybox;
|
||||
}
|
||||
|
||||
for (j = 0; j < 2; j++)
|
||||
{
|
||||
if (li->sidedef[j] == NULL)
|
||||
|
|
|
@ -1044,6 +1044,23 @@ static void CopyPortal(int sectortag, int plane, ASkyViewpoint *origin, fixed_t
|
|||
}
|
||||
}
|
||||
}
|
||||
if (tolines && lines[j].special == Sector_SetPortal &&
|
||||
lines[j].args[1] == 5 &&
|
||||
lines[j].args[3] == sectortag)
|
||||
{
|
||||
if (lines[j].args[0] == 0)
|
||||
{
|
||||
lines[j].skybox = origin;
|
||||
}
|
||||
else
|
||||
{
|
||||
FLineIdIterator itr(lines[j].args[0]);
|
||||
while ((s = itr.Next()) >= 0)
|
||||
{
|
||||
lines[s].skybox = origin;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1057,6 +1057,7 @@ struct line_t
|
|||
sector_t *frontsector, *backsector;
|
||||
int validcount; // if == validcount, already checked
|
||||
int locknumber; // [Dusk] lock number for special
|
||||
TObjPtr<ASkyViewpoint> skybox;
|
||||
};
|
||||
|
||||
// phares 3/14/98
|
||||
|
|
|
@ -76,7 +76,7 @@ const char *GetVersionString();
|
|||
|
||||
// Use 4500 as the base git save version, since it's higher than the
|
||||
// SVN revision ever got.
|
||||
#define SAVEVER 4530
|
||||
#define SAVEVER 4531
|
||||
|
||||
#define SAVEVERSTRINGIFY2(x) #x
|
||||
#define SAVEVERSTRINGIFY(x) SAVEVERSTRINGIFY2(x)
|
||||
|
|
|
@ -39,7 +39,7 @@ define Unsupported (0)
|
|||
286 = 0, Sector_SetPortal(tag,4, 1, 0, 0) // "Portal_HorizonCeiling"
|
||||
287 = 0, Sector_SetPortal(tag,4, 0, 0, 0) // "Portal_HorizonFloor"
|
||||
288 = 0, Sector_SetPortal(tag,4, 2, 0, 0) // "Portal_HorizonFloorCeiling"
|
||||
289 = 0, Unsupported() // "Portal_LineTransfer"
|
||||
289 = 0, Sector_SetPortal(0, 5, 0, tag) // "Portal_LineTransfer"
|
||||
|
||||
// Skybox portals
|
||||
290 = 0, Sector_SetPortal(tag, 2, 1, 1, 0) // "Portal_SkyboxCeiling"
|
||||
|
|
Loading…
Reference in a new issue