Exemplo n.º 1
0
        private void ReadTypeSetting(FileReadStatus status, DBTypeSet data, IReadOnlyList <DBItemType> itemTypes)
        {
            Logger.Debug(FileIOMessage.StartCommonRead(typeof(DBTypeSetFileReader),
                                                       "タイプ設定"));

            var reader = new DBTypeSettingReader(status, 1, false);

            var settings = reader.Read();

            data.TypeName = settings[0].TypeName;
            data.Memo     = settings[0].Memo;
            data.ItemSettingList.AddRange(settings[0].ItemSettingList);

            if (data.ItemSettingList.Count != itemTypes.Count)
            {
                throw new InvalidOperationException(
                          $"項目値種別数と項目設定数が一致しません。");
            }

            for (var i = 0; i < data.ItemSettingList.Count; i++)
            {
                data.ItemSettingList[i].ItemType = itemTypes[i];
            }

            Logger.Debug(FileIOMessage.EndCommonRead(typeof(DBTypeSetFileReader),
                                                     "タイプ設定リスト"));
        }
Exemplo n.º 2
0
        /// <summary>
        /// イベントコマンドの動作指定コマンド
        /// </summary>
        /// <param name="status">読み込み経過状態</param>
        /// <param name="actionEntry">データ格納先</param>
        /// <exception cref="InvalidOperationException">ファイル仕様が異なる場合</exception>
        private void ReadEventActionEntry(FileReadStatus status, ActionEntry actionEntry)
        {
            Logger.Debug(FileIOMessage.StartCommonRead(typeof(EventCommandListReader),
                                                       "動作指定コマンド"));

            // ヘッダチェック
            foreach (var b in ActionEntry.HeaderBytes)
            {
                if (status.ReadByte() != b)
                {
                    throw new InvalidOperationException(
                              $"イベントコマンド中のイベントコマンドヘッダの値が異なります。(offset: {status.Offset})");
                }

                status.IncreaseByteOffset();
            }

            Logger.Debug(FileIOMessage.CheckOk(typeof(EventCommandListReader),
                                               "動作指定コマンドヘッダ"));

            // 動作フラグ
            var optionFlag = status.ReadByte();

            actionEntry.SetOptionFlag(optionFlag);
            status.IncreaseByteOffset();

            Logger.Debug(FileIOMessage.SuccessRead(typeof(EventCommandListReader),
                                                   "数値変数の数", optionFlag));

            // 動作コマンドリスト
            actionEntry.CommandList = ReadCharaMoveCommand(status);

            Logger.Debug(FileIOMessage.EndCommonRead(typeof(EventCommandListReader),
                                                     "動作指定コマンド"));
        }
Exemplo n.º 3
0
        /// <summary>
        /// 数値特殊指定数値初期値
        /// </summary>
        /// <param name="status">読み込み経過状態</param>
        /// <returns>数値特殊指定数値初期値リスト</returns>
        private List <int> ReadInitValue(FileReadStatus status)
        {
            Logger.Debug(FileIOMessage.StartCommonRead(typeof(SpecialArgDescReader),
                                                       "数値特殊指定数値初期値"));

            var result = new List <int>();

            var length = status.ReadInt();

            status.IncreaseIntOffset();

            Logger.Debug(FileIOMessage.SuccessRead(typeof(SpecialArgDescReader),
                                                   "数値特殊指定数値初期値の数", length));

            for (var i = 0; i < length; i++)
            {
                var value = status.ReadInt();
                status.IncreaseIntOffset();

                result.Add(value);

                Logger.Debug(FileIOMessage.SuccessRead(typeof(SpecialArgDescReader),
                                                       $"数値特殊指定数値{i}の初期値", value));
            }

            Logger.Debug(FileIOMessage.EndCommonRead(typeof(SpecialArgDescReader),
                                                     "数値特殊指定数値初期値"));

            return(result);
        }
Exemplo n.º 4
0
        // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
        //     Public Method
        // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

        /// <summary>
        /// タイルセット設定を読み込み、返す。
        /// </summary>
        /// <exception cref="InvalidOperationException">ファイルが仕様と異なる場合</exception>
        public TileSetSetting Read()
        {
            Logger.Debug(FileIOMessage.StartCommonRead(GetType(), ""));

            var result = ReadOneTileSetSetting(Status);

            Logger.Debug(FileIOMessage.EndCommonRead(GetType(), ""));

            return(result);
        }
Exemplo n.º 5
0
        /// <summary>
        /// 特殊引数リストを読み込み、返す。
        /// </summary>
        /// <returns>特殊引数リスト</returns>
        /// <exception cref="InvalidOperationException">ファイル仕様が異なる場合</exception>
        public void Read()
        {
            try
            {
                Logger.Debug(FileIOMessage.StartCommonRead(typeof(SpecialArgDescReader),
                                                           "特殊引数リスト"));

                // ヘッダ
                foreach (var b in CommonEventSpecialArgDescList.Header)
                {
                    if (Status.ReadByte() != b)
                    {
                        throw new InvalidOperationException(
                                  $"ファイルデータが仕様と異なります。(offset:{Status.Offset})");
                    }
                    Status.IncreaseByteOffset();
                }

                Logger.Debug(FileIOMessage.CheckOk(typeof(SpecialArgDescReader),
                                                   "ヘッダ"));

                // 引数名
                var argNameList      = ReadArgNames(Status);
                var argNameListCount = argNameList.Count;
                NumberArgNameList = argNameList.Take(argNameListCount / 2).ToList();
                StringArgNameList = argNameList.Skip(argNameListCount / 2).ToList();
                // 引数特殊指定
                var argTypeList      = ReadSpecialArgType(Status);
                var argTypeListCount = argTypeList.Count;
                NumberArgTypeList = argTypeList.Take(argTypeListCount / 2).ToList();
                StringArgTypeList = argTypeList.Skip(argTypeListCount / 2).ToList();
                // 数値特殊指定文字列パラメータ
                var stringArgLists      = ReadSpecialStringArgList(Status);
                var stringArgListsCount = stringArgLists.Count;
                NumberArgStringParamsList = stringArgLists.Take(stringArgListsCount / 2).ToList();
                StringArgStringParamsList = stringArgLists.Skip(stringArgListsCount / 2).ToList();
                // 数値特殊指定数値パラメータ
                var numberArgLists      = ReadSpecialNumberArgList(Status);
                var numberArgListsCount = numberArgLists.Count;
                NumberArgNumberParamsList = numberArgLists.Take(numberArgListsCount / 2).ToList();
                StringArgNumberParamsList = numberArgLists.Skip(numberArgListsCount / 2).ToList();
                // 数値特殊指定数値初期値
                NumberArgInitValueList = ReadInitValue(Status);

                Logger.Debug(FileIOMessage.EndCommonRead(typeof(SpecialArgDescReader),
                                                         "特殊引数リスト"));
            }
            catch (Exception ex)
            {
                throw new InvalidOperationException(
                          $"引数特殊指定データが仕様と異なります。(offset:{Status.Offset})", ex);
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// タイプ設定
        /// </summary>
        /// <param name="status">読み込み経過状態</param>
        /// <param name="dataSetting">読み込み結果インスタンス</param>
        private void ReadDataSetting(FileReadStatus status, out DBDataSetting dataSetting)
        {
            Logger.Debug(FileIOMessage.StartCommonRead(typeof(DBTypeFileReader),
                                                       "データ設定"));

            var reader = new DBDataSettingReader(status, 1);

            var settings = reader.Read();

            dataSetting = settings[0];

            Logger.Debug(FileIOMessage.EndCommonRead(typeof(DBTypeFileReader),
                                                     "データ設定"));
        }
Exemplo n.º 7
0
        /// <summary>
        /// タイプ設定
        /// </summary>
        /// <param name="status">読み込み経過状態</param>
        /// <param name="typeSetting">読み込み結果インスタンス</param>
        private void ReadTypeSetting(FileReadStatus status, out DBTypeSetting typeSetting)
        {
            Logger.Debug(FileIOMessage.StartCommonRead(typeof(DBTypeFileReader),
                                                       "タイプ設定"));

            var reader = new DBTypeSettingReader(status, 1, true);

            var settings = reader.Read();

            typeSetting = settings[0];

            Logger.Debug(FileIOMessage.EndCommonRead(typeof(DBTypeFileReader),
                                                     "タイプ設定"));
        }
Exemplo n.º 8
0
        // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
        //     Public Method
        // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

        /// <summary>
        /// DBタイプ設定を読み込み、返す。
        /// </summary>
        /// <exception cref="InvalidOperationException">ファイルが仕様と異なる場合</exception>
        public List <DBTypeSetting> Read()
        {
            Logger.Debug(FileIOMessage.StartCommonRead(GetType(), ""));

            var list = new List <DBTypeSetting>();

            for (var i = 0; i < Length; i++)
            {
                ReadOneDBTypeSetting(Status, HasDataNameList, list);
            }

            Logger.Debug(FileIOMessage.EndCommonRead(GetType(), ""));

            return(list);
        }
Exemplo n.º 9
0
        /// <summary>
        /// コモンイベントを読み込み、返す。
        /// </summary>
        /// <exception cref="InvalidOperationException">ファイルが仕様と異なる場合</exception>
        public List <CommonEvent> Read()
        {
            Logger.Debug(FileIOMessage.StartCommonRead(GetType(), ""));

            var list = new List <CommonEvent>();

            for (var i = 0; i < Length; i++)
            {
                ReadOneCommonEvent(Status, list);
            }

            Logger.Debug(FileIOMessage.EndCommonRead(GetType(), ""));

            return(list);
        }
        /// <summary>
        /// 動作指定コマンドリストを読み込み、返す。
        /// </summary>
        /// <returns>イベントコマンドリスト</returns>
        /// <exception cref="InvalidOperationException">ファイル仕様が異なる場合</exception>
        public List <ICharaMoveCommand> Read()
        {
            Logger.Debug(FileIOMessage.StartCommonRead(typeof(EventCommandListReader),
                                                       "イベントコマンドリスト"));

            var charaMoveCommandList = new List <ICharaMoveCommand>();

            for (var i = 0; i < Length; i++)
            {
                ReadCharaMoveCommand(Status, charaMoveCommandList);
            }

            Logger.Debug(FileIOMessage.EndCommonRead(typeof(EventCommandListReader),
                                                     "イベントコマンドリスト"));

            return(charaMoveCommandList);
        }
Exemplo n.º 11
0
        /// <summary>
        /// イベントコマンドリストを読み込み、返す。
        /// </summary>
        /// <returns>イベントコマンドリスト</returns>
        /// <exception cref="InvalidOperationException">ファイル仕様が異なる場合</exception>
        public EventCommandList Read()
        {
            Logger.Debug(FileIOMessage.StartCommonRead(typeof(EventCommandListReader),
                                                       "イベントコマンドリスト"));

            var eventCommandList = new List <IEventCommand>();

            for (var i = 0; i < Length; i++)
            {
                ReadEventCommand(Status, eventCommandList);
            }

            Logger.Debug(FileIOMessage.EndCommonRead(typeof(EventCommandListReader),
                                                     "イベントコマンドリスト"));

            return(new EventCommandList(eventCommandList));
        }
Exemplo n.º 12
0
        // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
        //     ReadMethod
        // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

        /// <summary>
        /// DBタイプ設定一つ
        /// </summary>
        /// <param name="status">読み込み経過状態</param>
        /// <param name="isReadDataNameList">データ名リスト読み込みフラグ</param>
        /// <param name="result">結果格納インスタンス</param>
        /// <exception cref="InvalidOperationException">バイナリデータがファイル仕様と異なる場合</exception>
        private void ReadOneDBTypeSetting(FileReadStatus status,
                                          bool isReadDataNameList, ICollection <DBTypeSetting> result)
        {
            Logger.Debug(FileIOMessage.StartCommonRead(typeof(DBTypeSettingReader), "DBタイプ設定"));

            var setting = new DBTypeSetting();

            // DBタイプ名
            ReadTypeName(status, setting);

            // 項目名
            var itemNames = ReadItemName(status);

            if (isReadDataNameList)
            {
                // データ名
                ReadDataName(status, setting);
            }

            // メモ
            ReadMemo(status, setting);

            // 特殊指定
            var specialSettingTypes = ReadItemSpecialSettingType(status);

            // 項目メモ
            var itemMemos = ReadItemMemo(status);

            // 特殊指定文字列パラメータ
            var valueDescriptionLists = ReadSpecialStringValue(status);

            // 特殊指定数値パラメータ
            var valueCaseNumberLists = ReadSpecialNumberValue(status);

            // 初期値
            var initValues = ReadItemInitValue(status);

            // 特殊指定セット
            SetItemSetting(setting, specialSettingTypes, itemNames, itemMemos, valueDescriptionLists,
                           valueCaseNumberLists, initValues);

            Logger.Debug(FileIOMessage.EndCommonRead(typeof(DBTypeSettingReader), "DBタイプ設定"));

            result.Add(setting);
        }
Exemplo n.º 13
0
        /// <summary>
        /// レイヤー1~3
        /// </summary>
        /// <param name="status">読み込み経過状態</param>
        /// <param name="mapData">データ格納マップデータインスタンス</param>
        private void ReadLayer(FileReadStatus status, MapData mapData)
        {
            Logger.Debug(FileIOMessage.StartCommonRead(typeof(MpsFileReader),
                                                       "レイヤー"));

            for (var layerIndex = 0; layerIndex < 3; layerIndex++)
            {
                Logger.Debug(FileIOMessage.StartCommonRead(typeof(MpsFileReader),
                                                           $"レイヤー{layerIndex}"));

                ReadOneLayer(status, mapData, layerIndex);

                Logger.Debug(FileIOMessage.EndCommonRead(typeof(MpsFileReader),
                                                         $"レイヤー{layerIndex}"));
            }

            Logger.Debug(FileIOMessage.EndCommonRead(typeof(MpsFileReader),
                                                     "レイヤー"));
        }
Exemplo n.º 14
0
        /// <summary>
        /// 数値特殊指定文字列パラメータ
        /// </summary>
        /// <param name="status">読み込み経過状態</param>
        /// <returns>数値特殊指定文字列パラメータリスト</returns>
        private List <List <string> > ReadSpecialStringArgList(FileReadStatus status)
        {
            Logger.Debug(FileIOMessage.StartCommonRead(typeof(SpecialArgDescReader),
                                                       "数値特殊指定文字列パラメータ"));

            var result = new List <List <string> >();

            var length = status.ReadInt();

            status.IncreaseIntOffset();

            Logger.Debug(FileIOMessage.SuccessRead(typeof(SpecialArgDescReader),
                                                   "特殊文字列引数の数", length));

            for (var i = 0; i < length; i++)
            {
                var caseLength = status.ReadInt();
                status.IncreaseIntOffset();

                Logger.Debug(FileIOMessage.SuccessRead(typeof(SpecialArgDescReader),
                                                       $"引数{i}の文字列選択可能数", caseLength));

                var caseDescriptionList = new List <string>();

                for (var j = 0; j < caseLength; j++)
                {
                    var caseDescription = status.ReadString();
                    status.AddOffset(caseDescription.ByteLength);
                    caseDescriptionList.Add(caseDescription.String);

                    Logger.Debug(FileIOMessage.SuccessRead(typeof(SpecialArgDescReader),
                                                           $"引数{i} {j}番目の文字列", caseDescription.String));
                }

                result.Add(caseDescriptionList);
            }

            Logger.Debug(FileIOMessage.EndCommonRead(typeof(SpecialArgDescReader),
                                                     "数値特殊指定文字列パラメータ"));

            return(result);
        }
Exemplo n.º 15
0
        /// <summary>
        /// 数値特殊指定数値パラメータ
        /// </summary>
        /// <param name="status">読み込み経過状態</param>
        /// <returns>数値特殊指定数値パラメータリスト</returns>
        private List <List <int> > ReadSpecialNumberArgList(FileReadStatus status)
        {
            Logger.Debug(FileIOMessage.StartCommonRead(typeof(SpecialArgDescReader),
                                                       "数値特殊指定数値パラメータ"));

            var result = new List <List <int> >();

            var length = status.ReadInt();

            status.IncreaseIntOffset();

            Logger.Debug(FileIOMessage.SuccessRead(typeof(SpecialArgDescReader),
                                                   "特殊数値引数の数", length));

            for (var i = 0; i < length; i++)
            {
                var caseLength = status.ReadInt();
                status.IncreaseIntOffset();

                Logger.Debug(FileIOMessage.SuccessRead(typeof(SpecialArgDescReader),
                                                       $"引数{i}の数値選択可能数", caseLength));

                var caseNumberList = new List <int>();

                for (var j = 0; j < caseLength; j++)
                {
                    var caseNumber = status.ReadInt();
                    status.IncreaseIntOffset();
                    caseNumberList.Add(caseNumber);

                    Logger.Debug(FileIOMessage.SuccessRead(typeof(SpecialArgDescReader),
                                                           $"引数{i} {j}番目の数値", caseNumber));
                }

                result.Add(caseNumberList);
            }

            Logger.Debug(FileIOMessage.EndCommonRead(typeof(SpecialArgDescReader),
                                                     "数値特殊指定数値パラメータ"));

            return(result);
        }
        // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
        //     ReadMethod
        // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

        /// <summary>
        /// タイプ設定
        /// </summary>
        /// <param name="status">読み込み経過状態</param>
        /// <param name="data">結果格納インスタンス</param>
        /// <exception cref="InvalidOperationException">ファイルヘッダが仕様と異なる場合</exception>
        private void ReadTypeSettingList(FileReadStatus status, DatabaseProject data)
        {
            Logger.Debug(FileIOMessage.StartCommonRead(typeof(DBTypeSettingReader),
                                                       "タイプ設定リスト"));

            var length = status.ReadInt();

            status.IncreaseIntOffset();

            Logger.Debug(FileIOMessage.SuccessRead(typeof(DatabaseProjectFileReader),
                                                   "タイプ設定数", length));

            var reader = new DBTypeSettingReader(status, length, true);

            var settings = reader.Read();

            data.TypeSettingList.AddRange(settings);

            Logger.Debug(FileIOMessage.EndCommonRead(typeof(DBTypeSettingReader),
                                                     "タイプ設定リスト"));
        }
Exemplo n.º 17
0
        // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
        //     ReadMethod
        // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

        /// <summary>
        /// DBタイプ設定一つ
        /// </summary>
        /// <param name="status">読み込み経過状態</param>
        /// <param name="result">結果格納インスタンス</param>
        /// <exception cref="InvalidOperationException">バイナリデータがファイル仕様と異なる場合</exception>
        private void ReadOneDBTypeSetting(FileReadStatus status, ICollection <DBDataSetting> result)
        {
            Logger.Debug(FileIOMessage.StartCommonRead(typeof(DBDataSettingReader), "DBタイプ設定"));

            var setting = new DBDataSetting();

            // ヘッダ
            ReadHeader(status);

            // データIDの設定方法
            ReadDataSettingType(status, setting);

            // 設定種別 & 種別順列
            ReadValueType(status, out var types);

            // DBデータ設定値
            ReadDataSettingValue(status, setting, types);

            Logger.Debug(FileIOMessage.EndCommonRead(typeof(DBDataSettingReader), "DBタイプ設定"));

            result.Add(setting);
        }
Exemplo n.º 18
0
        /// <summary>
        /// 1レイヤー情報
        /// </summary>
        /// <param name="status">読み込み経過状態</param>
        /// <param name="mapData">データ格納マップデータインスタンス</param>
        /// <param name="layerNo">レイヤー番号</param>
        private void ReadOneLayer(FileReadStatus status, MapData mapData, int layerNo)
        {
            var chips = new List <List <MapChip> >();

            for (var x = 0; x < (int)mapData.MapSizeWidth; x++)
            {
                Logger.Debug(FileIOMessage.StartCommonRead(typeof(MpsFileReader),
                                                           $"列{x}"));

                ReadLayerOneLine(status, mapData.MapSizeHeight, chips);

                Logger.Debug(FileIOMessage.EndCommonRead(typeof(MpsFileReader),
                                                         "列{x}"));
            }

            var layer = new Layer
            {
                Chips = new MapChipList(chips)
            };

            mapData.SetLayer(layerNo, layer);
        }
Exemplo n.º 19
0
        /// <summary>
        /// 動作コマンドリスト
        /// </summary>
        /// <param name="status">読み込み経過状態</param>
        /// <exception cref="InvalidOperationException">ファイル仕様が異なる場合</exception>
        private CharaMoveCommandList ReadCharaMoveCommand(FileReadStatus status)
        {
            Logger.Debug(FileIOMessage.StartCommonRead(typeof(EventCommandListReader),
                                                       "マップイベントページ動作コマンドリスト"));

            // 動作コマンド数
            var commandLength = status.ReadInt();

            status.IncreaseIntOffset();

            Logger.Debug(FileIOMessage.SuccessRead(typeof(EventCommandListReader),
                                                   "マップイベントページ動作コマンド数", commandLength));

            // 動作指定コマンド
            var reader = new CharaMoveCommandListReader(status, commandLength);
            var result = reader.Read();

            Logger.Debug(FileIOMessage.EndCommonRead(typeof(EventCommandListReader),
                                                     "マップイベントページ動作コマンドリスト"));

            return(new CharaMoveCommandList(result));
        }
Exemplo n.º 20
0
        /// <summary>
        /// 引数特殊指定
        /// </summary>
        /// <param name="status">読み込み経過状態</param>
        /// <returns>引数特殊指定リスト</returns>
        private List <CommonEventArgType> ReadSpecialArgType(FileReadStatus status)
        {
            Logger.Debug(FileIOMessage.StartCommonRead(typeof(SpecialArgDescReader),
                                                       "引数特殊指定"));

            var result = new List <CommonEventArgType>();

            var length = status.ReadInt();

            status.IncreaseIntOffset();

            for (var i = 0; i < length; i++)
            {
                var b = status.ReadByte();
                status.IncreaseByteOffset();
                result.Add(CommonEventArgType.FromByte(b));
            }

            Logger.Debug(FileIOMessage.EndCommonRead(typeof(SpecialArgDescReader),
                                                     "引数特殊指定"));

            return(result);
        }
Exemplo n.º 21
0
        /// <summary>
        /// 引数名
        /// </summary>
        /// <param name="status">読み込み経過状態</param>
        /// <returns>引数名リスト</returns>
        private List <string> ReadArgNames(FileReadStatus status)
        {
            Logger.Debug(FileIOMessage.StartCommonRead(typeof(SpecialArgDescReader),
                                                       "引数名"));

            var result = new List <string>();

            var length = status.ReadInt();

            status.IncreaseIntOffset();

            for (var i = 0; i < length; i++)
            {
                var argName = status.ReadString();
                status.AddOffset(argName.ByteLength);
                result.Add(argName.String);
            }

            Logger.Debug(FileIOMessage.EndCommonRead(typeof(SpecialArgDescReader),
                                                     "引数名"));

            return(result);
        }
Exemplo n.º 22
0
        // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
        //     ReadMethod
        // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

        /// <summary>
        /// タイルセット設定一つ
        /// </summary>
        /// <param name="status">読み込み経過状態</param>
        /// <exception cref="InvalidOperationException">バイナリデータがファイル仕様と異なる場合</exception>
        private TileSetSetting ReadOneTileSetSetting(FileReadStatus status)
        {
            Logger.Debug(FileIOMessage.StartCommonRead(typeof(TileSetSettingReader), "タイルセット設定"));

            // 設定名
            ReadName(status, out var name);

            // 基本タイルセットファイル名
            ReadBaseTileSetFileName(status, out var baseTileSetFileName);

            // オートタイルファイル名リスト
            ReadAutoTileSetFileNameList(status, AutoTileFileNameList.MaxCapacity, out var autoTileFileNames);

            // セパレータ
            ReadSeparator(status);

            // タグ番号リスト
            ReadTagNumberList(status, out var tagNumbers);

            // セパレータ
            ReadSeparator(status);

            // タイル設定リスト
            ReadTilePathSettingList(status, out var tilePathSettings);

            var result = new TileSetSetting(new TileTagNumberList(tagNumbers),
                                            new TilePathSettingList(tilePathSettings),
                                            new AutoTileFileNameList(autoTileFileNames))
            {
                Name = name,
                BaseTileSetFileName = baseTileSetFileName
            };

            Logger.Debug(FileIOMessage.EndCommonRead(typeof(TileSetSettingReader), "タイルセット設定"));

            return(result);
        }
Exemplo n.º 23
0
        /// <summary>
        /// コモンイベント一つ
        /// </summary>
        /// <param name="status">読み込み経過状態</param>
        /// <param name="result">結果格納インスタンス</param>
        /// <exception cref="InvalidOperationException">バイナリデータがファイル仕様と異なる場合</exception>
        private void ReadOneCommonEvent(FileReadStatus status, ICollection <CommonEvent> result)
        {
            Logger.Debug(FileIOMessage.StartCommonRead(typeof(CommonEventReader), "コモンイベント"));

            var commonEvent = new CommonEvent();

            // コモンイベントヘッダ
            ReadHeader(status);

            // コモンイベントID
            ReadCommonEventId(status, commonEvent);

            // 起動条件
            ReadBootCondition(status, commonEvent);

            // 数値引数の数
            ReadNumberArgLength(status, commonEvent);

            // 文字列引数の数
            ReadStringArgLength(status, commonEvent);

            // コモンイベント名
            ReadCommonEventName(status, commonEvent);

            // イベントコマンド
            ReadEventCommand(status, commonEvent);

            // メモ前の文字列
            ReadBeforeMemoString(status, commonEvent);

            // メモ
            ReadMemo(status, commonEvent);

            // 引数特殊指定
            ReadSpecialArgDesc(status, commonEvent);

            // 引数初期値後のチェックディジット
            ReadAfterInitValueBytes(status);

            // ラベル色
            ReadLabelColor(status, commonEvent);

            // 変数名
            ReadSelfVarName(status, commonEvent);

            // セルフ変数名の後のチェックディジット
            ReadAfterMemoBytesSelfVariableNamesBytes(status);

            // フッタ文字列
            ReadFooterString(status, commonEvent);

            // コモンイベント末尾A
            var hasNext = ReadFooterA(status);

            if (hasNext == HasNext.No)
            {
                result.Add(commonEvent);
                return;
            }

            // 返戻値
            ReadReturnValue(status, commonEvent);

            // コモンイベント末尾B
            ReadFooterB(status);

            Logger.Debug(FileIOMessage.EndCommonRead(typeof(CommonEventReader), "コモンイベント"));

            result.Add(commonEvent);
        }
Exemplo n.º 24
0
        /// <summary>
        /// DBデータ設定値ひとつ分
        /// </summary>
        /// <param name="status">読み込み経過状態</param>
        /// <param name="result">結果格納インスタンス</param>
        /// <param name="itemTypes">項目種別リスト</param>
        /// <param name="numberItemCount">数値項目数</param>
        /// <param name="stringItemCount">文字列項目数</param>
        /// <returns></returns>
        /// <exception cref="InvalidOperationException"></exception>
        private void ReadOneDataSettingValue(FileReadStatus status, List <List <DBItemValue> > result,
                                             IEnumerable <DBItemType> itemTypes, int numberItemCount, int stringItemCount)
        {
            Logger.Debug(FileIOMessage.StartCommonRead(typeof(DBDataSettingReader),
                                                       "データ設定値"));

            var numberItems = new List <DBValueInt>();
            var stringItems = new List <DBValueString>();

            for (var i = 0; i < numberItemCount; i++)
            {
                var numberItem = status.ReadInt();
                status.IncreaseIntOffset();

                Logger.Debug(FileIOMessage.SuccessRead(typeof(DBDataSettingReader),
                                                       $"  数値項目{i,2}", numberItem));

                numberItems.Add(numberItem);
            }

            for (var i = 0; i < stringItemCount; i++)
            {
                var stringItem = status.ReadString();
                status.AddOffset(stringItem.ByteLength);

                Logger.Debug(FileIOMessage.SuccessRead(typeof(DBDataSettingReader),
                                                       $"  文字列項目{i,2}", stringItem));

                stringItems.Add(stringItem.String);
            }

            var valueList = new List <DBItemValue>();

            var numberIndex = 0;
            var stringIndex = 0;

            foreach (var itemType in itemTypes)
            {
                if (itemType == DBItemType.Int)
                {
                    valueList.Add(numberItems[numberIndex]);
                    numberIndex++;
                }
                else if (itemType == DBItemType.String)
                {
                    valueList.Add(stringItems[stringIndex]);
                    stringIndex++;
                }
                else
                {
                    // 通常ここへは来ない
                    throw new InvalidOperationException(
                              "未対応のデータ種別です。");
                }
            }

            result.Add(valueList);

            Logger.Debug(FileIOMessage.EndCommonRead(typeof(DBDataSettingReader),
                                                     "データ設定値"));
        }
Exemplo n.º 25
0
        /// <summary>
        /// マップイベント
        /// </summary>
        /// <param name="size">マップイベント数</param>
        /// <param name="status">読み込み経過状態</param>
        /// <param name="mapData">読み込み経過状態</param>
        /// <exception cref="InvalidOperationException">ファイル仕様が異なる場合</exception>
        private void ReadMapEvent(int size, FileReadStatus status, MapData mapData)
        {
            Logger.Debug(FileIOMessage.StartCommonRead(typeof(MpsFileReader),
                                                       "マップイベント"));

            var mapEvents = new List <MapEvent>();
            var count     = 0;

            while (true)
            {
                Logger.Debug(FileIOMessage.StartCommonRead(typeof(MpsFileReader),
                                                           $"マップイベント{count}"));

                // ヘッダチェック
                var validatedHeader = status.ReadByte() == MapEvent.Header[0];
                if (!validatedHeader)
                {
                    break;
                }


                Logger.Debug(FileIOMessage.CheckOk(typeof(MpsFileReader),
                                                   "ヘッダ"));

                // ヘッダ分オフセット加算
                status.AddOffset(MapEvent.Header.Length);

                var mapEvent = new MapEvent();

                // マップイベントID
                mapEvent.MapEventId = status.ReadInt();
                status.IncreaseIntOffset();

                Logger.Debug(FileIOMessage.SuccessRead(typeof(MpsFileReader),
                                                       "マップイベントID", mapEvent.MapEventId));

                // イベント名
                var woditorString = status.ReadString();
                mapEvent.EventName = woditorString.String;
                status.AddOffset(woditorString.ByteLength);

                Logger.Debug(FileIOMessage.SuccessRead(typeof(MpsFileReader),
                                                       "イベント名", mapEvent.EventName));

                // X座標
                var posX = status.ReadInt();
                status.IncreaseIntOffset();

                Logger.Debug(FileIOMessage.SuccessRead(typeof(MpsFileReader),
                                                       "X座標", posX));

                // Y座標
                var posY = status.ReadInt();
                status.IncreaseIntOffset();

                Logger.Debug(FileIOMessage.SuccessRead(typeof(MpsFileReader),
                                                       "Y座標", posY));

                mapEvent.Position = (posX, posY);

                // イベントページ数
                var pageLength = status.ReadInt();
                status.IncreaseIntOffset();

                Logger.Debug(FileIOMessage.SuccessRead(typeof(MpsFileReader),
                                                       "イベントページ数", pageLength));

                // 0パディングチェック
                var padding = status.ReadInt();
                status.IncreaseIntOffset();
                var isCorrectPadding = padding == 0;
                if (!isCorrectPadding)
                {
                    throw new InvalidOperationException(
                              $"マップイベントのパディングが異なります。(offset:{status.Offset})");
                }

                Logger.Debug(FileIOMessage.CheckOk(typeof(MpsFileReader),
                                                   "0パディング"));

                // マップイベントページ
                var mapEventPageList = new List <MapEventPage>();
                for (var i = 0; i < pageLength; i++)
                {
                    Logger.Debug(FileIOMessage.StartCommonRead(typeof(MpsFileReader),
                                                               $"マップイベントページ{i}"));

                    ReadMapEventOnePage(status, mapEventPageList);

                    Logger.Debug(FileIOMessage.EndCommonRead(typeof(MpsFileReader),
                                                             $"マップイベントページ{i}"));
                }

                mapEvent.MapEventPageList = new MapEventPageList(mapEventPageList);

                // イベントページ末尾チェック
                foreach (var b in MapEvent.Footer)
                {
                    if (status.ReadByte() != b)
                    {
                        throw new InvalidOperationException(
                                  $"マップイベント末尾の値が異なります。(offset: {status.Offset})");
                    }

                    status.IncreaseByteOffset();
                }

                Logger.Debug(FileIOMessage.CheckOk(typeof(MpsFileReader),
                                                   "イベントページ末尾"));

                mapEvents.Add(mapEvent);

                Logger.Debug(FileIOMessage.EndCommonRead(typeof(MpsFileReader),
                                                         $"マップイベント{count}"));

                count++;
            }

            if (count != size)
            {
                throw new InvalidOperationException(
                          $"マップイベントデータの数が期待する数と異なります。(期待する数:{size}, 実際のイベント数:{count})");
            }

            Logger.Debug(FileIOMessage.EndCommonRead(typeof(MpsFileReader),
                                                     "マップイベント"));

            mapData.MapEvents = new MapEventList(mapEvents);
        }