author | truebrain |
Mon, 31 Mar 2008 06:45:57 +0000 | |
branch | noai |
changeset 9833 | 89a64246458f |
parent 9803 | c86d5834fb11 |
child 9867 | b7d9ffe24f81 |
permissions | -rw-r--r-- |
9792
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
1 |
/* $Id$ */ |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
2 |
|
9833
89a64246458f
(svn r12496) [NoAI] -Documentation: give the .cpp files a nice uniform format too
truebrain
parents:
9803
diff
changeset
|
3 |
/** @file ai_bridge.cpp Implementation of AIBridge. */ |
9792
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
4 |
|
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
5 |
#include "ai_bridge.hpp" |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
6 |
#include "../../bridge.h" |
9793
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
7 |
#include "../../bridge_map.h" |
9792
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
8 |
#include "../../strings_func.h" |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
9 |
#include "../../core/alloc_func.hpp" |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
10 |
#include "../../economy_func.h" |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
11 |
#include "../../settings_type.h" |
9793
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
12 |
#include "../../road_map.h" |
9792
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
13 |
#include "table/strings.h" |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
14 |
|
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
15 |
/* static */ bool AIBridge::IsValidBridge(BridgeID bridge_id) |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
16 |
{ |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
17 |
return bridge_id < MAX_BRIDGES; |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
18 |
} |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
19 |
|
9793
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
20 |
/* static */ bool AIBridge::IsBridgeTile(TileIndex tile) |
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
21 |
{ |
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
22 |
return ::IsBridgeTile(tile); |
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
23 |
} |
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
24 |
|
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
25 |
/* static */ bool AIBridge::BuildBridge(AIVehicle::VehicleType vehicle_type, BridgeID bridge_id, TileIndex start, TileIndex end) |
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
26 |
{ |
9803
c86d5834fb11
(svn r12309) [NoAI] -Codechange: optimize a little bit (a very small little bit, but every bit counts :) ) (glx)
truebrain
parents:
9801
diff
changeset
|
27 |
if (start == end) return false; |
9801
03a3eebd7fb7
(svn r12307) [NoAI] -Codechange: as followup on r12303 (trunk), use ::IsValidTile to check if a tile is inside the map, instead of all our custom ways
truebrain
parents:
9793
diff
changeset
|
28 |
if (!::IsValidTile(start)) return false; |
03a3eebd7fb7
(svn r12307) [NoAI] -Codechange: as followup on r12303 (trunk), use ::IsValidTile to check if a tile is inside the map, instead of all our custom ways
truebrain
parents:
9793
diff
changeset
|
29 |
if (!::IsValidTile(end)) return false; |
9793
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
30 |
/* Not on one line */ |
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
31 |
if (TileX(start) != TileX(end) && |
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
32 |
TileY(start) != TileY(end)) return false; |
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
33 |
if (vehicle_type != AIVehicle::VEHICLE_ROAD && vehicle_type != AIVehicle::VEHICLE_RAIL) return false; |
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
34 |
|
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
35 |
uint type = 0; |
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
36 |
if (vehicle_type == AIVehicle::VEHICLE_ROAD) { |
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
37 |
type |= (TRANSPORT_ROAD << 15); |
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
38 |
type |= (ROADTYPES_ROAD << 8); |
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
39 |
} else { |
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
40 |
type |= (TRANSPORT_RAIL << 15); |
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
41 |
type |= (RAILTYPES_RAIL << 8); |
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
42 |
} |
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
43 |
|
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
44 |
return AIObject::DoCommand(end, start, type | bridge_id, CMD_BUILD_BRIDGE); |
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
45 |
} |
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
46 |
|
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
47 |
/* static */ bool AIBridge::RemoveBridge(TileIndex tile) |
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
48 |
{ |
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
49 |
if (!IsBridgeTile(tile)) return false; |
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
50 |
|
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
51 |
return AIObject::DoCommand(tile, 0, 0, CMD_LANDSCAPE_CLEAR); |
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
52 |
} |
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
53 |
|
9792
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
54 |
/* static */ char *AIBridge::GetName(BridgeID bridge_id) |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
55 |
{ |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
56 |
if (!IsValidBridge(bridge_id)) return NULL; |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
57 |
|
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
58 |
static const int len = 64; |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
59 |
char *bridge_name = MallocT<char>(len); |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
60 |
|
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
61 |
::GetString(bridge_name, ::GetBridgeSpec(bridge_id)->transport_name[0], &bridge_name[len - 1]); |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
62 |
return bridge_name; |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
63 |
} |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
64 |
|
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
65 |
/* static */ uint32 AIBridge::GetMaxSpeed(BridgeID bridge_id) |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
66 |
{ |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
67 |
if (!IsValidBridge(bridge_id)) return 0; |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
68 |
|
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
69 |
return ::GetBridgeSpec(bridge_id)->speed; |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
70 |
} |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
71 |
|
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
72 |
/* static */ uint32 AIBridge::GetPrice(BridgeID bridge_id, uint length) |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
73 |
{ |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
74 |
if (!IsValidBridge(bridge_id)) return 0; |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
75 |
|
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
76 |
return length * _price.build_bridge * ::GetBridgeSpec(bridge_id)->price >> 8; |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
77 |
} |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
78 |
|
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
79 |
/* static */ uint32 AIBridge::GetMaxLength(BridgeID bridge_id) |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
80 |
{ |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
81 |
if (!IsValidBridge(bridge_id)) return 0; |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
82 |
|
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
83 |
uint max = ::GetBridgeSpec(bridge_id)->max_length; |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
84 |
if (max >= 16 && _patches.longbridges) max = 100; |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
85 |
return max + 2; |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
86 |
} |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
87 |
|
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
88 |
/* static */ uint32 AIBridge::GetMinLength(BridgeID bridge_id) |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
89 |
{ |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
90 |
if (!IsValidBridge(bridge_id)) return 0; |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
91 |
|
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
92 |
return ::GetBridgeSpec(bridge_id)->min_length + 2; |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
93 |
} |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
94 |
|
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
95 |
/* static */ int32 AIBridge::GetYearAvailable(BridgeID bridge_id) |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
96 |
{ |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
97 |
if (!IsValidBridge(bridge_id)) return 0; |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
98 |
|
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
99 |
return ::GetBridgeSpec(bridge_id)->avail_year; |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
100 |
} |