Browse Source

Update MoveMissilePos to use Direction and Displacement types.

Remove explicit cases falling through to default case in MoveMissilePos
pull/2845/head
ephphatha 5 years ago committed by Anders Jenbo
parent
commit
9c9426821d
  1. 32
      Source/missiles.cpp

32
Source/missiles.cpp

@ -165,33 +165,37 @@ void UpdateMissilePos(Missile &missile)
ChangeLightOffset(missile._mlid, { lx - (dx * 8), ly - (dy * 8) });
}
/**
* @brief Dodgy hack used to correct the position for charging monsters.
*
* If the monster represented by this missile is *not* facing north in some way it gets shifted to the south.
* This appears to compensate for some visual oddity or invalid calculation earlier in the MI_Rhino logic.
* @param missile MissileStruct representing a charging monster.
*/
void MoveMissilePos(Missile &missile)
{
Displacement offset;
Direction moveDirection;
switch (missile._mimfnum) {
case Direction::NorthWest:
case Direction::North:
case Direction::NorthEast:
offset = { 0, 0 };
break;
switch (static_cast<Direction>(missile._mimfnum)) {
case Direction::East:
offset = { 1, 0 };
moveDirection = Direction::SouthEast;
break;
case Direction::West:
offset = { 0, 1 };
moveDirection = Direction::SouthWest;
break;
case Direction::South:
case Direction::SouthWest:
case Direction::SouthEast:
offset = { 1, 1 };
moveDirection = Direction::South;
break;
default:
return;
}
if (IsTileAvailable(Monsters[missile._misource], missile.position.tile + offset)) {
missile.position.tile += offset;
missile.position.offset.deltaX += (offset.deltaY * 32) - (offset.deltaX * 32);
missile.position.offset.deltaY -= (offset.deltaY * 16) + (offset.deltaX * 16);
auto target = missile.position.tile + moveDirection;
if (IsTileAvailable(Monsters[missile._misource], target)) {
missile.position.tile = target;
missile.position.offset += Displacement(moveDirection).WorldToScreen();
}
}

Loading…
Cancel
Save