public void ParseToXML (string levelIndex) { var allObjects = GameObject.FindGameObjectsWithTag("LevelSystem"); List<GameObject> listOfAllObjects = allObjects.ToList(); listOfAllObjects.Add(GameObject.FindGameObjectWithTag("Rocket")); foreach (var obj in listOfAllObjects) { var nameToObjectParser = new NameToObjectParse(); ObjectTypes type = nameToObjectParser.ParseNameToType(obj); var gravityObject = new GravityObject(); if (type == ObjectTypes.BigAsteroid || type == ObjectTypes.SmallAsteroid) { gravityObject = new GravityObject(obj.transform.position, obj.transform.rotation, type); var asteroidScript = obj.GetComponent<Asteroid>(); gravityObject.AType = asteroidScript.AsteroidType; gravityObject.AClockWise = asteroidScript.RotateClockwise; gravityObject.ASpeed = asteroidScript.Speed; gravityObject.ALength = asteroidScript.PathLength; Level.Add(gravityObject); } else { gravityObject = new GravityObject(obj.transform.position, obj.transform.rotation, type); Level.Add(gravityObject); } } Debug.Log("Level parsed!"); var xmlWriter = new XMLWriter(); xmlWriter.Write(Level, levelIndex); Debug.Log("Level [" + levelIndex +"] written to XML"); }
public List<GravityObject> Load (string levelIndex) { List<GravityObject> Level = new List<GravityObject>(); var doc = (TextAsset)Resources.Load("Gravity_" + levelIndex, typeof(TextAsset)); var loadedFromXML = new XmlDocument(); try { loadedFromXML.LoadXml (doc.text); } catch (Exception ex) { throw new NullReferenceException("XMLDoc not found..: (doc is null) - " + ex); } foreach (XmlNode node in loadedFromXML.DocumentElement.ChildNodes) { Vector2 vec = Vector2.zero; Quaternion quat = new Quaternion (0,0,0,1); ObjectTypes ot = ObjectTypes.Undefined; int commaLoc; // Debug.Log(node.Name); // Parse Vec2 var v = node.Attributes["V"].InnerText; v = v.Replace("(", "").Replace(")", ""); commaLoc = v.IndexOf(","); vec.x = float.Parse(v.Remove(commaLoc)); vec.y = float.Parse(v.Remove(0, commaLoc+1)); // Debug.Log(vec); // Parse Quaternion var q = node.Attributes["Q"].InnerText; q = q.Replace("(", "").Replace(")", ""); commaLoc = q.IndexOf(","); var quatx = q.Remove(commaLoc); quat.x = float.Parse(quatx); var quaty = q.TrimStart(quatx.ToCharArray()).TrimStart(','); commaLoc = quaty.IndexOf(","); quaty = quaty.Remove(commaLoc); quat.y = float.Parse(quaty); var quatz = q.TrimStart(quatx.ToCharArray()).TrimStart(',').TrimStart(quaty.ToCharArray()).TrimStart(','); var quatw = quatz; // Borrowing this value here. commaLoc = quatz.IndexOf(","); quatz = quatz.Remove(commaLoc); quat.z = float.Parse(quatz); quatw = quatw.TrimStart(quatz.ToCharArray()).TrimStart(','); quat.w = float.Parse(quatw); // Debug.Log(quat); // Parse ObjectType var t = node.Attributes["T"].InnerText; if (t == "Rocket") ot = ObjectTypes.Rocket; else if (t == "BlackHole") ot = ObjectTypes.BlackHole; else if (t == "Rocky") ot = ObjectTypes.Rocky; else if (t == "Rocky2") ot = ObjectTypes.Rocky2; else if (t == "GasGiant") ot = ObjectTypes.GasGiant; else if (t == "EndPlanet") ot = ObjectTypes.EndPlanet; else if (t == "StartPlanet") ot = ObjectTypes.StartPlanet; else if (t == "Beyonce") ot = ObjectTypes.Beyonce; else if (t == "ButtHole") ot = ObjectTypes.ButtHole; else if (t == "LonelyPlanet") ot = ObjectTypes.LonelyPlanet; else if (t == "SeaGod") ot = ObjectTypes.SeaGod; else if (t == "Son") ot = ObjectTypes.Son; else if (t == "WormIn") ot = ObjectTypes.WormIn; else if (t == "WormOut") ot = ObjectTypes.WormOut; else if (t == "BigAsteroid") ot = ObjectTypes.BigAsteroid; else if (t == "SmallAsteroid") ot = ObjectTypes.SmallAsteroid; else if (t == "Undefined") Debug.Log("Undefined Object type... Something went wrong."); // Debug.Log(ot); // Asteroid specific section if (ot == ObjectTypes.BigAsteroid || ot == ObjectTypes.SmallAsteroid) { AsteroidType atype = AsteroidType.Continuous; bool arot = false; float aspeed = 0f; float alength = 0f; // Type var at = node.Attributes["A1"].InnerText; if (at == "FauxOrbit") atype = AsteroidType.FauxOrbit; else if (at == "OrbitPivot") atype = AsteroidType.OrbitPivot; // Rotation var cw = node.Attributes["A2"].InnerText; if (cw == "False") arot = false; else arot = true; // Speed var sp = node.Attributes["A3"].InnerText; aspeed = float.Parse(sp); // Path length var pl = node.Attributes["A4"].InnerText; alength = float.Parse(pl); // Load up var obj = new GravityObject(vec, quat, ot); obj.AType = atype; obj.AClockWise = arot; obj.ASpeed = aspeed; obj.ALength = alength; Level.Add(obj); } else { var obj = new GravityObject(vec, quat, ot); Level.Add(obj); } } Resources.UnloadUnusedAssets(); return Level; }