public static GUI ImportGUIFromFile(string fileName, Game game) { XmlDocument doc = new XmlDocument(); doc.Load(fileName); if (doc.DocumentElement.Name != GUI_XML_ROOT_NODE) { throw new AGS.Types.InvalidDataException("Not a valid AGS GUI file."); } if (SerializeUtils.GetAttributeString(doc.DocumentElement, GUI_XML_VERSION_ATTRIBUTE) != GUI_XML_CURRENT_VERSION) { throw new AGS.Types.InvalidDataException("This file requires a newer version of AGS to import it."); } GUI newGui; if (doc.DocumentElement.FirstChild.FirstChild.Name == NormalGUI.XML_ELEMENT_NAME) { newGui = new NormalGUI(doc.DocumentElement.FirstChild); } else { newGui = new TextWindowGUI(doc.DocumentElement.FirstChild); } PaletteEntry[] palette = game.ReadPaletteFromXML(doc.DocumentElement); SpriteFolder newFolder = new SpriteFolder(newGui.Name + "Import"); game.RootSpriteFolder.SubFolders.Add(newFolder); Dictionary<int, int> spriteMapping = ImportSpritesFromXML(doc.DocumentElement.SelectSingleNode(GUI_XML_SPRITES_NODE), palette, newFolder); if (newGui.BackgroundImage > 0) { newGui.BackgroundImage = spriteMapping[newGui.BackgroundImage]; } if (newGui.BackgroundImage < 0) newGui.BackgroundImage = 0; foreach (GUIControl control in newGui.Controls) { control.UpdateSpritesWithMapping(spriteMapping); } AdjustScriptNamesToEnsureEverythingIsUnique(newGui, game); game.RootSpriteFolder.NotifyClientsOfUpdate(); return newGui; }
public static Character ImportCharacterNew(string fileName, Game game) { XmlDocument doc = new XmlDocument(); try { doc.Load(fileName); } catch (XmlException ex) { throw new AGS.Types.InvalidDataException("This does not appear to be a valid AGS Character file." + Environment.NewLine + Environment.NewLine + ex.Message, ex); } if (doc.DocumentElement.Name != CHARACTER_XML_ROOT_NODE) { throw new AGS.Types.InvalidDataException("Not a valid AGS Character file."); } if (SerializeUtils.GetAttributeString(doc.DocumentElement, CHARACTER_XML_VERSION_ATTRIBUTE) != CHARACTER_XML_CURRENT_VERSION) { throw new AGS.Types.InvalidDataException("This file requires a newer version of AGS to import it."); } Character newChar = new Character(doc.DocumentElement.FirstChild); PaletteEntry[] palette = game.ReadPaletteFromXML(doc.DocumentElement); // Clear any existing event handler function names for (int i = 0; i < newChar.Interactions.ScriptFunctionNames.Length; i++) { newChar.Interactions.ScriptFunctionNames[i] = string.Empty; } SpriteFolder newFolder = new SpriteFolder(newChar.ScriptName + "Import"); game.RootSpriteFolder.SubFolders.Add(newFolder); Dictionary<int, int> spriteMapping = new Dictionary<int, int>(); XmlNode viewsNode = doc.DocumentElement.SelectSingleNode("Views"); newChar.NormalView = ReadAndAddNewStyleView(viewsNode.SelectSingleNode("NormalView"), game, spriteMapping, palette, newFolder); if (newChar.SpeechView > 0) { newChar.SpeechView = ReadAndAddNewStyleView(viewsNode.SelectSingleNode("SpeechView"), game, spriteMapping, palette, newFolder); } if (newChar.IdleView > 0) { newChar.IdleView = ReadAndAddNewStyleView(viewsNode.SelectSingleNode("IdleView"), game, spriteMapping, palette, newFolder); } if (newChar.ThinkingView > 0) { newChar.ThinkingView = ReadAndAddNewStyleView(viewsNode.SelectSingleNode("ThinkingView"), game, spriteMapping, palette, newFolder); } if (newChar.BlinkingView > 0) { newChar.BlinkingView = ReadAndAddNewStyleView(viewsNode.SelectSingleNode("BlinkingView"), game, spriteMapping, palette, newFolder); } EnsureCharacterScriptNameIsUnique(newChar, game); game.RootSpriteFolder.NotifyClientsOfUpdate(); game.NotifyClientsViewsUpdated(); return newChar; }