(svn r13420) [NoAI] -Add: function to get the town rating. noai
authorrubidium
Sun, 08 Jun 2008 19:35:16 +0000
branchnoai
changeset 10869 4fdb11e1b599
parent 10867 5de2923d6e59
child 10870 20b6cff3d6b2
(svn r13420) [NoAI] -Add: function to get the town rating.
bin/ai/regression/regression.nut
bin/ai/regression/regression.txt
src/ai/api/ai_town.cpp
src/ai/api/ai_town.hpp
src/ai/api/ai_town.hpp.sq
--- a/bin/ai/regression/regression.nut	Sun Jun 08 15:32:10 2008 +0000
+++ b/bin/ai/regression/regression.nut	Sun Jun 08 19:35:16 2008 +0000
@@ -1007,6 +1007,7 @@
 		print("    GetPopulation(): " + AITown.GetPopulation(i));
 		print("    GetLocation():   " + AITown.GetLocation(i));
 		print("    GetHouseCount(): " + AITown.GetHouseCount(i));
+		print("    GetRating():     " + AITown.GetRating(i, AICompany.MY_COMPANY));
 	}
 	print("  Valid Towns:       " + j);
 	print("  GetTownCount():    " + AITown.GetTownCount());
--- a/bin/ai/regression/regression.txt	Sun Jun 08 15:32:10 2008 +0000
+++ b/bin/ai/regression/regression.txt	Sun Jun 08 19:35:16 2008 +0000
@@ -6312,198 +6312,231 @@
     GetPopulation(): -1
     GetLocation():   -1
     GetHouseCount(): -1
+    GetRating():     -1
   Town 0
     IsValidTown():   true
     GetName():       Planfield
     GetPopulation(): 538
     GetLocation():   15508
     GetHouseCount(): 29
+    GetRating():     0
   Town 1
     IsValidTown():   true
     GetName():       Trenningville
     GetPopulation(): 236
     GetLocation():   46751
     GetHouseCount(): 16
+    GetRating():     0
   Town 2
     IsValidTown():   true
     GetName():       Tondston
     GetPopulation(): 253
     GetLocation():   28365
     GetHouseCount(): 18
+    GetRating():     0
   Town 3
     IsValidTown():   true
     GetName():       Tunford
     GetPopulation(): 206
     GetLocation():   41895
     GetHouseCount(): 11
+    GetRating():     0
   Town 4
     IsValidTown():   true
     GetName():       Wrundtown
     GetPopulation(): 414
     GetLocation():   41450
     GetHouseCount(): 18
+    GetRating():     0
   Town 5
     IsValidTown():   true
     GetName():       Fraston
     GetPopulation(): 206
     GetLocation():   55007
     GetHouseCount(): 11
+    GetRating():     0
   Town 6
     IsValidTown():   true
     GetName():       Muningville
     GetPopulation(): 566
     GetLocation():   38200
     GetHouseCount(): 28
+    GetRating():     0
   Town 7
     IsValidTown():   true
     GetName():       Hutfingford
     GetPopulation(): 652
     GetLocation():   59234
     GetHouseCount(): 32
+    GetRating():     0
   Town 8
     IsValidTown():   true
     GetName():       Sadtown
     GetPopulation(): 292
     GetLocation():   51267
     GetHouseCount(): 20
+    GetRating():     0
   Town 9
     IsValidTown():   true
     GetName():       Frindinghattan
     GetPopulation(): 447
     GetLocation():   5825
     GetHouseCount(): 18
+    GetRating():     0
   Town 10
     IsValidTown():   true
     GetName():       Nuntfingburg
     GetPopulation(): 702
     GetLocation():   6446
     GetHouseCount(): 26
+    GetRating():     0
   Town 11
     IsValidTown():   true
     GetName():       Fort Frindston
     GetPopulation(): 156
     GetLocation():   14935
     GetHouseCount(): 13
+    GetRating():     0
   Town 12
     IsValidTown():   true
     GetName():       Ginborough
     GetPopulation(): 766
     GetLocation():   32740
     GetHouseCount(): 27
+    GetRating():     0
   Town 13
     IsValidTown():   true
     GetName():       Great Hinninghall
     GetPopulation(): 276
     GetLocation():   9595
     GetHouseCount(): 14
+    GetRating():     0
   Town 14
     IsValidTown():   true
     GetName():       Prundinghall
     GetPopulation(): 316
     GetLocation():   51298
     GetHouseCount(): 17
+    GetRating():     0
   Town 15
     IsValidTown():   true
     GetName():       Benville
     GetPopulation(): 699
     GetLocation():   42338
     GetHouseCount(): 32
+    GetRating():     5
   Town 16
     IsValidTown():   true
     GetName():       Kennville
     GetPopulation(): 659
     GetLocation():   17345
     GetHouseCount(): 32
+    GetRating():     0
   Town 17
     IsValidTown():   true
     GetName():       Quartfingfield
     GetPopulation(): 185
     GetLocation():   24252
     GetHouseCount(): 13
+    GetRating():     0
   Town 18
     IsValidTown():   true
     GetName():       Netfingbridge
     GetPopulation(): 267
     GetLocation():   10574
     GetHouseCount(): 12
+    GetRating():     0
   Town 19
     IsValidTown():   true
     GetName():       Mendingston
     GetPopulation(): 221
     GetLocation():   6511
     GetHouseCount(): 14
+    GetRating():     0
   Town 20
     IsValidTown():   true
     GetName():       Chentfingbourne
     GetPopulation(): 425
     GetLocation():   22585
     GetHouseCount(): 14
+    GetRating():     5
   Town 21
     IsValidTown():   true
     GetName():       Franinghead
     GetPopulation(): 598
     GetLocation():   9634
     GetHouseCount(): 27
+    GetRating():     0
   Town 22
     IsValidTown():   true
     GetName():       Naborough
     GetPopulation(): 174
     GetLocation():   51891
     GetHouseCount(): 12
+    GetRating():     0
   Town 23
     IsValidTown():   true
     GetName():       Lardborough
     GetPopulation(): 657
     GetLocation():   59622
     GetHouseCount(): 27
+    GetRating():     0
   Town 24
     IsValidTown():   true
     GetName():       Little Fruford
     GetPopulation(): 624
     GetLocation():   19596
     GetHouseCount(): 33
+    GetRating():     5
   Town 25
     IsValidTown():   true
     GetName():       Grinnway
     GetPopulation(): 548
     GetLocation():   16433
     GetHouseCount(): 15
+    GetRating():     0
   Town 26
     IsValidTown():   true
     GetName():       Bedburg
     GetPopulation(): 336
     GetLocation():   39505
     GetHouseCount(): 17
+    GetRating():     0
   Town 27
     IsValidTown():   true
     GetName():       Fudinghattan
     GetPopulation(): 382
     GetLocation():   45525
     GetHouseCount(): 19
+    GetRating():     0
   Town 28
     IsValidTown():   false
     GetName():       (null : 0x00000000)
     GetPopulation(): -1
     GetLocation():   -1
     GetHouseCount(): -1
+    GetRating():     -1
   Town 29
     IsValidTown():   false
     GetName():       (null : 0x00000000)
     GetPopulation(): -1
     GetLocation():   -1
     GetHouseCount(): -1
+    GetRating():     -1
   Town 30
     IsValidTown():   false
     GetName():       (null : 0x00000000)
     GetPopulation(): -1
     GetLocation():   -1
     GetHouseCount(): -1
+    GetRating():     -1
   Town 31
     IsValidTown():   false
     GetName():       (null : 0x00000000)
     GetPopulation(): -1
     GetLocation():   -1
     GetHouseCount(): -1
+    GetRating():     -1
   Valid Towns:       28
   GetTownCount():    28
 
--- a/src/ai/api/ai_town.cpp	Sun Jun 08 15:32:10 2008 +0000
+++ b/src/ai/api/ai_town.cpp	Sun Jun 08 19:35:16 2008 +0000
@@ -166,3 +166,14 @@
 
 	return AIObject::DoCommand(::GetTown(town_id)->xy, town_id, town_action, CMD_DO_TOWN_ACTION);
 }
+
+/* static */ AITown::TownRating AITown::GetRating(TownID town_id, AICompany::CompanyID company_id)
+{
+	if (!IsValidTown(town_id)) return INVALID_TOWN_RATING;
+	AICompany::CompanyID company = AICompany::ResolveCompanyID(company_id);
+	if (company == AICompany::INVALID_COMPANY) return INVALID_TOWN_RATING;
+
+	const Town *t = ::GetTown(town_id);
+	if (!HasBit(t->have_ratings, company)) return TOWN_RATING_NONE;
+	return max(TOWN_RATING_APPALLING, (TownRating)((t->ratings[company] / 200) + 3));
+}
--- a/src/ai/api/ai_town.hpp	Sun Jun 08 15:32:10 2008 +0000
+++ b/src/ai/api/ai_town.hpp	Sun Jun 08 19:35:16 2008 +0000
@@ -69,6 +69,22 @@
 	};
 
 	/**
+	 * Different ratings one could have in a town.
+	 */
+	enum TownRating {
+		TOWN_RATING_NONE,         ///< The company got no rating in the town.
+		TOWN_RATING_APPALLING,    ///< The company got an appalling rating in the town .
+		TOWN_RATING_VERY_POOR,    ///< The company got an very poor rating in the town.
+		TOWN_RATING_POOR,         ///< The company got an poor rating in the town.
+		TOWN_RATING_MEDIOCRE,     ///< The company got an mediocre rating in the town.
+		TOWN_RATING_GOOD,         ///< The company got an good rating in the town.
+		TOWN_RATING_VERY_GOOD,    ///< The company got an very good rating in the town.
+		TOWN_RATING_EXCELLENT,    ///< The company got an excellent rating in the town.
+		TOWN_RATING_OUTSTANDING,  ///< The company got an outstanding rating in the town.
+		INVALID_TOWN_RATING = -1, ///< The town rating for invalid towns/companies.
+	};
+
+	/**
 	 * Gets the maximum town index; there are no valid towns with a higher index.
 	 * @return The maximum town index.
 	 * @post Return value is always non-negative.
@@ -245,6 +261,16 @@
 	 * @return True if the action succeeded.
 	 */
 	static bool PerformTownAction(TownID town_id, TownAction town_action);
+
+	/**
+	 * Get the rating of a company within a town.
+	 * @param town_id The town to get the rating for.
+	 * @param company_id The company to get the rating for.
+	 * @pre IsValidTown(town_id).
+	 * @pre AICompany.ResolveCompanyID(company) != AICompany::INVALID_COMPANY.
+	 * @return The rating as shown to humans.
+	 */
+	static TownRating GetRating(TownID town_id, AICompany::CompanyID company_id);
 };
 
 #endif /* AI_TOWN_HPP */
--- a/src/ai/api/ai_town.hpp.sq	Sun Jun 08 15:32:10 2008 +0000
+++ b/src/ai/api/ai_town.hpp.sq	Sun Jun 08 19:35:16 2008 +0000
@@ -7,6 +7,8 @@
 	/* Allow enums to be used as Squirrel parameters */
 	template <> AITown::TownAction GetParam(ForceType<AITown::TownAction>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (AITown::TownAction)tmp; }
 	template <> int Return<AITown::TownAction>(HSQUIRRELVM vm, AITown::TownAction res) { sq_pushinteger(vm, (int32)res); return 1; }
+	template <> AITown::TownRating GetParam(ForceType<AITown::TownRating>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (AITown::TownRating)tmp; }
+	template <> int Return<AITown::TownRating>(HSQUIRRELVM vm, AITown::TownRating res) { sq_pushinteger(vm, (int32)res); return 1; }
 
 	/* Allow AITown to be used as Squirrel parameter */
 	template <> AITown *GetParam(ForceType<AITown *>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITown *)instance; }
@@ -29,6 +31,16 @@
 	SQAITown.DefSQConst(engine, AITown::TOWN_ACTION_FUND_BUILDINGS,   "TOWN_ACTION_FUND_BUILDINGS");
 	SQAITown.DefSQConst(engine, AITown::TOWN_ACTION_BUY_RIGHTS,       "TOWN_ACTION_BUY_RIGHTS");
 	SQAITown.DefSQConst(engine, AITown::TOWN_ACTION_BRIBE,            "TOWN_ACTION_BRIBE");
+	SQAITown.DefSQConst(engine, AITown::TOWN_RATING_NONE,             "TOWN_RATING_NONE");
+	SQAITown.DefSQConst(engine, AITown::TOWN_RATING_APPALLING,        "TOWN_RATING_APPALLING");
+	SQAITown.DefSQConst(engine, AITown::TOWN_RATING_VERY_POOR,        "TOWN_RATING_VERY_POOR");
+	SQAITown.DefSQConst(engine, AITown::TOWN_RATING_POOR,             "TOWN_RATING_POOR");
+	SQAITown.DefSQConst(engine, AITown::TOWN_RATING_MEDIOCRE,         "TOWN_RATING_MEDIOCRE");
+	SQAITown.DefSQConst(engine, AITown::TOWN_RATING_GOOD,             "TOWN_RATING_GOOD");
+	SQAITown.DefSQConst(engine, AITown::TOWN_RATING_VERY_GOOD,        "TOWN_RATING_VERY_GOOD");
+	SQAITown.DefSQConst(engine, AITown::TOWN_RATING_EXCELLENT,        "TOWN_RATING_EXCELLENT");
+	SQAITown.DefSQConst(engine, AITown::TOWN_RATING_OUTSTANDING,      "TOWN_RATING_OUTSTANDING");
+	SQAITown.DefSQConst(engine, AITown::INVALID_TOWN_RATING,          "INVALID_TOWN_RATING");
 
 	SQAITown.DefSQStaticMethod(engine, &AITown::GetClassName,               "GetClassName",               1, "x");
 	SQAITown.DefSQStaticMethod(engine, &AITown::GetMaxTownID,               "GetMaxTownID",               1, "x");
@@ -50,6 +62,7 @@
 	SQAITown.DefSQStaticMethod(engine, &AITown::GetExclusiveRightsDuration, "GetExclusiveRightsDuration", 2, "xi");
 	SQAITown.DefSQStaticMethod(engine, &AITown::IsActionAvailable,          "IsActionAvailable",          3, "xii");
 	SQAITown.DefSQStaticMethod(engine, &AITown::PerformTownAction,          "PerformTownAction",          3, "xii");
+	SQAITown.DefSQStaticMethod(engine, &AITown::GetRating,                  "GetRating",                  3, "xii");
 
 	SQAITown.PostRegister(engine);
 }