public static void HandleCollision(IUsableItem item, IBlock block, Enumerations.CollisionSide collision)
        {
            Contract.Requires(block != null);
            Contract.Requires(item != null);

            block.IsDestructable = true;
            foreach (IDoorTrigger doorTrigger in Room.CurrentRoomDoorTriggers)
            {
                if (doorTrigger.GameObjectType == Enumerations.GameObjectType.DoorTriggerUp)
                {
                    doorTrigger.IsDestructable = true;
                }
            }

            IBlock newDoor = new BlockUpBombedOpening();

            newDoor.Position = block.Position;
            IDoorTrigger newTrigger = new BlockUpOverBombed();

            newTrigger.Position = new Vector2(Constant.UpOverBombedPositionNative.X * Game1.Instance.graphics.PreferredBackBufferWidth / Constant.OriginalNesWidth, (Constant.UpOverBombedPositionNative.Y + HUDConstants.HUDHeight) * Game1.Instance.graphics.PreferredBackBufferHeight / Constant.OriginalNesHeight);
            Room.CurrentRoomBlocks.Add(newDoor);
            Room.CurrentRoomDoorTriggers.Add(newTrigger);
            SoundManager.Instance.PlayFoundSecret();

            int oppositeRoom = GameObjects.Instance.LevelListPosition - Constant.DungeonGridWidth;

            Enumerations.Direction doorDirection = Enumerations.Direction.Down;
            Enumerations.DoorType  doorType      = Enumerations.DoorType.Bombed;
            ToolsXML toolsXml = new ToolsXML();

            toolsXml.ReplaceOppositeDoorNodeXML(oppositeRoom, doorType, doorDirection);
        }
示例#2
0
        public static void HandleCollision(INPC character, IUsableItem item, Enumerations.CollisionSide collisionSide)
        {
            character.TakeDamage(item.DamageAmount);
            item.IsDestructable          = true;
            UsableWoodenSword.projectile = null;
            UsableWoodenSword.IsMoving   = false;
            //  Room.CurrentRoomSpriteEffects.Add(new EffectSwordBeamCollision(item.Position));
            SoundManager.Instance.PlayEnemyHit();


            switch (collisionSide)
            {
            case Enumerations.CollisionSide.Right:
                RightCollision(character);
                break;

            case Enumerations.CollisionSide.Left:
                LeftCollision(character);
                break;

            case Enumerations.CollisionSide.Top:
                UpCollision(character);
                break;

            case Enumerations.CollisionSide.Bottom:
                DownCollision(character);
                break;

            default:
                break;
            }
        }
示例#3
0
        public static void HandleCollision(INPC character, IUsableItem item, Enumerations.CollisionSide collisionSide)
        {
            character.TakeDamage(item.DamageAmount);
            item.IsDestructable = true;

            SoundManager.Instance.PlayEnemyHit();


            switch (collisionSide)
            {
            case Enumerations.CollisionSide.Right:
                RightCollision(character);
                break;

            case Enumerations.CollisionSide.Left:
                LeftCollision(character);
                break;

            case Enumerations.CollisionSide.Top:
                UpCollision(character);
                break;

            case Enumerations.CollisionSide.Bottom:
                DownCollision(character);
                break;

            default:
                break;
            }
        }
示例#4
0
        private void ThrowBoomerang()
        {
            if (Constant.RNG.Next(0, 1000) < 5)
            {
                Velocity = Vector2.Zero;

                boomerang = new UsableBoomerang(this);
                boomerang.GameObjectType = Enumerations.GameObjectType.UsableItemVsPlayer;

                switch (facingDirection)
                {
                case Enumerations.Direction.Up:
                    boomerang.UseUp();
                    break;

                case Enumerations.Direction.Down:
                    boomerang.UseDown();
                    break;

                case Enumerations.Direction.Left:
                    boomerang.UseLeft();
                    break;

                case Enumerations.Direction.Right:
                    boomerang.UseRight();
                    break;

                default:
                    break;
                }
            }
        }
示例#5
0
        public static void HandleCollision(IUsableItem projectile, IBlock block, Enumerations.CollisionSide collision)
        {
            Contract.Requires(block != null);
            Contract.Requires(projectile != null);

            if (block.IsMovable)
            {
                block.Knockback         = true;
                block.CollisionLocation = block.Position;

                switch (collision)
                {
                case Enumerations.CollisionSide.Right:
                    RightCollision(block);
                    break;

                case Enumerations.CollisionSide.Left:
                    LeftCollision(block);
                    break;

                case Enumerations.CollisionSide.Top:
                    UpCollision(block);
                    break;

                case Enumerations.CollisionSide.Bottom:
                    DownCollision(block);
                    break;

                default:
                    break;
                }
            }
            block.Knockback = false;
        }
示例#6
0
 public static void HandleCollision(IUsableItem item, IBlock block, Enumerations.CollisionSide collision)
 {
     Contract.Requires(block != null);
     Contract.Requires(item != null);
     item.IsDestructable          = true;
     UsableWoodenSword.projectile = null;
     UsableWoodenSword.IsMoving   = false;
     Room.CurrentRoomSpriteEffects.Add(new EffectSwordBeamCollision(item.Position));
 }
示例#7
0
    public void Execute()
    {
        IUsableItem usableItem = Item as IUsableItem;

        usableItem.Use();
        if (Item.CurrentStacksAmount <= 0)
        {
            inventory.RemoveItem(Item);
        }
    }
示例#8
0
 private static void DownCollision(ILink link, IUsableItem projectile, Enumerations.CollisionSide collisionSide)
 {
     if (link.FacingDirection.Equals(collisionSide))
     {
         projectile.Velocity = Vector2.UnitY * ItemConstants.ItemKnockbackSpeed;
     }
     else
     {
         link.Velocity = -Vector2.UnitY * Constant.LinkKnockbackSpeed;
     }
 }
示例#9
0
        public static void HandleCollision(ILink link, IUsableItem projectile, Enumerations.CollisionSide collisionSide)
        {
            Contract.Requires(link != null);
            Contract.Requires(projectile != null);
            //Contract.Requires(collision != null);

            projectile.IsDestructable = true;

            if (link.FacingDirection.Equals(collisionSide))
            {
                projectile.Knockback         = true;
                projectile.CollisionLocation = projectile.Position;
            }
            else
            {
                link.Knockback         = true;
                link.CollisionLocation = link.Position;
            }

            switch (collisionSide)
            {
            case Enumerations.CollisionSide.Right:
                RightCollision(link, projectile, collisionSide);
                break;

            case Enumerations.CollisionSide.Left:
                LeftCollision(link, projectile, collisionSide);
                break;

            case Enumerations.CollisionSide.Top:
                UpCollision(link, projectile, collisionSide);
                break;

            case Enumerations.CollisionSide.Bottom:
                DownCollision(link, projectile, collisionSide);
                break;

            default:
                break;
            }
        }
示例#10
0
 public UseItemPlayerAction(IUsableItem item)
 {
     this.item = item;
 }
示例#11
0
 public UsedItemMessage(IUsableItem item)
 {
     Item = item;
 }
示例#12
0
        public void ReverseTime()
        {
            if (timeStates.Count == 0)
            {
                return;
            }

            TimeState state = timeStates[timeStates.Count - 1];

            timeStates.RemoveAt(timeStates.Count - 1);
            Dictionary <Type, int> typeCounts = new Dictionary <Type, int>();

            foreach (KeyValuePair <Type, Vector2> kvp in state.Positions)
            {
                if (typeof(IPlayer).IsAssignableFrom(kvp.Key))
                {
                    game.player.Position = kvp.Value;
                    game.player.State    = (IPlayerState)Activator.CreateInstance(state.playerState, new object[] { game.player });
                }

                if (typeof(IEnemy).IsAssignableFrom(kvp.Key))
                {
                    int typeCount = typeCounts.ContainsKey(kvp.Key) ? typeCounts[kvp.Key] : 0;
                    if (typeCount != 0)
                    {
                        typeCounts[kvp.Key]++;
                    }
                    else
                    {
                        typeCounts.Add(kvp.Key, 1);
                    }
                    List <IEnemy> enemies = game.currentRoom.Enemies.FindAll((IEnemy e) => e.GetType() == kvp.Key).ToList();
                    IEnemy        enemy   = typeCount >= enemies.Count ? null : enemies[typeCount];
                    if (enemy != null)
                    {
                        enemy.Position = kvp.Value;
                    }
                }

                if (typeof(INPC).IsAssignableFrom(kvp.Key))
                {
                    int typeCount = typeCounts.ContainsKey(kvp.Key) ? typeCounts[kvp.Key] : 0;
                    if (typeCount != 0)
                    {
                        typeCounts[kvp.Key]++;
                    }
                    else
                    {
                        typeCounts.Add(kvp.Key, 1);
                    }
                    List <INPC> npcs = game.currentRoom.NPCs.FindAll((INPC n) => n.GetType() == kvp.Key).ToList();
                    INPC        npc  = typeCount >= npcs.Count ? null : npcs[typeCount];
                    if (npc != null)
                    {
                        npc.Position = kvp.Value;
                    }
                }

                if (typeof(IItem).IsAssignableFrom(kvp.Key))
                {
                    int typeCount = typeCounts.ContainsKey(kvp.Key) ? typeCounts[kvp.Key] : 0;
                    if (typeCount != 0)
                    {
                        typeCounts[kvp.Key]++;
                    }
                    else
                    {
                        typeCounts.Add(kvp.Key, 1);
                    }
                    List <IItem> items = game.currentRoom.Items.FindAll((IItem i) => i.GetType() == kvp.Key).ToList();
                    IItem        item  = typeCount >= items.Count ? null : items[typeCount];
                    if (item != null)
                    {
                        item.Position = kvp.Value;
                    }
                }

                if (typeof(IItem).IsAssignableFrom(kvp.Key))
                {
                    int typeCount = typeCounts.ContainsKey(kvp.Key) ? typeCounts[kvp.Key] : 0;
                    if (typeCount != 0)
                    {
                        typeCounts[kvp.Key]++;
                    }
                    else
                    {
                        typeCounts.Add(kvp.Key, 1);
                    }
                    List <IItem> items = game.currentRoom.HiddenItems.FindAll((IItem i) => i.GetType() == kvp.Key).ToList();
                    IItem        item  = typeCount >= items.Count ? null : items[typeCount];
                    if (item != null)
                    {
                        item.Position = kvp.Value;
                    }
                }

                if (typeof(IUsableItem).IsAssignableFrom(kvp.Key))
                {
                    int typeCount = typeCounts.ContainsKey(kvp.Key) ? typeCounts[kvp.Key] : 0;
                    if (typeCount != 0)
                    {
                        typeCounts[kvp.Key]++;
                    }
                    else
                    {
                        typeCounts.Add(kvp.Key, 1);
                    }
                    List <IUsableItem> items = game.player.ActiveItems.FindAll((IUsableItem i) => i.GetType() == kvp.Key).ToList();
                    IUsableItem        item  = typeCount >= items.Count ? null : items[typeCount];
                    if (item != null)
                    {
                        item.Position = kvp.Value;
                    }
                }
            }
        }
示例#13
0
 public static void HandleCollision(IUsableItem item, IBlock block, Enumerations.CollisionSide collision)
 {
     Contract.Requires(block != null);
     Contract.Requires(item != null);
     item.IsDestructable = true;
 }
 public UsableItemCollisionHandler(IPlayer player, IUsableItem item, float colliderWidth, float colliderHeight, float offsetX, float offsetY)
 {
     this.player = player;
     this.item   = item;
     Collider    = new BoxCollider(item, colliderWidth, colliderHeight, offsetX, offsetY);
 }