#ifndef GRAPHICSOBJECTS_HPP_INCLUDED
#define GRAPHICSOBJECTS_HPP_INCLUDED

#include "../../Game/Interactable/GraphicsObject.hpp"
#include <functional>
#include <cstdint>
#include <vector>
#include <string>

namespace GraphicsObjects
{
    std::vector<Interactable::GraphicsObject> GetAllWithin(std::int32_t Distance);
    std::vector<Interactable::GraphicsObject> GetAll();

    std::vector<Interactable::GraphicsObject> GetAll(const Tile& T);
    std::vector<Interactable::GraphicsObject> GetAll(std::int32_t ID, std::int32_t Distance = -1);
    std::vector<Interactable::GraphicsObject> GetAll(const std::vector<std::int32_t>& IDs, std::int32_t Distance = -1);
    std::vector<Interactable::GraphicsObject> GetAll(const std::function<bool (Interactable::GraphicsObject&)>& Filter, std::int32_t Distance = -1);

    Interactable::GraphicsObject Get(const Tile& T);
    Interactable::GraphicsObject Get(std::int32_t ID, std::int32_t Distance = -1);
    Interactable::GraphicsObject Get(const std::vector<std::int32_t>& IDs, std::int32_t Distance = -1);
    Interactable::GraphicsObject Get(const std::function<bool (Interactable::GraphicsObject&)>& Filter, std::int32_t Distance = -1);
}


#endif // GRAPHICSOBJECTS_HPP_INCLUDED
