feat: Collider2DBehaviourBase
This commit is contained in:
parent
9e1f38897f
commit
00b80f1a01
|
@ -0,0 +1,27 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
using Syntriax.Engine.Core;
|
||||||
|
using Syntriax.Engine.Core.Abstract;
|
||||||
|
using Syntriax.Engine.Physics2D.Abstract;
|
||||||
|
|
||||||
|
namespace Syntriax.Engine.Physics2D;
|
||||||
|
|
||||||
|
public abstract class Collider2DBehaviourBase : BehaviourOverride, ICollider2D
|
||||||
|
{
|
||||||
|
public Action<ICollider2D, ICollider2D>? OnCollisionPreResolve { get; set; } = null;
|
||||||
|
public Action<ICollider2D, ICollider2D>? OnCollisionResolved { get; set; } = null;
|
||||||
|
|
||||||
|
|
||||||
|
protected IRigidBody2D? _rigidBody2D = null;
|
||||||
|
|
||||||
|
|
||||||
|
public IRigidBody2D? RigidBody2D => _rigidBody2D;
|
||||||
|
|
||||||
|
ITransform IAssignableTransform.Transform => Transform;
|
||||||
|
Action<IAssignableTransform>? IAssignableTransform.OnTransformAssigned { get => GameObject.OnTransformAssigned; set => GameObject.OnTransformAssigned = value; }
|
||||||
|
bool IAssignableTransform.Assign(ITransform transform) => GameObject.Assign(transform);
|
||||||
|
|
||||||
|
public abstract void Recalculate();
|
||||||
|
|
||||||
|
protected override void OnInitialize() => BehaviourController.TryGetBehaviour(out _rigidBody2D);
|
||||||
|
}
|
|
@ -1,26 +1,14 @@
|
||||||
using System;
|
|
||||||
|
|
||||||
using Syntriax.Engine.Core;
|
using Syntriax.Engine.Core;
|
||||||
using Syntriax.Engine.Core.Abstract;
|
|
||||||
using Syntriax.Engine.Physics2D.Abstract;
|
using Syntriax.Engine.Physics2D.Abstract;
|
||||||
using Syntriax.Engine.Physics2D.Primitives;
|
using Syntriax.Engine.Physics2D.Primitives;
|
||||||
|
|
||||||
namespace Syntriax.Engine.Physics2D;
|
namespace Syntriax.Engine.Physics2D;
|
||||||
|
|
||||||
public class Collider2DCircleBehaviour : BehaviourOverride, ICircleCollider2D
|
public class Collider2DCircleBehaviour : Collider2DBehaviourBase, ICircleCollider2D
|
||||||
{
|
{
|
||||||
public Action<ICollider2D, ICollider2D>? OnCollisionPreResolve { get; set; } = null;
|
|
||||||
public Action<ICollider2D, ICollider2D>? OnCollisionResolved { get; set; } = null;
|
|
||||||
|
|
||||||
|
|
||||||
public Circle CircleWorld { get; protected set; } = new(Vector2D.Zero, 1f);
|
public Circle CircleWorld { get; protected set; } = new(Vector2D.Zero, 1f);
|
||||||
public Circle CircleLocal { get; set; } = new(Vector2D.Zero, 1f);
|
public Circle CircleLocal { get; set; } = new(Vector2D.Zero, 1f);
|
||||||
public IRigidBody2D? RigidBody2D { get; set; } = null;
|
|
||||||
|
|
||||||
|
|
||||||
ITransform IAssignableTransform.Transform => Transform;
|
public override void Recalculate() => CircleWorld = Transform.TransformCircle(CircleLocal).Displace(Transform.Position);
|
||||||
Action<IAssignableTransform>? IAssignableTransform.OnTransformAssigned { get => GameObject.OnTransformAssigned; set => GameObject.OnTransformAssigned = value; }
|
|
||||||
bool IAssignableTransform.Assign(ITransform transform) => GameObject.Assign(transform);
|
|
||||||
|
|
||||||
public virtual void Recalculate() => CircleWorld = Transform.TransformCircle(CircleLocal).Displace(Transform.Position);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,27 +1,14 @@
|
||||||
using System;
|
|
||||||
|
|
||||||
using Syntriax.Engine.Core;
|
|
||||||
using Syntriax.Engine.Core.Abstract;
|
|
||||||
using Syntriax.Engine.Physics2D.Abstract;
|
using Syntriax.Engine.Physics2D.Abstract;
|
||||||
using Syntriax.Engine.Physics2D.Primitives;
|
using Syntriax.Engine.Physics2D.Primitives;
|
||||||
|
|
||||||
namespace Syntriax.Engine.Physics2D;
|
namespace Syntriax.Engine.Physics2D;
|
||||||
|
|
||||||
public class Collider2DShapeBehaviour : BehaviourOverride, IShapeCollider2D
|
public class Collider2DShapeBehaviour : Collider2DBehaviourBase, IShapeCollider2D
|
||||||
{
|
{
|
||||||
public Action<ICollider2D, ICollider2D>? OnCollisionPreResolve { get; set; } = null;
|
|
||||||
public Action<ICollider2D, ICollider2D>? OnCollisionResolved { get; set; } = null;
|
|
||||||
|
|
||||||
|
|
||||||
public Shape ShapeWorld => _shapeWorld;
|
public Shape ShapeWorld => _shapeWorld;
|
||||||
public Shape ShapeLocal { get; set; } = new([new(1f, 1f), new(-1f, 1f), new(-1f, -1f), new(1f, -1f)]);
|
public Shape ShapeLocal { get; set; } = new([new(1f, 1f), new(-1f, 1f), new(-1f, -1f), new(1f, -1f)]);
|
||||||
public IRigidBody2D? RigidBody2D { get; set; } = null;
|
|
||||||
|
|
||||||
protected Shape _shapeWorld = new([new(1f, 1f), new(-1f, 1f), new(-1f, -1f), new(1f, -1f)]);
|
protected Shape _shapeWorld = new([new(1f, 1f), new(-1f, 1f), new(-1f, -1f), new(1f, -1f)]);
|
||||||
|
|
||||||
ITransform IAssignableTransform.Transform => Transform;
|
public override void Recalculate() => Transform.TransformShape(ShapeLocal, ref _shapeWorld);
|
||||||
Action<IAssignableTransform>? IAssignableTransform.OnTransformAssigned { get => GameObject.OnTransformAssigned; set => GameObject.OnTransformAssigned = value; }
|
|
||||||
bool IAssignableTransform.Assign(ITransform transform) => GameObject.Assign(transform);
|
|
||||||
|
|
||||||
public virtual void Recalculate() => Transform.TransformShape(ShapeLocal, ref _shapeWorld);
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue