From 9f9cad1ac9faa674fc6bafdf3df41c5ea3fa3c15 Mon Sep 17 00:00:00 2001 From: frosch Date: Tue, 21 Aug 2012 19:53:08 +0000 Subject: (svn r24492) -Add: [NoGo] Useful behaviour for GSEngine::IsValidEngine and GSEngine::IsBuildable when outside GSCompanyMode scope. --- src/engine.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'src/engine.cpp') diff --git a/src/engine.cpp b/src/engine.cpp index 1500b9d89..541c025dd 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -146,12 +146,12 @@ Engine::~Engine() } /** - * Checks whether the engine spec is properly initialised. + * Checks whether the engine is a valid (non-articulated part of an) engine. * @return true if enabled */ bool Engine::IsEnabled() const { - return this->info.string_id != STR_NEWGRF_INVALID_ENGINE; + return this->info.string_id != STR_NEWGRF_INVALID_ENGINE && HasBit(this->info.climates, _settings_game.game_creation.landscape); } /** @@ -998,8 +998,14 @@ bool IsEngineBuildable(EngineID engine, VehicleType type, CompanyID company) /* check if it's an engine of specified type */ if (e->type != type) return false; - /* check if it's available */ - if (company != OWNER_DEITY && !HasBit(e->company_avail, company)) return false; + /* check if it's available ... */ + if (company == OWNER_DEITY) { + /* ... for any company (preview does not count) */ + if (!(e->flags & ENGINE_AVAILABLE) || e->company_avail == 0) return false; + } else { + /* ... for this company */ + if (!HasBit(e->company_avail, company)) return false; + } if (!e->IsEnabled()) return false; -- cgit v1.2.3-54-g00ecf