changeset 15454:f22bd3771286 draft

(svn r20103) -Fix [FS#3934]: AITown::GetRating() returned wrong values. (Morloth)
author frosch <frosch@openttd.org>
date Fri, 09 Jul 2010 19:50:06 +0000
parents 118b85f4bc44
children 1482501b8d08
files bin/ai/regression/regression.txt src/ai/api/ai_town.cpp
diffstat 2 files changed, 23 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/bin/ai/regression/regression.txt
+++ b/bin/ai/regression/regression.txt
@@ -8049,7 +8049,7 @@
     GetPopulation(): 737
     GetLocation():   6446
     GetHouseCount(): 26
-    GetRating():     5
+    GetRating():     6
   Town 11
     IsValidTown():   true
     GetName():       Fort Frindston
@@ -8084,7 +8084,7 @@
     GetPopulation(): 807
     GetLocation():   42338
     GetHouseCount(): 33
-    GetRating():     5
+    GetRating():     6
   Town 16
     IsValidTown():   true
     GetName():       Kennville
@@ -8119,7 +8119,7 @@
     GetPopulation(): 437
     GetLocation():   22585
     GetHouseCount(): 15
-    GetRating():     5
+    GetRating():     6
   Town 21
     IsValidTown():   true
     GetName():       Franinghead
--- a/src/ai/api/ai_town.cpp
+++ b/src/ai/api/ai_town.cpp
@@ -14,6 +14,7 @@
 #include "ai_cargo.hpp"
 #include "ai_error.hpp"
 #include "../../town.h"
+#include "../../town_type.h"
 #include "../../strings_func.h"
 #include "../../company_func.h"
 #include "../../station_base.h"
@@ -172,8 +173,25 @@
 	if (company == AICompany::COMPANY_INVALID) return TOWN_RATING_INVALID;
 
 	const Town *t = ::Town::Get(town_id);
-	if (!HasBit(t->have_ratings, company)) return TOWN_RATING_NONE;
-	return max(TOWN_RATING_APPALLING, (TownRating)((t->ratings[company] / 200) + 3));
+	if (!HasBit(t->have_ratings, company)) {
+		return TOWN_RATING_NONE;
+	} else if (t->ratings[company] <= RATING_APPALLING) {
+		return TOWN_RATING_APPALLING;
+	} else if (t->ratings[company] <= RATING_VERYPOOR) {
+		return TOWN_RATING_VERY_POOR;
+	} else if (t->ratings[company] <= RATING_POOR) {
+		return TOWN_RATING_POOR;
+	} else if (t->ratings[company] <= RATING_MEDIOCRE) {
+		return TOWN_RATING_MEDIOCRE;
+	} else if (t->ratings[company] <= RATING_GOOD) {
+		return TOWN_RATING_GOOD;
+	} else if (t->ratings[company] <= RATING_VERYGOOD) {
+		return TOWN_RATING_VERY_GOOD;
+	} else if (t->ratings[company] <= RATING_EXCELLENT) {
+		return TOWN_RATING_EXCELLENT;
+	} else {
+		return TOWN_RATING_OUTSTANDING;
+	}
 }
 
 /* static */ int AITown::GetAllowedNoise(TownID town_id)