author | truebrain |
Thu, 24 Apr 2008 23:39:18 +0000 | |
branch | noai |
changeset 10339 | ce6cd68d9eb8 |
parent 10196 | aecabd927420 |
child 10679 | fcd493243794 |
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" |
10339
ce6cd68d9eb8
(svn r12880) [NoAI] -Add: introduces ai_types.hpp, which has all NNNId like VehicleID. This simplifies the include-mess, and avoids including tons of _type.h for just a single typedef.
truebrain
parents:
10196
diff
changeset
|
6 |
#include "../../openttd.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 |
{ |
9868
3998f2e73dda
(svn r12590) [NoAI] -Add: EnforcePrecondition macro to make code much better readable.
rubidium
parents:
9867
diff
changeset
|
27 |
EnforcePrecondition(false, start != end); |
3998f2e73dda
(svn r12590) [NoAI] -Add: EnforcePrecondition macro to make code much better readable.
rubidium
parents:
9867
diff
changeset
|
28 |
EnforcePrecondition(false, ::IsValidTile(start) && ::IsValidTile(end)); |
3998f2e73dda
(svn r12590) [NoAI] -Add: EnforcePrecondition macro to make code much better readable.
rubidium
parents:
9867
diff
changeset
|
29 |
EnforcePrecondition(false, TileX(start) == TileX(end) || TileY(start) == TileY(end)); |
3998f2e73dda
(svn r12590) [NoAI] -Add: EnforcePrecondition macro to make code much better readable.
rubidium
parents:
9867
diff
changeset
|
30 |
EnforcePrecondition(false, vehicle_type == AIVehicle::VEHICLE_ROAD || vehicle_type == AIVehicle::VEHICLE_RAIL); |
9793
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
31 |
|
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
32 |
uint type = 0; |
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
33 |
if (vehicle_type == AIVehicle::VEHICLE_ROAD) { |
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
34 |
type |= (TRANSPORT_ROAD << 15); |
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
35 |
type |= (ROADTYPES_ROAD << 8); |
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
36 |
} else { |
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
37 |
type |= (TRANSPORT_RAIL << 15); |
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
38 |
type |= (RAILTYPES_RAIL << 8); |
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
39 |
} |
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
40 |
|
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
41 |
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
|
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 |
/* static */ bool AIBridge::RemoveBridge(TileIndex tile) |
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
45 |
{ |
9868
3998f2e73dda
(svn r12590) [NoAI] -Add: EnforcePrecondition macro to make code much better readable.
rubidium
parents:
9867
diff
changeset
|
46 |
EnforcePrecondition(false, IsBridgeTile(tile)); |
9793
c5fb53240401
(svn r12297) [NoAI] -Add: added AIBridge.BuildBridge and friends
truebrain
parents:
9792
diff
changeset
|
47 |
return AIObject::DoCommand(tile, 0, 0, CMD_LANDSCAPE_CLEAR); |
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 |
|
9792
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
50 |
/* 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
|
51 |
{ |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
52 |
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
|
53 |
|
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
54 |
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
|
55 |
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
|
56 |
|
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
57 |
::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
|
58 |
return bridge_name; |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
59 |
} |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
60 |
|
10194
c9fdeb7450da
(svn r12727) [NoAI] -Fix (API CHANGE): return -1 to indicate invalidity, instead of 0 or -1, depending on the class
truebrain
parents:
9868
diff
changeset
|
61 |
/* static */ int32 AIBridge::GetMaxSpeed(BridgeID bridge_id) |
9792
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
62 |
{ |
10194
c9fdeb7450da
(svn r12727) [NoAI] -Fix (API CHANGE): return -1 to indicate invalidity, instead of 0 or -1, depending on the class
truebrain
parents:
9868
diff
changeset
|
63 |
if (!IsValidBridge(bridge_id)) return -1; |
9792
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 |
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
|
66 |
} |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
67 |
|
10196
aecabd927420
(svn r12728) [NoAI] -Codechange: always let functions return Money when they return something that can be quantified as money.
rubidium
parents:
10194
diff
changeset
|
68 |
/* static */ Money AIBridge::GetPrice(BridgeID bridge_id, uint length) |
9792
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
69 |
{ |
10194
c9fdeb7450da
(svn r12727) [NoAI] -Fix (API CHANGE): return -1 to indicate invalidity, instead of 0 or -1, depending on the class
truebrain
parents:
9868
diff
changeset
|
70 |
if (!IsValidBridge(bridge_id)) return -1; |
9792
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 |
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
|
73 |
} |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
74 |
|
10194
c9fdeb7450da
(svn r12727) [NoAI] -Fix (API CHANGE): return -1 to indicate invalidity, instead of 0 or -1, depending on the class
truebrain
parents:
9868
diff
changeset
|
75 |
/* static */ int32 AIBridge::GetMaxLength(BridgeID bridge_id) |
9792
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
76 |
{ |
10194
c9fdeb7450da
(svn r12727) [NoAI] -Fix (API CHANGE): return -1 to indicate invalidity, instead of 0 or -1, depending on the class
truebrain
parents:
9868
diff
changeset
|
77 |
if (!IsValidBridge(bridge_id)) return -1; |
9792
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 |
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
|
80 |
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
|
81 |
return max + 2; |
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 |
|
10194
c9fdeb7450da
(svn r12727) [NoAI] -Fix (API CHANGE): return -1 to indicate invalidity, instead of 0 or -1, depending on the class
truebrain
parents:
9868
diff
changeset
|
84 |
/* static */ int32 AIBridge::GetMinLength(BridgeID bridge_id) |
9792
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
85 |
{ |
10194
c9fdeb7450da
(svn r12727) [NoAI] -Fix (API CHANGE): return -1 to indicate invalidity, instead of 0 or -1, depending on the class
truebrain
parents:
9868
diff
changeset
|
86 |
if (!IsValidBridge(bridge_id)) return -1; |
9792
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 |
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
|
89 |
} |
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
90 |
|
e1222f4674c2
(svn r12294) [NoAI] -Add: added AIBridge(List), which lists all available bridges (no build yet)
truebrain
parents:
diff
changeset
|
91 |
/* 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
|
92 |
{ |
10194
c9fdeb7450da
(svn r12727) [NoAI] -Fix (API CHANGE): return -1 to indicate invalidity, instead of 0 or -1, depending on the class
truebrain
parents:
9868
diff
changeset
|
93 |
if (!IsValidBridge(bridge_id)) return -1; |
9792
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 |
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
|
96 |
} |