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