-
Notifications
You must be signed in to change notification settings - Fork 0
/
ExtendNetworkIntention.nut
101 lines (84 loc) · 2.3 KB
/
ExtendNetworkIntention.nut
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
class ExtendNetworkIntention extends Intention {
sw7town = null;
bsbo = null;
constructor(sw7town_) {
::Intention.constructor();
sw7town = sw7town_;
}
}
function ExtendNetworkIntention::Test() {
local searchRadius = 0.0013 * sw7town.GetPopulation() + 6;
local stationTiles = [];
local options = TileListGenerator.generateFlatRoadTilesNear(sw7town.GetLocation(), searchRadius);
foreach (station, _ in sw7town.Stations) {
stationTiles.append(AIStation.GetLocation(station));
}
options = SW7MEUP.optimize(options, stationTiles);
bsbo = TestBusStationBO(options);
if (bsbo == null) return false;
return true;
}
function ExtendNetworkIntention::Execute() {
local st = null;
if (bsbo != null) {
if (bsbo.cost > AICompany.GetBankBalance(AICompany.COMPANY_SELF)) {
AICompany.SetLoanAmount(AICompany.GetMaxLoanAmount());
}
st = bsbo.execute();
if (st != false) {
sw7town.AddStation(AIStation.GetStationID(st));
AIOrder.AppendOrder(sw7town.Vehicles.Begin(), st, AIOrder.AIOF_NON_STOP_INTERMEDIATE);
// foreach (veh, _ in sw7town.Vehicles) {
// AIOrder.AppendOrder(veh, st, AIOrder.AIOF_NON_STOP_INTERMEDIATE);
// }
sw7town.lastExtend = AIController.GetTick();
return true;
}
}
return false;
}
function ExtendNetworkIntention::PostExecute() {
return true;
}
function ExtendNetworkIntention::TestBusStationBO(tilelist) {
local bsbo;
foreach (tile, _ in tilelist) {
bsbo = BusStationBuildOrder(tile, AIStation.STATION_NEW);
if (bsbo.test() != null) {
return bsbo;
}
}
return null;
}
function ExtendNetworkIntention::Equals(intention) {
if (intention instanceof ExtendNetworkIntention) {
if (intention.sw7town.TownId == this.sw7town.TownId) return true;
}
return false;
}
function ExtendNetworkIntention::GetCost() {
return bsbo.cost;
}
function ExtendNetworkIntention::GetPrio() {
local ts = sw7town.GetPopulation();
local tmpPrio = 0;
local updTime = sw7town.lastExtend;
if (ts < 1000) {
tmpPrio = ts/100;
} else if (ts <= 4000) {
tmpPrio = 0.025 * ts - 15;
} else {
tmpPrio = 90;
}
tmpPrio = tmpPrio * (1/10);
if (updTime = -1) {
return tmpPrio.tointeger();
} else {
local elapsed = AIController.GetTick() - updTime;
if (elapsed > 10000) {
return (tmpPrio).tointeger();
} else {
return (tmpPrio * elapsed/10000).tointeger();
}
}
}