Ejemplo n.º 1
0
        public Vector3 GetCollision()
        {
            Vector3 collisionVector = Vector3.Zero;
            float   distanceToCover = IsNavigatingToDestination ? 0f : 100f;
            var     CollisionMapForEachPositionBodyLocation = GetCollisionMapForEachPositionBodyLocation(distanceToCover);

            if (CollisionMapForEachPositionBodyLocation.Count > 0)
            {
                float   minDistance = CollisionMapForEachPositionBodyLocation.Values.Max(x => x.Item2);
                Vector3 offset      = Vector3.Zero;
                PositionBodyLocation collidingLocation = PositionBodyLocation.None;
                if (this.Direction == Direction.Upward)
                {
                    collisionVector   = CollisionMapForEachPositionBodyLocation[PositionBodyLocation.Top].Item1;
                    offset            = PositionBeingNavigated.BodyLocations[PositionBodyLocation.Top].OffsetVector;
                    collidingLocation = PositionBodyLocation.Top;
                }
                else if (this.Direction == Direction.Downward)
                {
                    collisionVector   = CollisionMapForEachPositionBodyLocation[PositionBodyLocation.Bottom].Item1;
                    offset            = PositionBeingNavigated.BodyLocations[PositionBodyLocation.Bottom].OffsetVector;
                    collidingLocation = PositionBodyLocation.Bottom;
                }
                else
                {
                    foreach (var part in CollisionMapForEachPositionBodyLocation
                             .Where(m => !(this.IsKnockbackNavigation && (m.Key == PositionBodyLocation.Bottom ||
                                                                          m.Key == PositionBodyLocation.BottomSemiMiddle || m.Key == PositionBodyLocation.BottomMiddle))))
                    {
                        if (part.Value.Item2 < minDistance || part.Value.Item2 == minDistance)
                        {
                            minDistance       = part.Value.Item2;
                            collisionVector   = CollisionMapForEachPositionBodyLocation[part.Key].Item1;
                            offset            = PositionBeingNavigated.BodyLocations[part.Key].OffsetVector;
                            collidingLocation = part.Key;
                        }
                    }
                }

                collisionVector = new Vector3(collisionVector.X,
                                              collisionVector.Y, collisionVector.Z);
                if (IsKnockbackNavigation && collisionVector != Vector3.Zero)
                {
                    collisionVector = GetKnockbackCollision(collisionVector);
                }
                CollidingBodyPart = collidingLocation;
            }

            return(collisionVector);
        }
Ejemplo n.º 2
0
 public PositionLocationPartImpl(PositionBodyLocation part, Position position)
 {
     Part           = part;
     ParentPosition = position;
 }