public static bool LoadLevel(string levelName) { // Start loading the level. // First, make sure the file is open. Filesystem.OpenFile(levelName, Filesystem.AccessType.AccessType_ReadOnly); // Next start reading the file one line at a time. string currentLine = ""; Filesystem.ReadLine(ref currentLine); while (Filesystem.IsFileOpen) { // Skip any line with a #. It's a comment. if (currentLine.StartsWith("#")) { continue; } if (currentLine.Substring(0, Math.Min(currentLine.Length, 14)).CompareTo("BeginObjectDef") == 0) { // This is an object definition. Start loading it. ObjectDefinition newObjectDefinition = Filesystem.LoadObjectDescription(); if (newObjectDefinition.ObjectClassType.Length != 0) { Firecracker.engineInstance.CreateObjectByDefinition(newObjectDefinition); } } //else if ( ... Add other loadable types here for example, a cutscene def or a set of physics edges... ) Filesystem.ReadLine(ref currentLine); } // The file will close itself when it hits the EOF so we don't need to worry about cleanup. return(true); }
public static bool LoadDefinitions(string sDefinitionFolder) { // Load all the definitions. // First, make sure the file is open. Filesystem.OpenFolder(sDefinitionFolder, "*.DEF"); // Next start reading the file one line at a time. string currentLine = ""; Filesystem.ReadLine(ref currentLine); while (Filesystem.IsFileOpen) { // Skip any line with a #. It's a comment. if (currentLine.StartsWith("#")) { continue; } if (currentLine.Substring(0, Math.Min(currentLine.Length, 14)).CompareTo("BeginObjectDef") == 0) { // This is an object definition. Start loading it. ObjectDefinition newObjectDefinition = Filesystem.LoadObjectDefinition(); if (newObjectDefinition.ObjectClassType.Length != 0) { m_lObjectDefinitionList.Add(newObjectDefinition); newObjectDefinition = new ObjectDefinition(); } } //else if ( ... Add other loadable types here for example, a cutscene def or a set of physics edges... ) Filesystem.ReadLine(ref currentLine); } // The file will close itself when it hits the EOF so we don't need to worry about cleanup. return(true); }
public static ObjectDefinition LoadObjectDescription() { CurrentState eCurrentState = CurrentState.State_ObjectProperties; ObjectDefinition NewObjectDef = new ObjectDefinition(false); PluginDef NewPluginDef = new PluginDef(false); string sCurrentLine = ""; char[] trimString = " \t\"\'".ToCharArray(); while (Filesystem.ReadLine(ref sCurrentLine)) { if (sCurrentLine.Trim(" \t\"\'".ToCharArray()).Length == 0) { continue; } // Skip any line with a #. It's a comment. if (sCurrentLine.StartsWith("#")) { continue; } switch (eCurrentState) { case CurrentState.State_ObjectProperties: { if (sCurrentLine.Substring(0, Math.Min(sCurrentLine.Length, 10)).CompareTo("ObjectName") == 0) { NewObjectDef.ObjectName = sCurrentLine.Substring(10).Trim(trimString); } else if (sCurrentLine.Substring(0, Math.Min(sCurrentLine.Length, 9)).CompareTo("ObjectDef") == 0) { NewObjectDef.ObjectClassType = sCurrentLine.Substring(9).Trim(trimString); } else if (sCurrentLine.CompareTo("EndObjectDef") == 0) { // this is the end of this object definition. return(NewObjectDef); } else { string param = sCurrentLine.Substring(0, sCurrentLine.IndexOfAny(trimString)); string value = sCurrentLine.Substring(sCurrentLine.IndexOfAny(trimString)).Trim(trimString); int leftCount = Helpers.CountStringOccurrences(value, "{"); int rightCount = Helpers.CountStringOccurrences(value, "}"); if (leftCount > rightCount) { while (Filesystem.ReadLine(ref sCurrentLine)) { value = string.Concat(value, sCurrentLine); leftCount = Helpers.CountStringOccurrences(value, "{"); rightCount = Helpers.CountStringOccurrences(value, "}"); if (leftCount == rightCount) { break; } } } // If it is none of the above then it is a class property. NewObjectDef.ClassProperties.Add( param, value ); } } break; } } return(NewObjectDef); }