Added UI component, resource & system. Now renders on screen and live reloads
This commit is contained in:
1
Nuake/src/Scene/Components/UIComponent.cpp
Normal file
1
Nuake/src/Scene/Components/UIComponent.cpp
Normal file
@@ -0,0 +1 @@
|
||||
#include "UIComponent.h"
|
||||
17
Nuake/src/Scene/Components/UIComponent.h
Normal file
17
Nuake/src/Scene/Components/UIComponent.h
Normal 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
|
||||
};
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
70
Nuake/src/Scene/Systems/UISystem.cpp
Normal file
70
Nuake/src/Scene/Systems/UISystem.cpp
Normal 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()
|
||||
{
|
||||
}
|
||||
}
|
||||
28
Nuake/src/Scene/Systems/UISystem.h
Normal file
28
Nuake/src/Scene/Systems/UISystem.h
Normal 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;
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user