Don't mark tile dirty when setting animation frame to its current value
See: https://github.com/OpenTTD/OpenTTD/issues/10192
This commit is contained in:
@@ -20,7 +20,16 @@
|
||||
template <typename Tobj>
|
||||
struct TileAnimationFrameAnimationHelper {
|
||||
static byte Get(Tobj *obj, TileIndex tile) { return GetAnimationFrame(tile); }
|
||||
static void Set(Tobj *obj, TileIndex tile, byte frame) { SetAnimationFrame(tile, frame); }
|
||||
static bool Set(Tobj *obj, TileIndex tile, byte frame)
|
||||
{
|
||||
byte prev = GetAnimationFrame(tile);
|
||||
if (frame != prev) {
|
||||
SetAnimationFrame(tile, frame);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -105,8 +114,9 @@ struct AnimationBase {
|
||||
}
|
||||
}
|
||||
|
||||
Tframehelper::Set(obj, tile, frame);
|
||||
MarkTileDirtyByTile(tile, VMDF_NOT_MAP_MODE);
|
||||
if (Tframehelper::Set(obj, tile, frame)) {
|
||||
MarkTileDirtyByTile(tile, VMDF_NOT_MAP_MODE);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -127,12 +137,12 @@ struct AnimationBase {
|
||||
if (callback == CALLBACK_FAILED) return;
|
||||
|
||||
switch (callback & 0xFF) {
|
||||
case 0xFD: /* Do nothing. */ break;
|
||||
case 0xFE: AddAnimatedTile(tile); break;
|
||||
case 0xFF: DeleteAnimatedTile(tile); break;
|
||||
case 0xFD: /* Do nothing. */ break;
|
||||
case 0xFE: AddAnimatedTile(tile, false); break;
|
||||
case 0xFF: DeleteAnimatedTile(tile); break;
|
||||
default:
|
||||
Tframehelper::Set(obj, tile, callback);
|
||||
AddAnimatedTile(tile);
|
||||
bool changed = Tframehelper::Set(obj, tile, callback);
|
||||
AddAnimatedTile(tile, changed);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user