# Conflicts:
#	src/events.cpp
#	src/events.h
#	src/p_spec.cpp
#	wadsrc/static/zscript/events.txt
This commit is contained in:
Rachael Alexanderson 2018-03-26 07:12:27 -04:00
commit 93601d911f
4 changed files with 43 additions and 10 deletions

View file

@ -397,7 +397,9 @@ void FFlatVertexBuffer::CreateFlatVBO()
{
for(auto &sec : level.sectors)
{
CreateVertices(h, &sec, sec.GetSecPlane(h), h == sector_t::floor);
secplane_t& plane = sec.GetSecPlane(h);
CreateVertices(h, &sec, plane, h == sector_t::floor);
plane.vbonormal = plane.normal;
}
}
@ -464,15 +466,21 @@ void FFlatVertexBuffer::CreateVBO()
void FFlatVertexBuffer::CheckPlanes(sector_t *sector)
{
if (sector->GetPlaneTexZ(sector_t::ceiling) != sector->vboheight[sector_t::ceiling])
for (int i = sector_t::floor; i <= sector_t::ceiling; i++)
{
UpdatePlaneVertices(sector, sector_t::ceiling);
sector->vboheight[sector_t::ceiling] = sector->GetPlaneTexZ(sector_t::ceiling);
}
if (sector->GetPlaneTexZ(sector_t::floor) != sector->vboheight[sector_t::floor])
{
UpdatePlaneVertices(sector, sector_t::floor);
sector->vboheight[sector_t::floor] = sector->GetPlaneTexZ(sector_t::floor);
if (sector->GetPlaneTexZ(i) != sector->vboheight[i])
{
UpdatePlaneVertices(sector, i);
sector->vboheight[i] = sector->GetPlaneTexZ(i);
continue;
}
secplane_t &splane = sector->GetSecPlane(i);
if (splane.normal != splane.vbonormal)
{
UpdatePlaneVertices(sector, i);
splane.vbonormal = splane.normal;
}
}
}

View file

@ -6757,6 +6757,21 @@ void PIT_CeilingRaise(AActor *thing, FChangePosition *cpos)
//
//=============================================================================
//
DEFINE_ACTION_FUNCTION(_Sector, ChangeSector)
{
PARAM_SELF_STRUCT_PROLOGUE(sector_t);
PARAM_INT(crunch);
PARAM_FLOAT(amt);
PARAM_INT(floorOrCeil);
PARAM_BOOL(isreset);
PARAM_BOOL(instant);
bool b = P_ChangeSector(self, crunch, amt, floorOrCeil, isreset, instant);
ACTION_RETURN_BOOL(b);
}
bool P_ChangeSector(sector_t *sector, int crunch, double amt, int floorOrCeil, bool isreset, bool instant)
{
FChangePosition cpos;

View file

@ -288,6 +288,7 @@ struct secplane_t
//private:
DVector3 normal;
double D, negiC; // negative iC because that also saves a negation in all methods using this.
DVector3 vbonormal; // [ZZ] for opengl update. it's critical that this member is the last one, so that {{x,y,z},...} works properly
public:
friend FSerializer &Serialize(FSerializer &arc, const char *key, secplane_t &p, secplane_t *def);

View file

@ -314,7 +314,7 @@ struct Sector native play
SECF_NOMODIFY = SECF_SECRET|SECF_WASSECRET, // not modifiable by Sector_ChangeFlags
SECF_SPECIALFLAGS = SECF_DAMAGEFLAGS|SECF_FRICTION|SECF_PUSH, // these flags originate from 'special and must be transferrable by floor thinkers
}
enum EMoveResult
{
MOVE_OK,
@ -333,6 +333,15 @@ struct Sector native play
native int Index();
enum EChangeSectorMode
{
CS_Floor = 0,
CS_Ceiling = 1,
CS_3DMidTex = 2
};
native bool ChangeSector(int crunch, double amt, EChangeSectorMode mode/*floorOrCeiling*/, bool isreset, bool instant);
native double, Sector, F3DFloor NextHighestCeilingAt(double x, double y, double bottomz, double topz, int flags = 0);
native double, Sector, F3DFloor NextLowestFloorAt(double x, double y, double z, int flags = 0, double steph = 0);