Nimbin[12]?SDL & Graphics / mapcreator / src/building/building.hpp

mapcreator git · master

SDL3 2.5D game and engine using assets, with map editor

sdl3 c++ game engine map-editor cmake · first commit 2025-10-31 · last commit 2026-09-07 (1 month ago) · synced 3 days ago · upstream: git.ide3.de/hsnr/sdl-spieleentwicklung/map_creator

C++ 99.3%
git clone https://git.christianimmanuel.de/sdl-graphics/mapcreator.gitwget https://git.christianimmanuel.de/sdl-graphics/mapcreator/archive/mapcreator.tar.gz
src/building/building.hpp 1.7 KB · 77 lines raw
#pragma once

#include <SDL3/SDL.h>

#include <map>
#include <variant>
#include <optional>

#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<ResourceType, int>   cost_fulfilled;
    std::unordered_map<ResourceType, float> 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();
};