fix: collider2Ds not updating collider after new assignment

This commit is contained in:
Syntriax 2025-04-08 23:18:33 +03:00
parent 2535a1d6ec
commit 26a80452bc
3 changed files with 25 additions and 6 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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)