From bb7bc41e6257841795015e5114eb3df27b21469a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20L=C3=BCbe=C3=9F?= Date: Mon, 15 Apr 2024 12:35:56 +0200 Subject: [PATCH] Kind of prevent creating invalid colliders sometimes --- GlitchyEngine/src/World/Components/Components.bf | 5 +++-- GlitchyEngine/src/World/Entity.bf | 13 +++++++++++++ GlitchyEngine/src/World/Scene.bf | 8 +++++--- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/GlitchyEngine/src/World/Components/Components.bf b/GlitchyEngine/src/World/Components/Components.bf index 08f2bc1..3e02122 100644 --- a/GlitchyEngine/src/World/Components/Components.bf +++ b/GlitchyEngine/src/World/Components/Components.bf @@ -640,8 +640,9 @@ namespace GlitchyEngine.World public float Restitution = 0.0f; public float RestitutionThreshold = 0.5f; - public float2[8] Vertices = .(); - public int8 VertexCount = 3; + // initialize with a well formed shape + public float2[8] Vertices = .(.(-0.5f, -0.5f), .(0.5f, -0.5f), .(0.5f, 0.5f), .(-0.5f, 0.5f),); + public int8 VertexCount = 4; private int _runtimeFixture = 0; diff --git a/GlitchyEngine/src/World/Entity.bf b/GlitchyEngine/src/World/Entity.bf index f0b40c0..4e7a50d 100644 --- a/GlitchyEngine/src/World/Entity.bf +++ b/GlitchyEngine/src/World/Entity.bf @@ -103,6 +103,19 @@ namespace GlitchyEngine.World return component; } + public T* AddComponent(in T value) where T: struct, new, ICopyComponent + { + Log.EngineLogger.AssertDebug(!HasComponent(), scope $"Entity already has component."); + + T* component = _scene._ecsWorld.AssignComponent(_entity, value); + + T.Copy(&value, component); + + _scene.[Friend]OnComponentAdded(this, typeof(T), component); + + return component; + } + public T* GetComponent() where T: struct, new { Log.EngineLogger.AssertDebug(HasComponent(), "Entity doesn't have component!"); diff --git a/GlitchyEngine/src/World/Scene.bf b/GlitchyEngine/src/World/Scene.bf index f21bfd2..bd2a0ab 100644 --- a/GlitchyEngine/src/World/Scene.bf +++ b/GlitchyEngine/src/World/Scene.bf @@ -240,10 +240,12 @@ namespace GlitchyEngine.World if (!target.TryGetComponent(out targetComponent)) { - targetComponent = target.AddComponent(); + targetComponent = target.AddComponent(*sourceComponent); + } + else + { + TComponent.Copy(sourceComponent, targetComponent); } - - TComponent.Copy(sourceComponent, targetComponent); } }