/// <summary>
 /// Charactersノードを解析し、設定値を得る。
 /// </summary>
 /// <param name="node">Charactersノード</param>
 /// <param name="setting">GeneratorSettingオブジェクト</param>
 private static void LoadCharactersNode(XmlNode node, GeneratorSetting setting)
 {
     for (int i = 0; i < node.ChildNodes.Count; i++)
     {
         try
         {
             if (node.ChildNodes[i].Name != GeneratorSettingFileDefs.NodeCharacter)
             {
                 continue;
             }
             XmlAttribute attr = node.ChildNodes[i].Attributes[GeneratorSettingFileDefs.CharacterAttrNumber];
             if (attr == null)
             {
                 continue; // number 属性がない。
             }
             int index = Int32.Parse(attr.Value) - 1;
             if ((index < 0) || (index >= setting.GetCharacterCount()))
             {
                 continue;
             }
             LoadCharacterNode(node.ChildNodes[i], setting.GetCharacter(index));
         }
         catch (Exception)
         { // 解析の例外は無視する。
         }
     }
 }
Exemple #2
0
        /// <summary>
        /// GeneratorSettingをXMLドキュメントに変換する。
        /// </summary>
        /// <param name="setting">設定</param>
        /// <returns>XmlDocumentオブジェクト</returns>
        /// <remarks>
        /// シリアライズ使った方が良かったかもしれない。
        /// </remarks>
        private XmlDocument GenerateXmlDocument(GeneratorSetting setting)
        {
            // データをXMLモデルで構築する。
            XmlDocument doc = new XmlDocument();

            XmlElement rootNode = doc.CreateElement(GeneratorSettingFileDefs.NodeCharaChipGen);

            doc.AppendChild(rootNode);

            // キャラクター設定ノード
            XmlElement charactersElem = doc.CreateElement(GeneratorSettingFileDefs.NodeCharacters);

            rootNode.AppendChild(charactersElem);
            for (int i = 0; i < setting.GetCharacterCount(); i++)
            {
                Character data = setting.GetCharacter(i);
                AddCharacter(doc, charactersElem, i + 1, data);
            }

            // エクスポート設定ノード
            XmlElement exportConfigElem = doc.CreateElement(GeneratorSettingFileDefs.NodeExportSetting);

            AddConfigNode(doc, exportConfigElem, setting.ExportSetting);
            rootNode.AppendChild(exportConfigElem);

            return(doc);
        }
        /// <summary>
        /// XMLドキュメントを解析して、GeneratorSettingを取得する。
        /// </summary>
        /// <param name="doc">XmlDocumentオブジェクト</param>
        /// <returns>GeneratorSettingオブジェクト</returns>
        private GeneratorSetting ParseXmlDocument(XmlDocument doc)
        {
            GeneratorSetting setting = new GeneratorSetting();

            // ツリーからXMLで取得する。
            foreach (XmlNode rootNode in doc.ChildNodes)
            {
                if (rootNode.Name != GeneratorSettingFileDefs.NodeCharaChipGen)
                {
                    throw new NotSupportedException("Unsupported root node. [" + rootNode.Name + "]");
                }
                foreach (XmlNode node in rootNode.ChildNodes)
                {
                    switch (node.Name)
                    {
                    case GeneratorSettingFileDefs.NodeCharacters:
                        LoadCharactersNode(node, setting);
                        break;

                    case GeneratorSettingFileDefs.NodeExportSetting:
                        LoadConfigNode(node, setting.ExportSetting);
                        break;
                    }
                }
            }
            return(setting);
        }
Exemple #4
0
        /// <summary>
        /// settingsに設定をコピーする。
        /// </summary>
        /// <param name="setting">コピー先のオブジェクト</param>
        public void CopyTo(GeneratorSetting setting)
        {
            int copyCount = Math.Min(GetCharacterCount(), setting.GetCharacterCount());

            for (int i = 0; i < copyCount; i++)
            {
                Character src = GetCharacter(i);
                Character dst = setting.GetCharacter(i);
                src.CopyTo(dst);
            }

            // エクスポート設定
            ExportSetting.CopyTo(setting.ExportSetting);
        }
Exemple #5
0
        /// <summary>
        /// キャラチップデータをエクスポートする
        /// </summary>
        public static void ExportCharaChip(GeneratorSetting setting)
        {
            if (string.IsNullOrEmpty(setting.ExportSetting.ExportFilePath))
            {
                throw new ArgumentException("ExportFilePath not specified.");
            }

            Size charaChipSize = setting.ExportSetting.CharaChipSize;

            int charaPlaneWidth  = charaChipSize.Width * 3;
            int charaPlaneHeight = charaChipSize.Height * 4;

            int exportImageWidth  = charaPlaneWidth * setting.HorizontalCount;
            int exportImageHeight = charaPlaneHeight * setting.VerticalCount;

            ImageBuffer exportBuffer = ImageBuffer.Create(exportImageWidth, exportImageHeight);

            for (int charaY = 0; charaY < setting.VerticalCount; charaY++)
            {
                for (int charaX = 0; charaX < setting.HorizontalCount; charaX++)
                {
                    int index = charaY * setting.HorizontalCount + charaX;
                    if (index >= setting.GetCharacterCount())
                    {
                        continue;
                    }
                    try
                    {
                        Character character = setting.GetCharacter(index);

                        // キャラクターをレンダリングする。
                        ImageBuffer charaChipImage = RenderCharaChip(setting.GetCharacter(charaY * 4 + charaX), charaChipSize);
                        // レンダリングした画像をエクスポートバッファにコピーする。
                        exportBuffer.WriteImage(charaChipImage, charaX * charaPlaneWidth, charaY * charaPlaneHeight);
                    }
                    catch (Exception e)
                    {
                        throw new Exception($"Character{(index + 1)}:{e.Message}");
                    }
                }
            }

            Image image = null;

            image = exportBuffer.GetImage();
            image.Save(setting.ExportSetting.ExportFilePath);
        }
Exemple #6
0
        /// <summary>
        /// 設定を書き出す。
        /// </summary>
        /// <param name="stream">出力ストリーム</param>
        /// <param name="setting">設定</param>
        public void Write(System.IO.Stream stream, GeneratorSetting setting)
        {
            XmlDocument doc = GenerateXmlDocument(setting);

            doc.Save(stream);
        }
Exemple #7
0
        /// <summary>
        /// 設定をwriterに書き出す。
        /// </summary>
        /// <param name="writer">テキストライター</param>
        /// <param name="setting">設定</param>
        public void Write(System.IO.TextWriter writer, GeneratorSetting setting)
        {
            XmlDocument doc = GenerateXmlDocument(setting);

            doc.Save(writer);
        }
Exemple #8
0
        /// <summary>
        /// 設定を書き出す。
        /// </summary>
        /// <param name="path">書き出すファイルパス</param>
        /// <param name="setting">設定</param>
        public void Write(string path, GeneratorSetting setting)
        {
            XmlDocument doc = GenerateXmlDocument(setting);

            doc.Save(path);
        }