/// <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)
         { // 解析の例外は無視する。
         }
     }
 }
Esempio n. 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);
        }
Esempio n. 3
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);
        }
Esempio n. 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);
        }