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 "libcacaoasset.hpp"
#include <memory>
#include <optional>
namespace Cacao {
class CACAO_API World final : public Resource {
public:
static std::shared_ptr<World> Create(bool useOrthographicCamera, const std::string& addr);
static std::shared_ptr<World> Create(const libcacaoasset::World& world, const std::string& addr);
void MakeToplevel(ActorRef actor);
std::vector<ActorRef> GetToplevelActors() const;
ActorRef CreateActor(const std::string& name, ActorRef parent = {});
template<typename P>
requires std::is_invocable_r_v<bool, P, ActorRef>
std::vector<ActorRef> FindActors(P predicate) const {
//Invoke internal search function with wrapped predicate
return _FindActors([&predicate](ActorRef ref) { return predicate(ref); });
}
glm::quat GetSkyboxRotation() const {
return skyRot;
}
glm::vec3 GetSkyboxRotationEuler() const {
return glm::degrees(glm::eulerAngles(skyRot));
}
void SetSkyboxRotation(glm::quat rot) {
skyRot = glm::normalize(rot);
}
void SetSkyboxRotationEuler(glm::vec3 rot) {
skyRot = glm::normalize(glm::quat(glm::radians(rot)));
}
std::shared_ptr<Camera> cam;
std::shared_ptr<Cubemap> skyboxTex;
~World();
struct Impl;
private:
World(bool useOrthographicCamera, const std::string& addr);
friend class ResourceManager;
std::unique_ptr<Impl> impl;
friend class ImplAccessor;
//Internal function for actually running a actor search
std::vector<ActorRef> _FindActors(std::function<bool(ActorRef)> predicate) const;
glm::quat skyRot;
};
}