Program Listing for File World.hpp
↰ Return to documentation for file (engine/include/Cacao/World.hpp)
#pragma once
#include "Cubemap.hpp"
#include "DllHelper.hpp"
#include "Camera.hpp"
#include "Actor.hpp"
#include "Resource.hpp"
#include "libcacaoformats.hpp"
#include <memory>
#include <optional>
namespace Cacao {
class CACAO_API World final : public Resource {
public:
static std::shared_ptr<World> Create(const std::string& addr) {
return std::shared_ptr<World>(new World(addr));
}
static std::shared_ptr<World> Create(const std::string& addr, const libcacaoformats::World& world);
std::shared_ptr<Camera> cam;
std::shared_ptr<Cubemap> skyboxTex;
void MakeToplevel(ActorRef actor);
std::vector<ActorRef> GetToplevelActors() const;
template<typename P>
requires std::is_invocable_r_v<bool, P, ActorRef>
std::optional<ActorRef> FindActor(P predicate) const {
//Invoke internal search function with wrapped predicate
return _FindActor([&predicate](ActorRef ref) { return predicate(ref); });
}
~World();
struct Impl;
private:
World(const std::string& addr);
friend class ResourceManager;
std::unique_ptr<Impl> impl;
friend class ImplAccessor;
//Internal function for actually running a actor search
std::optional<ActorRef> _FindActor(std::function<bool(ActorRef)> predicate) const;
};
}