rubidium@8116: /* $Id$ */ rubidium@8116: rubidium@8116: /** @file economy_type.h Types related to the economy. */ rubidium@8116: rubidium@8116: #ifndef ECONOMY_TYPE_H rubidium@8116: #define ECONOMY_TYPE_H rubidium@8116: rubidium@8116: #include "core/overflowsafe_type.hpp" rubidium@8116: #include "core/enum_type.hpp" rubidium@8119: #include "cargo_type.h" rubidium@8116: rubidium@8116: typedef OverflowSafeInt64 Money; rubidium@8116: rubidium@8116: struct Economy { rubidium@8116: Money max_loan; ///< Maximum possible loan rubidium@8116: Money max_loan_unround; ///< Economy fluctuation status rubidium@8116: uint16 max_loan_unround_fract; ///< Fraction of the unrounded max loan rubidium@8116: int fluct; rubidium@8116: byte interest_rate; ///< Interest rubidium@8116: byte infl_amount; ///< inflation amount rubidium@8116: byte infl_amount_pr; ///< "floating" portion of inflation rubidium@8116: }; rubidium@8116: rubidium@8116: struct Subsidy { rubidium@8116: CargoID cargo_type; rubidium@8116: byte age; rubidium@8116: /* from and to can either be TownID, StationID or IndustryID */ rubidium@8116: uint16 from; rubidium@8116: uint16 to; rubidium@8116: }; rubidium@8116: rubidium@8116: enum ScoreID { rubidium@8116: SCORE_BEGIN = 0, rubidium@8116: SCORE_VEHICLES = 0, rubidium@8116: SCORE_STATIONS = 1, rubidium@8116: SCORE_MIN_PROFIT = 2, rubidium@8116: SCORE_MIN_INCOME = 3, rubidium@8116: SCORE_MAX_INCOME = 4, rubidium@8116: SCORE_DELIVERED = 5, rubidium@8116: SCORE_CARGO = 6, rubidium@8116: SCORE_MONEY = 7, rubidium@8116: SCORE_LOAN = 8, rubidium@8116: SCORE_TOTAL = 9, ///< This must always be the last entry rubidium@8116: SCORE_END = 10, ///< How many scores are there.. rubidium@8116: rubidium@8116: SCORE_MAX = 1000 ///< The max score that can be in the performance history rubidium@8116: /* the scores together of score_info is allowed to be more! */ rubidium@8116: }; rubidium@8116: DECLARE_POSTFIX_INCREMENT(ScoreID); rubidium@8116: rubidium@8116: struct ScoreInfo { rubidium@8116: byte id; ///< Unique ID of the score rubidium@8116: int needed; ///< How much you need to get the perfect score rubidium@8116: int score; ///< How much score it will give rubidium@8116: }; rubidium@8116: rubidium@8116: struct Prices { rubidium@8116: Money station_value; rubidium@8116: Money build_rail; rubidium@8116: Money build_road; rubidium@8116: Money build_signals; rubidium@8116: Money build_bridge; rubidium@8116: Money build_train_depot; rubidium@8116: Money build_road_depot; rubidium@8116: Money build_ship_depot; rubidium@8116: Money build_tunnel; rubidium@8116: Money train_station_track; rubidium@8116: Money train_station_length; rubidium@8116: Money build_airport; rubidium@8116: Money build_bus_station; rubidium@8116: Money build_truck_station; rubidium@8116: Money build_dock; rubidium@8116: Money build_railvehicle; rubidium@8116: Money build_railwagon; rubidium@8116: Money aircraft_base; rubidium@8116: Money roadveh_base; rubidium@8116: Money ship_base; rubidium@8116: Money build_trees; rubidium@8116: Money terraform; rubidium@8116: Money clear_grass; rubidium@8116: Money clear_roughland; rubidium@8116: Money clear_rocks; rubidium@8116: Money clear_fields; rubidium@8116: Money remove_trees; rubidium@8116: Money remove_rail; rubidium@8116: Money remove_signals; rubidium@8116: Money clear_bridge; rubidium@8116: Money remove_train_depot; rubidium@8116: Money remove_road_depot; rubidium@8116: Money remove_ship_depot; rubidium@8116: Money clear_tunnel; rubidium@8116: Money clear_water; rubidium@8116: Money remove_rail_station; rubidium@8116: Money remove_airport; rubidium@8116: Money remove_bus_station; rubidium@8116: Money remove_truck_station; rubidium@8116: Money remove_dock; rubidium@8116: Money remove_house; rubidium@8116: Money remove_road; rubidium@8116: Money running_rail[3]; rubidium@8116: Money aircraft_running; rubidium@8116: Money roadveh_running; rubidium@8116: Money ship_running; rubidium@8116: Money build_industry; rubidium@8116: }; rubidium@8116: rubidium@8116: enum { rubidium@8116: NUM_PRICES = 49, rubidium@8116: }; rubidium@8116: rubidium@8116: assert_compile(NUM_PRICES * sizeof(Money) == sizeof(Prices)); rubidium@8116: rubidium@8116: enum ExpensesType { rubidium@8116: EXPENSES_CONSTRUCTION = 0, belugas@8515: EXPENSES_NEW_VEHICLES, belugas@8515: EXPENSES_TRAIN_RUN, belugas@8515: EXPENSES_ROADVEH_RUN, belugas@8515: EXPENSES_AIRCRAFT_RUN, belugas@8515: EXPENSES_SHIP_RUN, belugas@8515: EXPENSES_PROPERTY, belugas@8515: EXPENSES_TRAIN_INC, belugas@8515: EXPENSES_ROADVEH_INC, belugas@8515: EXPENSES_AIRCRAFT_INC, belugas@8515: EXPENSES_SHIP_INC, belugas@8515: EXPENSES_LOAN_INT, belugas@8515: EXPENSES_OTHER, belugas@8515: EXPENSES_END, rubidium@8230: INVALID_EXPENSES = 0xFF, rubidium@8116: }; rubidium@8116: rubidium@8254: /* The "steps" in loan size, in British Pounds! */ rubidium@8254: enum { rubidium@8254: LOAN_INTERVAL = 10000, rubidium@8254: LOAN_INTERVAL_OLD_AI = 50000, rubidium@8254: }; rubidium@8254: rubidium@8116: #endif /* ECONOMY_TYPE_H */