Пример #1
0
        //Called when an item is dragged and released
        public void setNewIndex(InventoryItem i)
        {
            Vector2 itemCenter = i.getCenter();

            for (int x = 0; x < items.GetLength(0); x++)
            {
                for (int y = 0; y < items.GetLength(1); y++)
                {
                    //int itemX = (int)(itemCenter.X + 0.5);
                    //int itemY = (int)(itemCenter.Y + 0.5);
                    //Blame merle. He'll fix this later.
                    if (itemRectangles[x, y].Contains(itemCenter) && (items[x, y] == null || (items[x, y] != null && !items[x, y].Equals(i))))
                    {
                        if (items[x, y] == null)
                        {
                            removeItem(i);
                            items[x, y] = i;
                            i.setX(itemRectangles[x, y].X);
                            i.setY(itemRectangles[x, y].Y);
                        }
                        else
                        {
                            if (items[x, y].combineItems(i))
                            {
                                removeItem(i);
                            }
                            else
                            {
                                returnItemToSlot(i);
                            }
                        }

                        return;
                    }
                }
            }

            if (itemCenter.X > 0 && itemCenter.X < inventoryGraphic.Width && itemCenter.Y > 0 && itemCenter.Y < inventoryGraphic.Height)
            {
                returnItemToSlot(i);
            }
            else
            {
                Player    p    = (Player)(Game1.creatures[0]);
                Rectangle rect = p.getHitBox();
                foreach (Platform plat in Game1.platforms)
                {
                    if (p.getX() == plat.getX() && p.getY() == plat.getY())
                    {
                        bool added = plat.addItemToPlatform(i);
                        if (added)
                        {
                            removeItem(i);
                            return;
                        }
                    }
                }
                returnItemToSlot(i);
            }
        }
Пример #2
0
 internal void itemCollision(Item i)
 {
     if (player.getHitBox().Intersects(i.getHitBox()))
     {
         player.pickUp(i);
         items.Remove(i);
     }
 }
Пример #3
0
        public void checkCollisions()
        {
            foreach (Creature c in creatures)
            {
                Rectangle hitBox = c.getHitBox();
                foreach (Creature d in creatures)
                {
                    if (!c.Equals(d))
                    {
                        Rectangle hitBoxOther = d.getHitBox();
                        if (c.getHitBox().Intersects(d.getHitBox()))
                        {
                            c.reportCollision(d);
                        }
                    }
                }
                foreach (Tile t in collidableTiles)
                {
                    Rectangle hitBoxOther = t.getHitBox();

                    if (c.getHitBox().Intersects(t.getHitBox()))
                    {
                        c.reportCollision(t);
                    }
                }
            }

            for (int ii = items.Count - 1; ii >= 0; ii--)
            {
                Rectangle hitBox = ((Item)items[ii]).getHitBox();
                if (player.getHitBox().Intersects(hitBox))
                {
                    //If inventory is not full
                    player.reportCollision((Item)items[ii]);
                    items.RemoveAt(ii);
                }
            }
        }