Changeset - r25348:f05752ac4669
[Not reviewed]
master
0 1 0
Matt Kimber - 4 years ago 2021-05-01 17:14:50
mattkimber@users.noreply.github.com
Fix 3d7ab09: stopped trains not updating viewport hash when reversed for a second time (#9165)
1 file changed with 9 insertions and 3 deletions:
0 comments (0 inline, 0 general)
src/vehicle.cpp
Show inline comments
 
@@ -1636,19 +1636,25 @@ void Vehicle::UpdateBoundingBoxCoordinat
 
/**
 
 * Update the vehicle on the viewport, updating the right hash and setting the new coordinates.
 
 * @param dirty Mark the (new and old) coordinates of the vehicle as dirty.
 
 */
 
void Vehicle::UpdateViewport(bool dirty)
 
{
 
	Rect old_coord = this->sprite_cache.old_coord;
 
	/* If the existing cache is invalid we should ignore it, as it will be set to the current coords by UpdateBoundingBoxCoordinates */
 
	bool ignore_cached_coords = this->sprite_cache.old_coord.left == INVALID_COORD;
 

	
 
	this->UpdateBoundingBoxCoordinates(true);
 
	UpdateVehicleViewportHash(this, this->coord.left, this->coord.top, old_coord.left, old_coord.top);
 

	
 
	if (ignore_cached_coords) {
 
		UpdateVehicleViewportHash(this, this->coord.left, this->coord.top, INVALID_COORD, INVALID_COORD);
 
	} else {
 
		UpdateVehicleViewportHash(this, this->coord.left, this->coord.top, this->sprite_cache.old_coord.left, this->sprite_cache.old_coord.top);
 
	}
 

	
 
	if (dirty) {
 
		if (old_coord.left == INVALID_COORD) {
 
		if (ignore_cached_coords) {
 
			this->sprite_cache.is_viewport_candidate = this->MarkAllViewportsDirty();
 
		} else {
 
			this->sprite_cache.is_viewport_candidate = ::MarkAllViewportsDirty(
 
				std::min(this->sprite_cache.old_coord.left, this->coord.left),
 
				std::min(this->sprite_cache.old_coord.top, this->coord.top),
 
				std::max(this->sprite_cache.old_coord.right, this->coord.right),
0 comments (0 inline, 0 general)