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