mirror of
https://github.com/aharabada/glitchy-engine-beef.git
synced 2026-09-05 13:01:52 +00:00
Split up sprite and circle renderer component
This commit is contained in:
@@ -9,11 +9,10 @@
|
|||||||
SpriteRendererComponent = {
|
SpriteRendererComponent = {
|
||||||
Color = {
|
Color = {
|
||||||
R = 0,
|
R = 0,
|
||||||
G = 0.5511778,
|
G = 0.55117774,
|
||||||
B = 0.32878691,
|
B = 0.32878688,
|
||||||
A = 1
|
A = 1
|
||||||
},
|
},
|
||||||
IsCircle = false,
|
|
||||||
Sprite = "Textures/TestMat/rustediron2_albedo.png",
|
Sprite = "Textures/TestMat/rustediron2_albedo.png",
|
||||||
UvTransform = {
|
UvTransform = {
|
||||||
X = 0,
|
X = 0,
|
||||||
@@ -72,11 +71,10 @@
|
|||||||
SpriteRendererComponent = {
|
SpriteRendererComponent = {
|
||||||
Color = {
|
Color = {
|
||||||
R = 1,
|
R = 1,
|
||||||
G = 0.941886246,
|
G = 0.941886365,
|
||||||
B = 0.401484907,
|
B = 0.401484847,
|
||||||
A = 1
|
A = 1
|
||||||
},
|
},
|
||||||
IsCircle = false,
|
|
||||||
Sprite = "",
|
Sprite = "",
|
||||||
UvTransform = {
|
UvTransform = {
|
||||||
X = 0,
|
X = 0,
|
||||||
@@ -164,7 +162,7 @@
|
|||||||
OrthographicHeight = 10,
|
OrthographicHeight = 10,
|
||||||
OrthographicNearPlane = 0,
|
OrthographicNearPlane = 0,
|
||||||
OrthographicFarPlane = 10,
|
OrthographicFarPlane = 10,
|
||||||
AspectRatio = 2.19888878,
|
AspectRatio = 3.22169805,
|
||||||
FixedAspectRatio = false
|
FixedAspectRatio = false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -173,14 +171,14 @@
|
|||||||
NameComponent = {
|
NameComponent = {
|
||||||
Name = "Circle"
|
Name = "Circle"
|
||||||
},
|
},
|
||||||
SpriteRendererComponent = {
|
CircleRendererComponent = {
|
||||||
Color = {
|
Color = {
|
||||||
R = 0.299884498,
|
R = 1,
|
||||||
G = 0.972924948,
|
G = 0,
|
||||||
B = 1,
|
B = 0,
|
||||||
A = 1
|
A = 1
|
||||||
},
|
},
|
||||||
IsCircle = true,
|
InnerRadius = 0.300000012,
|
||||||
Sprite = "",
|
Sprite = "",
|
||||||
UvTransform = {
|
UvTransform = {
|
||||||
X = 0,
|
X = 0,
|
||||||
@@ -191,8 +189,8 @@
|
|||||||
},
|
},
|
||||||
TransformComponent = {
|
TransformComponent = {
|
||||||
Position = {
|
Position = {
|
||||||
X = -0.12120305,
|
X = -0.12120308,
|
||||||
Y = 0.660160244,
|
Y = 0.660160363,
|
||||||
Z = 0
|
Z = 0
|
||||||
},
|
},
|
||||||
Rotation = {
|
Rotation = {
|
||||||
@@ -251,9 +249,9 @@
|
|||||||
Z = 1
|
Z = 1
|
||||||
},
|
},
|
||||||
EditorEulerRotation = {
|
EditorEulerRotation = {
|
||||||
X = 1.09089446,
|
X = 1.0908947,
|
||||||
Y = -0.340793997,
|
Y = -0.340793997,
|
||||||
Z = 0.160857946
|
Z = 0.160857916
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
LightComponent = {
|
LightComponent = {
|
||||||
@@ -262,7 +260,7 @@
|
|||||||
Color = {
|
Color = {
|
||||||
R = 0.985467017,
|
R = 0.985467017,
|
||||||
G = 1,
|
G = 1,
|
||||||
B = 0.569978774
|
B = 0.569978654
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -61,6 +61,7 @@ namespace GlitchyEditor.EditWindows
|
|||||||
ShowComponentEditor<TransformComponent>("Transform", entity, => ShowTransformComponentEditor);
|
ShowComponentEditor<TransformComponent>("Transform", entity, => ShowTransformComponentEditor);
|
||||||
ShowComponentEditor<CameraComponent>("Camera", entity, => ShowCameraComponentEditor, => ShowComponentContextMenu<CameraComponent>);
|
ShowComponentEditor<CameraComponent>("Camera", entity, => ShowCameraComponentEditor, => ShowComponentContextMenu<CameraComponent>);
|
||||||
ShowComponentEditor<SpriteRendererComponent>("Sprite Renderer", entity, => ShowSpriteRendererComponentEditor, => ShowComponentContextMenu<SpriteRendererComponent>);
|
ShowComponentEditor<SpriteRendererComponent>("Sprite Renderer", entity, => ShowSpriteRendererComponentEditor, => ShowComponentContextMenu<SpriteRendererComponent>);
|
||||||
|
ShowComponentEditor<CircleRendererComponent>("Circle Renderer", entity, => ShowCircleRendererComponentEditor, => ShowComponentContextMenu<CircleRendererComponent>);
|
||||||
ShowComponentEditor<MeshRendererComponent>("Mesh Renderer", entity, => ShowMeshRendererComponentEditor, => ShowComponentContextMenu<MeshRendererComponent>);
|
ShowComponentEditor<MeshRendererComponent>("Mesh Renderer", entity, => ShowMeshRendererComponentEditor, => ShowComponentContextMenu<MeshRendererComponent>);
|
||||||
ShowComponentEditor<LightComponent>("Light", entity, => ShowLightComponentEditor, => ShowComponentContextMenu<LightComponent>);
|
ShowComponentEditor<LightComponent>("Light", entity, => ShowLightComponentEditor, => ShowComponentContextMenu<LightComponent>);
|
||||||
ShowComponentEditor<MeshComponent>("Mesh", entity, => ShowMeshComponentEditor, => ShowComponentContextMenu<MeshComponent>);
|
ShowComponentEditor<MeshComponent>("Mesh", entity, => ShowMeshComponentEditor, => ShowComponentContextMenu<MeshComponent>);
|
||||||
@@ -275,8 +276,36 @@ namespace GlitchyEditor.EditWindows
|
|||||||
|
|
||||||
|
|
||||||
ImGui.EditVector<4>("UV Transform", ref *(float[4]*)&spriteRendererComponent.UvTransform);
|
ImGui.EditVector<4>("UV Transform", ref *(float[4]*)&spriteRendererComponent.UvTransform);
|
||||||
|
}
|
||||||
|
|
||||||
ImGui.Checkbox("Is Circle", &spriteRendererComponent.IsCircle);
|
private static void ShowCircleRendererComponentEditor(Entity entity, CircleRendererComponent* circleRendererComponent)
|
||||||
|
{
|
||||||
|
ColorRGBA spriteColor = ColorRGBA.LinearToSRGB(circleRendererComponent.Color);
|
||||||
|
if (ImGui.ColorEdit4("Color", ref spriteColor))
|
||||||
|
circleRendererComponent.Color = ColorRGBA.SRgbToLinear(spriteColor);
|
||||||
|
|
||||||
|
ImGui.Button("Texture");
|
||||||
|
|
||||||
|
if (ImGui.BeginDragDropTarget())
|
||||||
|
{
|
||||||
|
ImGui.Payload* payload = ImGui.AcceptDragDropPayload("CONTENT_BROWSER_ITEM");
|
||||||
|
|
||||||
|
if (payload != null)
|
||||||
|
{
|
||||||
|
Log.EngineLogger.Warning("");
|
||||||
|
|
||||||
|
StringView path = .((char8*)payload.Data, (int)payload.DataSize);
|
||||||
|
|
||||||
|
circleRendererComponent.Sprite = Content.LoadAsset(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
ImGui.EndDragDropTarget();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ImGui.EditVector<4>("UV Transform", ref *(float[4]*)&circleRendererComponent.UvTransform);
|
||||||
|
|
||||||
|
ImGui.DragFloat("Inner Radius", &circleRendererComponent.InnerRadius, 0.1f, 0.0f, 1.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void ShowMeshRendererComponentEditor(Entity entity, MeshRendererComponent* meshRendererComponent)
|
private static void ShowMeshRendererComponentEditor(Entity entity, MeshRendererComponent* meshRendererComponent)
|
||||||
@@ -548,6 +577,7 @@ namespace GlitchyEditor.EditWindows
|
|||||||
|
|
||||||
ShowComponentButton<CameraComponent>("Camera");
|
ShowComponentButton<CameraComponent>("Camera");
|
||||||
ShowComponentButton<SpriteRendererComponent>("Sprite Renderer");
|
ShowComponentButton<SpriteRendererComponent>("Sprite Renderer");
|
||||||
|
ShowComponentButton<CircleRendererComponent>("Circle Renderer");
|
||||||
ShowComponentButton<LightComponent>("Light");
|
ShowComponentButton<LightComponent>("Light");
|
||||||
ShowComponentButton<Rigidbody2DComponent>("Rigidbody 2D");
|
ShowComponentButton<Rigidbody2DComponent>("Rigidbody 2D");
|
||||||
ShowComponentButton<BoxCollider2DComponent>("Box collider 2D");
|
ShowComponentButton<BoxCollider2DComponent>("Box collider 2D");
|
||||||
|
|||||||
@@ -875,10 +875,12 @@ namespace GlitchyEngine.Renderer
|
|||||||
|
|
||||||
public static void DrawSprite(Matrix transform, SpriteRendererComponent* spriteRenderer, uint32 entityId)
|
public static void DrawSprite(Matrix transform, SpriteRendererComponent* spriteRenderer, uint32 entityId)
|
||||||
{
|
{
|
||||||
if (spriteRenderer.IsCircle)
|
DrawQuad(transform, spriteRenderer.Sprite.Get() ?? s_whiteTexture, spriteRenderer.Color, spriteRenderer.UvTransform, entityId);
|
||||||
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);
|
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
|
// Textured quad pivot
|
||||||
|
|||||||
+20
-7
@@ -22,7 +22,7 @@ namespace GlitchyEngine.World
|
|||||||
{
|
{
|
||||||
public readonly UUID ID;
|
public readonly UUID ID;
|
||||||
|
|
||||||
/// Create aa new IDComponent with a random UUID.
|
/// Create a new IDComponent with a random UUID.
|
||||||
public this()
|
public this()
|
||||||
{
|
{
|
||||||
ID = UUID();
|
ID = UUID();
|
||||||
@@ -52,7 +52,25 @@ namespace GlitchyEngine.World
|
|||||||
public ColorRGBA Color = .White;
|
public ColorRGBA Color = .White;
|
||||||
public Vector4 UvTransform = .(0, 0, 1, 1);
|
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()
|
public this()
|
||||||
{
|
{
|
||||||
@@ -62,11 +80,6 @@ namespace GlitchyEngine.World
|
|||||||
{
|
{
|
||||||
Color = color;
|
Color = color;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*public void Dispose()
|
|
||||||
{
|
|
||||||
_sprite?.ReleaseRef();
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct SceneCamera : Camera
|
struct SceneCamera : Camera
|
||||||
+7
-9
@@ -8,15 +8,13 @@ namespace GlitchyEngine.World
|
|||||||
public StringView Name
|
public StringView Name
|
||||||
{
|
{
|
||||||
get => _name;
|
get => _name;
|
||||||
set mut => SetName(value);
|
set mut
|
||||||
}
|
{
|
||||||
|
if (_name == null)
|
||||||
public void SetName(StringView name) mut
|
_name = new String(value);
|
||||||
{
|
else
|
||||||
if (_name == null)
|
_name.Set(value);
|
||||||
_name = new String(name);
|
}
|
||||||
else
|
|
||||||
_name.Set(name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose() mut
|
public void Dispose() mut
|
||||||
@@ -94,6 +94,7 @@ namespace GlitchyEngine.World
|
|||||||
CopyComponents<MeshComponent>(this, target);
|
CopyComponents<MeshComponent>(this, target);
|
||||||
CopyComponents<EditorComponent>(this, target);
|
CopyComponents<EditorComponent>(this, target);
|
||||||
CopyComponents<SpriteRendererComponent>(this, target);
|
CopyComponents<SpriteRendererComponent>(this, target);
|
||||||
|
CopyComponents<CircleRendererComponent>(this, target);
|
||||||
CopyComponents<CameraComponent>(this, target);
|
CopyComponents<CameraComponent>(this, target);
|
||||||
CopyComponents<NativeScriptComponent>(this, target);
|
CopyComponents<NativeScriptComponent>(this, target);
|
||||||
CopyComponents<LightComponent>(this, target);
|
CopyComponents<LightComponent>(this, target);
|
||||||
@@ -309,6 +310,11 @@ namespace GlitchyEngine.World
|
|||||||
Renderer2D.DrawSprite(transform.WorldTransform, sprite, entity.Index);
|
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.EndScene();
|
||||||
|
|
||||||
// Gamma correct composit target and draw it into viewport
|
// Gamma correct composit target and draw it into viewport
|
||||||
@@ -372,6 +378,11 @@ namespace GlitchyEngine.World
|
|||||||
Renderer2D.DrawSprite(transform.WorldTransform, sprite, entity.Index);
|
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.EndScene();
|
||||||
|
|
||||||
Renderer2D.BeginScene(camera, .BackToFront);
|
Renderer2D.BeginScene(camera, .BackToFront);
|
||||||
@@ -406,7 +417,7 @@ namespace GlitchyEngine.World
|
|||||||
entity.AddComponent<TransformComponent>();
|
entity.AddComponent<TransformComponent>();
|
||||||
|
|
||||||
let nameComponent = entity.AddComponent<NameComponent>();
|
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.
|
// If no id is given generate a random one.
|
||||||
IDComponent idComponent = (id == default) ? IDComponent() : IDComponent(id);
|
IDComponent idComponent = (id == default) ? IDComponent() : IDComponent(id);
|
||||||
|
|||||||
@@ -87,10 +87,14 @@ class SceneSerializer
|
|||||||
SerializeComponent<SpriteRendererComponent>(writer, entity, "SpriteRendererComponent", scope (component) =>
|
SerializeComponent<SpriteRendererComponent>(writer, entity, "SpriteRendererComponent", scope (component) =>
|
||||||
{
|
{
|
||||||
Serialize.Value(writer, "Color", component.Color);
|
Serialize.Value(writer, "Color", component.Color);
|
||||||
Serialize.Value(writer, "IsCircle", component.IsCircle);
|
|
||||||
|
|
||||||
Serialize.Value(writer, "Sprite", component.Sprite);
|
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);
|
Serialize.Value(writer, "UvTransform", component.UvTransform);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -325,7 +329,7 @@ class SceneSerializer
|
|||||||
|
|
||||||
Deserialize.Value(reader, "Name", out name);
|
Deserialize.Value(reader, "Name", out name);
|
||||||
|
|
||||||
component.SetName(name);
|
component.Name = name;
|
||||||
|
|
||||||
delete name;
|
delete name;
|
||||||
|
|
||||||
@@ -336,12 +340,21 @@ class SceneSerializer
|
|||||||
{
|
{
|
||||||
Try!(Deserialize.Value(reader, "Color", out component.Color));
|
Try!(Deserialize.Value(reader, "Color", out component.Color));
|
||||||
reader.EntryEnd();
|
reader.EntryEnd();
|
||||||
Try!(Deserialize.Value(reader, "IsCircle", out component.IsCircle));
|
|
||||||
reader.EntryEnd();
|
|
||||||
|
|
||||||
Try!(Deserialize.Value(reader, "Sprite", out component.Sprite));
|
Try!(Deserialize.Value(reader, "Sprite", out component.Sprite));
|
||||||
reader.EntryEnd();
|
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));
|
Try!(Deserialize.Value(reader, "UvTransform", out component.UvTransform));
|
||||||
|
|
||||||
return .Ok;
|
return .Ok;
|
||||||
|
|||||||
Reference in New Issue
Block a user