add TextComponent
This commit is contained in:
@ -9,9 +9,10 @@
|
|||||||
#include <imgui_internal.h>
|
#include <imgui_internal.h>
|
||||||
#include <glm/gtc/type_ptr.hpp>
|
#include <glm/gtc/type_ptr.hpp>
|
||||||
#include <Hazel/Scene/Components.h>
|
#include <Hazel/Scene/Components.h>
|
||||||
#include "Hazel/UI/UI.h"
|
#include <misc/cpp/imgui_stdlib.h>
|
||||||
|
|
||||||
#include "Hazel/Scripting/ScriptEngine.h"
|
#include "Hazel/Scripting/ScriptEngine.h"
|
||||||
|
#include "Hazel/UI/UI.h"
|
||||||
|
|
||||||
namespace Hazel
|
namespace Hazel
|
||||||
{
|
{
|
||||||
@ -285,6 +286,7 @@ namespace Hazel
|
|||||||
DisplayAddComponentEntry<RigidBody2DComponent>("RigidBody 2D");
|
DisplayAddComponentEntry<RigidBody2DComponent>("RigidBody 2D");
|
||||||
DisplayAddComponentEntry<BoxCollider2DComponent>("Box Collider 2D");
|
DisplayAddComponentEntry<BoxCollider2DComponent>("Box Collider 2D");
|
||||||
DisplayAddComponentEntry<CircleCollider2DComponent>("Circle Collider 2D");
|
DisplayAddComponentEntry<CircleCollider2DComponent>("Circle Collider 2D");
|
||||||
|
DisplayAddComponentEntry<TextComponent>("Text Component");
|
||||||
|
|
||||||
ImGui::EndPopup();
|
ImGui::EndPopup();
|
||||||
}
|
}
|
||||||
@ -525,6 +527,14 @@ namespace Hazel
|
|||||||
ImGui::DragFloat("Restitution", &component.Restitution, 0.01f, 0.0f, 1.0f);
|
ImGui::DragFloat("Restitution", &component.Restitution, 0.01f, 0.0f, 1.0f);
|
||||||
ImGui::DragFloat("Restitution Threshold", &component.RestitutionThreshold, 0.01f, 0.0f);
|
ImGui::DragFloat("Restitution Threshold", &component.RestitutionThreshold, 0.01f, 0.0f);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
DrawComponent<TextComponent>("Text Renderer", entity, [](auto& component)
|
||||||
|
{
|
||||||
|
ImGui::InputTextMultiline("Text string", &component.TextString);
|
||||||
|
ImGui::ColorEdit4("Color", glm::value_ptr(component.Color));
|
||||||
|
ImGui::DragFloat("Kerning", &component.Kerning, 0.01f);
|
||||||
|
ImGui::DragFloat("LineSpacing", &component.LineSpacing, 0.01f);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -9,6 +9,7 @@
|
|||||||
#include <imgui_impl_sdl3.h>
|
#include <imgui_impl_sdl3.h>
|
||||||
#include <Hazel/Core/Application.h>
|
#include <Hazel/Core/Application.h>
|
||||||
#include <Hazel/Debug/Instrumentor.h>
|
#include <Hazel/Debug/Instrumentor.h>
|
||||||
|
#include <misc/cpp/imgui_stdlib.cpp>
|
||||||
#include "ImGuizmo.h"
|
#include "ImGuizmo.h"
|
||||||
#include "imgui_internal.h"
|
#include "imgui_internal.h"
|
||||||
|
|
||||||
|
|||||||
@ -759,8 +759,8 @@ namespace Hazel
|
|||||||
DrawLine(lineVectices[3], lineVectices[0], color, entityID);
|
DrawLine(lineVectices[3], lineVectices[0], color, entityID);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderer2D::DrawString(const std::string& string, const Ref<Font>& font, const glm::mat4& transform,
|
void Renderer2D::DrawString(const std::string& string, const Ref<Font>& font, const glm::mat4& transform,
|
||||||
const glm::vec4& color, int entityID)
|
const TextParams& textParams, int entityID)
|
||||||
{
|
{
|
||||||
const auto& fontGeomatry = font->GetMSDFData()->FontGeometry;
|
const auto& fontGeomatry = font->GetMSDFData()->FontGeometry;
|
||||||
const auto& metrics = fontGeomatry.getMetrics();
|
const auto& metrics = fontGeomatry.getMetrics();
|
||||||
@ -772,7 +772,8 @@ namespace Hazel
|
|||||||
double x = 0.0;
|
double x = 0.0;
|
||||||
double fsScale = 1.0 / (metrics.ascenderY - metrics.descenderY);
|
double fsScale = 1.0 / (metrics.ascenderY - metrics.descenderY);
|
||||||
double y = 0.0;
|
double y = 0.0;
|
||||||
float lineHeightOffset = 0.0f;
|
|
||||||
|
const float spaceGlyphAdvance = fontGeomatry.getGlyph(' ')->getAdvance();
|
||||||
|
|
||||||
for (size_t i = 0; i < string.size(); i++)
|
for (size_t i = 0; i < string.size(); i++)
|
||||||
{
|
{
|
||||||
@ -783,17 +784,35 @@ namespace Hazel
|
|||||||
if (character == '\n')
|
if (character == '\n')
|
||||||
{
|
{
|
||||||
x = 0;
|
x = 0;
|
||||||
y -= fsScale * metrics.lineHeight + lineHeightOffset;
|
y -= fsScale * metrics.lineHeight + textParams.LineSpacing;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (character == ' ')
|
||||||
|
{
|
||||||
|
float advance = spaceGlyphAdvance;
|
||||||
|
if ( i < string.size() - 1)
|
||||||
|
{
|
||||||
|
char nextCharacter = string[i + 1];
|
||||||
|
double dAdvance;
|
||||||
|
fontGeomatry.getAdvance(dAdvance, character, nextCharacter);
|
||||||
|
advance = (float)dAdvance;
|
||||||
|
}
|
||||||
|
|
||||||
|
x += fsScale * advance + textParams.Kerning;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (character == '\t')
|
||||||
|
{
|
||||||
|
x += 4.0f * (fsScale * spaceGlyphAdvance + textParams.Kerning) ;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
auto glphy = fontGeomatry.getGlyph(character);
|
auto glphy = fontGeomatry.getGlyph(character);
|
||||||
if (!glphy)
|
if (!glphy)
|
||||||
glphy = fontGeomatry.getGlyph('?');
|
glphy = fontGeomatry.getGlyph('?');
|
||||||
if (!glphy)
|
if (!glphy)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (character == '\t')
|
|
||||||
glphy = fontGeomatry.getGlyph(' ');
|
|
||||||
|
|
||||||
// Atlas bound
|
// Atlas bound
|
||||||
double aLeft, aButtom, aRight, aTop;
|
double aLeft, aButtom, aRight, aTop;
|
||||||
@ -822,25 +841,25 @@ namespace Hazel
|
|||||||
|
|
||||||
// Render
|
// Render
|
||||||
s_Data.TextVertexBufferPtr->Position = transform * glm::vec4(quadMin, 0.0f, 1.0f);
|
s_Data.TextVertexBufferPtr->Position = transform * glm::vec4(quadMin, 0.0f, 1.0f);
|
||||||
s_Data.TextVertexBufferPtr->Color = color;
|
s_Data.TextVertexBufferPtr->Color = textParams.Color;
|
||||||
s_Data.TextVertexBufferPtr->TexCoord = texCoordMin;
|
s_Data.TextVertexBufferPtr->TexCoord = texCoordMin;
|
||||||
s_Data.TextVertexBufferPtr->EntityID = entityID;
|
s_Data.TextVertexBufferPtr->EntityID = entityID;
|
||||||
s_Data.TextVertexBufferPtr++;
|
s_Data.TextVertexBufferPtr++;
|
||||||
|
|
||||||
s_Data.TextVertexBufferPtr->Position = transform * glm::vec4(quadMin.x, quadMax.y, 0.0f, 1.0f);
|
s_Data.TextVertexBufferPtr->Position = transform * glm::vec4(quadMin.x, quadMax.y, 0.0f, 1.0f);
|
||||||
s_Data.TextVertexBufferPtr->Color = color;
|
s_Data.TextVertexBufferPtr->Color = textParams.Color;
|
||||||
s_Data.TextVertexBufferPtr->TexCoord = { texCoordMin.x, texCoordMax.y };
|
s_Data.TextVertexBufferPtr->TexCoord = { texCoordMin.x, texCoordMax.y };
|
||||||
s_Data.TextVertexBufferPtr->EntityID = entityID;
|
s_Data.TextVertexBufferPtr->EntityID = entityID;
|
||||||
s_Data.TextVertexBufferPtr++;
|
s_Data.TextVertexBufferPtr++;
|
||||||
|
|
||||||
s_Data.TextVertexBufferPtr->Position = transform * glm::vec4(quadMax, 0.0f, 1.0f);
|
s_Data.TextVertexBufferPtr->Position = transform * glm::vec4(quadMax, 0.0f, 1.0f);
|
||||||
s_Data.TextVertexBufferPtr->Color = color;
|
s_Data.TextVertexBufferPtr->Color = textParams.Color;
|
||||||
s_Data.TextVertexBufferPtr->TexCoord = texCoordMax;
|
s_Data.TextVertexBufferPtr->TexCoord = texCoordMax;
|
||||||
s_Data.TextVertexBufferPtr->EntityID = entityID;
|
s_Data.TextVertexBufferPtr->EntityID = entityID;
|
||||||
s_Data.TextVertexBufferPtr++;
|
s_Data.TextVertexBufferPtr++;
|
||||||
|
|
||||||
s_Data.TextVertexBufferPtr->Position = transform * glm::vec4(quadMax.x, quadMin.y, 0.0f, 1.0f);
|
s_Data.TextVertexBufferPtr->Position = transform * glm::vec4(quadMax.x, quadMin.y, 0.0f, 1.0f);
|
||||||
s_Data.TextVertexBufferPtr->Color = color;
|
s_Data.TextVertexBufferPtr->Color = textParams.Color;
|
||||||
s_Data.TextVertexBufferPtr->TexCoord = {texCoordMax.x, texCoordMin.y};
|
s_Data.TextVertexBufferPtr->TexCoord = {texCoordMax.x, texCoordMin.y};
|
||||||
s_Data.TextVertexBufferPtr->EntityID = entityID;
|
s_Data.TextVertexBufferPtr->EntityID = entityID;
|
||||||
s_Data.TextVertexBufferPtr++;
|
s_Data.TextVertexBufferPtr++;
|
||||||
@ -854,12 +873,17 @@ namespace Hazel
|
|||||||
const char nextCharacter = string[i + 1];
|
const char nextCharacter = string[i + 1];
|
||||||
fontGeomatry.getAdvance(advance, character, nextCharacter);
|
fontGeomatry.getAdvance(advance, character, nextCharacter);
|
||||||
|
|
||||||
float kerningOffset = 0.0f;
|
x += fsScale * advance + textParams.Kerning;
|
||||||
x += fsScale * advance + kerningOffset;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Renderer2D::DrawString(const std::string& string, const glm::mat4& transform, const TextComponent& component,
|
||||||
|
int entityID)
|
||||||
|
{
|
||||||
|
DrawString(string, component.FontAsset, transform, {component.Color, component.Kerning, component.LineSpacing}, entityID);
|
||||||
|
}
|
||||||
|
|
||||||
float Renderer2D::GetLineWidth()
|
float Renderer2D::GetLineWidth()
|
||||||
{
|
{
|
||||||
return s_Data.LineWidth;
|
return s_Data.LineWidth;
|
||||||
|
|||||||
@ -62,7 +62,14 @@ namespace Hazel
|
|||||||
static void DrawRect(const glm::mat4& transform, const glm::vec4& color, int entityID = -1);
|
static void DrawRect(const glm::mat4& transform, const glm::vec4& color, int entityID = -1);
|
||||||
|
|
||||||
|
|
||||||
static void DrawString(const std::string& string, const Ref<Font>& font, const glm::mat4& transform, const glm::vec4& color, int entityID = -1);
|
struct TextParams
|
||||||
|
{
|
||||||
|
glm::vec4 Color {0.0f};
|
||||||
|
float Kerning = 0.0f;
|
||||||
|
float LineSpacing = 0.0f;
|
||||||
|
};
|
||||||
|
static void DrawString(const std::string& string, const Ref<Font>& font, const glm::mat4& transform, const TextParams& textParams, int entityID = -1);
|
||||||
|
static void DrawString(const std::string& string, const glm::mat4& transform, const TextComponent& component, int entityID = -1);
|
||||||
|
|
||||||
static float GetLineWidth();
|
static float GetLineWidth();
|
||||||
static void SetLineWidth(float width);
|
static void SetLineWidth(float width);
|
||||||
|
|||||||
@ -17,6 +17,8 @@
|
|||||||
#include <box2d/types.h>
|
#include <box2d/types.h>
|
||||||
#include <Hazel/Core/UUID.h>
|
#include <Hazel/Core/UUID.h>
|
||||||
|
|
||||||
|
#include "Hazel/Renderer/Font.h"
|
||||||
|
|
||||||
namespace Hazel
|
namespace Hazel
|
||||||
{
|
{
|
||||||
struct IDComponent
|
struct IDComponent
|
||||||
@ -168,6 +170,16 @@ namespace Hazel
|
|||||||
CircleCollider2DComponent(const CircleCollider2DComponent&) = default;
|
CircleCollider2DComponent(const CircleCollider2DComponent&) = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct TextComponent
|
||||||
|
{
|
||||||
|
std::string TextString;
|
||||||
|
Ref<Font> FontAsset = Font::GetDefault();
|
||||||
|
glm::vec4 Color{1.0f, 1.0f, 1.0f, 1.0f};
|
||||||
|
float Kerning = 0.0f;
|
||||||
|
float LineSpacing = -.0f;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
template<typename... Components>
|
template<typename... Components>
|
||||||
struct ComponentGroup
|
struct ComponentGroup
|
||||||
{
|
{
|
||||||
@ -177,7 +189,7 @@ namespace Hazel
|
|||||||
CircleRendererComponent, BoxCollider2DComponent,
|
CircleRendererComponent, BoxCollider2DComponent,
|
||||||
CircleCollider2DComponent, CameraComponent,
|
CircleCollider2DComponent, CameraComponent,
|
||||||
ScriptComponent, NativeScriptComponent,
|
ScriptComponent, NativeScriptComponent,
|
||||||
RigidBody2DComponent>;
|
RigidBody2DComponent, TextComponent>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -223,11 +223,15 @@ namespace Hazel
|
|||||||
Renderer2D::DrawCircle(transform.GetTransform(), circle.Color, circle.Thickness, circle.Fade, (int)entity);
|
Renderer2D::DrawCircle(transform.GetTransform(), circle.Color, circle.Thickness, circle.Fade, (int)entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Renderer2D::DrawString("hello", Font::GetDefault(), glm::mat4(1.0f), glm::vec4(1.0f), 0);
|
// Draw Text
|
||||||
|
{
|
||||||
Renderer2D::DrawString(R"(
|
const auto& view = m_Registry.view<TransformComponent, TextComponent>();
|
||||||
Hello World!
|
for (const auto& entity : view)
|
||||||
)", Font::GetDefault(), glm::mat4(1.0f), glm::vec4(0.2f, 0.5f, 0.3f, 1.0f));
|
{
|
||||||
|
auto [transform, text] = view.get<TransformComponent, TextComponent>(entity);
|
||||||
|
Renderer2D::DrawString(text.TextString, transform.GetTransform(), text, (int)entity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Renderer2D::EndScene();
|
Renderer2D::EndScene();
|
||||||
}
|
}
|
||||||
@ -532,6 +536,11 @@ namespace Hazel
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <>
|
||||||
|
void Scene::OnComponentAdded<TextComponent>(Entity entity, TextComponent& component)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
template HAZEL_API void Scene::OnComponentAdded<IDComponent>(Entity, IDComponent&);
|
template HAZEL_API void Scene::OnComponentAdded<IDComponent>(Entity, IDComponent&);
|
||||||
template HAZEL_API void Scene::OnComponentAdded<TransformComponent>(Entity, TransformComponent&);
|
template HAZEL_API void Scene::OnComponentAdded<TransformComponent>(Entity, TransformComponent&);
|
||||||
@ -544,4 +553,5 @@ namespace Hazel
|
|||||||
template HAZEL_API void Scene::OnComponentAdded<RigidBody2DComponent>(Entity, RigidBody2DComponent&);
|
template HAZEL_API void Scene::OnComponentAdded<RigidBody2DComponent>(Entity, RigidBody2DComponent&);
|
||||||
template HAZEL_API void Scene::OnComponentAdded<BoxCollider2DComponent>(Entity, BoxCollider2DComponent&);
|
template HAZEL_API void Scene::OnComponentAdded<BoxCollider2DComponent>(Entity, BoxCollider2DComponent&);
|
||||||
template HAZEL_API void Scene::OnComponentAdded<CircleCollider2DComponent>(Entity, CircleCollider2DComponent&);
|
template HAZEL_API void Scene::OnComponentAdded<CircleCollider2DComponent>(Entity, CircleCollider2DComponent&);
|
||||||
|
template HAZEL_API void Scene::OnComponentAdded<TextComponent>(Entity, TextComponent&);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -197,7 +197,7 @@ namespace Hazel
|
|||||||
out << YAML::Key << "TransformComponent";
|
out << YAML::Key << "TransformComponent";
|
||||||
out << YAML::BeginMap; // TransformComponent
|
out << YAML::BeginMap; // TransformComponent
|
||||||
|
|
||||||
auto& transform = entity.GetComponent<TransformComponent>();
|
const auto& transform = entity.GetComponent<TransformComponent>();
|
||||||
out << YAML::Key << "Translation" << YAML::Value << transform.Translation;
|
out << YAML::Key << "Translation" << YAML::Value << transform.Translation;
|
||||||
out << YAML::Key << "Rotation" << YAML::Value << transform.Rotation;
|
out << YAML::Key << "Rotation" << YAML::Value << transform.Rotation;
|
||||||
out << YAML::Key << "Scale" << YAML::Value << transform.Scale;
|
out << YAML::Key << "Scale" << YAML::Value << transform.Scale;
|
||||||
@ -211,8 +211,8 @@ namespace Hazel
|
|||||||
|
|
||||||
out << YAML::BeginMap; // CameraComponent
|
out << YAML::BeginMap; // CameraComponent
|
||||||
|
|
||||||
auto& cameraComponent = entity.GetComponent<CameraComponent>();
|
const auto& cameraComponent = entity.GetComponent<CameraComponent>();
|
||||||
auto& camera = cameraComponent.Camera;
|
const auto& camera = cameraComponent.Camera;
|
||||||
|
|
||||||
out << YAML::Key << "Camera" << YAML::Value; // CameraComponent
|
out << YAML::Key << "Camera" << YAML::Value; // CameraComponent
|
||||||
out << YAML::BeginMap; // Camera
|
out << YAML::BeginMap; // Camera
|
||||||
@ -234,7 +234,7 @@ namespace Hazel
|
|||||||
|
|
||||||
if (entity.HasComponent<ScriptComponent>())
|
if (entity.HasComponent<ScriptComponent>())
|
||||||
{
|
{
|
||||||
auto& scriptComponent = entity.GetComponent<ScriptComponent>();
|
const auto& scriptComponent = entity.GetComponent<ScriptComponent>();
|
||||||
|
|
||||||
out << YAML::Key << "ScriptComponent";
|
out << YAML::Key << "ScriptComponent";
|
||||||
|
|
||||||
@ -242,7 +242,7 @@ namespace Hazel
|
|||||||
out << YAML::Key << "ClassName" << YAML::Value << scriptComponent.ClassName;
|
out << YAML::Key << "ClassName" << YAML::Value << scriptComponent.ClassName;
|
||||||
|
|
||||||
// fields
|
// fields
|
||||||
Ref<ScriptClass> entityClass = ScriptEngine::GetEntityClass(scriptComponent.ClassName);
|
const Ref<ScriptClass> entityClass = ScriptEngine::GetEntityClass(scriptComponent.ClassName);
|
||||||
const auto& fields = entityClass->GetFields();
|
const auto& fields = entityClass->GetFields();
|
||||||
if (fields.size() > 0)
|
if (fields.size() > 0)
|
||||||
{
|
{
|
||||||
@ -303,7 +303,7 @@ namespace Hazel
|
|||||||
out << YAML::Key << "CircleRendererComponent";
|
out << YAML::Key << "CircleRendererComponent";
|
||||||
|
|
||||||
out << YAML::BeginMap; // CircleRendererComponent
|
out << YAML::BeginMap; // CircleRendererComponent
|
||||||
auto& circleRendererComponent = entity.GetComponent<CircleRendererComponent>();
|
const auto& circleRendererComponent = entity.GetComponent<CircleRendererComponent>();
|
||||||
out << YAML::Key << "Color" << YAML::Value << circleRendererComponent.Color;
|
out << YAML::Key << "Color" << YAML::Value << circleRendererComponent.Color;
|
||||||
out << YAML::Key << "Radius" << YAML::Value << circleRendererComponent.Radius;
|
out << YAML::Key << "Radius" << YAML::Value << circleRendererComponent.Radius;
|
||||||
out << YAML::Key << "Thickness" << YAML::Value << circleRendererComponent.Thickness;
|
out << YAML::Key << "Thickness" << YAML::Value << circleRendererComponent.Thickness;
|
||||||
@ -316,7 +316,7 @@ namespace Hazel
|
|||||||
out << YAML::Key << "SpriteRendererComponent";
|
out << YAML::Key << "SpriteRendererComponent";
|
||||||
|
|
||||||
out << YAML::BeginMap; // SpriteRendererComponent
|
out << YAML::BeginMap; // SpriteRendererComponent
|
||||||
auto& spriteRendererComponent = entity.GetComponent<SpriteRendererComponent>();
|
const auto& spriteRendererComponent = entity.GetComponent<SpriteRendererComponent>();
|
||||||
out << YAML::Key << "Color" << YAML::Value << spriteRendererComponent.Color;
|
out << YAML::Key << "Color" << YAML::Value << spriteRendererComponent.Color;
|
||||||
if (spriteRendererComponent.Texture)
|
if (spriteRendererComponent.Texture)
|
||||||
out << YAML::Key << "TexturePath" << YAML::Value << spriteRendererComponent.Texture->GetPath();
|
out << YAML::Key << "TexturePath" << YAML::Value << spriteRendererComponent.Texture->GetPath();
|
||||||
@ -329,7 +329,7 @@ namespace Hazel
|
|||||||
out << YAML::Key << "RigidBody2DComponent";
|
out << YAML::Key << "RigidBody2DComponent";
|
||||||
|
|
||||||
out << YAML::BeginMap; // RigidBody2DComponent
|
out << YAML::BeginMap; // RigidBody2DComponent
|
||||||
auto& rb2dComponent = entity.GetComponent<RigidBody2DComponent>();
|
const auto& rb2dComponent = entity.GetComponent<RigidBody2DComponent>();
|
||||||
out << YAML::Key << "BodyType" << YAML::Value << YAML::RigidBody2DTypeToString(rb2dComponent.Type);
|
out << YAML::Key << "BodyType" << YAML::Value << YAML::RigidBody2DTypeToString(rb2dComponent.Type);
|
||||||
out << YAML::Key << "FixedRotation" << YAML::Value << rb2dComponent.FixedRotation;
|
out << YAML::Key << "FixedRotation" << YAML::Value << rb2dComponent.FixedRotation;
|
||||||
out << YAML::EndMap; // RigidBody2DComponent
|
out << YAML::EndMap; // RigidBody2DComponent
|
||||||
@ -340,7 +340,7 @@ namespace Hazel
|
|||||||
out << YAML::Key << "BoxCollider2DComponent";
|
out << YAML::Key << "BoxCollider2DComponent";
|
||||||
|
|
||||||
out << YAML::BeginMap; // BoxCollider2DComponent
|
out << YAML::BeginMap; // BoxCollider2DComponent
|
||||||
auto& bc2dComponent = entity.GetComponent<BoxCollider2DComponent>();
|
const auto& bc2dComponent = entity.GetComponent<BoxCollider2DComponent>();
|
||||||
out << YAML::Key << "Offset" << YAML::Value << bc2dComponent.Offset;
|
out << YAML::Key << "Offset" << YAML::Value << bc2dComponent.Offset;
|
||||||
out << YAML::Key << "Size" << YAML::Value << bc2dComponent.Size;
|
out << YAML::Key << "Size" << YAML::Value << bc2dComponent.Size;
|
||||||
out << YAML::Key << "Density" << YAML::Value << bc2dComponent.Density;
|
out << YAML::Key << "Density" << YAML::Value << bc2dComponent.Density;
|
||||||
@ -356,7 +356,7 @@ namespace Hazel
|
|||||||
out << YAML::Key << "CircleCollider2DComponent";
|
out << YAML::Key << "CircleCollider2DComponent";
|
||||||
|
|
||||||
out << YAML::BeginMap; // CircleCollider2DComponent
|
out << YAML::BeginMap; // CircleCollider2DComponent
|
||||||
auto& cc2dComponent = entity.GetComponent<CircleCollider2DComponent>();
|
const auto& cc2dComponent = entity.GetComponent<CircleCollider2DComponent>();
|
||||||
out << YAML::Key << "Offset" << YAML::Value << cc2dComponent.Offset;
|
out << YAML::Key << "Offset" << YAML::Value << cc2dComponent.Offset;
|
||||||
out << YAML::Key << "Radius" << YAML::Value << cc2dComponent.Radius;
|
out << YAML::Key << "Radius" << YAML::Value << cc2dComponent.Radius;
|
||||||
out << YAML::Key << "Density" << YAML::Value << cc2dComponent.Density;
|
out << YAML::Key << "Density" << YAML::Value << cc2dComponent.Density;
|
||||||
@ -367,6 +367,20 @@ namespace Hazel
|
|||||||
out << YAML::EndMap; // CircleCollider2DComponent
|
out << YAML::EndMap; // CircleCollider2DComponent
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (entity.HasComponent<TextComponent>())
|
||||||
|
{
|
||||||
|
out << YAML::Key << "TextComponent";
|
||||||
|
|
||||||
|
out << YAML::BeginMap; // TextComponent
|
||||||
|
const auto& textComponent = entity.GetComponent<TextComponent>();
|
||||||
|
out << YAML::Key << "TextString" << YAML::Value << textComponent.TextString;
|
||||||
|
// TODO: textComponent.FontAsset
|
||||||
|
out << YAML::Key << "Color" << YAML::Value << textComponent.Color;
|
||||||
|
out << YAML::Key << "Kerning" << YAML::Value << textComponent.Kerning;
|
||||||
|
out << YAML::Key << "LineSpacing" << YAML::Value << textComponent.LineSpacing;
|
||||||
|
out << YAML::EndMap; // TextComponent
|
||||||
|
}
|
||||||
|
|
||||||
out << YAML::EndMap; // entity
|
out << YAML::EndMap; // entity
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -438,15 +452,15 @@ namespace Hazel
|
|||||||
|
|
||||||
HZ_CORE_DEBUG("Deserializing Scene {}", strStream.str());
|
HZ_CORE_DEBUG("Deserializing Scene {}", strStream.str());
|
||||||
|
|
||||||
auto entities = data["Entities"];
|
const auto& entities = data["Entities"];
|
||||||
if (entities)
|
if (entities)
|
||||||
{
|
{
|
||||||
for (auto entity : entities)
|
for (const auto& entity : entities)
|
||||||
{
|
{
|
||||||
uint64_t uuid = entity["Entity"].as<uint64_t>();
|
uint64_t uuid = entity["Entity"].as<uint64_t>();
|
||||||
|
|
||||||
std::string name;
|
std::string name;
|
||||||
auto TagComponent = entity["TagComponent"];
|
const auto& TagComponent = entity["TagComponent"];
|
||||||
if (TagComponent)
|
if (TagComponent)
|
||||||
name = TagComponent["Tag"].as<std::string>();
|
name = TagComponent["Tag"].as<std::string>();
|
||||||
|
|
||||||
@ -454,7 +468,7 @@ namespace Hazel
|
|||||||
|
|
||||||
Entity deserializedEntity = m_Scene->CreateEntityWithUUID(uuid, name);
|
Entity deserializedEntity = m_Scene->CreateEntityWithUUID(uuid, name);
|
||||||
|
|
||||||
auto transformComponent = entity["TransformComponent"];
|
const auto& transformComponent = entity["TransformComponent"];
|
||||||
if (transformComponent)
|
if (transformComponent)
|
||||||
{
|
{
|
||||||
auto& transform = deserializedEntity.GetComponent<TransformComponent>();
|
auto& transform = deserializedEntity.GetComponent<TransformComponent>();
|
||||||
@ -463,7 +477,7 @@ namespace Hazel
|
|||||||
transform.Scale = transformComponent["Scale"].as<glm::vec3>();
|
transform.Scale = transformComponent["Scale"].as<glm::vec3>();
|
||||||
}
|
}
|
||||||
|
|
||||||
auto cameraComponent = entity["CameraComponent"];
|
const auto& cameraComponent = entity["CameraComponent"];
|
||||||
if (cameraComponent)
|
if (cameraComponent)
|
||||||
{
|
{
|
||||||
auto& camera = deserializedEntity.AddComponent<CameraComponent>();
|
auto& camera = deserializedEntity.AddComponent<CameraComponent>();
|
||||||
@ -483,13 +497,13 @@ namespace Hazel
|
|||||||
camera.FixedAspectRatio = cameraProps["FixedAspectRatio"].as<bool>();
|
camera.FixedAspectRatio = cameraProps["FixedAspectRatio"].as<bool>();
|
||||||
}
|
}
|
||||||
|
|
||||||
auto scriptComponent = entity["ScriptComponent"];
|
const auto& scriptComponent = entity["ScriptComponent"];
|
||||||
if (scriptComponent)
|
if (scriptComponent)
|
||||||
{
|
{
|
||||||
auto& sc = deserializedEntity.AddComponent<ScriptComponent>();
|
auto& sc = deserializedEntity.AddComponent<ScriptComponent>();
|
||||||
sc.ClassName = scriptComponent["ClassName"].as<std::string>();
|
sc.ClassName = scriptComponent["ClassName"].as<std::string>();
|
||||||
|
|
||||||
auto scriptFields = scriptComponent["ScriptFields"];
|
const auto& scriptFields = scriptComponent["ScriptFields"];
|
||||||
if (scriptFields)
|
if (scriptFields)
|
||||||
{
|
{
|
||||||
Ref<ScriptClass> entityClass = ScriptEngine::GetEntityClass(sc.ClassName);
|
Ref<ScriptClass> entityClass = ScriptEngine::GetEntityClass(sc.ClassName);
|
||||||
@ -535,7 +549,7 @@ namespace Hazel
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
auto spriteRendererComponent = entity["SpriteRendererComponent"];
|
const auto& spriteRendererComponent = entity["SpriteRendererComponent"];
|
||||||
if (spriteRendererComponent)
|
if (spriteRendererComponent)
|
||||||
{
|
{
|
||||||
auto& sprite = deserializedEntity.AddComponent<SpriteRendererComponent>();
|
auto& sprite = deserializedEntity.AddComponent<SpriteRendererComponent>();
|
||||||
@ -550,7 +564,7 @@ namespace Hazel
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
auto circleRendererComponent = entity["CircleRendererComponent"];
|
const auto& circleRendererComponent = entity["CircleRendererComponent"];
|
||||||
if (circleRendererComponent)
|
if (circleRendererComponent)
|
||||||
{
|
{
|
||||||
auto& circle = deserializedEntity.AddComponent<CircleRendererComponent>();
|
auto& circle = deserializedEntity.AddComponent<CircleRendererComponent>();
|
||||||
@ -560,7 +574,7 @@ namespace Hazel
|
|||||||
circle.Fade = circleRendererComponent["Fade"].as<float>();
|
circle.Fade = circleRendererComponent["Fade"].as<float>();
|
||||||
}
|
}
|
||||||
|
|
||||||
auto rigidBody2DComponent = entity["RigidBody2DComponent"];
|
const auto& rigidBody2DComponent = entity["RigidBody2DComponent"];
|
||||||
if (rigidBody2DComponent)
|
if (rigidBody2DComponent)
|
||||||
{
|
{
|
||||||
auto& rb2d = deserializedEntity.AddComponent<RigidBody2DComponent>();
|
auto& rb2d = deserializedEntity.AddComponent<RigidBody2DComponent>();
|
||||||
@ -568,7 +582,7 @@ namespace Hazel
|
|||||||
rb2d.FixedRotation = rigidBody2DComponent["FixedRotation"].as<bool>();
|
rb2d.FixedRotation = rigidBody2DComponent["FixedRotation"].as<bool>();
|
||||||
}
|
}
|
||||||
|
|
||||||
auto boxCollider2DComponent = entity["BoxCollider2DComponent"];
|
const auto& boxCollider2DComponent = entity["BoxCollider2DComponent"];
|
||||||
if (boxCollider2DComponent)
|
if (boxCollider2DComponent)
|
||||||
{
|
{
|
||||||
auto& bc2d = deserializedEntity.AddComponent<BoxCollider2DComponent>();
|
auto& bc2d = deserializedEntity.AddComponent<BoxCollider2DComponent>();
|
||||||
@ -580,7 +594,7 @@ namespace Hazel
|
|||||||
bc2d.RestitutionThreshold = boxCollider2DComponent["RestitutionThreshold"].as<float>();
|
bc2d.RestitutionThreshold = boxCollider2DComponent["RestitutionThreshold"].as<float>();
|
||||||
}
|
}
|
||||||
|
|
||||||
auto circleCollider2DComponent = entity["CircleCollider2DComponent"];
|
const auto& circleCollider2DComponent = entity["CircleCollider2DComponent"];
|
||||||
if (circleCollider2DComponent)
|
if (circleCollider2DComponent)
|
||||||
{
|
{
|
||||||
auto& cc2d = deserializedEntity.AddComponent<CircleCollider2DComponent>();
|
auto& cc2d = deserializedEntity.AddComponent<CircleCollider2DComponent>();
|
||||||
@ -591,6 +605,17 @@ namespace Hazel
|
|||||||
cc2d.Restitution = circleCollider2DComponent["Restitution"].as<float>();
|
cc2d.Restitution = circleCollider2DComponent["Restitution"].as<float>();
|
||||||
cc2d.RestitutionThreshold = circleCollider2DComponent["RestitutionThreshold"].as<float>();
|
cc2d.RestitutionThreshold = circleCollider2DComponent["RestitutionThreshold"].as<float>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const auto& textComponent = entity["TextComponent"];
|
||||||
|
if (textComponent)
|
||||||
|
{
|
||||||
|
auto& tc = deserializedEntity.AddComponent<TextComponent>();
|
||||||
|
tc.TextString = textComponent["TextString"].as<std::string>();
|
||||||
|
// TODO: tc.FontAsset
|
||||||
|
tc.Color = textComponent["Color"].as<glm::vec4>();
|
||||||
|
tc.Kerning = textComponent["Kerning"].as<float>();
|
||||||
|
tc.LineSpacing = textComponent["LineSpacing"].as<float>();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user