Moved environment to a resource and a component

This commit is contained in:
antopilo
2024-11-21 21:06:14 -05:00
parent 9937d35579
commit 4ab59bf7e8
21 changed files with 1343 additions and 1051 deletions

View File

@@ -19,6 +19,8 @@
#include "src/Scene/Components/SpriteComponent.h"
#include "src/Scene/Components/UIComponent.h"
#include "src/Scene/Components/SkyComponent.h"
#include "src/Scene/Components/EnvironmentComponent.h"
namespace Nuake
{
@@ -44,6 +46,7 @@ namespace Nuake
BoneComponent::InternalInitializeClass();
AudioEmitterComponent::InternalInitializeClass();
SkyComponent::InternalInitializeClass();
EnvironmentComponent::InternalInitializeClass();
}
}

View File

@@ -99,6 +99,11 @@ FileType File::GetFileType() const
return FileType::Sky;
}
if (ext == ".env")
{
return FileType::Env;
}
return FileType::Unknown;
}
@@ -170,6 +175,11 @@ std::string File::GetFileTypeAsString() const
return "Sky";
}
if (ext == ".env")
{
return "Environment";
}
return "File";
}

View File

@@ -21,6 +21,7 @@ namespace Nuake
Audio,
UI,
CSS,
Sky
Sky,
Env
};
}

View File

@@ -34,6 +34,7 @@ namespace Nuake
m_Registry.emplace(Resources_Images_logo_white_png_path, CreateRef<Texture>(Resources_Images_logo_white_png, Resources_Images_logo_white_png_len));
m_Registry.emplace(Resources_Images_logo_png_path, CreateRef<Texture>(Resources_Images_logo_png, Resources_Images_logo_png_len));
m_Registry.emplace(Resources_Images_file_icon_png_path, CreateRef<Texture>(Resources_Images_file_icon_png, Resources_Images_file_icon_png_len));
m_Registry.emplace(Resources_Images_env_file_icon_png_path, CreateRef<Texture>(Resources_Images_env_file_icon_png, Resources_Images_env_file_icon_png_len));
m_Registry.emplace(Resources_Images_scene_icon_png_path, CreateRef<Texture>(Resources_Images_scene_icon_png, Resources_Images_scene_icon_png_len));
m_Registry.emplace(Resources_Images_project_icon_png_path, CreateRef<Texture>(Resources_Images_project_icon_png, Resources_Images_project_icon_png_len));
m_Registry.emplace(Resources_Images_csharp_icon_png_path, CreateRef<Texture>(Resources_Images_csharp_icon_png, Resources_Images_csharp_icon_png_len));

View File

@@ -8,6 +8,8 @@
#include "src/Resource/Model.h"
#include "src/Resource/UI.h"
#include "src/Resource/SkyResource.h"
#include "src/Scene/Lighting/Environment.h"
using namespace Nuake;
Ref<Material> ResourceLoader::LoadMaterial(const std::string& path)
@@ -139,6 +141,51 @@ Ref<SkyResource> ResourceLoader::LoadSky(const std::string& path)
return sky;
}
Ref<Environment> ResourceLoader::LoadEnvironment(const std::string& path)
{
const std::string FILE_NOT_FOUND = "[Resource Loader] File doesn't exists. \n ";
const std::string WRONG_EXTENSION = "[Resource Loader] Resource type mismatch file extension. \n expected: ";
const std::string ENV_EXT = ".env";
if (path.empty())
{
Logger::Log(FILE_NOT_FOUND + path, "resource", LOG_TYPE::WARNING);
return nullptr;
}
if (!FileSystem::FileExists(path))
{
Logger::Log(FILE_NOT_FOUND + path, "resource", LOG_TYPE::WARNING);
return nullptr;
}
if (!String::EndsWith(path, ENV_EXT))
{
std::string message = WRONG_EXTENSION + ENV_EXT + " actual: " + path;
Logger::Log(message, "resource", LOG_TYPE::WARNING);
}
std::string content = FileSystem::ReadFile(path);
json j = json::parse(content);
UUID uuid = ReadUUID(j);
// Check if resource is already loaded.
if (ResourceManager::IsResourceLoaded(uuid))
{
return ResourceManager::GetResource<Environment>(uuid);
}
Ref<Environment> env = CreateRef<Environment>();
env->ID = uuid;
env->Path = path;
env->Deserialize(j);
ResourceManager::RegisterResource(env);
return env;
}
Ref<UIResource> ResourceLoader::LoadUI(const std::string& path)
{
auto uiResource = CreateRef<UIResource>(path);

View File

@@ -10,6 +10,7 @@ namespace Nuake
class UIResource;
class File;
class SkyResource;
class Environment;
class ResourceLoader
{
@@ -25,6 +26,7 @@ namespace Nuake
static Ref<Material> LoadMaterial(const std::string& path);
static Ref<Model> LoadModel(const std::string& path);
static Ref<SkyResource> LoadSky(const std::string& path);
static Ref<Environment> LoadEnvironment(const std::string& path);
static Ref<UIResource> LoadUI(const std::string& path);
static Ref<UIResource> LoadUI(const Ref<File>& file);

View File

@@ -140658,6 +140658,95 @@ namespace Nuake {
};
unsigned int Resources_Images_editor_icon_png_len = sizeof(Resources_Images_editor_icon_png);
// Data for file: Resources_Images_env_file_icon_png_path
const std::string Resources_Images_env_file_icon_png_path = R"(Resources/Images/env_file_icon.png)";
unsigned char Resources_Images_env_file_icon_png[] = {
0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D,
0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x64,
0x08, 0x06, 0x00, 0x00, 0x00, 0x70, 0xE2, 0x95, 0x54, 0x00, 0x00, 0x00,
0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0B, 0x13, 0x00, 0x00, 0x0B,
0x13, 0x01, 0x00, 0x9A, 0x9C, 0x18, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52,
0x47, 0x42, 0x00, 0xAE, 0xCE, 0x1C, 0xE9, 0x00, 0x00, 0x00, 0x04, 0x67,
0x41, 0x4D, 0x41, 0x00, 0x00, 0xB1, 0x8F, 0x0B, 0xFC, 0x61, 0x05, 0x00,
0x00, 0x03, 0x6E, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xED, 0xDB, 0x8D,
0x51, 0xDB, 0x30, 0x14, 0xC0, 0xF1, 0x97, 0x5E, 0x07, 0x60, 0x83, 0x7A,
0x83, 0x66, 0x83, 0x86, 0x09, 0xDA, 0x0D, 0x92, 0x4E, 0x00, 0x1B, 0x90,
0x4E, 0x00, 0x1B, 0x38, 0x4C, 0x40, 0x37, 0x70, 0x37, 0x80, 0x0D, 0xCC,
0x06, 0xB0, 0xC1, 0xAB, 0x74, 0x96, 0x1B, 0x59, 0xFE, 0x92, 0x8D, 0x8B,
0x4D, 0xF2, 0xFF, 0xDD, 0xE9, 0x72, 0x18, 0x59, 0xB9, 0x7B, 0xCF, 0x92,
0x25, 0xD9, 0x11, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x64, 0x25,
0x1F, 0x9C, 0xAA, 0x5E, 0x98, 0x8F, 0x0B, 0xF7, 0xE7, 0xEB, 0x6A, 0xB5,
0x7A, 0x95, 0x11, 0x4C, 0x3B, 0x89, 0x39, 0xF7, 0x59, 0x30, 0x8C, 0x09,
0xDC, 0xC6, 0x94, 0x5B, 0x53, 0x1E, 0x4D, 0x79, 0xD1, 0x3A, 0x7B, 0x2C,
0x73, 0x75, 0x36, 0x91, 0x6D, 0xEE, 0xDD, 0xB9, 0x99, 0xA0, 0x9F, 0xED,
0x05, 0x2E, 0x68, 0x4D, 0x09, 0xE8, 0x93, 0x9B, 0xB2, 0xED, 0x68, 0x7B,
0xEF, 0xD7, 0x95, 0x99, 0x2D, 0x7E, 0xC8, 0x32, 0x41, 0xBA, 0x36, 0x1F,
0x37, 0x72, 0x1C, 0x96, 0x7C, 0x07, 0x53, 0x5E, 0x5D, 0x29, 0xAD, 0x5D,
0x49, 0x82, 0xBA, 0xCF, 0xA6, 0xEC, 0xCD, 0xB0, 0x74, 0xEF, 0xB5, 0xBD,
0x77, 0x6D, 0x8B, 0x6B, 0xE3, 0xD2, 0xFC, 0xFF, 0x49, 0x50, 0x67, 0xC7,
0x74, 0x37, 0xF4, 0xB4, 0xD9, 0x46, 0x9C, 0x7F, 0xE5, 0x7A, 0x88, 0x2F,
0xF5, 0x7A, 0x5C, 0xC9, 0xF6, 0xBC, 0xB5, 0xA0, 0x99, 0x0D, 0x4E, 0x43,
0x20, 0xA3, 0x93, 0xD1, 0xD0, 0xDE, 0x2E, 0x68, 0xEF, 0x85, 0x64, 0x44,
0x72, 0x57, 0x76, 0xD7, 0xBD, 0x62, 0x54, 0x00, 0xB5, 0xB9, 0xC7, 0x91,
0x8C, 0x2E, 0x2E, 0x68, 0xB9, 0xF6, 0x1B, 0x1D, 0x48, 0x2D, 0x66, 0x5F,
0xA5, 0x5C, 0x8B, 0x69, 0x33, 0x9A, 0x68, 0x31, 0x95, 0x8D, 0x65, 0x93,
0x62, 0xEF, 0x11, 0x3B, 0x57, 0xA2, 0x03, 0x1B, 0x24, 0xE5, 0x56, 0x50,
0x67, 0x02, 0x73, 0xAD, 0x6F, 0xF3, 0x38, 0x30, 0x29, 0x99, 0x77, 0xEE,
0x46, 0x70, 0xA4, 0xF1, 0x43, 0xD5, 0x64, 0x49, 0xD1, 0xEA, 0xBD, 0x6A,
0xF6, 0xF5, 0x47, 0xE9, 0x93, 0x2C, 0xC3, 0x4E, 0xEA, 0xEB, 0x86, 0x31,
0x12, 0x89, 0x6C, 0xC7, 0x6D, 0x93, 0xDC, 0x95, 0xE7, 0xE9, 0xC0, 0x99,
0xDB, 0x49, 0xF3, 0x7A, 0x47, 0xAE, 0xE3, 0x56, 0xE3, 0xAA, 0x23, 0x6E,
0xF4, 0x5A, 0xAC, 0x47, 0xCA, 0xEF, 0x63, 0xDB, 0xC4, 0xD2, 0x62, 0x6F,
0xAA, 0xB4, 0xD5, 0x62, 0x0D, 0x32, 0x34, 0x29, 0x53, 0xCD, 0xBA, 0xBE,
0xC8, 0xB9, 0x0B, 0x02, 0x92, 0xB8, 0x63, 0x43, 0x92, 0xF2, 0xA6, 0xB5,
0x44, 0x70, 0x41, 0x5C, 0xC9, 0xB9, 0xD3, 0xE3, 0x6C, 0xE7, 0x31, 0x38,
0x1E, 0x93, 0x94, 0x49, 0x16, 0x76, 0xDE, 0xF7, 0xA4, 0x72, 0xEE, 0xBC,
0x60, 0x3C, 0x34, 0xFC, 0x6F, 0xD7, 0x90, 0x84, 0x54, 0x8B, 0xA1, 0x6D,
0xAB, 0x13, 0xAD, 0xB2, 0xF5, 0xB8, 0xFE, 0x99, 0x7D, 0xB6, 0xF5, 0x59,
0x66, 0xA4, 0xD5, 0x87, 0x4B, 0x31, 0xBB, 0xAC, 0x07, 0x33, 0x3B, 0xFA,
0x29, 0xD3, 0xB3, 0xDF, 0xBD, 0x96, 0xE6, 0x1D, 0xE5, 0x77, 0x35, 0xF7,
0xB4, 0x77, 0x48, 0x00, 0xFE, 0x98, 0xF2, 0x4B, 0xFF, 0xEF, 0x56, 0xC7,
0xD9, 0x27, 0x64, 0x88, 0x8D, 0x29, 0x76, 0x48, 0xB1, 0x43, 0xDC, 0xC9,
0xAE, 0x19, 0xE6, 0x4E, 0x88, 0xFF, 0x60, 0x69, 0xC8, 0xD5, 0x79, 0x98,
0x38, 0x29, 0xFF, 0x9E, 0xC9, 0xCB, 0xCC, 0x66, 0xBD, 0x87, 0xD8, 0x17,
0x12, 0x4C, 0x60, 0x6D, 0x10, 0xFC, 0x7B, 0x89, 0xCF, 0x8E, 0xED, 0xFB,
0xE0, 0x58, 0x22, 0xC5, 0xCA, 0xFE, 0xE0, 0x6E, 0xEA, 0x5D, 0x41, 0xBC,
0x8F, 0x7C, 0x71, 0xA1, 0xFC, 0xEE, 0x98, 0xBA, 0xA7, 0xCD, 0x9B, 0xF6,
0x46, 0xCD, 0x70, 0x82, 0x75, 0x43, 0x9F, 0x5C, 0xDD, 0xDA, 0xA6, 0xA7,
0x4D, 0x6D, 0x9B, 0xE9, 0xBD, 0xB7, 0x25, 0xDC, 0x43, 0xCA, 0xD9, 0x95,
0xDD, 0x4F, 0x9A, 0x7A, 0xA5, 0x9C, 0x98, 0x92, 0x75, 0x25, 0x45, 0xAB,
0x3B, 0xBD, 0xBF, 0xE5, 0xDC, 0x05, 0x57, 0xFC, 0x4D, 0x44, 0xFD, 0x0B,
0x1D, 0xF6, 0xDC, 0xC4, 0x4A, 0x3B, 0xDA, 0x4B, 0xBD, 0x7A, 0x89, 0xA0,
0xB2, 0x38, 0xB4, 0x9F, 0xBD, 0x37, 0xF7, 0x11, 0x49, 0x49, 0x5B, 0xDA,
0x49, 0xBC, 0x3A, 0x8B, 0xD8, 0x5C, 0x5C, 0xCA, 0xB4, 0xB7, 0xDC, 0x06,
0xB7, 0xC9, 0xE8, 0xDD, 0x4F, 0x72, 0x6F, 0x27, 0x5E, 0x4A, 0xDC, 0x62,
0xD2, 0x6A, 0xBB, 0xF1, 0xFB, 0x3D, 0xF2, 0x20, 0x28, 0x68, 0x75, 0x1B,
0xFC, 0x25, 0x76, 0xE8, 0x08, 0x86, 0x9B, 0x36, 0x8D, 0x0F, 0xAD, 0x82,
0xDE, 0xB1, 0x98, 0x07, 0x54, 0x8B, 0x61, 0x82, 0xF2, 0x63, 0xE8, 0xF0,
0x11, 0x91, 0x90, 0xB6, 0x64, 0xD8, 0x0B, 0x20, 0xF7, 0xEA, 0x7D, 0x15,
0xD4, 0x99, 0xC0, 0x3C, 0x78, 0x41, 0xEA, 0x7D, 0xF9, 0xA0, 0x27, 0x21,
0xAD, 0x8F, 0x73, 0xB5, 0xFA, 0x3C, 0xBD, 0x77, 0x22, 0x71, 0xB6, 0xB4,
0x3A, 0x74, 0xF5, 0x26, 0xA5, 0x23, 0x21, 0x5D, 0x3D, 0x23, 0xF3, 0xEB,
0x09, 0xDA, 0x69, 0xF5, 0xF5, 0x4E, 0x3F, 0xB8, 0x49, 0x4B, 0xFD, 0x5B,
0x37, 0xF4, 0xF8, 0x25, 0x6B, 0x49, 0x46, 0xF8, 0x36, 0x64, 0xAE, 0x4C,
0x73, 0xDB, 0x69, 0xFD, 0x5D, 0xDB, 0x3C, 0x48, 0xCC, 0x7E, 0x4C, 0x00,
0x5D, 0xAF, 0xB8, 0x8B, 0xE9, 0x41, 0x70, 0x1A, 0x92, 0xB1, 0x76, 0x81,
0x4C, 0x83, 0x40, 0xE6, 0xEE, 0xD8, 0xA6, 0xA7, 0x3D, 0x7B, 0xEE, 0xC6,
0xF5, 0xA0, 0xF0, 0xA9, 0x23, 0x2F, 0xC6, 0x75, 0xD1, 0x9E, 0xB7, 0xD0,
0xB5, 0xFE, 0xA2, 0xB4, 0x5F, 0x37, 0xD3, 0x62, 0x22, 0x90, 0x7A, 0xA5,
0xED, 0x87, 0x3C, 0xB6, 0xEE, 0x37, 0x41, 0x3B, 0x77, 0x25, 0xB7, 0x26,
0x23, 0xA8, 0xBB, 0xD3, 0xE1, 0x5B, 0x26, 0x1F, 0x2E, 0x11, 0xB3, 0xFF,
0x60, 0x47, 0x8B, 0x99, 0x4E, 0x22, 0x91, 0x3F, 0x96, 0xD1, 0xE2, 0x3E,
0xB2, 0x31, 0xE5, 0xBB, 0x1C, 0x5F, 0x8C, 0xF3, 0xB7, 0xCF, 0xED, 0xAA,
0xFC, 0xC9, 0x95, 0xFB, 0xB1, 0xBF, 0x39, 0x04, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xC6, 0xF8, 0x0B, 0xA0, 0xD0, 0xFF, 0x56, 0x56, 0xDB, 0x79,
0x47, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60,
0x82,
};
unsigned int Resources_Images_env_file_icon_png_len = sizeof(Resources_Images_env_file_icon_png);
// Data for file: Resources_Images_file_icon_png_path
const std::string Resources_Images_file_icon_png_path = R"(Resources/Images/file_icon.png)";
unsigned char Resources_Images_file_icon_png[] = {

View File

@@ -89,6 +89,9 @@ namespace Nuake {
extern const std::string Resources_Images_editor_icon_png_path;
extern unsigned int Resources_Images_editor_icon_png_len;
extern unsigned char Resources_Images_editor_icon_png[];
extern const std::string Resources_Images_env_file_icon_png_path;
extern unsigned int Resources_Images_env_file_icon_png_len;
extern unsigned char Resources_Images_env_file_icon_png[];
extern const std::string Resources_Images_file_icon_png_path;
extern unsigned int Resources_Images_file_icon_png_len;
extern unsigned char Resources_Images_file_icon_png[];

View File

@@ -26,3 +26,4 @@
#include "Components/TransformComponent.h"
#include "Components/UIComponent.h"
#include "Components/SkyComponent.h"
#include "Components/EnvironmentComponent.h"

View File

@@ -0,0 +1,19 @@
#include "EnvironmentComponent.h"
#include "src/FileSystem/File.h"
#include "src/FileSystem/FileSystem.h"
namespace Nuake
{
json EnvironmentComponent::Serialize()
{
BEGIN_SERIALIZE();
SERIALIZE_RES_FILE(EnvResourceFilePath);
END_SERIALIZE();
}
bool EnvironmentComponent::Deserialize(const json& j)
{
DESERIALIZE_RES_FILE(EnvResourceFilePath);
return true;
}
}

View File

@@ -0,0 +1,30 @@
#pragma once
#include "Component.h"
#include "src/Core/Core.h"
#include "src/Resource/Serializable.h"
#include "src/Resource/UUID.h"
namespace Nuake
{
class EnvironmentComponent : public Component
{
NUAKECOMPONENT(EnvironmentComponent, "Environment")
static void InitializeComponentClass()
{
BindComponentField<&EnvironmentComponent::EnvResource>("EnvResource", "Environment Resource");
SetFlags(ComponentFieldTrait::Internal, ComponentFieldTrait::Transient);
BindComponentField<&EnvironmentComponent::EnvResourceFilePath>("EnvResourceFilePath", "File Path");
ResourceFileRestriction("_EnvFile");
}
public:
UUID EnvResource = UUID(0);
ResourceFile EnvResourceFilePath;
json Serialize();
bool Deserialize(const json& j);
};
}

View File

@@ -91,6 +91,8 @@ namespace Nuake
SERIALIZE_OBJECT_REF_LBL("PrefabMember", GetComponent<PrefabMember>())
if (HasComponent<SkyComponent>())
SERIALIZE_OBJECT_REF_LBL("SkyComponent", GetComponent<SkyComponent>())
if (HasComponent<EnvironmentComponent>())
SERIALIZE_OBJECT_REF_LBL("EnvironmentComponent", GetComponent<EnvironmentComponent>())
END_SERIALIZE();
}
@@ -174,6 +176,7 @@ namespace Nuake
DESERIALIZE_COMPONENT(NavMeshVolumeComponent);
DESERIALIZE_COMPONENT(UIComponent);
DESERIALIZE_COMPONENT(SkyComponent);
DESERIALIZE_COMPONENT(EnvironmentComponent);
return false;
}

View File

@@ -4,11 +4,12 @@
#include "src/Core/Core.h"
namespace Nuake {
Environment::Environment()
namespace Nuake
{
Environment::Environment() :
m_AmbientColor(1.0f, 1.0f, 1.0f, 1.0f)
{
m_AmbientColor = glm::vec4(1.0f, 1.0f, 1.0f, 1.0f);
ProceduralSkybox = CreateRef<ProceduralSky>();
CurrentSkyType = SkyType::ProceduralSky;
@@ -43,6 +44,11 @@ namespace Nuake {
mSSR = CreateScope<SSR>();
}
Environment::Environment(const std::string& path) : Environment()
{
this->Path = path;
}
glm::vec4 Environment::GetAmbientColor()
{
return m_AmbientColor;
@@ -76,6 +82,7 @@ namespace Nuake {
{
BEGIN_SERIALIZE();
SERIALIZE_VAL(CurrentSkyType);
j["UUID"] = static_cast<uint64_t>(ID);
// Bloom
SERIALIZE_VAL(BloomEnabled);

View File

@@ -2,6 +2,7 @@
#include "src/Core/Maths.h"
#include "src/Core/Core.h"
#include "src/Scene/Environment/ProceduralSky.h"
#include "src/Resource/Resource.h"
#include "src/Resource/Serializable.h"
#include "src/Rendering/PostFX/Bloom.h"
@@ -20,9 +21,10 @@ namespace Nuake
// CubeMap
};
class Environment : public ISerializable
class Environment : public Resource, ISerializable
{
public:
Environment(const std::string& path);
Environment();
SkyType CurrentSkyType;

View File

@@ -6,6 +6,8 @@
#include "src/Core/OS.h"
#include "src/Physics/PhysicsManager.h"
#include "src/Resource/ResourceManager.h"
#include "src/Scene/Systems/ScriptingSystem.h"
#include "src/Scene/Systems/PhysicsSystem.h"
#include "src/Scene/Systems/TransformSystem.h"
@@ -32,6 +34,7 @@
#include "src/Scene/Components/SkinnedModelComponent.h"
#include "src/Scene/Components/BoneComponent.h"
#include <Tracy.hpp>
#include <fstream>
@@ -41,6 +44,8 @@
namespace Nuake
{
Ref<Environment> Scene::m_Environment = nullptr;
Ref<Scene> Scene::New()
{
return CreateRef<Scene>();
@@ -48,9 +53,13 @@ namespace Nuake
Scene::Scene()
{
if (m_Environment == nullptr)
{
m_Environment = CreateRef<Environment>();
}
m_Systems = std::vector<Ref<System>>();
m_EditorCamera = CreateRef<EditorCamera>();
m_Environement = CreateRef<Environment>();
physicsSystem = CreateRef<PhysicsSystem>(this);
scriptingSystem = CreateRef<ScriptingSystem>(this);
@@ -583,14 +592,26 @@ namespace Nuake
return m_EditorCamera;
}
Ref<Environment> Scene::GetEnvironment() const
Ref<Environment> Scene::GetEnvironment()
{
return m_Environement;
}
auto view = m_Registry.view<EnvironmentComponent>();
for (auto e : view)
{
auto& envComponent = view.get<EnvironmentComponent>(e);
if (envComponent.EnvResourceFilePath.Exist() && envComponent.EnvResource == UUID(0))
{
auto env = ResourceLoader::LoadEnvironment(envComponent.EnvResourceFilePath.GetRelativePath());
envComponent.EnvResource = env->ID;
return env;
}
void Scene::SetEnvironment(Ref<Environment> env)
{
m_Environement = env;
if (ResourceManager::IsResourceLoaded(envComponent.EnvResource))
{
return ResourceManager::GetResource<Environment>(envComponent.EnvResource);
}
}
return m_Environment;
}
bool Scene::Save()
@@ -647,7 +668,6 @@ namespace Nuake
{
BEGIN_SERIALIZE();
SERIALIZE_VAL(Name);
SERIALIZE_OBJECT(m_Environement)
SERIALIZE_VAL(Path)
std::vector<json> entities = std::vector<json>();
@@ -685,12 +705,6 @@ namespace Nuake
Path = j["Path"];
}
m_Environement = CreateRef<Environment>();
if (j.contains("m_Environement"))
{
m_Environement->Deserialize(j["m_Environement"]);
}
// Parse entities
if (!j.contains("Entities"))
{

View File

@@ -37,7 +37,7 @@ namespace Nuake
// You can create a new system(see 'Systems/'.) and register it
// In the scene constructor.
std::vector<Ref<System>> m_Systems;
Ref<Environment> m_Environement;
static Ref<Environment> m_Environment;
public:
Ref<EditorCamera> m_EditorCamera;
@@ -88,8 +88,7 @@ namespace Nuake
template<typename Component>
static void CopyComponent(entt::registry& dst, entt::registry& src);
Ref<Environment> GetEnvironment() const;
void SetEnvironment(Ref<Environment> env);
Ref<Environment> GetEnvironment();
bool Save();
bool SaveAs(const std::string& path);

View File

@@ -11,6 +11,19 @@
namespace Nuake
{
#define BEGIN_COLLAPSE_HEADER(names) \
UIFont* names##_boldFont = new UIFont(Fonts::Bold); \
ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0.f, 0.f)); \
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0.f, 8.f)); \
bool names##_Opened = ImGui::CollapsingHeader((std::string(" ") + #names).c_str()); \
ImGui::PopStyleVar(); \
delete names##_boldFont; \
if (names##_Opened) { \
#define END_COLLAPSE_HEADER() \
} \
ImGui::PopStyleVar(); \
namespace UI
{
static uint32_t PrimaryCol = IM_COL32(97, 0, 255, 255);