mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r24492) -Add: [NoGo] Useful behaviour for GSEngine::IsValidEngine and GSEngine::IsBuildable when outside GSCompanyMode scope.
This commit is contained in:
parent
4563c50c91
commit
9f9cad1ac9
|
@ -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;
|
||||
|
||||
|
|
|
@ -23,7 +23,12 @@
|
|||
/* static */ bool ScriptEngine::IsValidEngine(EngineID engine_id)
|
||||
{
|
||||
const Engine *e = ::Engine::GetIfValid(engine_id);
|
||||
return e != NULL && (::IsEngineBuildable(engine_id, e->type, ScriptObject::GetCompany()) || (ScriptObject::GetCompany() != OWNER_DEITY && ::Company::Get(ScriptObject::GetCompany())->group_all[e->type].num_engines[engine_id] > 0));
|
||||
if (e == NULL || !e->IsEnabled()) return false;
|
||||
|
||||
/* AIs have only access to engines they can purchase or still have in use.
|
||||
* Deity has access to all engined that will be or were available ever. */
|
||||
CompanyID company = ScriptObject::GetCompany();
|
||||
return company == OWNER_DEITY || ::IsEngineBuildable(engine_id, e->type, company) || ::Company::Get(company)->group_all[e->type].num_engines[engine_id] > 0;
|
||||
}
|
||||
|
||||
/* static */ bool ScriptEngine::IsBuildable(EngineID engine_id)
|
||||
|
|
|
@ -23,15 +23,17 @@
|
|||
class ScriptEngine : public ScriptObject {
|
||||
public:
|
||||
/**
|
||||
* Checks whether the given engine type is valid. An engine is valid if you
|
||||
* have at least one vehicle of this engine or it's currently buildable.
|
||||
* Checks whether the given engine type is valid.
|
||||
* An engine is valid for a company if it has at least one vehicle of this engine or it's currently buildable.
|
||||
* @game Outside ScriptCompanyMode scope the function reports all engines valid, which were or will be available at some point.
|
||||
* @param engine_id The engine to check.
|
||||
* @return True if and only if the engine type is valid.
|
||||
*/
|
||||
static bool IsValidEngine(EngineID engine_id);
|
||||
|
||||
/**
|
||||
* Checks whether the given engine type is buildable by you.
|
||||
* Checks whether the given engine type is buildable for a company.
|
||||
* @game Outside ScriptCompanyMode scope the function checks whether the engine is currently buildable by all companies (no exclusive preview).
|
||||
* @param engine_id The engine to check.
|
||||
* @return True if and only if the engine type is buildable.
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue