public bool IsAtCeiling(IBoundingBox entity, IEnumerable<IBoundingBox> entities, Func<IBoundingBox, bool> ground)
{
var entityExtended = new BoundingBox
{
Width = entity.Width,
Height = entity.Height,
XSpeed = entity.XSpeed,
YSpeed = entity.YSpeed
};
entityExtended.Transform.Assign(_transformUtilities.CreateFromModifiedSRTTransform(
entity.Transform,
Vector3.One,
Quaternion.Identity,
new Vector3(0, -1, 0)));
var collidableEntities = entities.Where(ground).Where(x => x != entity).ToArray();
foreach (var collidableEntity in collidableEntities)
{
if (this._boundingBoxUtilities.Overlaps(entityExtended, collidableEntity))
{
if (collidableEntity.Transform.LocalPosition.Y < entity.Transform.LocalPosition.Y)
{
return true;
}
}
}
return false;
}