#pragma once #include #include #include #include #include "defaults/input.hpp" #include "map/tile.hpp" #include "objects/object.hpp" #include "building/building_data.hpp" #include "inventory/inventory.hpp" enum class BuildingStatus : uint32_t { CONSTRUCTING, CONSTRUCTED, DECONSTRUCT }; enum class CharacterMenuType; class Building : public Object { public: std::unordered_map cost_fulfilled; std::unordered_map fractional_buffer; static BuildingType selected_building_type; static int draw_menu_curser_grid; static int draw_menu_curser_grid_active; float building_time = 0; BuildingStatus building_status = BuildingStatus::CONSTRUCTING; BuildingType building_type; BuildingData_s* data; Building( // OBJECT ObjectType ot, ObjectCategory oc, TileType tt, size_t ts_id, size_t tso_id, SDL_Point wtp, SDL_Point d, int zi, // BUILDING BuildingType bt ) : Object(ot, oc, tt, ts_id, tso_id, wtp, d, zi), building_type(bt) { data = BuildingData::get_BuildingDataByType(bt); building_time = data->building_duration; } static BuildingStatus construction_mode; static Building* get_BuildingById(size_t id); void Draw(SDL_Renderer* renderer, SDL_FPoint position, bool is_transparent = false, int transparency = false) override; bool Build(Inventory*); bool Deconstruct(Inventory*); bool has_Menu(); CharacterMenuType open_Menu(Character* player); void close_Menu(); };