Changeset - r28203:306a9b1774fe
[Not reviewed]
master
0 2 0
Peter Nelson - 8 months ago 2023-11-26 21:38:49
peter1138@openttd.org
Codechange: Use max_element to find highest cargo amount.
2 files changed with 6 insertions and 18 deletions:
0 comments (0 inline, 0 general)
src/script/api/script_engine.cpp
Show inline comments
 
@@ -46,34 +46,28 @@
 
	if (!IsValidEngine(engine_id)) return std::nullopt;
 

	
 
	::SetDParam(0, engine_id);
 
	return GetString(STR_ENGINE_NAME);
 
}
 

	
 
/* static */ CargoID ScriptEngine::GetCargoType(EngineID engine_id)
 
{
 
	if (!IsValidEngine(engine_id)) return CT_INVALID;
 

	
 
	CargoArray cap = ::GetCapacityOfArticulatedParts(engine_id);
 

	
 
	CargoID most_cargo = CT_INVALID;
 
	uint amount = 0;
 
	for (CargoID cid = 0; cid < NUM_CARGO; cid++) {
 
		if (cap[cid] > amount) {
 
			amount = cap[cid];
 
			most_cargo = cid;
 
		}
 
	}
 
	auto it = std::max_element(std::cbegin(cap), std::cend(cap));
 
	if (*it == 0) return CT_INVALID;
 

	
 
	return most_cargo;
 
	return CargoID(std::distance(std::cbegin(cap), it));
 
}
 

	
 
/* static */ bool ScriptEngine::CanRefitCargo(EngineID engine_id, CargoID cargo_id)
 
{
 
	if (!IsValidEngine(engine_id)) return false;
 
	if (!ScriptCargo::IsValidCargo(cargo_id)) return false;
 

	
 
	return HasBit(::GetUnionOfArticulatedRefitMasks(engine_id, true), cargo_id);
 
}
 

	
 
/* static */ bool ScriptEngine::CanPullCargo(EngineID engine_id, CargoID cargo_id)
 
{
src/script/api/script_event_types.cpp
Show inline comments
 
@@ -33,34 +33,28 @@ std::optional<std::string> ScriptEventEn
 
{
 
	if (!this->IsEngineValid()) return std::nullopt;
 

	
 
	::SetDParam(0, this->engine);
 
	return GetString(STR_ENGINE_NAME);
 
}
 

	
 
CargoID ScriptEventEnginePreview::GetCargoType()
 
{
 
	if (!this->IsEngineValid()) return CT_INVALID;
 
	CargoArray cap = ::GetCapacityOfArticulatedParts(this->engine);
 

	
 
	CargoID most_cargo = CT_INVALID;
 
	uint amount = 0;
 
	for (CargoID cid = 0; cid < NUM_CARGO; cid++) {
 
		if (cap[cid] > amount) {
 
			amount = cap[cid];
 
			most_cargo = cid;
 
		}
 
	}
 
	auto it = std::max_element(std::cbegin(cap), std::cend(cap));
 
	if (*it == 0) return CT_INVALID;
 

	
 
	return most_cargo;
 
	return CargoID(std::distance(std::cbegin(cap), it));
 
}
 

	
 
int32_t ScriptEventEnginePreview::GetCapacity()
 
{
 
	if (!this->IsEngineValid()) return -1;
 
	const Engine *e = ::Engine::Get(this->engine);
 
	switch (e->type) {
 
		case VEH_ROAD:
 
		case VEH_TRAIN: {
 
			CargoArray capacities = GetCapacityOfArticulatedParts(this->engine);
 
			for (uint &cap : capacities) {
 
				if (cap != 0) return cap;
0 comments (0 inline, 0 general)