From 8535a973cf3e905e5229a3db94d5d8737d67218f Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Fri, 8 Apr 2016 14:18:46 +0200 Subject: [PATCH] - made MoveAttached, MoveCeiling and MoveFloor members of sector_t instead of DMover. - call MoveFloor and MoveCeiling directly in FS's floorheight and ceilingheight functions and remove the dummy thinkers it had to use before. --- src/dsectoreffect.cpp | 146 +++++++++++++++++------------------ src/dsectoreffect.h | 14 ---- src/fragglescript/t_func.cpp | 55 ++----------- src/p_ceiling.cpp | 4 +- src/p_doors.cpp | 12 +-- src/p_floor.cpp | 14 ++-- src/p_pillar.cpp | 12 +-- src/p_plats.cpp | 4 +- src/r_defs.h | 17 ++++ 9 files changed, 119 insertions(+), 159 deletions(-) diff --git a/src/dsectoreffect.cpp b/src/dsectoreffect.cpp index 8cc8f4166..499eb96c8 100644 --- a/src/dsectoreffect.cpp +++ b/src/dsectoreffect.cpp @@ -133,17 +133,17 @@ DMovingCeiling::DMovingCeiling (sector_t *sector) interpolation = sector->SetInterpolation(sector_t::CeilingMove, true); } -bool DMover::MoveAttached(int crush, double move, int floorOrCeiling, bool resetfailed) +bool sector_t::MoveAttached(int crush, double move, int floorOrCeiling, bool resetfailed) { - if (!P_Scroll3dMidtex(m_Sector, crush, move, !!floorOrCeiling) && resetfailed) + if (!P_Scroll3dMidtex(this, crush, move, !!floorOrCeiling) && resetfailed) { - P_Scroll3dMidtex(m_Sector, crush, -move, !!floorOrCeiling); + P_Scroll3dMidtex(this, crush, -move, !!floorOrCeiling); return false; } - if (!P_MoveLinkedSectors(m_Sector, crush, move, !!floorOrCeiling) && resetfailed) + if (!P_MoveLinkedSectors(this, crush, move, !!floorOrCeiling) && resetfailed) { - P_MoveLinkedSectors(m_Sector, crush, -move, !!floorOrCeiling); - P_Scroll3dMidtex(m_Sector, crush, -move, !!floorOrCeiling); + P_MoveLinkedSectors(this, crush, -move, !!floorOrCeiling); + P_Scroll3dMidtex(this, crush, -move, !!floorOrCeiling); return false; } return true; @@ -155,7 +155,7 @@ bool DMover::MoveAttached(int crush, double move, int floorOrCeiling, bool reset // (Use -1 to prevent it from trying to crush) // dest is the desired d value for the plane // -EMoveResult DMover::MoveFloor(double speed, double dest, int crush, int direction, bool hexencrush) +EMoveResult sector_t::MoveFloor(double speed, double dest, int crush, int direction, bool hexencrush) { bool flag; double lastpos; @@ -163,30 +163,30 @@ EMoveResult DMover::MoveFloor(double speed, double dest, int crush, int directio double move; //double destheight; //jff 02/04/98 used to keep floors/ceilings // from moving thru each other - lastpos = m_Sector->floorplane.fD(); + lastpos = floorplane.fD(); switch (direction) { case -1: // DOWN - movedest = m_Sector->floorplane.GetChangedHeight(-speed); + movedest = floorplane.GetChangedHeight(-speed); if (movedest >= dest) { - move = m_Sector->floorplane.HeightDiff(lastpos, dest); + move = floorplane.HeightDiff(lastpos, dest); if (!MoveAttached(crush, move, 0, true)) return EMoveResult::crushed; - m_Sector->floorplane.setD(dest); - flag = P_ChangeSector(m_Sector, crush, move, 0, false); + floorplane.setD(dest); + flag = P_ChangeSector(this, crush, move, 0, false); if (flag) { - m_Sector->floorplane.setD(lastpos); - P_ChangeSector(m_Sector, crush, -move, 0, true); + floorplane.setD(lastpos); + P_ChangeSector(this, crush, -move, 0, true); MoveAttached(crush, -move, 0, false); } else { - m_Sector->ChangePlaneTexZ(sector_t::floor, move); - m_Sector->AdjustFloorClip(); + ChangePlaneTexZ(sector_t::floor, move); + AdjustFloorClip(); } return EMoveResult::pastdest; } @@ -194,20 +194,20 @@ EMoveResult DMover::MoveFloor(double speed, double dest, int crush, int directio { if (!MoveAttached(crush, -speed, 0, true)) return EMoveResult::crushed; - m_Sector->floorplane.setD(movedest); + floorplane.setD(movedest); - flag = P_ChangeSector(m_Sector, crush, -speed, 0, false); + flag = P_ChangeSector(this, crush, -speed, 0, false); if (flag) { - m_Sector->floorplane.setD(lastpos); - P_ChangeSector(m_Sector, crush, speed, 0, true); + floorplane.setD(lastpos); + P_ChangeSector(this, crush, speed, 0, true); MoveAttached(crush, speed, 0, false); return EMoveResult::crushed; } else { - m_Sector->ChangePlaneTexZ(sector_t::floor, m_Sector->floorplane.HeightDiff(lastpos)); - m_Sector->AdjustFloorClip(); + ChangePlaneTexZ(sector_t::floor, floorplane.HeightDiff(lastpos)); + AdjustFloorClip(); } } break; @@ -216,34 +216,34 @@ EMoveResult DMover::MoveFloor(double speed, double dest, int crush, int directio // UP // jff 02/04/98 keep floor from moving thru ceilings // [RH] not so easy with arbitrary planes - //destheight = (dest < m_Sector->ceilingheight) ? dest : m_Sector->ceilingheight; - if (!m_Sector->ceilingplane.isSlope() && !m_Sector->floorplane.isSlope() && - (!(i_compatflags2 & COMPATF2_FLOORMOVE) && -dest > m_Sector->ceilingplane.fD())) + //destheight = (dest < ceilingheight) ? dest : ceilingheight; + if (!ceilingplane.isSlope() && !floorplane.isSlope() && + (!(i_compatflags2 & COMPATF2_FLOORMOVE) && -dest > ceilingplane.fD())) { - dest = -m_Sector->ceilingplane.fD(); + dest = -ceilingplane.fD(); } - movedest = m_Sector->floorplane.GetChangedHeight(speed); + movedest = floorplane.GetChangedHeight(speed); if (movedest <= dest) { - move = m_Sector->floorplane.HeightDiff(lastpos, dest); + move = floorplane.HeightDiff(lastpos, dest); if (!MoveAttached(crush, move, 0, true)) return EMoveResult::crushed; - m_Sector->floorplane.setD(dest); + floorplane.setD(dest); - flag = P_ChangeSector(m_Sector, crush, move, 0, false); + flag = P_ChangeSector(this, crush, move, 0, false); if (flag) { - m_Sector->floorplane.setD(lastpos); - P_ChangeSector(m_Sector, crush, -move, 0, true); + floorplane.setD(lastpos); + P_ChangeSector(this, crush, -move, 0, true); MoveAttached(crush, -move, 0, false); } else { - m_Sector->ChangePlaneTexZ(sector_t::floor, move); - m_Sector->AdjustFloorClip(); + ChangePlaneTexZ(sector_t::floor, move); + AdjustFloorClip(); } return EMoveResult::pastdest; } @@ -251,32 +251,32 @@ EMoveResult DMover::MoveFloor(double speed, double dest, int crush, int directio { if (!MoveAttached(crush, speed, 0, true)) return EMoveResult::crushed; - m_Sector->floorplane.setD(movedest); + floorplane.setD(movedest); // COULD GET CRUSHED - flag = P_ChangeSector(m_Sector, crush, speed, 0, false); + flag = P_ChangeSector(this, crush, speed, 0, false); if (flag) { if (crush >= 0 && !hexencrush) { - m_Sector->ChangePlaneTexZ(sector_t::floor, m_Sector->floorplane.HeightDiff(lastpos)); - m_Sector->AdjustFloorClip(); + ChangePlaneTexZ(sector_t::floor, floorplane.HeightDiff(lastpos)); + AdjustFloorClip(); return EMoveResult::crushed; } - m_Sector->floorplane.setD(lastpos); - P_ChangeSector(m_Sector, crush, -speed, 0, true); + floorplane.setD(lastpos); + P_ChangeSector(this, crush, -speed, 0, true); MoveAttached(crush, -speed, 0, false); return EMoveResult::crushed; } - m_Sector->ChangePlaneTexZ(sector_t::floor, m_Sector->floorplane.HeightDiff(lastpos)); - m_Sector->AdjustFloorClip(); + ChangePlaneTexZ(sector_t::floor, floorplane.HeightDiff(lastpos)); + AdjustFloorClip(); } break; } return EMoveResult::ok; } -EMoveResult DMover::MoveCeiling(double speed, double dest, int crush, int direction, bool hexencrush) +EMoveResult sector_t::MoveCeiling(double speed, double dest, int crush, int direction, bool hexencrush) { bool flag; double lastpos; @@ -285,38 +285,38 @@ EMoveResult DMover::MoveCeiling(double speed, double dest, int crush, int direct //double destheight; //jff 02/04/98 used to keep floors/ceilings // from moving thru each other - lastpos = m_Sector->ceilingplane.fD(); + lastpos = ceilingplane.fD(); switch (direction) { case -1: // DOWN // jff 02/04/98 keep ceiling from moving thru floors // [RH] not so easy with arbitrary planes - //destheight = (dest > m_Sector->floorheight) ? dest : m_Sector->floorheight; - if (!m_Sector->ceilingplane.isSlope() && !m_Sector->floorplane.isSlope() && - (!(i_compatflags2 & COMPATF2_FLOORMOVE) && dest < -m_Sector->floorplane.fD())) + //destheight = (dest > floorheight) ? dest : floorheight; + if (!ceilingplane.isSlope() && !floorplane.isSlope() && + (!(i_compatflags2 & COMPATF2_FLOORMOVE) && dest < -floorplane.fD())) { - dest = -m_Sector->floorplane.fD(); + dest = -floorplane.fD(); } - movedest = m_Sector->ceilingplane.GetChangedHeight (-speed); + movedest = ceilingplane.GetChangedHeight (-speed); if (movedest <= dest) { - move = m_Sector->ceilingplane.HeightDiff (lastpos, dest); + move = ceilingplane.HeightDiff (lastpos, dest); if (!MoveAttached(crush, move, 1, true)) return EMoveResult::crushed; - m_Sector->ceilingplane.setD(dest); - flag = P_ChangeSector (m_Sector, crush, move, 1, false); + ceilingplane.setD(dest); + flag = P_ChangeSector (this, crush, move, 1, false); if (flag) { - m_Sector->ceilingplane.setD(lastpos); - P_ChangeSector (m_Sector, crush, -move, 1, true); + ceilingplane.setD(lastpos); + P_ChangeSector (this, crush, -move, 1, true); MoveAttached(crush, -move, 1, false); } else { - m_Sector->ChangePlaneTexZ(sector_t::ceiling, move); + ChangePlaneTexZ(sector_t::ceiling, move); } return EMoveResult::pastdest; } @@ -324,47 +324,47 @@ EMoveResult DMover::MoveCeiling(double speed, double dest, int crush, int direct { if (!MoveAttached(crush, -speed, 1, true)) return EMoveResult::crushed; - m_Sector->ceilingplane.setD(movedest); + ceilingplane.setD(movedest); // COULD GET CRUSHED - flag = P_ChangeSector (m_Sector, crush, -speed, 1, false); + flag = P_ChangeSector (this, crush, -speed, 1, false); if (flag) { if (crush >= 0 && !hexencrush) { - m_Sector->ChangePlaneTexZ(sector_t::ceiling, m_Sector->ceilingplane.HeightDiff (lastpos)); + ChangePlaneTexZ(sector_t::ceiling, ceilingplane.HeightDiff (lastpos)); return EMoveResult::crushed; } - m_Sector->ceilingplane.setD(lastpos); - P_ChangeSector (m_Sector, crush, speed, 1, true); + ceilingplane.setD(lastpos); + P_ChangeSector (this, crush, speed, 1, true); MoveAttached(crush, speed, 1, false); return EMoveResult::crushed; } - m_Sector->ChangePlaneTexZ(sector_t::ceiling, m_Sector->ceilingplane.HeightDiff (lastpos)); + ChangePlaneTexZ(sector_t::ceiling, ceilingplane.HeightDiff (lastpos)); } break; case 1: // UP - movedest = m_Sector->ceilingplane.GetChangedHeight (speed); + movedest = ceilingplane.GetChangedHeight (speed); if (movedest >= dest) { - move = m_Sector->ceilingplane.HeightDiff (lastpos, dest); + move = ceilingplane.HeightDiff (lastpos, dest); if (!MoveAttached(crush, move, 1, true)) return EMoveResult::crushed; - m_Sector->ceilingplane.setD(dest); + ceilingplane.setD(dest); - flag = P_ChangeSector (m_Sector, crush, move, 1, false); + flag = P_ChangeSector (this, crush, move, 1, false); if (flag) { - m_Sector->ceilingplane.setD(lastpos); - P_ChangeSector (m_Sector, crush, move, 1, true); + ceilingplane.setD(lastpos); + P_ChangeSector (this, crush, move, 1, true); MoveAttached(crush, move, 1, false); } else { - m_Sector->ChangePlaneTexZ(sector_t::ceiling, move); + ChangePlaneTexZ(sector_t::ceiling, move); } return EMoveResult::pastdest; } @@ -372,17 +372,17 @@ EMoveResult DMover::MoveCeiling(double speed, double dest, int crush, int direct { if (!MoveAttached(crush, speed, 1, true)) return EMoveResult::crushed; - m_Sector->ceilingplane.setD(movedest); + ceilingplane.setD(movedest); - flag = P_ChangeSector (m_Sector, crush, speed, 1, false); + flag = P_ChangeSector (this, crush, speed, 1, false); if (flag) { - m_Sector->ceilingplane.setD(lastpos); - P_ChangeSector (m_Sector, crush, -speed, 1, true); + ceilingplane.setD(lastpos); + P_ChangeSector (this, crush, -speed, 1, true); MoveAttached(crush, -speed, 1, false); return EMoveResult::crushed; } - m_Sector->ChangePlaneTexZ(sector_t::ceiling, m_Sector->ceilingplane.HeightDiff (lastpos)); + ChangePlaneTexZ(sector_t::ceiling, ceilingplane.HeightDiff (lastpos)); } break; } diff --git a/src/dsectoreffect.h b/src/dsectoreffect.h index 62199fd1a..042324416 100644 --- a/src/dsectoreffect.h +++ b/src/dsectoreffect.h @@ -29,25 +29,11 @@ public: protected: TObjPtr interpolation; private: - bool MoveAttached(int crush, double move, int floorOrCeiling, bool resetfailed); protected: DMover (); void Serialize (FArchive &arc); void Destroy(); void StopInterpolation(bool force = false); - EMoveResult MoveFloor(double speed, double dest, int crush, int direction, bool hexencrush); - EMoveResult MoveCeiling(double speed, double dest, int crush, int direction, bool hexencrush); - - inline EMoveResult MoveFloor(double speed, double dest, int direction) - { - return MoveFloor(speed, dest, -1, direction, false); - } - - inline EMoveResult MoveCeiling(double speed, double dest, int direction) - { - return MoveCeiling(speed, dest, -1, direction, false); - } - }; class DMovingFloor : public DMover diff --git a/src/fragglescript/t_func.cpp b/src/fragglescript/t_func.cpp index 03a6bba23..9bf043af7 100644 --- a/src/fragglescript/t_func.cpp +++ b/src/fragglescript/t_func.cpp @@ -1535,26 +1535,6 @@ void FParser::SF_StartSectorSound(void) } } -/************* Sector functions ***************/ - -class DFloorChanger : public DFloor -{ -public: - DFloorChanger(sector_t * sec) - : DFloor(sec) {} - - bool Move(double speed, double dest, int crush, int direction) - { - bool res = EMoveResult::crushed != MoveFloor(speed, dest, crush, direction, false); - Destroy(); - m_Sector->floordata=NULL; - StopInterpolation(true); - m_Sector=NULL; - return res; - } -}; - - //========================================================================== // // @@ -1588,12 +1568,12 @@ void FParser::SF_FloorHeight(void) { if (sectors[i].floordata) continue; // don't move floors that are active! - DFloorChanger * f = new DFloorChanger(§ors[i]); - if (!f->Move( + if (sectors[i].MoveFloor( fabs(dest - sectors[i].CenterFloor()), sectors[i].floorplane.PointToDist (sectors[i].centerspot, dest), crush? 10:-1, - (dest > sectors[i].CenterFloor()) ? 1 : -1)) + (dest > sectors[i].CenterFloor()) ? 1 : -1, + false) != EMoveResult::crushed) { returnval = 0; } @@ -1686,29 +1666,6 @@ void FParser::SF_MoveFloor(void) // //========================================================================== -class DCeilingChanger : public DCeiling -{ -public: - DCeilingChanger(sector_t * sec) - : DCeiling(sec) {} - - bool Move(double speed, double dest, int crush, int direction) - { - bool res = EMoveResult::crushed != MoveCeiling(speed, dest, crush, direction, false); - Destroy(); - m_Sector->ceilingdata=NULL; - StopInterpolation (true); - m_Sector=NULL; - return res; - } -}; - -//========================================================================== -// -// -// -//========================================================================== - // ceiling height of sector void FParser::SF_CeilingHeight(void) { @@ -1735,12 +1692,12 @@ void FParser::SF_CeilingHeight(void) { if (sectors[i].ceilingdata) continue; // don't move ceilings that are active! - DCeilingChanger * c = new DCeilingChanger(§ors[i]); - if (!c->Move( + if (sectors[i].MoveCeiling( fabs(dest - sectors[i].CenterCeiling()), sectors[i].ceilingplane.PointToDist (sectors[i].centerspot, dest), crush? 10:-1, - (dest > sectors[i].CenterCeiling()) ? 1 : -1)) + (dest > sectors[i].CenterCeiling()) ? 1 : -1, + false) != EMoveResult::crushed) { returnval = 0; } diff --git a/src/p_ceiling.cpp b/src/p_ceiling.cpp index 52ec02b2f..9a506be29 100644 --- a/src/p_ceiling.cpp +++ b/src/p_ceiling.cpp @@ -136,7 +136,7 @@ void DCeiling::Tick () break; case 1: // UP - res = MoveCeiling (m_Speed, m_TopHeight, m_Direction); + res = m_Sector->MoveCeiling (m_Speed, m_TopHeight, m_Direction); if (res == EMoveResult::pastdest) { @@ -167,7 +167,7 @@ void DCeiling::Tick () case -1: // DOWN - res = MoveCeiling (m_Speed, m_BottomHeight, m_Crush, m_Direction, m_CrushMode == ECrushMode::crushHexen); + res = m_Sector->MoveCeiling (m_Speed, m_BottomHeight, m_Crush, m_Direction, m_CrushMode == ECrushMode::crushHexen); if (res == EMoveResult::pastdest) { diff --git a/src/p_doors.cpp b/src/p_doors.cpp index 21419abb9..b122768bb 100644 --- a/src/p_doors.cpp +++ b/src/p_doors.cpp @@ -137,7 +137,7 @@ void DDoor::Tick () case -1: // DOWN - res = MoveCeiling (m_Speed, m_BotDist, -1, m_Direction, false); + res = m_Sector->MoveCeiling (m_Speed, m_BotDist, -1, m_Direction, false); // killough 10/98: implement gradual lighting effects if (m_LightTag != 0 && m_TopDist != -m_Sector->floorplane.fD()) @@ -183,7 +183,7 @@ void DDoor::Tick () case 1: // UP - res = MoveCeiling (m_Speed, m_TopDist, -1, m_Direction, false); + res = m_Sector->MoveCeiling (m_Speed, m_TopDist, -1, m_Direction, false); // killough 10/98: implement gradual lighting effects if (m_LightTag != 0 && m_TopDist != -m_Sector->floorplane.fD()) @@ -560,12 +560,12 @@ bool DAnimatedDoor::StartClosing () } double topdist = m_Sector->ceilingplane.fD(); - if (MoveCeiling (2048., m_BotDist, 0, -1, false) == EMoveResult::crushed) + if (m_Sector->MoveCeiling (2048., m_BotDist, 0, -1, false) == EMoveResult::crushed) { return false; } - MoveCeiling (2048., topdist, 1); + m_Sector->MoveCeiling (2048., topdist, 1); m_Line1->flags |= ML_BLOCKING; m_Line2->flags |= ML_BLOCKING; @@ -650,7 +650,7 @@ void DAnimatedDoor::Tick () if (--m_Frame < 0) { // IF DOOR IS DONE CLOSING... - MoveCeiling (2048., m_BotDist, -1); + m_Sector->MoveCeiling (2048., m_BotDist, -1); m_Sector->ceilingdata = NULL; Destroy (); // Unset blocking flags on lines that didn't start with them. Since the @@ -734,7 +734,7 @@ DAnimatedDoor::DAnimatedDoor (sector_t *sec, line_t *line, int speed, int delay, m_Line1->flags |= ML_BLOCKING; m_Line2->flags |= ML_BLOCKING; m_BotDist = m_Sector->ceilingplane.fD(); - MoveCeiling (2048., topdist, 1); + m_Sector->MoveCeiling (2048., topdist, 1); if (m_DoorAnim->OpenSound != NAME_None) { SN_StartSequence (m_Sector, CHAN_INTERIOR, m_DoorAnim->OpenSound, 1); diff --git a/src/p_floor.cpp b/src/p_floor.cpp index 110b2814d..7dc0f6e6e 100644 --- a/src/p_floor.cpp +++ b/src/p_floor.cpp @@ -144,7 +144,7 @@ void DFloor::Tick () if (m_Type == waitStair) return; - res = MoveFloor (m_Speed, m_FloorDestDist, m_Crush, m_Direction, m_Hexencrush); + res = m_Sector->MoveFloor (m_Speed, m_FloorDestDist, m_Crush, m_Direction, m_Hexencrush); if (res == EMoveResult::pastdest) { @@ -907,25 +907,25 @@ void DElevator::Tick () if (m_Direction < 0) // moving down { - res = MoveFloor (m_Speed, m_FloorDestDist, m_Direction); + res = m_Sector->MoveFloor (m_Speed, m_FloorDestDist, m_Direction); if (res == EMoveResult::ok || res == EMoveResult::pastdest) { - res = MoveCeiling (m_Speed, m_CeilingDestDist, m_Direction); + res = m_Sector->MoveCeiling (m_Speed, m_CeilingDestDist, m_Direction); if (res == EMoveResult::crushed) { - MoveFloor (m_Speed, oldfloor, -m_Direction); + m_Sector->MoveFloor (m_Speed, oldfloor, -m_Direction); } } } else // up { - res = MoveCeiling (m_Speed, m_CeilingDestDist, m_Direction); + res = m_Sector->MoveCeiling (m_Speed, m_CeilingDestDist, m_Direction); if (res == EMoveResult::ok || res == EMoveResult::pastdest) { - res = MoveFloor (m_Speed, m_FloorDestDist, m_Direction); + res = m_Sector->MoveFloor (m_Speed, m_FloorDestDist, m_Direction); if (res == EMoveResult::crushed) { - MoveCeiling (m_Speed, oldceiling, -m_Direction); + m_Sector->MoveCeiling (m_Speed, oldceiling, -m_Direction); } } } diff --git a/src/p_pillar.cpp b/src/p_pillar.cpp index a21724945..2a134cc50 100644 --- a/src/p_pillar.cpp +++ b/src/p_pillar.cpp @@ -96,13 +96,13 @@ void DPillar::Tick () if (m_Type == pillarBuild) { - r = MoveFloor (m_FloorSpeed, m_FloorTarget, m_Crush, 1, m_Hexencrush); - s = MoveCeiling (m_CeilingSpeed, m_CeilingTarget, m_Crush, -1, m_Hexencrush); + r = m_Sector->MoveFloor (m_FloorSpeed, m_FloorTarget, m_Crush, 1, m_Hexencrush); + s = m_Sector->MoveCeiling (m_CeilingSpeed, m_CeilingTarget, m_Crush, -1, m_Hexencrush); } else { - r = MoveFloor (m_FloorSpeed, m_FloorTarget, m_Crush, -1, m_Hexencrush); - s = MoveCeiling (m_CeilingSpeed, m_CeilingTarget, m_Crush, 1, m_Hexencrush); + r = m_Sector->MoveFloor (m_FloorSpeed, m_FloorTarget, m_Crush, -1, m_Hexencrush); + s = m_Sector->MoveCeiling (m_CeilingSpeed, m_CeilingTarget, m_Crush, 1, m_Hexencrush); } if (r == EMoveResult::pastdest && s == EMoveResult::pastdest) @@ -114,11 +114,11 @@ void DPillar::Tick () { if (r == EMoveResult::crushed) { - MoveFloor (m_FloorSpeed, oldfloor, -1, -1, m_Hexencrush); + m_Sector->MoveFloor (m_FloorSpeed, oldfloor, -1, -1, m_Hexencrush); } if (s == EMoveResult::crushed) { - MoveCeiling (m_CeilingSpeed, oldceiling, -1, 1, m_Hexencrush); + m_Sector->MoveCeiling (m_CeilingSpeed, oldceiling, -1, 1, m_Hexencrush); } } } diff --git a/src/p_plats.cpp b/src/p_plats.cpp index b90372b46..55ba39fe5 100644 --- a/src/p_plats.cpp +++ b/src/p_plats.cpp @@ -99,7 +99,7 @@ void DPlat::Tick () switch (m_Status) { case up: - res = MoveFloor (m_Speed, m_High, m_Crush, 1, false); + res = m_Sector->MoveFloor (m_Speed, m_High, m_Crush, 1, false); if (res == EMoveResult::crushed && (m_Crush == -1)) { @@ -144,7 +144,7 @@ void DPlat::Tick () break; case down: - res = MoveFloor (m_Speed, m_Low, -1, -1, false); + res = m_Sector->MoveFloor (m_Speed, m_Low, -1, -1, false); if (res == EMoveResult::pastdest) { diff --git a/src/r_defs.h b/src/r_defs.h index 6eda36953..2b7b4a218 100644 --- a/src/r_defs.h +++ b/src/r_defs.h @@ -621,6 +621,23 @@ enum class EMoveResult { ok, crushed, pastdest }; struct sector_t { // Member functions + +private: + bool MoveAttached(int crush, double move, int floorOrCeiling, bool resetfailed); +public: + EMoveResult MoveFloor(double speed, double dest, int crush, int direction, bool hexencrush); + EMoveResult MoveCeiling(double speed, double dest, int crush, int direction, bool hexencrush); + + inline EMoveResult MoveFloor(double speed, double dest, int direction) + { + return MoveFloor(speed, dest, -1, direction, false); + } + + inline EMoveResult MoveCeiling(double speed, double dest, int direction) + { + return MoveCeiling(speed, dest, -1, direction, false); + } + bool IsLinked(sector_t *other, bool ceiling) const; double FindLowestFloorSurrounding(vertex_t **v) const; double FindHighestFloorSurrounding(vertex_t **v) const;