Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00012 #ifndef CARGO_TYPE_H
00013 #define CARGO_TYPE_H
00014
00015 #include "core/enum_type.hpp"
00016
00022 typedef byte CargoID;
00023
00025 enum CargoTypes {
00026
00027 CT_PASSENGERS = 0,
00028 CT_COAL = 1,
00029 CT_MAIL = 2,
00030 CT_OIL = 3,
00031 CT_LIVESTOCK = 4,
00032 CT_GOODS = 5,
00033 CT_GRAIN = 6,
00034 CT_WOOD = 7,
00035 CT_IRON_ORE = 8,
00036 CT_STEEL = 9,
00037 CT_VALUABLES = 10,
00038
00039
00040 CT_WHEAT = 6,
00041 CT_HILLY_UNUSED = 8,
00042 CT_PAPER = 9,
00043 CT_GOLD = 10,
00044 CT_FOOD = 11,
00045
00046
00047 CT_RUBBER = 1,
00048 CT_FRUIT = 4,
00049 CT_MAIZE = 6,
00050 CT_COPPER_ORE = 8,
00051 CT_WATER = 9,
00052 CT_DIAMONDS = 10,
00053
00054
00055 CT_SUGAR = 1,
00056 CT_TOYS = 3,
00057 CT_BATTERIES = 4,
00058 CT_CANDY = 5,
00059 CT_TOFFEE = 6,
00060 CT_COLA = 7,
00061 CT_COTTON_CANDY = 8,
00062 CT_BUBBLES = 9,
00063 CT_PLASTIC = 10,
00064 CT_FIZZY_DRINKS = 11,
00065
00066 NUM_CARGO = 32,
00067
00068 CT_AUTO_REFIT = 0xFD,
00069 CT_NO_REFIT = 0xFE,
00070 CT_INVALID = 0xFF,
00071 };
00072
00074 struct CargoArray {
00075 private:
00076 uint amount[NUM_CARGO];
00077
00078 public:
00080 inline CargoArray()
00081 {
00082 this->Clear();
00083 }
00084
00086 inline void Clear()
00087 {
00088 memset(this->amount, 0, sizeof(this->amount));
00089 }
00090
00095 inline uint &operator[](CargoID cargo)
00096 {
00097 return this->amount[cargo];
00098 }
00099
00104 inline const uint &operator[](CargoID cargo) const
00105 {
00106 return this->amount[cargo];
00107 }
00108
00113 template <typename T>
00114 inline const T GetSum() const
00115 {
00116 T ret = 0;
00117 for (size_t i = 0; i < lengthof(this->amount); i++) {
00118 ret += this->amount[i];
00119 }
00120 return ret;
00121 }
00122
00127 inline byte GetCount() const
00128 {
00129 byte count = 0;
00130 for (size_t i = 0; i < lengthof(this->amount); i++) {
00131 if (this->amount[i] != 0) count++;
00132 }
00133 return count;
00134 }
00135 };
00136
00137
00139 enum SourceType {
00140 ST_INDUSTRY,
00141 ST_TOWN,
00142 ST_HEADQUARTERS,
00143 };
00144 typedef SimpleTinyEnumT<SourceType, byte> SourceTypeByte;
00145
00146 typedef uint16 SourceID;
00147 static const SourceID INVALID_SOURCE = 0xFFFF;
00148
00149 #endif