PongFE/PongFE/Engines/CollisionEngine.cs

37 lines
1.0 KiB
C#

using Encompass;
using PongFE.Components;
using PongFE.Enums;
using PongFE.Messages;
namespace PongFE.Engines
{
[Reads(
typeof(CanCauseBounceComponent),
typeof(CanBeBouncedComponent)
)]
[Receives(typeof(CollisionMessage))]
[Sends(typeof(BounceMessage))]
public class CollisionEngine : Engine
{
public override void Update(double dt)
{
foreach (ref readonly var message in ReadMessages<CollisionMessage>())
{
CheckBounce(message.EntityA, message.EntityB, message.HitOrientation);
CheckBounce(message.EntityB, message.EntityA, message.HitOrientation);
}
}
private void CheckBounce(Entity a, Entity b, HitOrientation hitOrientation)
{
if (HasComponent<CanCauseBounceComponent>(a))
{
if (HasComponent<CanBeBouncedComponent>(b))
{
SendMessage(new BounceMessage(b, hitOrientation));
}
}
}
}
}