Files @ r8781:bd977c904a17
Branch filter:

Location: cpp/openttd-patchpack/source/src/cargotype.cpp - annotation

bjarni
(svn r12482) -Fix: [build train] we don't need to have a depot in order to just check the price of a rail vehicle so don't check for compatible rails on the tile either
also wagons will only need tracks they can drive on in order to be build so there is no reason to check for power in the depot
r6091:2faa7d307565
r6091:2faa7d307565
r6123:049e9624d068
r6123:049e9624d068
r6091:2faa7d307565
r6091:2faa7d307565
r6091:2faa7d307565
r6091:2faa7d307565
r8113:7815c26d7612
r6091:2faa7d307565
r8264:d493cb51fe8a
r8264:d493cb51fe8a
r6091:2faa7d307565
r6091:2faa7d307565
r6359:99cac4de410b
r6091:2faa7d307565
r6091:2faa7d307565
r6091:2faa7d307565
r6148:21ae18e64c5f
r6113:c77736e8b915
r6113:c77736e8b915
r6091:2faa7d307565
r6091:2faa7d307565
r6091:2faa7d307565
r6091:2faa7d307565
r6091:2faa7d307565
r6091:2faa7d307565
r6091:2faa7d307565
r6091:2faa7d307565
r6091:2faa7d307565
r6113:c77736e8b915
r6113:c77736e8b915
r6091:2faa7d307565
r6091:2faa7d307565
r6091:2faa7d307565
r6640:772ee7bcd404
r6640:772ee7bcd404
r6640:772ee7bcd404
r6640:772ee7bcd404
r8195:bd312e1885bf
r6640:772ee7bcd404
r6640:772ee7bcd404
r6640:772ee7bcd404
r6091:2faa7d307565
r6091:2faa7d307565
r6091:2faa7d307565
r6091:2faa7d307565
r6091:2faa7d307565
r6113:c77736e8b915
r6148:21ae18e64c5f
r7931:4c17a74c399e
r6091:2faa7d307565
r6091:2faa7d307565
r6091:2faa7d307565
r6091:2faa7d307565
r6091:2faa7d307565
r6091:2faa7d307565
r6091:2faa7d307565
r6091:2faa7d307565
r6091:2faa7d307565
r6091:2faa7d307565
r6091:2faa7d307565
r6091:2faa7d307565
r6091:2faa7d307565
r6113:c77736e8b915
r6122:508316e17f8e
r6122:508316e17f8e
r6122:508316e17f8e
r6122:508316e17f8e
r6143:9ed364174dfd
r6143:9ed364174dfd
r6143:9ed364174dfd
r6143:9ed364174dfd
r6143:9ed364174dfd
r6360:17abbbe91056
r6143:9ed364174dfd
r6143:9ed364174dfd
r6143:9ed364174dfd
r6143:9ed364174dfd
r6143:9ed364174dfd
r6143:9ed364174dfd
r6460:74b53af67ae0
r6460:74b53af67ae0
r6460:74b53af67ae0
r6460:74b53af67ae0
r6460:74b53af67ae0
r6460:74b53af67ae0
r6460:74b53af67ae0
r6460:74b53af67ae0
r6460:74b53af67ae0
r6460:74b53af67ae0
r6460:74b53af67ae0
r6460:74b53af67ae0
r6460:74b53af67ae0
r6460:74b53af67ae0
r6460:74b53af67ae0
r6460:74b53af67ae0
r6460:74b53af67ae0
r6460:74b53af67ae0
/* $Id$ */

/** @file cargotype.cpp */

#include "stdafx.h"
#include "openttd.h"
#include "newgrf_cargo.h"
#include "cargotype.h"
#include "core/bitmath_func.hpp"

#include "table/sprites.h"
#include "table/strings.h"
#include "table/cargo_const.h"

CargoSpec _cargo[NUM_CARGO];

static const byte INVALID_CARGO = 0xFF;

/* Bitmask of cargo types available */
uint32 _cargo_mask;


void SetupCargoForClimate(LandscapeID l)
{
	assert(l < lengthof(_default_climate_cargo));

	/* Reset and disable all cargo types */
	memset(_cargo, 0, sizeof(_cargo));
	for (CargoID i = 0; i < lengthof(_cargo); i++) _cargo[i].bitnum = INVALID_CARGO;

	_cargo_mask = 0;

	for (CargoID i = 0; i < lengthof(_default_climate_cargo[l]); i++) {
		CargoLabel cl = _default_climate_cargo[l][i];

		/* Bzzt: check if cl is just an index into the cargo table */
		if (cl < lengthof(_default_cargo)) {
			/* Copy the indexed cargo */
			_cargo[i] = _default_cargo[cl];
			if (_cargo[i].bitnum != INVALID_CARGO) SetBit(_cargo_mask, i);
			continue;
		}

		/* Loop through each of the default cargo types to see if
		 * the label matches */
		for (uint j = 0; j < lengthof(_default_cargo); j++) {
			if (_default_cargo[j].label == cl) {
				_cargo[i] = _default_cargo[j];

				/* Populate the available cargo mask */
				SetBit(_cargo_mask, i);
				break;
			}
		}
	}
}


const CargoSpec *GetCargo(CargoID c)
{
	assert(c < lengthof(_cargo));
	return &_cargo[c];
}


bool CargoSpec::IsValid() const
{
	return bitnum != INVALID_CARGO;
}


CargoID GetCargoIDByLabel(CargoLabel cl)
{
	for (CargoID c = 0; c < lengthof(_cargo); c++) {
		if (_cargo[c].bitnum == INVALID_CARGO) continue;
		if (_cargo[c].label == cl) return c;
	}

	/* No matching label was found, so it is invalid */
	return CT_INVALID;
}


/** Find the CargoID of a 'bitnum' value.
 * @param bitnum 'bitnum' to find.
 * @return First CargoID with the given bitnum, or CT_INVALID if not found.
 */
CargoID GetCargoIDByBitnum(uint8 bitnum)
{
	if (bitnum == INVALID_CARGO) return CT_INVALID;

	for (CargoID c = 0; c < lengthof(_cargo); c++) {
		if (_cargo[c].bitnum == bitnum) return c;
	}

	/* No matching label was found, so it is invalid */
	return CT_INVALID;
}