#pragma once #include #include #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 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 get_CollisionMap(); std::vector 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 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) {} };