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;
}