189 SetBit(p->avail_railtypes, rvi->railtype); |
189 SetBit(p->avail_railtypes, rvi->railtype); |
190 } else if (e->type == VEH_ROAD) { |
190 } else if (e->type == VEH_ROAD) { |
191 SetBit(p->avail_roadtypes, HasBit(EngInfo(eid)->misc_flags, EF_ROAD_TRAM) ? ROADTYPE_TRAM : ROADTYPE_ROAD); |
191 SetBit(p->avail_roadtypes, HasBit(EngInfo(eid)->misc_flags, EF_ROAD_TRAM) ? ROADTYPE_TRAM : ROADTYPE_ROAD); |
192 } |
192 } |
193 |
193 |
194 e->preview_player = INVALID_PLAYER; |
194 e->preview_player_rank = 0xFF; |
195 if (player == _local_player) { |
195 if (player == _local_player) { |
196 AddRemoveEngineFromAutoreplaceAndBuildWindows(e->type); |
196 AddRemoveEngineFromAutoreplaceAndBuildWindows(e->type); |
197 } |
197 } |
198 } |
198 } |
199 |
199 |
200 static PlayerID GetBestPlayer(PlayerID pp) |
200 static PlayerID GetBestPlayer(uint8 pp) |
201 { |
201 { |
202 const Player *p; |
202 const Player *p; |
203 int32 best_hist; |
203 int32 best_hist; |
204 PlayerID best_player; |
204 PlayerID best_player; |
205 uint mask = 0; |
205 uint mask = 0; |
206 |
206 |
207 do { |
207 for (; pp != 0; pp--) { |
208 best_hist = -1; |
208 best_hist = -1; |
209 best_player = PLAYER_SPECTATOR; |
209 best_player = PLAYER_SPECTATOR; |
210 FOR_ALL_PLAYERS(p) { |
210 FOR_ALL_PLAYERS(p) { |
211 if (p->is_active && p->block_preview == 0 && !HasBit(mask, p->index) && |
211 if (p->is_active && p->block_preview == 0 && !HasBit(mask, p->index) && |
212 p->old_economy[0].performance_history > best_hist) { |
212 p->old_economy[0].performance_history > best_hist) { |
232 for (i = 0; i != lengthof(_engines); i++) { |
232 for (i = 0; i != lengthof(_engines); i++) { |
233 Engine *e = &_engines[i]; |
233 Engine *e = &_engines[i]; |
234 |
234 |
235 if (e->flags & ENGINE_EXCLUSIVE_PREVIEW) { |
235 if (e->flags & ENGINE_EXCLUSIVE_PREVIEW) { |
236 if (e->flags & ENGINE_OFFER_WINDOW_OPEN) { |
236 if (e->flags & ENGINE_OFFER_WINDOW_OPEN) { |
237 if (e->preview_player != 0xFF && !--e->preview_wait) { |
237 if (e->preview_player_rank != 0xFF && !--e->preview_wait) { |
238 e->flags &= ~ENGINE_OFFER_WINDOW_OPEN; |
238 e->flags &= ~ENGINE_OFFER_WINDOW_OPEN; |
239 DeleteWindowById(WC_ENGINE_PREVIEW, i); |
239 DeleteWindowById(WC_ENGINE_PREVIEW, i); |
240 e->preview_player++; |
240 e->preview_player_rank++; |
241 } |
241 } |
242 } else if (e->preview_player != 0xFF) { |
242 } else if (e->preview_player_rank != 0xFF) { |
243 PlayerID best_player = GetBestPlayer(e->preview_player); |
243 PlayerID best_player = GetBestPlayer(e->preview_player_rank); |
244 |
244 |
245 if (best_player == PLAYER_SPECTATOR) { |
245 if (best_player == PLAYER_SPECTATOR) { |
246 e->preview_player = INVALID_PLAYER; |
246 e->preview_player_rank = 0xFF; |
247 continue; |
247 continue; |
248 } |
248 } |
249 |
249 |
250 if (!IsHumanPlayer(best_player)) { |
250 if (!IsHumanPlayer(best_player)) { |
251 /* XXX - TTDBUG: TTD has a bug here ???? */ |
251 /* XXX - TTDBUG: TTD has a bug here ???? */ |
359 /* Introduction date has passed.. show introducing dialog to one player. */ |
359 /* Introduction date has passed.. show introducing dialog to one player. */ |
360 e->flags |= ENGINE_EXCLUSIVE_PREVIEW; |
360 e->flags |= ENGINE_EXCLUSIVE_PREVIEW; |
361 |
361 |
362 /* Do not introduce new rail wagons */ |
362 /* Do not introduce new rail wagons */ |
363 if (!IsWagon(e - _engines)) |
363 if (!IsWagon(e - _engines)) |
364 e->preview_player = (PlayerID)1; // Give to the player with the highest rating. |
364 e->preview_player_rank = 1; // Give to the player with the highest rating. |
365 } |
365 } |
366 } |
366 } |
367 } |
367 } |
368 } |
368 } |
369 |
369 |
611 SLE_VAR(Engine, duration_phase_2, SLE_UINT16), |
611 SLE_VAR(Engine, duration_phase_2, SLE_UINT16), |
612 SLE_VAR(Engine, duration_phase_3, SLE_UINT16), |
612 SLE_VAR(Engine, duration_phase_3, SLE_UINT16), |
613 |
613 |
614 SLE_VAR(Engine, lifelength, SLE_UINT8), |
614 SLE_VAR(Engine, lifelength, SLE_UINT8), |
615 SLE_VAR(Engine, flags, SLE_UINT8), |
615 SLE_VAR(Engine, flags, SLE_UINT8), |
616 SLE_VAR(Engine, preview_player, SLE_UINT8), |
616 SLE_VAR(Engine, preview_player_rank, SLE_UINT8), |
617 SLE_VAR(Engine, preview_wait, SLE_UINT8), |
617 SLE_VAR(Engine, preview_wait, SLE_UINT8), |
618 SLE_CONDNULL(1, 0, 44), |
618 SLE_CONDNULL(1, 0, 44), |
619 SLE_VAR(Engine, player_avail, SLE_UINT8), |
619 SLE_VAR(Engine, player_avail, SLE_UINT8), |
620 SLE_CONDSTR(Engine, name, SLE_STR, 0, 84, SL_MAX_VERSION), |
620 SLE_CONDSTR(Engine, name, SLE_STR, 0, 84, SL_MAX_VERSION), |
621 |
621 |