From 8b4a33794ad43dc8e9ffd8ad254a72fbd315c90b Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 27 Mar 2016 22:35:58 +0200 Subject: [PATCH] - floatified P_ChangeSector. --- src/p_local.h | 8 +++-- src/p_map.cpp | 80 +++++++++++++++++++++++--------------------------- src/p_mobj.cpp | 5 ++-- src/p_user.cpp | 2 +- 4 files changed, 46 insertions(+), 49 deletions(-) diff --git a/src/p_local.h b/src/p_local.h index 1b19029fd..b5793d835 100644 --- a/src/p_local.h +++ b/src/p_local.h @@ -197,7 +197,7 @@ AActor *P_SpawnPlayerMissile (AActor *source, double x, double y, double z, PCla FTranslatedLineTarget *pLineTarget = NULL, AActor **MissileActor = NULL, bool nofreeaim = false, bool noautoaim = false, int aimflags = 0); -void P_CheckFakeFloorTriggers (AActor *mo, fixed_t oldz, bool oldz_has_viewheight=false); +void P_CheckFakeFloorTriggers(AActor *mo, double oldz, bool oldz_has_viewheight = false); AActor *P_SpawnSubMissile (AActor *source, PClassActor *type, AActor *target); // Strife uses it @@ -336,7 +336,11 @@ enum }; void P_FindFloorCeiling (AActor *actor, int flags=0); -bool P_ChangeSector (sector_t* sector, int crunch, int amt, int floorOrCeil, bool isreset); +bool P_ChangeSector (sector_t* sector, int crunch, double amt, int floorOrCeil, bool isreset); +inline bool P_ChangeSector(sector_t* sector, int crunch, int amt, int floorOrCeil, bool isreset) +{ + return P_ChangeSector(sector, crunch, FIXED2DBL(amt), floorOrCeil, isreset); +} DAngle P_AimLineAttack(AActor *t1, DAngle angle, double distance, FTranslatedLineTarget *pLineTarget = NULL, DAngle vrange = 0., int flags = 0, AActor *target = NULL, AActor *friender = NULL); diff --git a/src/p_map.cpp b/src/p_map.cpp index e57e037f5..ee3d443e8 100644 --- a/src/p_map.cpp +++ b/src/p_map.cpp @@ -5250,7 +5250,7 @@ void P_RadiusAttack(AActor *bombspot, AActor *bombsource, int bombdamage, int bo struct FChangePosition { sector_t *sector; - int moveamt; + double moveamt; int crushchange; bool nofit; bool movemidtex; @@ -5320,8 +5320,8 @@ void P_FindAboveIntersectors(AActor *actor) while (it.Next(&cres)) { AActor *thing = cres.thing; - fixed_t blockdist = actor->_f_radius() + thing->_f_radius(); - if (abs(thing->_f_X() - cres.position.x) >= blockdist || abs(thing->_f_Y() - cres.position.y) >= blockdist) + double blockdist = actor->radius + thing->radius; + if (fabs(thing->X() - cres.Position.X) >= blockdist || fabs(thing->Y() - cres.Position.Y) >= blockdist) continue; if (!(thing->flags & MF_SOLID)) @@ -5376,8 +5376,8 @@ void P_FindBelowIntersectors(AActor *actor) while (it.Next(&cres)) { AActor *thing = cres.thing; - fixed_t blockdist = actor->_f_radius() + thing->_f_radius(); - if (abs(thing->_f_X() - cres.position.x) >= blockdist || abs(thing->_f_Y() - cres.position.y) >= blockdist) + double blockdist = actor->radius + thing->radius; + if (fabs(thing->X() - cres.Position.X) >= blockdist || fabs(thing->Y() - cres.Position.Y) >= blockdist) continue; if (!(thing->flags & MF_SOLID)) @@ -5511,14 +5511,13 @@ int P_PushUp(AActor *thing, FChangePosition *cpos) // Can't push bridges or things more massive than ourself return 2; } - fixed_t oldz; - oldz = intersect->_f_Z(); + double oldz = intersect->Z(); P_AdjustFloorCeil(intersect, cpos); - intersect->_f_SetZ(thing->_f_Top() + 1); + intersect->SetZ(thing->Top() + 1/65536.); if (P_PushUp(intersect, cpos)) { // Move blocked P_DoCrunch(intersect, cpos); - intersect->_f_SetZ(oldz); + intersect->SetZ(oldz); return 2; } } @@ -5557,15 +5556,15 @@ int P_PushDown(AActor *thing, FChangePosition *cpos) // Can't push bridges or things more massive than ourself return 2; } - fixed_t oldz = intersect->_f_Z(); + double oldz = intersect->Z(); P_AdjustFloorCeil(intersect, cpos); - if (oldz > thing->_f_Z() - intersect->_f_height()) + if (oldz > thing->Z() - intersect->Height) { // Only push things down, not up. - intersect->_f_SetZ(thing->_f_Z() - intersect->_f_height()); + intersect->SetZ(thing->Z() - intersect->Height); if (P_PushDown(intersect, cpos)) { // Move blocked P_DoCrunch(intersect, cpos); - intersect->_f_SetZ(oldz); + intersect->SetZ(oldz); return 2; } } @@ -5582,40 +5581,37 @@ int P_PushDown(AActor *thing, FChangePosition *cpos) void PIT_FloorDrop(AActor *thing, FChangePosition *cpos) { - fixed_t oldfloorz = thing->_f_floorz(); - fixed_t oldz = thing->_f_Z(); + double oldfloorz = thing->floorz; + double oldz = thing->Z(); P_AdjustFloorCeil(thing, cpos); - if (oldfloorz == thing->_f_floorz()) return; + if (oldfloorz == thing->floorz) return; if (thing->flags4 & MF4_ACTLIKEBRIDGE) return; // do not move bridge things - if (thing->_f_velz() == 0 && + if (thing->Vel.Z == 0 && (!(thing->flags & MF_NOGRAVITY) || - (thing->_f_Z() == oldfloorz && !(thing->flags & MF_NOLIFTDROP)))) + (thing->Z() == oldfloorz && !(thing->flags & MF_NOLIFTDROP)))) { - fixed_t oldz = thing->_f_Z(); - if ((thing->flags & MF_NOGRAVITY) || (thing->flags5 & MF5_MOVEWITHSECTOR) || - (((cpos->sector->Flags & SECF_FLOORDROP) || cpos->moveamt < 9 * FRACUNIT) - && thing->_f_Z() - thing->_f_floorz() <= cpos->moveamt)) + (((cpos->sector->Flags & SECF_FLOORDROP) || cpos->moveamt < 9) + && thing->Z() - thing->floorz <= cpos->moveamt)) { thing->SetZ(thing->floorz); P_CheckFakeFloorTriggers(thing, oldz); } } - else if ((thing->_f_Z() != oldfloorz && !(thing->flags & MF_NOLIFTDROP))) + else if ((thing->Z() != oldfloorz && !(thing->flags & MF_NOLIFTDROP))) { - fixed_t oldz = thing->_f_Z(); if ((thing->flags & MF_NOGRAVITY) && (thing->flags6 & MF6_RELATIVETOFLOOR)) { - thing->_f_AddZ(-oldfloorz + thing->_f_floorz()); + thing->AddZ(-oldfloorz + thing->floorz); P_CheckFakeFloorTriggers(thing, oldz); } } if (thing->player && thing->player->mo == thing) { - //thing->player->viewz += thing->_f_Z() - oldz; + thing->player->viewz += thing->Z() - oldz; } } @@ -5627,12 +5623,12 @@ void PIT_FloorDrop(AActor *thing, FChangePosition *cpos) void PIT_FloorRaise(AActor *thing, FChangePosition *cpos) { - fixed_t oldfloorz = thing->_f_floorz(); - fixed_t oldz = thing->_f_Z(); + double oldfloorz = thing->floorz; + double oldz = thing->Z(); P_AdjustFloorCeil(thing, cpos); - if (oldfloorz == thing->_f_floorz()) return; + if (oldfloorz == thing->floorz) return; // Move things intersecting the floor up if (thing->Z() <= thing->floorz) @@ -5650,7 +5646,7 @@ void PIT_FloorRaise(AActor *thing, FChangePosition *cpos) if ((thing->flags & MF_NOGRAVITY) && (thing->flags6 & MF6_RELATIVETOFLOOR)) { intersectors.Clear(); - thing->_f_AddZ(-oldfloorz + thing->_f_floorz()); + thing->AddZ(-oldfloorz + thing->floorz); } else return; } @@ -5665,12 +5661,12 @@ void PIT_FloorRaise(AActor *thing, FChangePosition *cpos) break; case 2: P_DoCrunch(thing, cpos); - thing->_f_SetZ(oldz); + thing->SetZ(oldz); break; } if (thing->player && thing->player->mo == thing) { - thing->player->viewz += thing->Z() - FIXED2DBL(oldz); + thing->player->viewz += thing->Z() - oldz; } } @@ -5683,7 +5679,7 @@ void PIT_FloorRaise(AActor *thing, FChangePosition *cpos) void PIT_CeilingLower(AActor *thing, FChangePosition *cpos) { bool onfloor; - fixed_t oldz = thing->_f_Z(); + double oldz = thing->Z(); onfloor = thing->Z() <= thing->floorz; P_AdjustFloorCeil(thing, cpos); @@ -5696,7 +5692,6 @@ void PIT_CeilingLower(AActor *thing, FChangePosition *cpos) return; // do not move bridge things } intersectors.Clear(); - fixed_t oldz = thing->_f_Z(); if (thing->ceilingz - thing->Height >= thing->floorz) { thing->SetZ(thing->ceilingz - thing->Height); @@ -5722,7 +5717,7 @@ void PIT_CeilingLower(AActor *thing, FChangePosition *cpos) } if (thing->player && thing->player->mo == thing) { - thing->player->viewz += thing->Z() - FIXED2DBL(oldz); + thing->player->viewz += thing->Z() - oldz; } } @@ -5735,18 +5730,17 @@ void PIT_CeilingLower(AActor *thing, FChangePosition *cpos) void PIT_CeilingRaise(AActor *thing, FChangePosition *cpos) { bool isgood = P_AdjustFloorCeil(thing, cpos); - fixed_t oldz = thing->_f_Z(); + double oldz = thing->Z(); if (thing->flags4 & MF4_ACTLIKEBRIDGE) return; // do not move bridge things // For DOOM compatibility, only move things that are inside the floor. // (or something else?) Things marked as hanging from the ceiling will // stay where they are. - if (thing->_f_Z() < thing->_f_floorz() && - thing->_f_Top() >= thing->_f_ceilingz() - cpos->moveamt && + if (thing->Z() < thing->floorz && + thing->Top() >= thing->ceilingz - cpos->moveamt && !(thing->flags & MF_NOLIFTDROP)) { - fixed_t oldz = thing->_f_Z(); thing->SetZ(thing->floorz); if (thing->Top() > thing->ceilingz) { @@ -5764,7 +5758,7 @@ void PIT_CeilingRaise(AActor *thing, FChangePosition *cpos) } if (thing->player && thing->player->mo == thing) { - thing->player->viewz += thing->Z() - FIXED2DBL(oldz); + thing->player->viewz += thing->Z() - oldz; } } @@ -5778,7 +5772,7 @@ void PIT_CeilingRaise(AActor *thing, FChangePosition *cpos) // //============================================================================= -bool P_ChangeSector(sector_t *sector, int crunch, int amt, int floorOrCeil, bool isreset) +bool P_ChangeSector(sector_t *sector, int crunch, double amt, int floorOrCeil, bool isreset) { FChangePosition cpos; void(*iterator)(AActor *, FChangePosition *); @@ -5787,7 +5781,7 @@ bool P_ChangeSector(sector_t *sector, int crunch, int amt, int floorOrCeil, bool cpos.nofit = false; cpos.crushchange = crunch; - cpos.moveamt = abs(amt); + cpos.moveamt = fabs(amt); cpos.movemidtex = false; cpos.sector = sector; @@ -5924,7 +5918,7 @@ bool P_ChangeSector(sector_t *sector, int crunch, int amt, int floorOrCeil, bool n->visited = true; // mark thing as processed n->m_thing->UpdateWaterLevel(false); - P_CheckFakeFloorTriggers(n->m_thing, n->m_thing->_f_Z() - amt); + P_CheckFakeFloorTriggers(n->m_thing, n->m_thing->Z() - amt); } } } while (n); // repeat from scratch until all things left are marked valid diff --git a/src/p_mobj.cpp b/src/p_mobj.cpp index 84a6ee1dc..0be882191 100644 --- a/src/p_mobj.cpp +++ b/src/p_mobj.cpp @@ -2619,12 +2619,11 @@ void P_ZMovement (AActor *mo, fixed_t oldfloorz) } } } - P_CheckFakeFloorTriggers (mo, oldz); + P_CheckFakeFloorTriggers (mo, FIXED2DBL(oldz)); } -void P_CheckFakeFloorTriggers (AActor *mo, fixed_t _oldz, bool oldz_has_viewheight) +void P_CheckFakeFloorTriggers (AActor *mo, double oldz, bool oldz_has_viewheight) { - double oldz = FIXED2FLOAT(_oldz); if (mo->player && (mo->player->cheats & CF_PREDICTING)) { return; diff --git a/src/p_user.cpp b/src/p_user.cpp index 185ce8b5b..2ad92a968 100644 --- a/src/p_user.cpp +++ b/src/p_user.cpp @@ -2268,7 +2268,7 @@ void P_CrouchMove(player_t * player, int direction) player->crouchviewdelta = player->viewheight - player->mo->ViewHeight; // Check for eyes going above/below fake floor due to crouching motion. - P_CheckFakeFloorTriggers(player->mo, player->mo->_f_Z() + FLOAT2FIXED(oldheight), true); + P_CheckFakeFloorTriggers(player->mo, player->mo->Z() + oldheight, true); } //----------------------------------------------------------------------------