diff --git a/Engine.Physics2D/Collider2DBehaviourBase.cs b/Engine.Physics2D/Collider2DBehaviourBase.cs index 1b64136..f5cc052 100644 --- a/Engine.Physics2D/Collider2DBehaviourBase.cs +++ b/Engine.Physics2D/Collider2DBehaviourBase.cs @@ -10,7 +10,7 @@ public abstract class Collider2DBehaviourBase : Behaviour2D, ICollider2D public event ICollider2D.CollisionResolvedEventHandler? OnCollisionResolved = null; public event ICollider2D.TriggeredEventHandler? OnTriggered = null; - protected bool NeedsRecalculation { get; private set; } = true; + protected bool NeedsRecalculation { get; set; } = true; protected IRigidBody2D? _rigidBody2D = null; public IRigidBody2D? RigidBody2D => _rigidBody2D; diff --git a/Engine.Physics2D/Collider2DCircleBehaviour.cs b/Engine.Physics2D/Collider2DCircleBehaviour.cs index ebf7766..be7fbc8 100644 --- a/Engine.Physics2D/Collider2DCircleBehaviour.cs +++ b/Engine.Physics2D/Collider2DCircleBehaviour.cs @@ -6,9 +6,19 @@ namespace Syntriax.Engine.Physics2D; public class Collider2DCircleBehaviour : Collider2DBehaviourBase, ICircleCollider2D { public Circle CircleWorld { get; protected set; } = Circle.UnitCircle; - public Circle CircleLocal { get; set; } = Circle.UnitCircle; + public Circle CircleLocal + { + get => _circleLocal; + set + { + _circleLocal = value; + NeedsRecalculation = true; + } + } - public override void CalculateCollider() => CircleWorld = Transform.TransformCircle(CircleLocal); + private Circle _circleLocal = Circle.UnitCircle; + + public override void CalculateCollider() => CircleWorld = Transform.Transform(CircleLocal); public Collider2DCircleBehaviour() { } public Collider2DCircleBehaviour(Circle circle) => CircleLocal = circle; diff --git a/Engine.Physics2D/Collider2DShapeBehaviour.cs b/Engine.Physics2D/Collider2DShapeBehaviour.cs index 178d490..6120de0 100644 --- a/Engine.Physics2D/Collider2DShapeBehaviour.cs +++ b/Engine.Physics2D/Collider2DShapeBehaviour.cs @@ -6,11 +6,20 @@ namespace Syntriax.Engine.Physics2D; public class Collider2DShapeBehaviour : Collider2DBehaviourBase, IShapeCollider2D { public Shape2D ShapeWorld { get => _shapeWorld; protected set => _shapeWorld = value; } - public Shape2D ShapeLocal { get; set; } = Shape2D.Square; + public Shape2D ShapeLocal + { + get => _shapeLocal; + set + { + _shapeLocal = value; + NeedsRecalculation = true; + } + } - private Shape2D _shapeWorld = Shape2D.Square.CreateCopy(); + private Shape2D _shapeWorld = Shape2D.Square; + private Shape2D _shapeLocal = Shape2D.Square; - public override void CalculateCollider() => Transform.TransformShape(ShapeLocal, ref _shapeWorld); + public override void CalculateCollider() => ShapeLocal.Transform(Transform, ref _shapeWorld); public Collider2DShapeBehaviour() { } public Collider2DShapeBehaviour(Shape2D shape)