Browse Source

♻️ Leverage 'Point' in 'DrawMissile' function

pull/2804/head
Juliano Leal Goncalves 5 years ago committed by Anders Jenbo
parent
commit
0b2f443d97
  1. 31
      Source/scrollrt.cpp

31
Source/scrollrt.cpp

@ -292,11 +292,10 @@ void DrawCursor(const Surface &out)
* @brief Render a missile sprite
* @param out Output buffer
* @param m Pointer to Missile struct
* @param sx Output buffer coordinate
* @param sy Output buffer coordinate
* @param targetBufferPosition Output buffer coordinate
* @param pre Is the sprite in the background
*/
void DrawMissilePrivate(const Surface &out, const Missile &missile, int sx, int sy, bool pre)
void DrawMissilePrivate(const Surface &out, const Missile &missile, Point targetBufferPosition, bool pre)
{
if (missile._miPreFlag != pre || !missile._miDrawFlag)
return;
@ -312,31 +311,29 @@ void DrawMissilePrivate(const Surface &out, const Missile &missile, int sx, int
Log("Draw Missile 2: frame {} of {}, missile type=={}", nCel, frames, missile._mitype);
return;
}
int mx = sx + missile.position.offsetForRendering.deltaX - missile._miAnimWidth2;
int my = sy + missile.position.offsetForRendering.deltaY;
const Point missileRenderPosition { targetBufferPosition + missile.position.offsetForRendering - Displacement { missile._miAnimWidth2, 0 } };
CelSprite cel { missile._miAnimData, missile._miAnimWidth };
if (missile._miUniqTrans != 0)
Cl2DrawLightTbl(out, mx, my, cel, missile._miAnimFrame, missile._miUniqTrans + 3);
Cl2DrawLightTbl(out, missileRenderPosition.x, missileRenderPosition.y, cel, missile._miAnimFrame, missile._miUniqTrans + 3);
else if (missile._miLightFlag)
Cl2DrawLight(out, mx, my, cel, missile._miAnimFrame);
Cl2DrawLight(out, missileRenderPosition.x, missileRenderPosition.y, cel, missile._miAnimFrame);
else
Cl2Draw(out, mx, my, cel, missile._miAnimFrame);
Cl2Draw(out, missileRenderPosition.x, missileRenderPosition.y, cel, missile._miAnimFrame);
}
/**
* @brief Render a missile sprites for a given tile
* @param out Output buffer
* @param x dPiece coordinate
* @param y dPiece coordinate
* @param sx Output buffer coordinate
* @param sy Output buffer coordinate
* @param tilePosition dPiece coordinates
* @param targetBufferPosition Output buffer coordinates
* @param pre Is the sprite in the background
*/
void DrawMissile(const Surface &out, int x, int y, int sx, int sy, bool pre)
void DrawMissile(const Surface &out, Point tilePosition, Point targetBufferPosition, bool pre)
{
const auto range = MissilesAtRenderingTile.equal_range(Point { x, y });
const auto range = MissilesAtRenderingTile.equal_range(tilePosition);
for (auto it = range.first; it != range.second; it++) {
DrawMissilePrivate(out, *it->second, sx, sy, pre);
DrawMissilePrivate(out, *it->second, targetBufferPosition, pre);
}
}
@ -863,7 +860,7 @@ void DrawDungeon(const Surface &out, Point tilePosition, Point targetBufferPosit
#endif
if (MissilePreFlag) {
DrawMissile(out, tilePosition.x, tilePosition.y, targetBufferPosition.x, targetBufferPosition.y, true);
DrawMissile(out, tilePosition, targetBufferPosition, true);
}
if (LightTableIndex < LightsMax && bDead != 0) {
@ -906,7 +903,7 @@ void DrawDungeon(const Surface &out, Point tilePosition, Point targetBufferPosit
if (dMonster[tilePosition.x][tilePosition.y] > 0) {
DrawMonsterHelper(out, tilePosition.x, tilePosition.y, 0, targetBufferPosition.x, targetBufferPosition.y);
}
DrawMissile(out, tilePosition.x, tilePosition.y, targetBufferPosition.x, targetBufferPosition.y, false);
DrawMissile(out, tilePosition, targetBufferPosition, false);
DrawObject(out, tilePosition.x, tilePosition.y, targetBufferPosition.x, targetBufferPosition.y, false);
DrawItem(out, tilePosition.x, tilePosition.y, targetBufferPosition.x, targetBufferPosition.y, false);

Loading…
Cancel
Save