mirror of
https://github.com/ZDoom/qzdoom-gpl.git
synced 2024-11-24 12:51:09 +00:00
- cleaned up the skybox type detection logic.
This commit is contained in:
parent
0e017f1e2d
commit
196c9bc34d
7 changed files with 45 additions and 37 deletions
|
@ -1121,7 +1121,7 @@ void GLEEHorizonPortal::DrawContents()
|
||||||
horz.plane.GetFromSector(origin->Sector, true);
|
horz.plane.GetFromSector(origin->Sector, true);
|
||||||
horz.lightlevel = gl_ClampLight(origin->Sector->GetCeilingLight());
|
horz.lightlevel = gl_ClampLight(origin->Sector->GetCeilingLight());
|
||||||
horz.colormap = origin->Sector->ColorMap;
|
horz.colormap = origin->Sector->ColorMap;
|
||||||
if (origin->flags & MF_FLOAT)
|
if (origin->special1 == SKYBOX_PLANE)
|
||||||
{
|
{
|
||||||
horz.plane.texheight = viewz + abs(horz.plane.texheight);
|
horz.plane.texheight = viewz + abs(horz.plane.texheight);
|
||||||
}
|
}
|
||||||
|
@ -1134,7 +1134,7 @@ void GLEEHorizonPortal::DrawContents()
|
||||||
horz.plane.GetFromSector(origin->Sector, false);
|
horz.plane.GetFromSector(origin->Sector, false);
|
||||||
horz.lightlevel = gl_ClampLight(origin->Sector->GetFloorLight());
|
horz.lightlevel = gl_ClampLight(origin->Sector->GetFloorLight());
|
||||||
horz.colormap = origin->Sector->ColorMap;
|
horz.colormap = origin->Sector->ColorMap;
|
||||||
if (origin->flags & MF_FLOAT)
|
if (origin->special1 == SKYBOX_PLANE)
|
||||||
{
|
{
|
||||||
horz.plane.texheight = viewz - abs(horz.plane.texheight);
|
horz.plane.texheight = viewz - abs(horz.plane.texheight);
|
||||||
}
|
}
|
||||||
|
|
|
@ -139,39 +139,42 @@ void GLWall::SkyPlane(sector_t *sector, int plane, bool allowreflect)
|
||||||
FPortal *portal = sector->portals[plane];
|
FPortal *portal = sector->portals[plane];
|
||||||
if (portal != NULL)
|
if (portal != NULL)
|
||||||
{
|
{
|
||||||
if (GLPortal::instack[1-plane]) return;
|
if (GLPortal::instack[1 - plane]) return;
|
||||||
type=RENDERWALL_SECTORSTACK;
|
type = RENDERWALL_SECTORSTACK;
|
||||||
this->portal = portal;
|
this->portal = portal;
|
||||||
}
|
}
|
||||||
else if (sector->GetTexture(plane)==skyflatnum)
|
else
|
||||||
{
|
{
|
||||||
GLSkyInfo skyinfo;
|
|
||||||
ASkyViewpoint * skyboxx = sector->GetSkyBox(plane);
|
ASkyViewpoint * skyboxx = sector->GetSkyBox(plane);
|
||||||
|
if (sector->GetTexture(plane) == skyflatnum || (skyboxx != NULL && skyboxx->bAlways))
|
||||||
// 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;
|
GLSkyInfo skyinfo;
|
||||||
skybox=skyboxx;
|
|
||||||
|
// 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(sector->sky, Colormap.FadeColor);
|
||||||
|
type = RENDERWALL_SKY;
|
||||||
|
sky = UniqueSkies.Get(&skyinfo);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else if (allowreflect && sector->GetReflect(plane) > 0)
|
||||||
{
|
{
|
||||||
skyinfo.init(sector->sky, Colormap.FadeColor);
|
if ((plane == sector_t::ceiling && viewz > sector->ceilingplane.d) ||
|
||||||
type = RENDERWALL_SKY;
|
(plane == sector_t::floor && viewz < -sector->floorplane.d)) return;
|
||||||
sky=UniqueSkies.Get(&skyinfo);
|
type = RENDERWALL_PLANEMIRROR;
|
||||||
|
planemirror = plane == sector_t::ceiling ? §or->ceilingplane : §or->floorplane;
|
||||||
}
|
}
|
||||||
|
else return;
|
||||||
|
PutWall(0);
|
||||||
}
|
}
|
||||||
else if (allowreflect && sector->GetReflect(plane) > 0)
|
|
||||||
{
|
|
||||||
if ((plane == sector_t::ceiling && viewz > sector->ceilingplane.d) ||
|
|
||||||
(plane == sector_t::floor && viewz < -sector->floorplane.d)) return;
|
|
||||||
type=RENDERWALL_PLANEMIRROR;
|
|
||||||
planemirror = plane == sector_t::ceiling? §or->ceilingplane : §or->floorplane;
|
|
||||||
}
|
|
||||||
else return;
|
|
||||||
PutWall(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -180,7 +180,7 @@ void GLWall::PutWall(bool translucent)
|
||||||
if (!portal)
|
if (!portal)
|
||||||
{
|
{
|
||||||
// either a regulat skybox or an Eternity-style horizon
|
// either a regulat skybox or an Eternity-style horizon
|
||||||
if (skybox->flags7 & MF7_HANDLENODELAY) portal = new GLEEHorizonPortal(skybox);
|
if (skybox->special1 != SKYBOX_MAP) portal = new GLEEHorizonPortal(skybox);
|
||||||
else portal = new GLSkyboxPortal(skybox);
|
else portal = new GLSkyboxPortal(skybox);
|
||||||
}
|
}
|
||||||
portal->AddLine(this);
|
portal->AddLine(this);
|
||||||
|
|
|
@ -1465,8 +1465,7 @@ void P_SpawnSpecials (void)
|
||||||
line_t *line = &lines[i];
|
line_t *line = &lines[i];
|
||||||
ASkyViewpoint *origin = Spawn<ASkyViewpoint>(0, 0, 0, NO_REPLACE);
|
ASkyViewpoint *origin = Spawn<ASkyViewpoint>(0, 0, 0, NO_REPLACE);
|
||||||
origin->Sector = line->frontsector;
|
origin->Sector = line->frontsector;
|
||||||
origin->flags7 |= MF7_HANDLENODELAY; // mark as 'special'
|
origin->special1 = line->args[1] == 3? SKYBOX_PLANE:SKYBOX_HORIZON;
|
||||||
if (line->args[1] == 3) origin->flags |= MF_FLOAT; // well, it actually does 'float'... :P
|
|
||||||
|
|
||||||
CopyPortal(line->args[0], line->args[2], origin, 0, true);
|
CopyPortal(line->args[0], line->args[2], origin, 0, true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1088,7 +1088,7 @@ void R_Subsector (subsector_t *sub)
|
||||||
}
|
}
|
||||||
|
|
||||||
skybox = frontsector->GetSkyBox(sector_t::ceiling);
|
skybox = frontsector->GetSkyBox(sector_t::ceiling);
|
||||||
if (skybox->flags7 & MF7_HANDLENODELAY) skybox = NULL; // HW renderer only.
|
if (skybox->special1 != SKYBOX_MAP) skybox = NULL; // HW renderer only.
|
||||||
|
|
||||||
ceilingplane = frontsector->ceilingplane.PointOnSide(viewx, viewy, viewz) > 0 ||
|
ceilingplane = frontsector->ceilingplane.PointOnSide(viewx, viewy, viewz) > 0 ||
|
||||||
frontsector->GetTexture(sector_t::ceiling) == skyflatnum ||
|
frontsector->GetTexture(sector_t::ceiling) == skyflatnum ||
|
||||||
|
@ -1131,7 +1131,7 @@ void R_Subsector (subsector_t *sub)
|
||||||
// killough 10/98: add support for skies transferred from sidedefs
|
// killough 10/98: add support for skies transferred from sidedefs
|
||||||
|
|
||||||
skybox = frontsector->GetSkyBox(sector_t::floor);
|
skybox = frontsector->GetSkyBox(sector_t::floor);
|
||||||
if (skybox->flags7 & MF7_HANDLENODELAY) skybox = NULL; // HW renderer only.
|
if (skybox->special1 != SKYBOX_MAP) skybox = NULL; // HW renderer only.
|
||||||
|
|
||||||
floorplane = frontsector->floorplane.PointOnSide(viewx, viewy, viewz) > 0 || // killough 3/7/98
|
floorplane = frontsector->floorplane.PointOnSide(viewx, viewy, viewz) > 0 || // killough 3/7/98
|
||||||
frontsector->GetTexture(sector_t::floor) == skyflatnum ||
|
frontsector->GetTexture(sector_t::floor) == skyflatnum ||
|
||||||
|
|
|
@ -24,6 +24,12 @@
|
||||||
|
|
||||||
#include "textures/textures.h"
|
#include "textures/textures.h"
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
SKYBOX_MAP = 0,
|
||||||
|
SKYBOX_PLANE,
|
||||||
|
SKYBOX_HORIZON
|
||||||
|
};
|
||||||
|
|
||||||
extern FTextureID skyflatnum;
|
extern FTextureID skyflatnum;
|
||||||
extern fixed_t sky1cyl, sky2cyl;
|
extern fixed_t sky1cyl, sky2cyl;
|
||||||
|
|
|
@ -33,12 +33,12 @@ define Unsupported (0)
|
||||||
282 = 0, Sector_Attach3DMidtex(tag, 0, 1) // "3DMidTex_MoveWithCeiling"
|
282 = 0, Sector_Attach3DMidtex(tag, 0, 1) // "3DMidTex_MoveWithCeiling"
|
||||||
|
|
||||||
// Plane portals are not supported in ZDoom, though they probably wouldn't be too hard to implement.
|
// Plane portals are not supported in ZDoom, though they probably wouldn't be too hard to implement.
|
||||||
283 = 0, Unsupported() // "Portal_PlaneCeiling"
|
283 = 0, Sector_SetPortal(tag,3, 1, 0, 0) // "Portal_PlaneCeiling"
|
||||||
284 = 0, Unsupported() // "Portal_PlaneFloor"
|
284 = 0, Sector_SetPortal(tag,3, 0, 0, 0) // "Portal_PlaneFloor"
|
||||||
285 = 0, Unsupported() // "Portal_PlaneFloorCeiling"
|
285 = 0, Sector_SetPortal(tag,3, 2, 0, 0) // "Portal_PlaneFloorCeiling"
|
||||||
286 = 0, Unsupported() // "Portal_HorizonCeiling"
|
286 = 0, Sector_SetPortal(tag,4, 1, 0, 0) // "Portal_HorizonCeiling"
|
||||||
287 = 0, Unsupported() // "Portal_HorizonFloor"
|
287 = 0, Sector_SetPortal(tag,4, 0, 0, 0) // "Portal_HorizonFloor"
|
||||||
288 = 0, Unsupported() // "Portal_HorizonFloorCeiling"
|
288 = 0, Sector_SetPortal(tag,4, 2, 0, 0) // "Portal_HorizonFloorCeiling"
|
||||||
289 = 0, Unsupported() // "Portal_LineTransfer"
|
289 = 0, Unsupported() // "Portal_LineTransfer"
|
||||||
|
|
||||||
// Skybox portals
|
// Skybox portals
|
||||||
|
|
Loading…
Reference in a new issue