mapcreator git · master
SDL3 2.5D game and engine using assets, with map editor
C++ 99.3%git clone https://git.christianimmanuel.de/sdl-graphics/mapcreator.gitwget https://git.christianimmanuel.de/sdl-graphics/mapcreator/archive/mapcreator.tar.gzsrc/objects/object.hpp 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) {}
};