/// <summary>
 /// Am I currently colliding with the other CollidableObject?
 /// </summary>
 /// <param name="other"></param>
 /// <returns></returns>
 public bool CollidingWith(CollidableObject other)
 {
     if (!other.Active)
     {
         return(false);
     }
     return(CurrentCollisions.Contains(other.Coll));
 }
        public List <ViewGeometry> OnCheckCollision()
        {
            List <ViewGeometry> collisions = new List <ViewGeometry>();

            foreach (var collision in CollisionMap.Where(p => Name != p.Name).ToDictionary(p => p.Geometry, o => o))
            {
                bool isCollision = CollisionManager.CalculateCollision(Geometry, collision.Key);
                if (isCollision)
                {
                    collisions.Add(collision.Value);
                }
            }

            foreach (var item in collisions)
            {
                if (!CurrentCollisions.Any(p => p == item))
                {
                    CurrentCollisions.Add(item);
                }
                if (!item.CurrentCollisions.Any(p => p == this))
                {
                    item.CurrentCollisions.Add(this);
                }

                if (item.CheckCollision != null)
                {
                    item.CheckCollision(item.CurrentCollisions);
                }
            }
            foreach (var item in PreviousCollisions)
            {
                if (!collisions.Any(p => p == item))
                {
                    CurrentCollisions.Remove(item);
                    item.CurrentCollisions.Remove(this);
                    if (item.CheckCollision != null)
                    {
                        item.CheckCollision(item.CurrentCollisions);
                    }
                }
            }
            PreviousCollisions = CurrentCollisions.ToList();

            if (CheckCollision != null)
            {
                CheckCollision(CurrentCollisions);
            }
            return(collisions);
        }
        /// <summary>
        /// Called every frame by the CollidableObject, which is called every frame by the Game1 class.
        /// Updates a Rectangle at the location of the Host GameObject each frame.
        /// </summary>
        /// <param name="gameTime"></param>
        public void Update(GameTime gameTime)
        {
            //Don't bother checking collisions if not active
            if (!Host.Active)
            {
                return;
            }

            UpdateHitbox();

            if (!ChecksCollisions)
            {
                return;
            }

            foreach (CollidableObject c in GameManager.CollidableObjectsInView)
            {
                if (!c.Active)
                {
                    continue;
                }
                //Don't check collisions with yourself!
                if (c.Name == Host.Name)
                {
                    continue;
                }
                //If we intersect with a new object
                if (Hitbox.Intersects(c.Coll.Hitbox) && !CurrentCollisions.Contains(c.Coll))
                {
                    CurrentCollisions.Add(c.Coll);
                    OnCollision(c.Coll);
                }
                //If stop intersecting with an object we just were intersecting with
                if (!Hitbox.Intersects(c.Coll.Hitbox) && CurrentCollisions.Contains(c.Coll))
                {
                    OnCollisionExit(c.Coll);
                    CurrentCollisions.Remove(c.Coll);
                }
            }
        }
Beispiel #4
0
        //public Hitbox AddHitbox(Body owner, Vector2 offset, Vector2 size, string color, CollisionType type, string value)
        //{
        //    return Game.World.AddHitbox(
        //        Body,
        //        offset,
        //        size,
        //        color,
        //        type,
        //        value
        //    );
        //}

        public void ClearCollisions()
        {
            CurrentCollisions.Clear();
            CurrentFloorCollisions.Clear();
        }
 /// <summary>
 /// Clear everything that we're colliding with
 /// </summary>
 public void ResetCollider()
 {
     CurrentCollisions.Clear();
 }