summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/industry_cmd.cpp13
-rw-r--r--src/industrytype.h1
-rw-r--r--src/script/api/ai/ai_industrytype.hpp.sq1
-rw-r--r--src/script/api/ai_changelog.hpp1
-rw-r--r--src/script/api/game/game_industrytype.hpp.sq1
-rw-r--r--src/script/api/game_changelog.hpp1
-rw-r--r--src/script/api/script_industrytype.cpp7
-rw-r--r--src/script/api/script_industrytype.hpp20
8 files changed, 43 insertions, 2 deletions
diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp
index fd8387e2d..abb41e6db 100644
--- a/src/industry_cmd.cpp
+++ b/src/industry_cmd.cpp
@@ -2722,8 +2722,17 @@ void InitializeIndustries()
*/
bool IndustrySpec::IsRawIndustry() const
{
- /* Lumber mills are extractive/organic, but can always be built like a non-raw industry */
- return (this->life_type & (INDUSTRYLIFE_EXTRACTIVE | INDUSTRYLIFE_ORGANIC)) != 0 &&
+ return (this->life_type & (INDUSTRYLIFE_EXTRACTIVE | INDUSTRYLIFE_ORGANIC)) != 0;
+}
+
+/**
+ * Is an industry with the spec a processing industry?
+ * @return true if it should be handled as a processing industry
+ */
+bool IndustrySpec::IsProcessingIndustry() const
+{
+ /* Lumber mills are neither raw nor processing */
+ return (this->life_type & INDUSTRYLIFE_PROCESSING) != 0 &&
(this->behaviour & INDUSTRYBEH_CUT_TREES) == 0;
}
diff --git a/src/industrytype.h b/src/industrytype.h
index 8aa566e7a..81025482a 100644
--- a/src/industrytype.h
+++ b/src/industrytype.h
@@ -136,6 +136,7 @@ struct IndustrySpec {
GRFFileProps grf_prop; ///< properties related to the grf file
bool IsRawIndustry() const;
+ bool IsProcessingIndustry() const;
Money GetConstructionCost() const;
Money GetRemovalCost() const;
bool UsesSmoothEconomy() const;
diff --git a/src/script/api/ai/ai_industrytype.hpp.sq b/src/script/api/ai/ai_industrytype.hpp.sq
index fe84b70f9..7c56acee9 100644
--- a/src/script/api/ai/ai_industrytype.hpp.sq
+++ b/src/script/api/ai/ai_industrytype.hpp.sq
@@ -29,6 +29,7 @@ void SQAIIndustryType_Register(Squirrel *engine)
SQAIIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::GetProducedCargo, "GetProducedCargo", 2, ".i");
SQAIIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::GetAcceptedCargo, "GetAcceptedCargo", 2, ".i");
SQAIIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::IsRawIndustry, "IsRawIndustry", 2, ".i");
+ SQAIIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::IsProcessingIndustry, "IsProcessingIndustry", 2, ".i");
SQAIIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::ProductionCanIncrease, "ProductionCanIncrease", 2, ".i");
SQAIIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::GetConstructionCost, "GetConstructionCost", 2, ".i");
SQAIIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::CanBuildIndustry, "CanBuildIndustry", 2, ".i");
diff --git a/src/script/api/ai_changelog.hpp b/src/script/api/ai_changelog.hpp
index 7161d9a3d..fda888c0c 100644
--- a/src/script/api/ai_changelog.hpp
+++ b/src/script/api/ai_changelog.hpp
@@ -22,6 +22,7 @@
* API additions:
* \li AIEventExclusiveTransportRights
* \li AIEventRoadReconstruction
+ * \li AIIndustryType::IsProcessingIndustry
* \li AIStation::IsAirportClosed
* \li AIStation::OpenCloseAirport
*
diff --git a/src/script/api/game/game_industrytype.hpp.sq b/src/script/api/game/game_industrytype.hpp.sq
index 66425a512..460cc513c 100644
--- a/src/script/api/game/game_industrytype.hpp.sq
+++ b/src/script/api/game/game_industrytype.hpp.sq
@@ -29,6 +29,7 @@ void SQGSIndustryType_Register(Squirrel *engine)
SQGSIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::GetProducedCargo, "GetProducedCargo", 2, ".i");
SQGSIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::GetAcceptedCargo, "GetAcceptedCargo", 2, ".i");
SQGSIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::IsRawIndustry, "IsRawIndustry", 2, ".i");
+ SQGSIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::IsProcessingIndustry, "IsProcessingIndustry", 2, ".i");
SQGSIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::ProductionCanIncrease, "ProductionCanIncrease", 2, ".i");
SQGSIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::GetConstructionCost, "GetConstructionCost", 2, ".i");
SQGSIndustryType.DefSQStaticMethod(engine, &ScriptIndustryType::CanBuildIndustry, "CanBuildIndustry", 2, ".i");
diff --git a/src/script/api/game_changelog.hpp b/src/script/api/game_changelog.hpp
index 46da1d4f8..8948822e4 100644
--- a/src/script/api/game_changelog.hpp
+++ b/src/script/api/game_changelog.hpp
@@ -25,6 +25,7 @@
* \li GSEventExclusiveTransportRights
* \li GSEventRoadReconstruction
* \li GSNews::NT_ACCIDENT, GSNews::NT_COMPANY_INFO, GSNews::NT_ADVICE, GSNews::NT_ACCEPTANCE
+ * \li GSIndustryType::IsProcessingIndustry
* \li GSStation::IsAirportClosed
* \li GSStation::OpenCloseAirport
*
diff --git a/src/script/api/script_industrytype.cpp b/src/script/api/script_industrytype.cpp
index 26a93cda1..7db905829 100644
--- a/src/script/api/script_industrytype.cpp
+++ b/src/script/api/script_industrytype.cpp
@@ -32,6 +32,13 @@
return ::GetIndustrySpec(industry_type)->IsRawIndustry();
}
+/* static */ bool ScriptIndustryType::IsProcessingIndustry(IndustryType industry_type)
+{
+ if (!IsValidIndustryType(industry_type)) return false;
+
+ return ::GetIndustrySpec(industry_type)->IsProcessingIndustry();
+}
+
/* static */ bool ScriptIndustryType::ProductionCanIncrease(IndustryType industry_type)
{
if (!IsValidIndustryType(industry_type)) return false;
diff --git a/src/script/api/script_industrytype.hpp b/src/script/api/script_industrytype.hpp
index 1d642ac38..de5180c43 100644
--- a/src/script/api/script_industrytype.hpp
+++ b/src/script/api/script_industrytype.hpp
@@ -65,13 +65,33 @@ public:
/**
* Is this industry type a raw industry?
+ * Raw industries usually produce cargo without any prerequisites.
+ * ("Usually" means that advanced NewGRF industry concepts might not fit the "raw"/"processing"
+ * classification, so it's up to the interpretation of the NewGRF author.)
* @param industry_type The type of the industry.
* @pre IsValidIndustryType(industry_type).
* @return True if it should be handled as a raw industry.
+ * @note Industries might be neither raw nor processing.
+ * This is usually the case for industries which produce nothing (e.g. power plants),
+ * but also for weird industries like temperate banks and tropic lumber mills.
*/
static bool IsRawIndustry(IndustryType industry_type);
/**
+ * Is this industry type a processing industry?
+ * Processing industries usually produce cargo when delivered with input cargo.
+ * ("Usually" means that advanced NewGRF industry concepts might not fit the "raw"/"processing"
+ * classification, so it's up to the interpretation of the NewGRF author.)
+ * @param industry_type The type of the industry.
+ * @pre IsValidIndustryType(industry_type).
+ * @return True if it is a processing industry.
+ * @note Industries might be neither raw nor processing.
+ * This is usually the case for industries which produce nothing (e.g. power plants),
+ * but also for weird industries like temperate banks and tropic lumber mills.
+ */
+ static bool IsProcessingIndustry(IndustryType industry_type);
+
+ /**
* Can the production of this industry increase?
* @param industry_type The type of the industry.
* @pre IsValidIndustryType(industry_type).