Feature: Set exclusive access to industry from GS (#8115)

This commit is contained in:
Pavel Stupnikov
2020-12-22 16:29:48 +03:00
committed by GitHub
parent b7751c483e
commit 9a45a0f535
11 changed files with 137 additions and 5 deletions

View File

@@ -23,8 +23,12 @@
* \li GSEventStoryPageVehicleSelect
* \li GSIndustry::GetCargoLastAcceptedDate
* \li GSIndustry::GetControlFlags
* \li GSIndustry::GetExclusiveConsumer
* \li GSIndustry::GetExclusiveSupplier
* \li GSIndustry::GetLastProductionYear
* \li GSIndustry::SetControlFlags
* \li GSIndustry::SetExclusiveConsumer
* \li GSIndustry::SetExclusiveSupplier
* \li GSStoryPage::MakePushButtonReference
* \li GSStoryPage::MakeTileButtonReference
* \li GSStoryPage::MakeVehicleButtonReference

View File

@@ -10,7 +10,10 @@
#include "../../stdafx.h"
#include "script_industry.hpp"
#include "script_cargo.hpp"
#include "script_company.hpp"
#include "script_error.hpp"
#include "script_map.hpp"
#include "../../company_base.h"
#include "../../industry.h"
#include "../../strings_func.h"
#include "../../station_base.h"
@@ -241,3 +244,41 @@ bool ScriptIndustry::SetControlFlags(IndustryID industry_id, uint32 control_flag
return ScriptObject::DoCommand(0, industry_id, 0 | ((control_flags & ::INDCTL_MASK) << 8), CMD_INDUSTRY_CTRL);
}
/* static */ ScriptCompany::CompanyID ScriptIndustry::GetExclusiveSupplier(IndustryID industry_id)
{
if (!IsValidIndustry(industry_id)) return ScriptCompany::COMPANY_INVALID;
auto company_id = ::Industry::Get(industry_id)->exclusive_supplier;
if (!::Company::IsValidID(company_id)) return ScriptCompany::COMPANY_INVALID;
return (ScriptCompany::CompanyID)((byte)company_id);
}
/* static */ bool ScriptIndustry::SetExclusiveSupplier(IndustryID industry_id, ScriptCompany::CompanyID company_id)
{
EnforcePrecondition(false, IsValidIndustry(industry_id));
auto company = ScriptCompany::ResolveCompanyID(company_id);
::Owner owner = (company == ScriptCompany::COMPANY_INVALID ? ::INVALID_OWNER : (::Owner)company);
return ScriptObject::DoCommand(0, industry_id, 1 | (((uint8)owner) << 16), CMD_INDUSTRY_CTRL);
}
/* static */ ScriptCompany::CompanyID ScriptIndustry::GetExclusiveConsumer(IndustryID industry_id)
{
if (!IsValidIndustry(industry_id)) return ScriptCompany::COMPANY_INVALID;
auto company_id = ::Industry::Get(industry_id)->exclusive_consumer;
if (!::Company::IsValidID(company_id)) return ScriptCompany::COMPANY_INVALID;
return (ScriptCompany::CompanyID)((byte)company_id);
}
/* static */ bool ScriptIndustry::SetExclusiveConsumer(IndustryID industry_id, ScriptCompany::CompanyID company_id)
{
EnforcePrecondition(false, IsValidIndustry(industry_id));
auto company = ScriptCompany::ResolveCompanyID(company_id);
::Owner owner = (company == ScriptCompany::COMPANY_INVALID ? ::INVALID_OWNER : (::Owner)company);
return ScriptObject::DoCommand(0, industry_id, 2 | (((uint8)owner) << 16), CMD_INDUSTRY_CTRL);
}

View File

@@ -10,8 +10,9 @@
#ifndef SCRIPT_INDUSTRY_HPP
#define SCRIPT_INDUSTRY_HPP
#include "script_object.hpp"
#include "script_company.hpp"
#include "script_date.hpp"
#include "script_object.hpp"
#include "../../industry.h"
/**
@@ -259,6 +260,47 @@ public:
* @api -ai
*/
static bool SetControlFlags(IndustryID industry_id, uint32 control_flags);
/**
* Find out which company currently has the exclusive rights to deliver cargo to the industry.
* @param industry_id The index of the industry.
* @pre IsValidIndustry(industry_id).
* @return The company that has the exclusive rights. The value
* ScriptCompany::COMPANY_INVALID means that there are currently no
* exclusive rights given out to anyone.
*/
static ScriptCompany::CompanyID GetExclusiveSupplier(IndustryID industry_id);
/**
* Sets or resets the company that has exclusive right to deliver cargo to the industry.
* @param industry_id The index of the industry.
* @param company_id The company to set (ScriptCompany::COMPANY_INVALID to reset).
* @pre IsValidIndustry(industry_id).
* @return True if the action succeeded.
* @api -ai
*/
static bool SetExclusiveSupplier(IndustryID industry_id, ScriptCompany::CompanyID company_id);
/**
* Find out which company currently has the exclusive rights to take cargo from the industry.
* @param industry_id The index of the industry.
* @pre IsValidIndustry(industry_id).
* @return The company that has the exclusive rights. The value
* ScriptCompany::COMPANY_SPECTATOR means that there are currently no
* exclusive rights given out to anyone.
*/
static ScriptCompany::CompanyID GetExclusiveConsumer(IndustryID industry_id);
/**
* Sets or resets the company that has exclusive right to take cargo from the industry.
* @param industry_id The index of the industry.
* @param company_id The company to set (ScriptCompany::COMPANY_INVALID to reset).
* @pre IsValidIndustry(industry_id).
* @return True if the action succeeded.
* @api -ai
*/
static bool SetExclusiveConsumer(IndustryID industry_id, ScriptCompany::CompanyID company_id);
};
#endif /* SCRIPT_INDUSTRY_HPP */