(svn r13420) [NoAI] -Add: function to get the town rating.
--- 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);
}