public LevelHeader parseLevelHeadFromXmlString(XmlNode levelNode) { var levelName = ParseHelper.getAttributeValueByName(levelNode, "name"); var levelGuid = ParseHelper.getAttributeValueByName(levelNode, "guid"); var difficultyString = ParseHelper.getAttributeValueByName(levelNode, "difficulty"); if (!int.TryParse(difficultyString, out var difficulty)) { throw new Exception("Could not parse difficulty argument: " + difficulty); } var threeStarsString = ParseHelper.getAttributeValueByName(levelNode, "three_star_score"); if (!int.TryParse(threeStarsString, out var threeStars)) { throw new Exception("Could not parse difficulty argument: " + difficulty); } var twoStarsString = ParseHelper.getAttributeValueByName(levelNode, "two_star_score"); if (!int.TryParse(twoStarsString, out var twoStars)) { throw new Exception("Could not parse difficulty argument: " + difficulty); } return(new LevelHeader(levelName, levelGuid, difficulty, new [] { twoStars, threeStars })); }
/// <summary> /// Checks whether the levels hashes are matching /// </summary> /// <param name="levelFile">The to check level</param> public static bool validateXmlLevel(XmlNode levelFile) { var haveHash = ParseHelper.getAttributeValueByName(levelFile, "levelHash"); var shouldHash = getHashOfXmlNode(levelFile); return(shouldHash == haveHash); }
public static float parseRotationFromNode(XmlNode node) { var rotationNode = node.SelectSingleNode("Rotation"); float.TryParse(ParseHelper.getAttributeValueByName(rotationNode, "angle"), out var angle); return(angle); }
public static Vector2 parseScaleFromNode(XmlNode node) { var positionNode = node.SelectSingleNode("Scale"); float.TryParse(ParseHelper.getAttributeValueByName(positionNode, "x"), out var x); float.TryParse(ParseHelper.getAttributeValueByName(positionNode, "y"), out var y); return(new Vector2(x, y)); }
/// <summary> /// Parses the provided strings into a LevelContainer /// </summary> /// <param name="levelNode">The to parse form LevelNode</param> /// <returns>The ready to initialize LevelContainer</returns> /// <exception cref="Exception">If something could not be parsed properly</exception> public LevelContainer parseLevelFromXmlString(XmlNode levelNode) { var gravityStringX = ParseHelper.getAttributeValueByName(levelNode, "gravity_x"); if (!float.TryParse(gravityStringX, out var gravityX)) { throw new Exception("Could not parse gravityScaleX argument: " + gravityStringX); } var gravityStringY = ParseHelper.getAttributeValueByName(levelNode, "gravity_y"); if (!float.TryParse(gravityStringY, out var gravityY)) { throw new Exception("Could not parse gravityScaleY argument: " + gravityStringY); } var level = new LevelContainer(parseLevelHeadFromXmlString(levelNode), new Vector2(gravityX, gravityY)); var elements = levelNode.SelectSingleNode("Elements"); if (elements != null) { // Then goes through each element foreach (XmlNode element in elements.ChildNodes) { // Parses position and rotation var position = ParseHelper.parsePositionFromNode(element); var angle = ParseHelper.parseRotationFromNode(element); // Its ElementType if (!Enum.TryParse(element.Name, out ElementType elementType)) { throw new Exception($"Could not parse the name ElementType {element.Name}"); } var idString = ParseHelper.getAttributeValueByName(element, "id"); if (!int.TryParse(idString, out var id)) { throw new Exception($"Could not parse the id {idString}"); } // And if its Wall, get its scale and create a WallInitializer if (elementType == ElementType.Wall) { var scale = ParseHelper.parseScaleFromNode(element); level.addInitializer(new WallInitializer(scale, elementType, id, position, angle)); continue; } // If it is a Effector parses the Parameters var parameters = new Dictionary <string, string>(); var parameterNodes = element.SelectNodes("Parameter"); foreach (XmlNode parameterNode in parameterNodes) { var attributeName = parameterNode.Attributes[0].Value; parameters.Add(attributeName, parameterNode.InnerText); } // And if its ColliderBody, create a ColliderBodyInitializer with its parameter if (elementType == ElementType.ColliderBody) { level.addInitializer(new ColliderBodyInitializer(parameters, elementType, id, position, angle)); continue; } if (elementType == ElementType.Effector) { // And its EffectorType string effectorTypeString = ParseHelper.getAttributeValueByName(element, "type"); if (!Enum.TryParse(effectorTypeString, out EffectorType effectorType)) { throw new Exception($"Could parse {effectorTypeString} to a EffectorType"); } // Finally add the EffectorInitializer level.addInitializer(new EffectorInitializer(effectorType, parameters, elementType, id, position, angle)); } if (elementType == ElementType.Trigger) { // And its TriggerType string triggerTypeString = ParseHelper.getAttributeValueByName(element, "type"); if (!Enum.TryParse(triggerTypeString, out TriggerType triggerType)) { throw new Exception($"Could parse {triggerTypeString} to a EffectorType"); } // Finally add the EffectorInitializer level.addInitializer(new TriggerInitializer(triggerType, parameters, elementType, id, position, angle)); } } } return(level); }
public TutorialContainer parseTutorialFromXmlString(XmlNode xmlDocument) { var parts = xmlDocument.SelectSingleNode("TutorialSequence"); var tutorialContainer = new TutorialContainer(); if (parts != null) { // Then goes through each element foreach (XmlNode part in parts.ChildNodes) { var partIdString = ParseHelper.getAttributeValueByName(part, "id"); if (!int.TryParse(partIdString, out var partId)) { throw new Exception($"Could not parse part ID: {partIdString}"); } var partContainer = new PartContainer(partId); tutorialContainer.addPart(partContainer); var checkEvents = part.SelectNodes("CheckEvent"); var helpDisplays = part.SelectNodes("HelpDisplay"); var uiMasks = part.SelectNodes("TutorialUiMask"); if (checkEvents != null) { foreach (XmlNode checkEvent in checkEvents) { var typeString = ParseHelper.getAttributeValueByName(checkEvent, "type"); if (!Enum.TryParse(typeString, out CheckEventType checkEventType)) { throw new Exception($"Could not parse EventType: {typeString}"); } var idString = ParseHelper.getAttributeValueByName(checkEvent, "id"); if (!int.TryParse(idString, out var id)) { throw new Exception($"Could not parse id: {idString}"); } if (checkEventType == CheckEventType.ElementEvent || checkEventType == CheckEventType.PartElementEvent) { var elementIdString = ParseHelper.getAttributeValueByName(checkEvent, "elementId"); if (!int.TryParse(elementIdString, out var elementId)) { throw new Exception($"Could not parse elementId: {elementIdString}"); } if (checkEventType == CheckEventType.ElementEvent) { partContainer.addElement(new ElementCheckEvent(checkEvent.InnerText, elementId), id); } else { partIdString = ParseHelper.getAttributeValueByName(checkEvent, "partId"); if (!int.TryParse(partIdString, out partId)) { throw new Exception($"Could not parse partId: {partIdString}"); } partContainer.addElement(new PartElementCheckEvent(checkEvent.InnerText, partId, elementId), id); } } else if (checkEventType == CheckEventType.GameObjectEvent) { var gameObjectName = ParseHelper.getAttributeValueByName(checkEvent, "name"); partContainer.addElement(new GameObjectCheckEvent(checkEvent.InnerText, gameObjectName), id); } } } if (helpDisplays != null) { foreach (XmlNode helpDisplay in helpDisplays) { var typeString = ParseHelper.getAttributeValueByName(helpDisplay, "type"); if (!Enum.TryParse(typeString, out HelpDisplayType helpDisplayType)) { throw new Exception($"Could not parse EventType: {typeString}"); } var idString = ParseHelper.getAttributeValueByName(helpDisplay, "id"); if (!int.TryParse(idString, out var id)) { throw new Exception($"Could not parse id: {idString}"); } var parameters = new Dictionary <string, string>(); var parameterNodes = helpDisplay.SelectNodes("Parameter"); foreach (XmlNode parameterNode in parameterNodes) { var attributeName = parameterNode.Attributes[0].Value; parameters.Add(attributeName, parameterNode.InnerText); } partContainer.addElement(new HelpDisplayInitializer(helpDisplayType, parameters), id); } } if (uiMasks != null) { foreach (XmlNode uiMask in uiMasks) { var idString = ParseHelper.getAttributeValueByName(uiMask, "id"); if (!int.TryParse(idString, out var id)) { throw new Exception($"Could not parse id: {idString}"); } var parameters = new Dictionary <string, string>(); var parameterNodes = uiMask.SelectNodes("Parameter"); foreach (XmlNode parameterNode in parameterNodes) { var attributeName = parameterNode.Attributes[0].Value; parameters.Add(attributeName, parameterNode.InnerText); } partContainer.addElement(new TutorialUiMaskInitializer(parameters), id); } } } } return(tutorialContainer); }