47 typedef struct DrawEngineInfo { |
47 typedef struct DrawEngineInfo { |
48 DrawEngineProc *engine_proc; |
48 DrawEngineProc *engine_proc; |
49 DrawEngineInfoProc *info_proc; |
49 DrawEngineInfoProc *info_proc; |
50 } DrawEngineInfo; |
50 } DrawEngineInfo; |
51 |
51 |
|
52 static void DrawTrainEngineInfo(int engine, int x, int y, int maxw); |
|
53 static void DrawRoadVehEngineInfo(int engine, int x, int y, int maxw); |
|
54 static void DrawShipEngineInfo(int engine, int x, int y, int maxw); |
|
55 static void DrawAircraftEngineInfo(int engine, int x, int y, int maxw); |
|
56 |
52 static const DrawEngineInfo _draw_engine_list[4] = { |
57 static const DrawEngineInfo _draw_engine_list[4] = { |
53 {DrawTrainEngine,DrawTrainEngineInfo}, |
58 {DrawTrainEngine,DrawTrainEngineInfo}, |
54 {DrawRoadVehEngine,DrawRoadVehEngineInfo}, |
59 {DrawRoadVehEngine,DrawRoadVehEngineInfo}, |
55 {DrawShipEngine,DrawShipEngineInfo}, |
60 {DrawShipEngine,DrawShipEngineInfo}, |
56 {DrawAircraftEngine,DrawAircraftEngineInfo}, |
61 {DrawAircraftEngine,DrawAircraftEngineInfo}, |
111 |
116 |
112 w = AllocateWindowDesc(&_engine_preview_desc); |
117 w = AllocateWindowDesc(&_engine_preview_desc); |
113 w->window_number = engine; |
118 w->window_number = engine; |
114 } |
119 } |
115 |
120 |
|
121 static void DrawTrainEngineInfo(int engine, int x, int y, int maxw) |
|
122 { |
|
123 const RailVehicleInfo *rvi = RailVehInfo(engine); |
|
124 int cap; |
|
125 uint multihead = (rvi->flags & RVI_MULTIHEAD) ? 1 : 0; |
|
126 |
|
127 SetDParam(0, (_price.build_railvehicle >> 3) * rvi->base_cost >> 5); |
|
128 SetDParam(2, rvi->max_speed * 10 >> 4); |
|
129 SetDParam(3, rvi->power << multihead); |
|
130 SetDParam(1, rvi->weight << multihead); |
|
131 |
|
132 SetDParam(4, rvi->running_cost_base * _price.running_rail[rvi->engclass] >> 8 << multihead); |
|
133 |
|
134 cap = rvi->capacity; |
|
135 SetDParam(5, STR_8838_N_A); |
|
136 if (cap != 0) { |
|
137 SetDParam(6, cap << multihead); |
|
138 SetDParam(5, _cargoc.names_long_p[rvi->cargo_type]); |
|
139 } |
|
140 DrawStringMultiCenter(x, y, STR_885B_COST_WEIGHT_T_SPEED_POWER, maxw); |
|
141 } |
|
142 |
116 void DrawNewsNewTrainAvail(Window *w) |
143 void DrawNewsNewTrainAvail(Window *w) |
117 { |
144 { |
118 int engine; |
145 int engine; |
119 |
146 |
120 DrawNewsBorder(w); |
147 DrawNewsBorder(w); |
140 SetDParam(1, GetEngineCategoryName(engine)); |
167 SetDParam(1, GetEngineCategoryName(engine)); |
141 SetDParam(2, GetCustomEngineName(engine)); |
168 SetDParam(2, GetCustomEngineName(engine)); |
142 return STR_02B6; |
169 return STR_02B6; |
143 } |
170 } |
144 |
171 |
|
172 static void DrawAircraftEngineInfo(int engine, int x, int y, int maxw) |
|
173 { |
|
174 const AircraftVehicleInfo *avi = AircraftVehInfo(engine); |
|
175 SetDParam(0, (_price.aircraft_base >> 3) * avi->base_cost >> 5); |
|
176 SetDParam(1, avi->max_speed << 3); |
|
177 SetDParam(2, avi->passenger_capacity); |
|
178 SetDParam(3, avi->mail_capacity); |
|
179 SetDParam(4, avi->running_cost * _price.aircraft_running >> 8); |
|
180 |
|
181 DrawStringMultiCenter(x, y, STR_A02E_COST_MAX_SPEED_CAPACITY, maxw); |
|
182 } |
|
183 |
145 void DrawNewsNewAircraftAvail(Window *w) |
184 void DrawNewsNewAircraftAvail(Window *w) |
146 { |
185 { |
147 int engine; |
186 int engine; |
148 |
187 |
149 DrawNewsBorder(w); |
188 DrawNewsBorder(w); |
167 SetDParam(0, STR_A02C_NEW_AIRCRAFT_NOW_AVAILABLE); |
206 SetDParam(0, STR_A02C_NEW_AIRCRAFT_NOW_AVAILABLE); |
168 SetDParam(1, GetCustomEngineName(engine)); |
207 SetDParam(1, GetCustomEngineName(engine)); |
169 return STR_02B6; |
208 return STR_02B6; |
170 } |
209 } |
171 |
210 |
|
211 static void DrawRoadVehEngineInfo(int engine, int x, int y, int maxw) |
|
212 { |
|
213 const RoadVehicleInfo *rvi = RoadVehInfo(engine); |
|
214 |
|
215 SetDParam(0, (_price.roadveh_base >> 3) * rvi->base_cost >> 5); |
|
216 SetDParam(1, rvi->max_speed * 10 >> 5); |
|
217 SetDParam(2, rvi->running_cost * _price.roadveh_running >> 8); |
|
218 |
|
219 SetDParam(4, rvi->capacity); |
|
220 SetDParam(3, _cargoc.names_long_p[rvi->cargo_type]); |
|
221 |
|
222 DrawStringMultiCenter(x, y, STR_902A_COST_SPEED_RUNNING_COST, maxw); |
|
223 } |
|
224 |
172 void DrawNewsNewRoadVehAvail(Window *w) |
225 void DrawNewsNewRoadVehAvail(Window *w) |
173 { |
226 { |
174 int engine; |
227 int engine; |
175 |
228 |
176 DrawNewsBorder(w); |
229 DrawNewsBorder(w); |
193 SetDParam(0, STR_9028_NEW_ROAD_VEHICLE_NOW_AVAILABLE); |
246 SetDParam(0, STR_9028_NEW_ROAD_VEHICLE_NOW_AVAILABLE); |
194 SetDParam(1, GetCustomEngineName(engine)); |
247 SetDParam(1, GetCustomEngineName(engine)); |
195 return STR_02B6; |
248 return STR_02B6; |
196 } |
249 } |
197 |
250 |
|
251 static void DrawShipEngineInfo(int engine, int x, int y, int maxw) |
|
252 { |
|
253 const ShipVehicleInfo *svi = ShipVehInfo(engine); |
|
254 SetDParam(0, svi->base_cost * (_price.ship_base >> 3) >> 5); |
|
255 SetDParam(1, svi->max_speed * 10 >> 5); |
|
256 SetDParam(2, _cargoc.names_long_p[svi->cargo_type]); |
|
257 SetDParam(3, svi->capacity); |
|
258 SetDParam(4, svi->running_cost * _price.ship_running >> 8); |
|
259 DrawStringMultiCenter(x, y, STR_982E_COST_MAX_SPEED_CAPACITY, maxw); |
|
260 } |
|
261 |
198 void DrawNewsNewShipAvail(Window *w) |
262 void DrawNewsNewShipAvail(Window *w) |
199 { |
263 { |
200 int engine; |
264 int engine; |
201 |
265 |
202 DrawNewsBorder(w); |
266 DrawNewsBorder(w); |