Split up sprite and circle renderer component

This commit is contained in:
Simon Lübeß
2023-03-19 12:19:22 +01:00
parent edcec02e94
commit 2ba4b68e09
12 changed files with 111 additions and 46 deletions
+6 -4
View File
@@ -875,10 +875,12 @@ namespace GlitchyEngine.Renderer
public static void DrawSprite(Matrix transform, SpriteRendererComponent* spriteRenderer, uint32 entityId)
{
if (spriteRenderer.IsCircle)
DrawCircle(transform, spriteRenderer.Sprite.Get() ?? s_whiteTexture, spriteRenderer.Color, 1.0f, spriteRenderer.UvTransform, entityId);
else
DrawQuad(transform, spriteRenderer.Sprite.Get() ?? s_whiteTexture, spriteRenderer.Color, spriteRenderer.UvTransform, entityId);
DrawQuad(transform, spriteRenderer.Sprite.Get() ?? s_whiteTexture, spriteRenderer.Color, spriteRenderer.UvTransform, entityId);
}
public static void DrawCircle(Matrix transform, CircleRendererComponent* spriteRenderer, uint32 entityId)
{
DrawCircle(transform, spriteRenderer.Sprite.Get() ?? s_whiteTexture, spriteRenderer.Color, spriteRenderer.InnerRadius, spriteRenderer.UvTransform, entityId);
}
// Textured quad pivot
@@ -22,7 +22,7 @@ namespace GlitchyEngine.World
{
public readonly UUID ID;
/// Create aa new IDComponent with a random UUID.
/// Create a new IDComponent with a random UUID.
public this()
{
ID = UUID();
@@ -52,7 +52,25 @@ namespace GlitchyEngine.World
public ColorRGBA Color = .White;
public Vector4 UvTransform = .(0, 0, 1, 1);
public bool IsCircle = false;
public this()
{
}
public this(ColorRGBA color)
{
Color = color;
}
}
[Component("Circle Renderer")]
struct CircleRendererComponent
{
public AssetHandle<Texture2D> Sprite = .Invalid;
public ColorRGBA Color = .White;
public Vector4 UvTransform = .(0, 0, 1, 1);
public float InnerRadius = 0.0f;
public this()
{
@@ -62,11 +80,6 @@ namespace GlitchyEngine.World
{
Color = color;
}
/*public void Dispose()
{
_sprite?.ReleaseRef();
}*/
}
struct SceneCamera : Camera
@@ -8,15 +8,13 @@ namespace GlitchyEngine.World
public StringView Name
{
get => _name;
set mut => SetName(value);
}
public void SetName(StringView name) mut
{
if (_name == null)
_name = new String(name);
else
_name.Set(name);
set mut
{
if (_name == null)
_name = new String(value);
else
_name.Set(value);
}
}
public void Dispose() mut
+12 -1
View File
@@ -94,6 +94,7 @@ namespace GlitchyEngine.World
CopyComponents<MeshComponent>(this, target);
CopyComponents<EditorComponent>(this, target);
CopyComponents<SpriteRendererComponent>(this, target);
CopyComponents<CircleRendererComponent>(this, target);
CopyComponents<CameraComponent>(this, target);
CopyComponents<NativeScriptComponent>(this, target);
CopyComponents<LightComponent>(this, target);
@@ -309,6 +310,11 @@ namespace GlitchyEngine.World
Renderer2D.DrawSprite(transform.WorldTransform, sprite, entity.Index);
}
for (var (entity, transform, circle) in _ecsWorld.Enumerate<TransformComponent, CircleRendererComponent>())
{
Renderer2D.DrawCircle(transform.WorldTransform, circle, entity.Index);
}
Renderer2D.EndScene();
// Gamma correct composit target and draw it into viewport
@@ -372,6 +378,11 @@ namespace GlitchyEngine.World
Renderer2D.DrawSprite(transform.WorldTransform, sprite, entity.Index);
}
for (var (entity, transform, circle) in _ecsWorld.Enumerate<TransformComponent, CircleRendererComponent>())
{
Renderer2D.DrawCircle(transform.WorldTransform, circle, entity.Index);
}
Renderer2D.EndScene();
Renderer2D.BeginScene(camera, .BackToFront);
@@ -406,7 +417,7 @@ namespace GlitchyEngine.World
entity.AddComponent<TransformComponent>();
let nameComponent = entity.AddComponent<NameComponent>();
nameComponent.SetName(name.IsEmpty ? "Entity" : name);
nameComponent.Name = (name.IsEmpty ? "Entity" : name);
// If no id is given generate a random one.
IDComponent idComponent = (id == default) ? IDComponent() : IDComponent(id);
+20 -7
View File
@@ -87,10 +87,14 @@ class SceneSerializer
SerializeComponent<SpriteRendererComponent>(writer, entity, "SpriteRendererComponent", scope (component) =>
{
Serialize.Value(writer, "Color", component.Color);
Serialize.Value(writer, "IsCircle", component.IsCircle);
Serialize.Value(writer, "Sprite", component.Sprite);
Serialize.Value(writer, "UvTransform", component.UvTransform);
});
SerializeComponent<CircleRendererComponent>(writer, entity, "CircleRendererComponent", scope (component) =>
{
Serialize.Value(writer, "Color", component.Color);
Serialize.Value(writer, "InnerRadius", component.InnerRadius);
Serialize.Value(writer, "Sprite", component.Sprite);
Serialize.Value(writer, "UvTransform", component.UvTransform);
});
@@ -325,7 +329,7 @@ class SceneSerializer
Deserialize.Value(reader, "Name", out name);
component.SetName(name);
component.Name = name;
delete name;
@@ -336,12 +340,21 @@ class SceneSerializer
{
Try!(Deserialize.Value(reader, "Color", out component.Color));
reader.EntryEnd();
Try!(Deserialize.Value(reader, "IsCircle", out component.IsCircle));
reader.EntryEnd();
Try!(Deserialize.Value(reader, "Sprite", out component.Sprite));
reader.EntryEnd();
Try!(Deserialize.Value(reader, "UvTransform", out component.UvTransform));
return .Ok;
}));
case "CircleRendererComponent":
Try!(DeserializeComponent<CircleRendererComponent>(reader, entity, scope (component) =>
{
Try!(Deserialize.Value(reader, "Color", out component.Color));
reader.EntryEnd();
Try!(Deserialize.Value(reader, "InnerRadius", out component.InnerRadius));
reader.EntryEnd();
Try!(Deserialize.Value(reader, "Sprite", out component.Sprite));
reader.EntryEnd();
Try!(Deserialize.Value(reader, "UvTransform", out component.UvTransform));
return .Ok;