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);
        }
        public static void HandleCollision(ILink link, IBlock block, Enumerations.CollisionSide collision)
        {
            Contract.Requires(link != null);
            Contract.Requires(block != null);

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

                foreach (IBlock blockDoor in Room.CurrentRoomBlocks)
                {
                    if (block.GameObjectType == Enumerations.GameObjectType.DoorLeft)
                    {
                        blockDoor.IsDestructable = true;
                    }
                }

                IBlock newDoor = new BlockLeftOpenDoor();
                newDoor.Position = new Vector2(Constant.LeftDoorPositionNative.X * Game1.Instance.graphics.PreferredBackBufferWidth / Constant.OriginalNesWidth, (Constant.LeftDoorPositionNative.Y + HUDConstants.HUDHeight) * Game1.Instance.graphics.PreferredBackBufferHeight / Constant.OriginalNesHeight);
                IDoorTrigger newTrigger = new BlockLeftOverDoor();
                newTrigger.Position = new Vector2(Constant.LeftOverDoorPositionNative.X * Game1.Instance.graphics.PreferredBackBufferWidth / Constant.OriginalNesWidth, (Constant.LeftOverDoorPositionNative.Y + HUDConstants.HUDHeight) * Game1.Instance.graphics.PreferredBackBufferHeight / Constant.OriginalNesHeight);
                Room.CurrentRoomBlocks.Add(newDoor);
                Room.CurrentRoomDoorTriggers.Add(newTrigger);
                SoundManager.Instance.PlayDoorStateChange();

                int oppositeRoom = GameObjects.Instance.LevelListPosition - 1;
                Enumerations.Direction doorDirection = Enumerations.Direction.Right;
                Enumerations.DoorType  doorType      = Enumerations.DoorType.Locked;
                ToolsXML toolsXml = new ToolsXML();
                toolsXml.ReplaceOppositeDoorNodeXML(oppositeRoom, doorType, doorDirection);
            }
        }
Example #3
0
        public void ReplaceOppositeDoorNodeXML(int roomNumber, Enumerations.DoorType doorType, Enumerations.Direction direction)
        {
            string  currentDungeonFileName = ProjectPath + "\\Room\\CurrentDungeonState.xml";
            string  oldTrigger;
            string  oldDoor;
            string  newDoorTrigger;
            string  newDoor;
            string  stopBlock;
            Vector2 newOverDoorPosition;
            Vector2 newDoorPosition;


            switch (doorType)
            {
            case Enumerations.DoorType.Bombed:
                switch (direction)
                {
                case Enumerations.Direction.Left:
                    oldTrigger          = "BlockLeftOverWall";
                    oldDoor             = "BlockUpBreakableWall";
                    newDoorTrigger      = "BlockUpOverBombed";
                    newDoor             = "BlockUpBombedOpening";
                    stopBlock           = "NoStopBlock";
                    newOverDoorPosition = Constant.LeftOverBombedPosition;
                    newDoorPosition     = Constant.LeftDoorPositionNative;
                    break;

                case Enumerations.Direction.Right:
                    oldTrigger          = "BlockRightOverWall";
                    oldDoor             = "BlockRightBreakableWall";
                    newDoorTrigger      = "BlockRightOverBombed";
                    newDoor             = "BlockRightBombedOpening";
                    stopBlock           = "NoStopBlock";
                    newOverDoorPosition = Constant.RightOverBombedPositionNative;
                    newDoorPosition     = Constant.RightDoorPositionNative;
                    break;

                case Enumerations.Direction.Up:
                    oldTrigger          = "BlockUpOverWall";
                    oldDoor             = "BlockUpBreakableWall";
                    newDoorTrigger      = "BlockUpOverBombed";
                    newDoor             = "BlockUpBombedOpening";
                    stopBlock           = "NoStopBlock";
                    newOverDoorPosition = Constant.UpOverBombedPositionNative;
                    newDoorPosition     = Constant.UpDoorPositionNative;
                    break;

                case Enumerations.Direction.Down:
                    oldTrigger          = "BlockDownOverWall";
                    oldDoor             = "BlockDownBreakableWall";
                    newDoorTrigger      = "BlockDownOverBombed";
                    newDoor             = "BlockDownBombedDoor";
                    stopBlock           = "NoStopBlock";
                    newOverDoorPosition = Constant.DownOverBombedPositionNative;
                    newDoorPosition     = Constant.DownDoorPositionNative;
                    break;

                default:
                    oldTrigger          = "NoOldTrigger";
                    oldDoor             = "NoOldDoor";
                    newDoorTrigger      = "NoNewDoorTrigger";
                    newDoor             = "NoNewDoor";
                    stopBlock           = "NoStopBlock";
                    newOverDoorPosition = Constant.DownOverBombedPositionNative;
                    newDoorPosition     = Constant.DownDoorPositionNative;
                    break;
                }
                break;

            case Enumerations.DoorType.Locked:
                switch (direction)
                {
                case Enumerations.Direction.Left:
                    oldTrigger          = "BlockLeftOverDoor";
                    oldDoor             = "BlockLeftLockedDoor";
                    newDoorTrigger      = "BlockLeftOverDoor";
                    newDoor             = "BlockLeftOpenDoor";
                    stopBlock           = "BlockLeftLockedDoorStop";
                    newOverDoorPosition = Constant.LeftOverDoorPositionNative;
                    newDoorPosition     = Constant.LeftDoorPositionNative;
                    break;

                case Enumerations.Direction.Right:
                    oldTrigger          = "BlockRightOverDoor";
                    oldDoor             = "BlockRightLockedDoor";
                    newDoorTrigger      = "BlockRightOverDoor";
                    newDoor             = "BlockRightOpenDoor";
                    stopBlock           = "BlockRightLockedDoorStop";
                    newOverDoorPosition = Constant.RightOverDoorPositionNative;
                    newDoorPosition     = Constant.RightDoorPositionNative;
                    break;

                case Enumerations.Direction.Up:
                    oldTrigger          = "BlockUpOverDoor";
                    oldDoor             = "BlockUpLockedDoor";
                    newDoorTrigger      = "BlockUpOverDoor";
                    newDoor             = "BlockUpOpenDoor";
                    stopBlock           = "BlockUpLockedDoorStop";
                    newOverDoorPosition = Constant.UpOverDoorPositionNative;
                    newDoorPosition     = Constant.UpDoorPositionNative;
                    break;

                case Enumerations.Direction.Down:
                    oldTrigger          = "BlockDownOverDoor";
                    oldDoor             = "BlockDownLockedDoor";
                    newDoorTrigger      = "BlockDownOverDoor";
                    newDoor             = "BlockDownOpenDoor";
                    stopBlock           = "BlockDownLockedDoorStop";
                    newOverDoorPosition = Constant.DownOverDoorPositionNative;
                    newDoorPosition     = Constant.DownDoorPositionNative;
                    break;

                default:
                    oldTrigger          = "NoOldTrigger";
                    oldDoor             = "NoOldDoor";
                    newDoorTrigger      = "NoNewDoorTrigger";
                    newDoor             = "NoNewDoor";
                    stopBlock           = "NoStopBlock";
                    newOverDoorPosition = Constant.DownOverBombedPositionNative;
                    newDoorPosition     = Constant.DownDoorPositionNative;
                    break;
                }
                break;

            default:
                oldTrigger          = "NoOldTrigger";
                oldDoor             = "NoOldDoor";
                newDoorTrigger      = "NoNewDoorTrigger";
                newDoor             = "NoNewDoor";
                stopBlock           = "NoStopBlock";
                newOverDoorPosition = Constant.DownOverBombedPositionNative;
                newDoorPosition     = Constant.DownDoorPositionNative;
                break;
            }

            XmlDocument document = new XmlDocument();

            document.Load(currentDungeonFileName);
            XmlNodeList nodes = document.SelectNodes("/Dungeon/Item[@Room='" + roomNumber.ToString() + "']");

            for (int i = nodes.Count - 1; i >= 0; i--)
            {
                for (int j = nodes[i].ChildNodes.Count - 1; j >= 0; j--)
                {
                    if (nodes[i].ChildNodes[j].InnerText == oldTrigger || nodes[i].ChildNodes[j].InnerText == oldDoor || nodes[i].ChildNodes[j].InnerText == stopBlock)
                    {
                        nodes[i].ParentNode.RemoveChild(nodes[i]);
                    }
                }
            }



            XmlElement newDoorNode = document.CreateElement("Item");

            newDoorNode.SetAttribute("Room", roomNumber.ToString());
            XmlElement newDoorNodeObjectType = document.CreateElement("ObjectType");

            newDoorNodeObjectType.InnerText = "IBlock";
            XmlElement newDoorNodeObjectName = document.CreateElement("ObjectName");

            newDoorNodeObjectName.InnerText = newDoor;
            XmlElement newDoorNodeLocation = document.CreateElement("Location");

            newDoorNodeLocation.InnerText = newDoorPosition.X.ToString() + " " + newDoorPosition.Y.ToString();
            newDoorNode.AppendChild(newDoorNodeObjectType);
            newDoorNode.AppendChild(newDoorNodeObjectName);
            newDoorNode.AppendChild(newDoorNodeLocation);
            document.DocumentElement.AppendChild(newDoorNode);


            XmlElement newOverDoorNode = document.CreateElement("Item");

            newOverDoorNode.SetAttribute("Room", roomNumber.ToString());
            XmlElement newOverDoorNodeObjectType = document.CreateElement("ObjectType");

            newOverDoorNodeObjectType.InnerText = "IDoorTrigger";
            XmlElement newOverDoorNodeObjectName = document.CreateElement("ObjectName");

            newOverDoorNodeObjectName.InnerText = newDoorTrigger;
            XmlElement newOverDoorNodeLocation = document.CreateElement("Location");

            newOverDoorNodeLocation.InnerText = newOverDoorPosition.X.ToString() + " " + newOverDoorPosition.Y.ToString();
            newOverDoorNode.AppendChild(newOverDoorNodeObjectType);
            newOverDoorNode.AppendChild(newOverDoorNodeObjectName);
            newOverDoorNode.AppendChild(newOverDoorNodeLocation);
            document.DocumentElement.AppendChild(newOverDoorNode);
            if (File.Exists(currentDungeonFileName))
            {
                File.Delete(currentDungeonFileName);
                document.Save(currentDungeonFileName);
            }
        }