public void FromXml(XmlNode node)
{
node = node.SelectSingleNode("Game");
_settings.FromXml(node);
_lipSync.FromXml(node);
_propertySchema.FromXml(node);
if (node.SelectSingleNode("InventoryHotspotMarker") != null)
{
// Pre-3.0.3
InventoryHotspotMarker marker = new InventoryHotspotMarker();
marker.FromXml(node);
_settings.InventoryHotspotMarker = marker;
}
foreach (XmlNode msgNode in SerializeUtils.GetChildNodes(node, "GlobalMessages"))
{
_globalMessages[Convert.ToInt32(msgNode.Attributes["ID"].InnerText) - GLOBAL_MESSAGE_ID_START] = msgNode.InnerText;
}
_plugins.Clear();
foreach (XmlNode pluginNode in SerializeUtils.GetChildNodes(node, "Plugins"))
{
_plugins.Add(new Plugin(pluginNode));
}
_rooms = new UnloadedRoomFolders(node.SelectSingleNode("Rooms").FirstChild, node);
_guis = new GUIFolders(node.SelectSingleNode("GUIs").FirstChild, node);
_inventoryItems = new InventoryItemFolders(node.SelectSingleNode("InventoryItems").FirstChild, node);
_textParser = new TextParser(node.SelectSingleNode("TextParser"));
_characters = new CharacterFolders(node.SelectSingleNode("Characters").FirstChild, node);
_playerCharacter = null;
string playerCharText = SerializeUtils.GetElementString(node, "PlayerCharacter");
if (playerCharText.Length > 0)
{
int playerCharID = Convert.ToInt32(playerCharText);
foreach (Character character in RootCharacterFolder.AllItemsFlat)
{
if (character.ID == playerCharID)
{
_playerCharacter = character;
break;
}
}
}
_dialogs = new DialogFolders(node.SelectSingleNode("Dialogs").FirstChild, node);
_cursors.Clear();
foreach (XmlNode cursNode in SerializeUtils.GetChildNodes(node, "Cursors"))
{
_cursors.Add(new MouseCursor(cursNode));
}
_fonts.Clear();
foreach (XmlNode fontNode in SerializeUtils.GetChildNodes(node, "Fonts"))
{
_fonts.Add(new Font(fontNode));
}
_palette = ReadPaletteFromXML(node);
_sprites = new SpriteFolder(node.SelectSingleNode("Sprites").FirstChild);
_views = new ViewFolders(node.SelectSingleNode("Views").FirstChild);
_deletedViewIDs.Clear();
if (node.SelectSingleNode("DeletedViews") != null)
{
foreach (XmlNode transNode in SerializeUtils.GetChildNodes(node, "DeletedViews"))
{
_deletedViewIDs.Add(Convert.ToInt32(transNode.InnerText), null);
}
}
_scripts = new ScriptFolders(node.SelectSingleNode("Scripts").FirstChild, node);
if (node.SelectSingleNode("AudioClips") != null)
{
_audioClips = new AudioClipFolders(node.SelectSingleNode("AudioClips").FirstChild);
}
else
{
_audioClips = new AudioClipFolders("Main");
_audioClips.RootFolder.DefaultPriority = AudioClipPriority.Normal;
_audioClips.RootFolder.DefaultRepeat = InheritableBool.False;
_audioClips.RootFolder.DefaultVolume = 100;
}
_audioClipTypes.Clear();
if (node.SelectSingleNode("AudioClipTypes") != null)
{
foreach (XmlNode clipTypeNode in SerializeUtils.GetChildNodes(node, "AudioClipTypes"))
{
_audioClipTypes.Add(new AudioClipType(clipTypeNode));
}
}
_translations.Clear();
if (node.SelectSingleNode("Translations") != null)
{
foreach (XmlNode transNode in SerializeUtils.GetChildNodes(node, "Translations"))
{
_translations.Add(new Translation(transNode));
}
}
if (node.SelectSingleNode("GlobalVariables") != null)
{
_globalVariables = new GlobalVariables(node.SelectSingleNode("GlobalVariables"));
}
else
{
_globalVariables = new GlobalVariables();
}
_oldInteractionVariables.Clear();
if (node.SelectSingleNode("OldInteractionVariables") != null)
{
foreach (XmlNode varNode in SerializeUtils.GetChildNodes(node, "OldInteractionVariables"))
{
_oldInteractionVariables.Add(new OldInteractionVariable(SerializeUtils.GetAttributeString(varNode, "Name"), SerializeUtils.GetAttributeInt(varNode, "Value")));
}
}
if (_savedXmlVersionIndex == null)
{
// Pre-3.0.3, upgrade co-ordinates
ConvertCoordinatesToNativeResolution();
}
}