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? OnCollisionPreResolve { get; set; } = null; public Action? OnCollisionResolved { get; set; } = null; protected IRigidBody2D? _rigidBody2D = null; public IRigidBody2D? RigidBody2D => _rigidBody2D; ITransform IAssignableTransform.Transform => Transform; Action? 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); BehaviourController.OnBehaviourAdded += OnBehaviourAddedToController; BehaviourController.OnBehaviourRemoved += OnBehaviourRemovedFromController; } private void OnBehaviourAddedToController(IBehaviourController _, IBehaviour behaviour) { if (behaviour is IRigidBody2D rigidbody) _rigidBody2D = rigidbody; } private void OnBehaviourRemovedFromController(IBehaviourController _, IBehaviour behaviour) { if (behaviour is IRigidBody2D _) _rigidBody2D = null; } protected override void OnFinalize() { BehaviourController.OnBehaviourAdded -= OnBehaviourAddedToController; BehaviourController.OnBehaviourRemoved -= OnBehaviourRemovedFromController; ; } }