Browse Source

Use missile helpers in MoveMissile/UpdateMissileRendererData (#5291)

pull/5294/head
obligaron 4 years ago committed by GitHub
parent
commit
deb0d6d9e1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 24
      Source/engine/render/scrollrt.cpp
  2. 9
      Source/missiles.cpp

24
Source/engine/render/scrollrt.cpp

@ -135,16 +135,12 @@ void UpdateMissileRendererData(Missile &m)
float fProgress = gfProgressToNextGameTick;
Displacement velocity = m.position.velocity * fProgress;
Displacement traveled = m.position.traveled + velocity;
int mx = traveled.deltaX >> 16;
int my = traveled.deltaY >> 16;
int dx = (mx + 2 * my) / 64;
int dy = (2 * my - mx) / 64;
Displacement pixelsTravelled = (m.position.traveled + velocity) >> 16;
Displacement tileOffset = pixelsTravelled.screenToMissile();
// calculcate the future missile position
m.position.tileForRendering = m.position.start + Displacement { dx, dy };
m.position.offsetForRendering = { mx + (dy * 32) - (dx * 32), my - (dx * 16) - (dy * 16) };
m.position.tileForRendering = m.position.start + tileOffset;
m.position.offsetForRendering = pixelsTravelled + tileOffset.worldToScreen();
// In some cases this calculcated position is invalid.
// For example a missile shouldn't move inside a wall.
@ -172,15 +168,11 @@ void UpdateMissileRendererData(Missile &m)
}
velocity = m.position.velocity * fProgress;
traveled = m.position.traveled + velocity;
mx = traveled.deltaX >> 16;
my = traveled.deltaY >> 16;
dx = (mx + 2 * my) / 64;
dy = (2 * my - mx) / 64;
pixelsTravelled = (m.position.traveled + velocity) >> 16;
tileOffset = pixelsTravelled.screenToMissile();
m.position.tileForRendering = m.position.start + Displacement { dx, dy };
m.position.offsetForRendering = { mx + (dy * 32) - (dx * 32), my - (dx * 16) - (dy * 16) };
m.position.tileForRendering = m.position.start + tileOffset;
m.position.offsetForRendering = pixelsTravelled + tileOffset.worldToScreen();
}
}

9
Source/missiles.cpp

@ -477,12 +477,9 @@ bool MoveMissile(Missile &missile, const std::function<bool(Point)> &checkTile,
traveled += incVelocity;
// calculate in-between tile
int mx = traveled.deltaX >> 16;
int my = traveled.deltaY >> 16;
int dx = (mx + 2 * my) / 64;
int dy = (2 * my - mx) / 64;
auto tile = missile.position.start + Displacement { dx, dy };
Displacement pixelsTraveled = traveled >> 16;
Displacement tileOffset = pixelsTraveled.screenToMissile();
Point tile = missile.position.start + tileOffset;
// we are at the original calculated position => resume with normal logic
if (tile == missile.position.tile)

Loading…
Cancel
Save