public static Information Parse(ref LibraryEditor_SpriteStudio6.Import.Setting setting, string nameFile, LibraryEditor_SpriteStudio6.Import.SSPJ.Information informationSSPJ ) { const string messageLogPrefix = "Parse SSQE"; Information informationSSQE = null; /* ".ssee" Load */ if (false == System.IO.File.Exists(nameFile)) { LogError(messageLogPrefix, "File Not Found", nameFile, informationSSPJ); goto Parse_ErrorEnd; } System.Xml.XmlDocument xmlSSQE = new System.Xml.XmlDocument(); xmlSSQE.Load(nameFile); /* Check Version */ System.Xml.XmlNode nodeRoot = xmlSSQE.FirstChild; nodeRoot = nodeRoot.NextSibling; KindVersion version = (KindVersion)(LibraryEditor_SpriteStudio6.Utility.XML.VersionGet(nodeRoot, "SpriteStudioSequencePack", (int)KindVersion.ERROR, true)); /* MEMO: Loose version check */ /* If you check strictly, there are a lot of datas that can not be imported. */ switch (version) { case KindVersion.ERROR: LogError(messageLogPrefix, "Version Invalid", nameFile, informationSSPJ); goto Parse_ErrorEnd; case KindVersion.CODE_010000: /* MEMO: Read all as Ver.1.01.00. */ version = KindVersion.CODE_010000; break; default: if (KindVersion.TARGET_EARLIEST > version) { version = KindVersion.TARGET_EARLIEST; if (true == setting.CheckVersion.FlagInvalidSSQE) { LogWarning(messageLogPrefix, "Version Too Early", nameFile, informationSSPJ); } } else { version = KindVersion.TARGET_LATEST; if (true == setting.CheckVersion.FlagInvalidSSQE) { LogWarning(messageLogPrefix, "Version Unknown", nameFile, informationSSPJ); } } break; } /* Create Information */ informationSSQE = new Information(); if (null == informationSSQE) { LogError(messageLogPrefix, "Not Enough Memory", nameFile, informationSSPJ); goto Parse_ErrorEnd; } informationSSQE.CleanUp(); informationSSQE.Version = version; /* Get Base-Directories */ LibraryEditor_SpriteStudio6.Utility.File.PathSplit(out informationSSQE.NameDirectory, out informationSSQE.NameFileBody, out informationSSQE.NameFileExtension, nameFile); /* Decode Tags */ System.Xml.NameTable nodeNameSpace = new System.Xml.NameTable(); System.Xml.XmlNamespaceManager managerNameSpace = new System.Xml.XmlNamespaceManager(nodeNameSpace); //string valueText = ""; informationSSQE.Name = LibraryEditor_SpriteStudio6.Utility.XML.TextGetNode(nodeRoot, "name", managerNameSpace); informationSSQE.ExportPath = LibraryEditor_SpriteStudio6.Utility.XML.TextGetNode(nodeRoot, "exportPath", managerNameSpace); System.Xml.XmlNodeList nodeList = null; nodeList = LibraryEditor_SpriteStudio6.Utility.XML.ListGetNode(nodeRoot, "sequenceList/sequence", managerNameSpace); if (null == nodeList) { informationSSPJ.TableNameSSQE = new string[0]; } else { /* MEMO: Nothing to do, now. */ } List <Library_SpriteStudio6.Data.Sequence.Data> listSequence = new List <Library_SpriteStudio6.Data.Sequence.Data>(); listSequence.Clear(); foreach (System.Xml.XmlNode nodeSequence in nodeList) { Library_SpriteStudio6.Data.Sequence.Data sequence = new Library_SpriteStudio6.Data.Sequence.Data(); sequence.Name = LibraryEditor_SpriteStudio6.Utility.XML.TextGetNode(nodeSequence, "name", managerNameSpace); sequence.Index = ValueTextToInt(LibraryEditor_SpriteStudio6.Utility.XML.TextGetNode(nodeSequence, "index", managerNameSpace)); sequence.Type = ValueTextToSequenceType(LibraryEditor_SpriteStudio6.Utility.XML.TextGetNode(nodeSequence, "type", managerNameSpace)); System.Xml.XmlNodeList nodeListValueSequence = null; nodeListValueSequence = LibraryEditor_SpriteStudio6.Utility.XML.ListGetNode(nodeSequence, "list/value", managerNameSpace); List <Library_SpriteStudio6.Data.Sequence.Data.Step> listDetail = new List <Library_SpriteStudio6.Data.Sequence.Data.Step>(); listDetail.Clear(); foreach (System.Xml.XmlNode nodeValue in nodeListValueSequence) { Library_SpriteStudio6.Data.Sequence.Data.Step dataStep = new Library_SpriteStudio6.Data.Sequence.Data.Step(); dataStep.NamePackAnimation = LibraryEditor_SpriteStudio6.Utility.XML.TextGetNode(nodeValue, "refAnimePack", managerNameSpace); dataStep.NameAnimation = LibraryEditor_SpriteStudio6.Utility.XML.TextGetNode(nodeValue, "refAnime", managerNameSpace); dataStep.PlayCount = ValueTextToInt(LibraryEditor_SpriteStudio6.Utility.XML.TextGetNode(nodeValue, "repeatCount", managerNameSpace)); listDetail.Add(dataStep); } sequence.TableStep = listDetail.ToArray(); listSequence.Add(sequence); } informationSSQE.SequenceList = listSequence.ToArray(); return(informationSSQE); Parse_ErrorEnd :; return(null); }
private bool StepProgress() { /* Next play data determination */ int indexStep = IndexStep; Library_SpriteStudio6.Data.Sequence.Data.Step dataStep = DataStep[indexStep]; if (null != FunctionDecodeStep) { int indexStepNext = FunctionDecodeStep(ref dataStep, this, indexStep); if (0 <= indexStepNext) { /* Jump Step */ indexStep = indexStepNext; dataStep = DataStep[indexStep]; } else { /* Not Jump */ if (false == dataStep.IsValid) { /* Stop Playing */ if (null != ScriptRoot) { ScriptRoot.AnimationStop(-1); } return(true); } } } /* Renew Animation-Object */ /* MEMO: Different Animation-Packs have different structure of parts. */ /* So in that case, need to re-instantiate Animation-Object. */ if (null == DataProject) { return(false); } int indexPackAnimation = DataProject.IndexGetPackAnimation(dataStep.NamePackAnimation); if (0 > indexPackAnimation) { return(false); } Script_SpriteStudio6_DataAnimation dataAnimation = DataProject.DataAnimation[indexPackAnimation]; bool flagRootRenew = false; if (null != ScriptRoot) { /* Exist Animation-Object */ if (dataAnimation != ScriptRoot.DataAnimation) { /* Different Animation-Pack */ /* Destroy current Animation-Object */ Destroy(GameObjectRoot); flagRootRenew = true; } } else { /* Now No Animation-Object */ flagRootRenew = true; } if (true == flagRootRenew) { /* Instantiate Animation-Object */ GameObjectRoot = Library_SpriteStudio6.Utility.Asset.PrefabInstantiate((GameObject)DataProject.PrefabAnimation[indexPackAnimation], null, transform.gameObject, false ); if (null == GameObjectRoot) { return(false); } ScriptRoot = GameObjectRoot.GetComponent <Script_SpriteStudio6_Root>(); ScriptRoot.FunctionPlayEnd = CallBackFunctionPlayEnd; } /* Play Animation */ if (null == ScriptRoot) { return(false); } ScriptRoot.AnimationStop(-1); int indexAnimation = ScriptRoot.IndexGetAnimation(dataStep.NameAnimation); if (0 > indexAnimation) { return(false); } return(ScriptRoot.AnimationPlay(-1, indexAnimation, dataStep.PlayCount)); }