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); } }
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); } }