Added UI component, resource & system. Now renders on screen and live reloads

This commit is contained in:
Antoine Pilote
2024-09-10 22:27:15 -04:00
parent 552fe0ee04
commit ebedefb6a7
21 changed files with 366 additions and 66 deletions

View File

@@ -0,0 +1 @@
#include "UIComponent.h"

View File

@@ -0,0 +1,17 @@
#pragma once
#include "src/Core/Object/Object.h"
#include "src/Resource/UUID.h"
namespace Nuake
{
struct UIComponent
{
NUAKECOMPONENT(UIComponent, "UI Component");
UUID UIResource = UUID(0);
std::string CSharpUIController;
std::string UIFilePath;
bool IsWorldSpace;
// TODO: Z-Ordering
};
}

View File

@@ -12,7 +12,8 @@
#include "src/Scene/Systems/QuakeMapBuilder.h"
#include "src/Scene/Systems/ParticleSystem.h"
#include "src/Scene/Systems/AnimationSystem.h"
#include <src/Scene/Systems/AudioSystem.h>
#include "src/Scene/Systems/AudioSystem.h"
#include "src/Scene/Systems/UISystem.h"
#include "src/Rendering/SceneRenderer.h"
#include "src/Rendering/Renderer.h"
@@ -54,6 +55,7 @@ namespace Nuake
// Adding systems - Order is important
m_Systems.push_back(CreateRef<PhysicsSystem>(this));
m_Systems.push_back(CreateRef<UISystem>(this));
m_Systems.push_back(CreateRef<ScriptingSystem>(this));
m_Systems.push_back(CreateRef<AnimationSystem>(this));
m_Systems.push_back(CreateRef<TransformSystem>(this));
@@ -237,7 +239,6 @@ namespace Nuake
}
}
return false;
}

View File

@@ -0,0 +1,70 @@
#include "UISystem.h"
#include "src/Resource/ResourceManager.h"
#include "src/Resource/ResourceLoader.h"
#include "src/Resource/UI.h"
#include "src/Scene/Scene.h"
#include "src/FileSystem/File.h"
#include "src/Scene/Components/UIComponent.h"
#include "src/FileSystem/FileSystem.h"
namespace Nuake
{
UISystem::UISystem(Scene* scene)
{
m_Scene = scene;
}
bool UISystem::Init()
{
return true;
}
void UISystem::Update(Timestep ts)
{
auto uiView = m_Scene->m_Registry.view<UIComponent>();
for (auto e : uiView)
{
auto& uiViewComponent = uiView.get<UIComponent>(e);
const std::string& filePath = uiViewComponent.UIFilePath;
if (uiViewComponent.UIResource == 0)
{
if (filePath.empty() || !FileSystem::FileExists(filePath))
{
continue;
}
Ref<UIResource> uiResource = ResourceLoader::LoadUI(filePath);
uiViewComponent.UIResource = uiResource->ID;
uis[uiViewComponent.UIResource] = uiResource;
ResourceManager::RegisterResource(uiResource);
}
else
{
if (FileSystem::FileExists(filePath))
{
Ref<File> file = FileSystem::GetFile(filePath);
if (file->GetHasBeenModified())
{
uis[uiViewComponent.UIResource]->Reload();
file->SetHasBeenModified(false);
}
uis[uiViewComponent.UIResource]->Draw();
}
}
}
}
void UISystem::FixedUpdate(Timestep ts)
{
}
void UISystem::EditorUpdate()
{
}
void UISystem::Exit()
{
}
}

View File

@@ -0,0 +1,28 @@
#pragma once
#include "src/Resource/UUID.h"
#include "src/Scene/Systems/System.h"
#include "src/Core/Maths.h"
namespace Nuake
{
class UIResource;
class UISystem : public System
{
public:
UISystem(Scene* scene);
bool Init() override;
void Update(Timestep ts) override;
void EditorUpdate() override;
void FixedUpdate(Timestep ts) override;
void Draw() override {}
void Exit() override;
private:
std::map<UUID, Ref<UIResource>> uis;
};
}