本文整理汇总了C#中Direction.AtBack方法的典型用法代码示例。如果您正苦于以下问题:C# Direction.AtBack方法的具体用法?C# Direction.AtBack怎么用?C# Direction.AtBack使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Direction
的用法示例。
在下文中一共展示了Direction.AtBack方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetSideCollisions
private IEnumerable<CollisionEvent> GetSideCollisions(IBody movingBody, Direction movingSideDirection, Vector2 path)
{
var axis = movingSideDirection.ToAxis();
var sidePosition = movingBody.GetBound(movingSideDirection);
var counterDirection = movingSideDirection.AtBack();
var pathForward = path.GetComponent(movingSideDirection);
if (pathForward == 0)
return Enumerable.Empty<CollisionEvent>();
var pathStartInclusive = pathForward > 0;
var pathEndInclusive = pathForward < 0;
var pathLeft = path.GetComponent(movingSideDirection.AtLeft());
var sideStartInclusive = pathLeft < 0;
var sideEndInclusive = pathLeft > 0;
var pathAlong = path.GetComponent(axis);
var pathAcross = path.GetComponent(axis.Orthogonal());
var collisionType = pathForward >= 0 ? CollisionType.Entering : CollisionType.Leaving;
var incidenceTangent = pathLeft/pathForward; //todo maybe pathLeft negate....
var movedSidePositionRange = new Range(sidePosition, pathStartInclusive, sidePosition + pathAlong, pathEndInclusive);
var movedSideRange = movingBody.GetBoundRange(movingSideDirection, sideStartInclusive, sideEndInclusive);
var counterSides = _sideRepository.GetSides(counterDirection, movedSidePositionRange, movedSideRange, pathAlong > 0);
return (from counterSide in counterSides //todo query bodyBounds more optimal!!! use special sorted structs
where counterSide.Body != movingBody && movedSidePositionRange.Contains(counterSide.Position)
let pathAlongToCounterSide = counterSide.Position - sidePosition
let pathAcrossToCounterSide = pathAcross * pathAlongToCounterSide / pathAlong
where movedSideRange.IsIntersect(new Range(counterSide.Begin, sideStartInclusive, counterSide.End, sideEndInclusive))
group counterSide.Body by pathAlongToCounterSide into g
select new CollisionEvent
{
Collision = new Collision
{
Bodies = g.ToArray(),
Type = collisionType,
NormalDirection = counterDirection,
IncidenceTangent = incidenceTangent
},
Traversed = g.Key / pathAlong,
});
}