Nimbin[12]?SDL & Graphics / mapcreator / src/objects/object.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/objects/object.hpp 2.5 KB · 133 lines raw
#pragma once

#include <initializer_list>
#include <vector>

#include "defaults/defaults.hpp"
#include "map/tile.hpp"


class Inventory;
class Messages;
enum class ItemType : uint32_t ;


enum class ObjectCategory {
    STATIC,
    BUILDING,
    RESOURCE,
    FARM_CROP,
    NONE
};

enum class ObjectType {
    NONE,
    ROCK,
    TREE,
    STICK,
    BUSH,
    FLOWER,
    FOOD,
    FURNITURE,
    ROOF,
    WALL,
    FLOOR,
    FURNISHING,
    WORKBENCH,
    VEGETABLE,
    LAST
};


class IsCollectable {
public:
    virtual ~IsCollectable() = default;
    virtual bool is_Collectable() const = 0;
    virtual void Collect(Inventory*, Messages*) = 0;
};


class Object {
    public:
    static std::vector<Object*> objects;

    size_t id;

    ObjectType     object_type;
    ObjectCategory category;

    TileType  tileset_type;
    size_t    tileset_id;
    size_t    tileset_object_id;

    SDL_Point world_tile_position;
    SDL_Point dimension;
    int       z_index;


    Object( ObjectType ot,
            ObjectCategory oc,
            TileType tt,
            size_t ts_id,
            size_t tso_id,
            SDL_Point wtp,
            SDL_Point d,
            int zi) :
                object_type(ot),
                category(oc),
                tileset_type(tt),
                tileset_id(ts_id),
                tileset_object_id(tso_id),
                world_tile_position(wtp),
                dimension(d),
                z_index(zi) {
        static size_t id_next = 1;
        id = id_next++;
    }

    virtual
    ~Object();

    virtual SDL_Point
    get_SetPosition();

    int
    is_InFrontOf(SDL_FPoint ob_position, SDL_FRect rect);

    bool
    has_Collision();

    std::vector<bool>
    get_CollisionMap();

    std::vector<bool>
    get_CollissionsOfTile(SDL_Point tile);

    void
    print_CollisionMap();

    virtual void
    Draw(SDL_Renderer* renderer, SDL_FPoint position, bool is_transparent = false, int transparency = 200);

    static void
    Remove(Object* object);

    static const char*
    to_String(ObjectType type);

    static Object*
    get_ObjectById(size_t id);

    static std::vector<Object*>
    get_ObjectsByWorldPosition(SDL_Point position);

    static Object*
    get_ObjectByWorldPositionAndTilesetObjectID(SDL_Point position, size_t ts_object_id);
};

class Static : public Object {
    public:
    Static(ObjectType ot, ObjectCategory oc, TileType tt, size_t ts_id, size_t tso_id,
           SDL_Point wtp, SDL_Point d, int zi)
        : Object(ot, oc, tt, ts_id, tso_id, wtp, d, zi) {}
};