← Back to team overview

widelands-dev team mailing list archive

[Merge] lp:~widelands-dev/widelands/vector-float-warnings into lp:widelands

 

GunChleoc has proposed merging lp:~widelands-dev/widelands/vector-float-warnings into lp:widelands.

Commit message:
Replace equality operator in MapView with near functions for float arithmetic.

Requested reviews:
  Widelands Developers (widelands-dev)
Related bugs:
  Bug #1818494 in widelands: "Crash on "Reset zoom" bzr9005-201903031251 (Release)"
  https://bugs.launchpad.net/widelands/+bug/1818494

For more details, see:
https://code.launchpad.net/~widelands-dev/widelands/vector-float-warnings/+merge/365003

I did not notice the compiler warnings in r9024, and they need to be fixed.
-- 
Your team Widelands Developers is requested to review the proposed merge of lp:~widelands-dev/widelands/vector-float-warnings into lp:widelands.
=== modified file 'src/wui/mapview.cc'
--- src/wui/mapview.cc	2019-03-12 08:23:51 +0000
+++ src/wui/mapview.cc	2019-03-24 12:42:06 +0000
@@ -387,7 +387,7 @@
 	const Transition transition = animate_map_panning_ ? passed_transition : Transition::Jump;
 	switch (transition) {
 	case Transition::Jump: {
-		if (view_ == target_view) {
+		if (view_.near(target_view)) {
 			// We're already there
 			return;
 		}
@@ -398,7 +398,7 @@
 	}
 
 	case Transition::Smooth: {
-		if (!view_plans_.empty() && view_plans_.back().back().view == target_view) {
+		if (!view_plans_.empty() && view_plans_.back().back().view.near(target_view)) {
 			// We're already there
 			return;
 		}
@@ -517,7 +517,7 @@
 	const TimestampedView current = animation_target_view();
 	switch (transition) {
 	case Transition::Jump: {
-		if (view_.zoom == new_zoom) {
+		if (view_.zoom_near(new_zoom)) {
 			// We're already there
 			return;
 		}
@@ -530,7 +530,7 @@
 	}
 
 	case Transition::Smooth: {
-		if (!view_plans_.empty() && view_plans_.back().back().view.zoom == new_zoom) {
+		if (!view_plans_.empty() && view_plans_.back().back().view.zoom_near(new_zoom)) {
 			// We're already there
 			return;
 		}

=== modified file 'src/wui/mapview.h'
--- src/wui/mapview.h	2019-03-12 08:23:51 +0000
+++ src/wui/mapview.h	2019-03-24 12:42:06 +0000
@@ -75,8 +75,16 @@
 		View() : View(Vector2f::zero(), 1.0f) {
 		}
 
-		bool operator==(const View& other) const {
-			return (zoom == other.zoom) && (viewpoint == other.viewpoint);
+		bool zoom_near(float other_zoom) const {
+			constexpr float epsilon = 1e-5;
+			return std::abs(zoom - other_zoom) < epsilon;
+		}
+
+		bool near(const View& other) const {
+			constexpr float epsilon = 1e-5;
+			return zoom_near(other.zoom) &&
+					std::abs(viewpoint.x - other.viewpoint.x) < epsilon &&
+					std::abs(viewpoint.y - other.viewpoint.y) < epsilon;
 		}
 
 		// Mappixel of top-left pixel of this MapView.


Follow ups