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), "タイプ設定リスト")); }
/// <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), "動作指定コマンド")); }
/// <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); }
// _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ // 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); }
/// <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); } }
/// <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), "データ設定")); }
/// <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), "タイプ設定")); }
// _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ // 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); }
/// <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); }
/// <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)); }
// _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ // 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); }
/// <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), "レイヤー")); }
/// <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); }
/// <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), "タイプ設定リスト")); }
// _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ // 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); }
/// <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); }
/// <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)); }
/// <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); }
/// <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); }
// _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ // 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); }
/// <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); }
/// <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), "データ設定値")); }
/// <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); }