bool sector_t::MoveAttached(int crush, double move, int floorOrCeiling, bool resetfailed) { if (!P_Scroll3dMidtex(this, crush, move, !!floorOrCeiling) && resetfailed) { P_Scroll3dMidtex(this, crush, -move, !!floorOrCeiling); return false; } if (!P_MoveLinkedSectors(this, crush, move, !!floorOrCeiling) && resetfailed) { P_MoveLinkedSectors(this, crush, -move, !!floorOrCeiling); P_Scroll3dMidtex(this, crush, -move, !!floorOrCeiling); return false; } return true; }
bool DMover::MoveAttached(int crush, fixed_t move, int floorOrCeiling, bool resetfailed) { if (!P_Scroll3dMidtex(m_Sector, crush, move, !!floorOrCeiling) && resetfailed) { P_Scroll3dMidtex(m_Sector, crush, -move, !!floorOrCeiling); return false; } if (!P_MoveLinkedSectors(m_Sector, crush, move, !!floorOrCeiling) && resetfailed) { P_MoveLinkedSectors(m_Sector, crush, -move, !!floorOrCeiling); P_Scroll3dMidtex(m_Sector, crush, -move, !!floorOrCeiling); return false; } return true; }
void DWaggleBase::DoWaggle (bool ceiling) { secplane_t *plane; int pos; double dist; if (ceiling) { plane = &m_Sector->ceilingplane; pos = sector_t::ceiling; } else { plane = &m_Sector->floorplane; pos = sector_t::floor; } switch (m_State) { case WGLSTATE_EXPAND: if ((m_Scale += m_ScaleDelta) >= m_TargetScale) { m_Scale = m_TargetScale; m_State = WGLSTATE_STABLE; } break; case WGLSTATE_REDUCE: if ((m_Scale -= m_ScaleDelta) <= 0) { // Remove dist = (m_OriginalDist - plane->fD()) / plane->fC(); m_Sector->ChangePlaneTexZ(pos, -plane->HeightDiff (m_OriginalDist)); plane->setD(m_OriginalDist); P_ChangeSector (m_Sector, true, dist, ceiling, false); if (ceiling) { m_Sector->ceilingdata = NULL; } else { m_Sector->floordata = NULL; } Destroy (); return; } break; case WGLSTATE_STABLE: if (m_Ticker != -1) { if (!--m_Ticker) { m_State = WGLSTATE_REDUCE; } } break; } m_Accumulator += m_AccDelta; dist = plane->fD(); plane->setD(m_OriginalDist + plane->PointToDist (DVector2(0, 0), BobSin(m_Accumulator) *m_Scale)); m_Sector->ChangePlaneTexZ(pos, plane->HeightDiff (dist)); dist = plane->HeightDiff (dist); // Interesting: Hexen passes 'true' for the crunch parameter which really is crushing damage here... // Also, this does not reset the move if it blocks. P_Scroll3dMidtex(m_Sector, 1, dist, ceiling); P_MoveLinkedSectors(m_Sector, 1, dist, ceiling); P_ChangeSector (m_Sector, 1, dist, ceiling, false); }