|
@@ -700,14 +700,13 @@ void StartupEngines()
|
|
|
|
|
|
FOR_ALL_ENGINES(e) {
|
|
|
StartupOneEngine(e, aging_date);
|
|
|
}
|
|
|
|
|
|
/* Update the bitmasks for the vehicle lists */
|
|
|
Company *c;
|
|
|
FOR_ALL_COMPANIES(c) {
|
|
|
for (Company *c : Company::Iterate()) {
|
|
|
c->avail_railtypes = GetCompanyRailtypes(c->index);
|
|
|
c->avail_roadtypes = GetCompanyRoadTypes(c->index);
|
|
|
}
|
|
|
|
|
|
/* Invalidate any open purchase lists */
|
|
|
InvalidateWindowClassesData(WC_BUILD_VEHICLE);
|
|
@@ -760,14 +759,13 @@ static CompanyID GetPreviewCompany(Engin
|
|
|
CompanyID best_company = INVALID_COMPANY;
|
|
|
|
|
|
/* For trains the cargomask has no useful meaning, since you can attach other wagons */
|
|
|
CargoTypes cargomask = e->type != VEH_TRAIN ? GetUnionOfArticulatedRefitMasks(e->index, true) : ALL_CARGOTYPES;
|
|
|
|
|
|
int32 best_hist = -1;
|
|
|
const Company *c;
|
|
|
FOR_ALL_COMPANIES(c) {
|
|
|
for (const Company *c : Company::Iterate()) {
|
|
|
if (c->block_preview == 0 && !HasBit(e->preview_asked, c->index) &&
|
|
|
c->old_economy[0].performance_history > best_hist) {
|
|
|
|
|
|
/* Check whether the company uses similar vehicles */
|
|
|
Vehicle *v;
|
|
|
FOR_ALL_VEHICLES(v) {
|
|
@@ -803,14 +801,13 @@ static bool IsVehicleTypeDisabled(Vehicl
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/** Daily check to offer an exclusive engine preview to the companies. */
|
|
|
void EnginesDailyLoop()
|
|
|
{
|
|
|
Company *c;
|
|
|
FOR_ALL_COMPANIES(c) {
|
|
|
for (Company *c : Company::Iterate()) {
|
|
|
c->avail_railtypes = AddDateIntroducedRailTypes(c->avail_railtypes, _date);
|
|
|
c->avail_roadtypes = AddDateIntroducedRoadTypes(c->avail_roadtypes, _date);
|
|
|
}
|
|
|
|
|
|
if (_cur_year >= _year_engine_aging_stops) return;
|
|
|
|
|
@@ -905,19 +902,18 @@ CommandCost CmdWantEnginePreview(TileInd
|
|
|
* Also handle the exclusive engine preview contract.
|
|
|
* @param e Engine generally available as of now.
|
|
|
*/
|
|
|
static void NewVehicleAvailable(Engine *e)
|
|
|
{
|
|
|
Vehicle *v;
|
|
|
Company *c;
|
|
|
EngineID index = e->index;
|
|
|
|
|
|
/* In case the company didn't build the vehicle during the intro period,
|
|
|
* prevent that company from getting future intro periods for a while. */
|
|
|
if (e->flags & ENGINE_EXCLUSIVE_PREVIEW) {
|
|
|
FOR_ALL_COMPANIES(c) {
|
|
|
for (Company *c : Company::Iterate()) {
|
|
|
uint block_preview = c->block_preview;
|
|
|
|
|
|
if (!HasBit(e->company_avail, c->index)) continue;
|
|
|
|
|
|
/* We assume the user did NOT build it.. prove me wrong ;) */
|
|
|
c->block_preview = 20;
|
|
@@ -945,17 +941,17 @@ static void NewVehicleAvailable(Engine *
|
|
|
if (IsWagon(index)) return;
|
|
|
|
|
|
if (e->type == VEH_TRAIN) {
|
|
|
/* maybe make another rail type available */
|
|
|
RailType railtype = e->u.rail.railtype;
|
|
|
assert(railtype < RAILTYPE_END);
|
|
|
FOR_ALL_COMPANIES(c) c->avail_railtypes = AddDateIntroducedRailTypes(c->avail_railtypes | GetRailTypeInfo(e->u.rail.railtype)->introduces_railtypes, _date);
|
|
|
for (Company *c : Company::Iterate()) c->avail_railtypes = AddDateIntroducedRailTypes(c->avail_railtypes | GetRailTypeInfo(e->u.rail.railtype)->introduces_railtypes, _date);
|
|
|
} else if (e->type == VEH_ROAD) {
|
|
|
/* maybe make another road type available */
|
|
|
assert(e->u.road.roadtype < ROADTYPE_END);
|
|
|
FOR_ALL_COMPANIES(c) c->avail_roadtypes = AddDateIntroducedRoadTypes(c->avail_roadtypes | GetRoadTypeInfo(e->u.road.roadtype)->introduces_roadtypes, _date);
|
|
|
for (Company* c : Company::Iterate()) c->avail_roadtypes = AddDateIntroducedRoadTypes(c->avail_roadtypes | GetRoadTypeInfo(e->u.road.roadtype)->introduces_roadtypes, _date);
|
|
|
}
|
|
|
|
|
|
/* Only broadcast event if AIs are able to build this vehicle type. */
|
|
|
if (!IsVehicleTypeDisabled(e->type, true)) AI::BroadcastNewEvent(new ScriptEventEngineAvailable(index));
|
|
|
|
|
|
/* Only provide the "New Vehicle available" news paper entry, if engine can be built. */
|