/// <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); }
/// <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> /// <param name="statuses">読み込み結果格納インスタンス</param> private void ReadOpenStatusList(FileReadStatus status, out List <MapTreeOpenState> statuses) { // ステータス数 var length = status.ReadInt(); status.IncreaseIntOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(MapTreeOpenStatusDataFileReader), "マップツリー開閉状態数", length)); statuses = new List <MapTreeOpenState>(); for (var i = 0; i < length; i++) { var code = status.ReadByte(); status.IncreaseByteOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(MapTreeOpenStatusDataFileReader), $"マップツリー開閉状態{i}コード値", code)); statuses.Add(MapTreeOpenState.FromCode(code)); } }
// _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ // 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="setting">結果格納インスタンス</param> private void ReadDataName(FileReadStatus status, DBTypeSetting setting) { var length = status.ReadInt(); status.IncreaseIntOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(DBTypeSettingReader), "データ数", length)); var dataNameList = new List <DataName>(); for (var i = 0; i < length; i++) { var name = status.ReadString(); status.AddOffset(name.ByteLength); Logger.Debug(FileIOMessage.SuccessRead(typeof(DBTypeSettingReader), $" データ名{i,4}", name.String)); dataNameList.Add(name.ToString()); } setting.DataNameList = new DataNameList(dataNameList); }
/// <summary> /// 特殊指定数値パラメータ /// </summary> /// <param name="status">読み込み経過状態</param> /// <returns>特殊指定数値パラメータリスト</returns> private List <List <DatabaseValueCaseNumber> > ReadSpecialNumberValue(FileReadStatus status) { var length = status.ReadInt(); status.IncreaseIntOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(DBTypeSettingReader), "特殊指定数値パラメータ数", length)); var result = new List <List <DatabaseValueCaseNumber> >(); for (var i = 0; i < length; i++) { var descriptionLength = status.ReadInt(); status.IncreaseIntOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(DBTypeSettingReader), $" 項目{i,2}のパラメータ数", descriptionLength)); var paramList = new List <DatabaseValueCaseNumber>(); for (var j = 0; j < descriptionLength; j++) { var value = status.ReadInt(); status.IncreaseIntOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(DBTypeSettingReader), $" パラメータ{j,2}", value)); paramList.Add(value); } result.Add(paramList); } return(result); }
/// <summary> /// 初期値 /// </summary> /// <param name="status">読み込み経過状態</param> /// <returns>初期値リスト</returns> private List <DBValueInt> ReadItemInitValue(FileReadStatus status) { var length = status.ReadInt(); status.IncreaseIntOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(DBTypeSettingReader), "項目初期値数", length)); var result = new List <DBValueInt>(); for (var i = 0; i < length; i++) { var value = status.ReadInt(); status.IncreaseIntOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(DBTypeSettingReader), $" 初期値{i,2}", value)); result.Add(value); } return(result); }
/// <summary> /// 項目メモ /// </summary> /// <param name="status">読み込み経過状態</param> /// <returns>項目名リスト</returns> private List <ItemMemo> ReadItemMemo(FileReadStatus status) { var length = status.ReadInt(); status.IncreaseIntOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(DBTypeSettingReader), "項目メモ数", length)); var result = new List <ItemMemo>(); for (var i = 0; i < length; i++) { var value = status.ReadString(); status.AddOffset(value.ByteLength); Logger.Debug(FileIOMessage.SuccessRead(typeof(DBTypeSettingReader), $" 項目メモ{i,2}", value.String)); result.Add(value.String); } return(result); }
/// <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="filePath">読み込みファイルパス</param> /// <exception cref="ArgumentNullException">filePathがnullの場合</exception> public MapTreeDataFileReader(MapTreeDataFilePath filePath) : base(filePath) { ReadStatus = new FileReadStatus(FilePath); }
/// <summary> /// コンストラクタ /// </summary> /// <param name="status">読み込み経過状態</param> public SpecialArgDescReader(FileReadStatus status) { Status = status; }
// _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ // Public Property // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ /// <summary> /// コンストラクタ /// </summary> /// <param name="filePath">読み込みファイルパス</param> /// <exception cref="ArgumentNullException">filePathがnullの場合</exception> public DBDataFileReader(DBDataFilePath filePath) : base(filePath) { ReadStatus = new FileReadStatus(FilePath); }
/// <summary> /// コンストラクタ /// </summary> /// <param name="filePath">読み込みファイルパス</param> /// <exception cref="ArgumentNullException">filePathがnullの場合</exception> public CommonFileReader(CommonFilePath filePath) : base(filePath) { ReadStatus = new FileReadStatus(FilePath); }
// _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ // Public Property // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ /// <summary> /// コンストラクタ /// </summary> /// <param name="filePath">読み込みファイルパス</param> /// <exception cref="ArgumentNullException">filePathがnullの場合</exception> public DBTypeSetFileReader(DBTypeSetFilePath filePath) : base(filePath) { ReadStatus = new FileReadStatus(FilePath); }
/// <summary> /// マップイベントページ /// </summary> /// <param name="status">読み込み経過状態</param> /// <param name="mapEventPages">格納先リスト</param> /// <exception cref="InvalidOperationException">ファイル仕様が異なる場合</exception> private void ReadMapEventOnePage(FileReadStatus status, ICollection <MapEventPage> mapEventPages) { var result = new MapEventPage(); // ヘッダチェック foreach (var b in MapEventPage.Header) { if (status.ReadByte() != b) { throw new InvalidOperationException( $"マップイベントページのヘッダが異なります。(offset: {status.Offset})"); } status.IncreaseByteOffset(); } Logger.Debug(FileIOMessage.CheckOk(typeof(MpsFileReader), "マップイベントページヘッダ")); var graphicInfo = new MapEventPageGraphicInfo(); // タイル画像ID var graphicTileId = (MapEventTileId)status.ReadInt(); Logger.Debug(FileIOMessage.SuccessRead(typeof(MpsFileReader), "マップイベントページタイル画像ID", graphicTileId)); if (graphicTileId != MapEventTileId.NotUse) { graphicInfo.IsGraphicTileChip = true; graphicInfo.GraphicTileId = graphicTileId; } status.IncreaseIntOffset(); // キャラチップ名 var charaChipString = status.ReadString(); Logger.Debug(FileIOMessage.SuccessRead(typeof(MpsFileReader), "マップイベントページキャラチップ名", charaChipString.String)); if (!graphicInfo.IsGraphicTileChip) { graphicInfo.CharaChipFilePath = charaChipString.String; } status.AddOffset(charaChipString.ByteLength); // 初期キャラ向き var initDirection = status.ReadByte(); graphicInfo.InitDirection = CharaChipDirection.FromByte(initDirection); status.IncreaseByteOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(MpsFileReader), "マップイベントページ初期キャラ向き", graphicInfo.InitDirection)); // 初期アニメーション番号 graphicInfo.InitAnimationId = status.ReadByte(); status.IncreaseByteOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(MpsFileReader), "マップイベントページ初期アニメーション番号", graphicInfo.InitAnimationId)); // キャラチップ透過度 graphicInfo.CharaChipOpacity = status.ReadByte(); status.IncreaseByteOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(MpsFileReader), "マップイベントページキャラチップ透過度", graphicInfo.CharaChipOpacity)); // キャラチップ表示形式 graphicInfo.CharaChipDrawType = PictureDrawType.FromByte(status.ReadByte()); status.IncreaseByteOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(MpsFileReader), "マップイベントページキャラチップ表示形式", graphicInfo.CharaChipDrawType)); result.GraphicInfo = graphicInfo; var bootInfo = new MapEventPageBootInfo(); // 起動条件 bootInfo.MapEventBootType = MapEventBootType.FromByte(status.ReadByte()); status.IncreaseByteOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(MpsFileReader), "マップイベントページ起動条件", bootInfo.MapEventBootType)); // 条件1~4演算子 & 使用フラグ var conditions = new List <MapEventBootCondition> { new MapEventBootCondition(), new MapEventBootCondition(), new MapEventBootCondition(), new MapEventBootCondition(), }; for (var i = 0; i < 4; i++) { conditions[i].Operation = CriteriaOperator.FromByte((byte)(status.ReadByte() & 0xF0)); conditions[i].UseCondition = (byte)(status.ReadByte() & 0x0F) != 0; status.IncreaseByteOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(MpsFileReader), $"マップイベントページ起動条件{i}演算子", conditions[i].Operation)); Logger.Debug(FileIOMessage.SuccessRead(typeof(MpsFileReader), $"マップイベントページ起動条件{i}使用フラグ", conditions[i].UseCondition)); } // 条件1~4左辺 for (var i = 0; i < 4; i++) { conditions[i].LeftSide = status.ReadInt(); status.IncreaseIntOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(MpsFileReader), $"マップイベントページ起動条件{i}左辺", conditions[i].LeftSide)); } // 条件1~4右辺 for (var i = 0; i < 4; i++) { conditions[i].RightSide = status.ReadInt(); status.IncreaseIntOffset(); bootInfo.SetEventBootCondition(i, conditions[i]); Logger.Debug(FileIOMessage.SuccessRead(typeof(MpsFileReader), $"マップイベントページ起動条件{i}右辺", conditions[i].RightSide)); } result.BootInfo = bootInfo; var moveRouteInfo = new MapEventPageMoveRouteInfo(); // アニメ速度 moveRouteInfo.AnimateSpeed = AnimateSpeed.FromByte(status.ReadByte()); status.IncreaseByteOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(MpsFileReader), "マップイベントページアニメ速度", moveRouteInfo.AnimateSpeed)); // 移動速度 moveRouteInfo.MoveSpeed = MoveSpeed.FromByte(status.ReadByte()); status.IncreaseByteOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(MpsFileReader), "マップイベントページ移動速度", moveRouteInfo.MoveSpeed)); // 移動頻度 moveRouteInfo.MoveFrequency = MoveFrequency.FromByte(status.ReadByte()); status.IncreaseByteOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(MpsFileReader), "マップイベントページ移動頻度", moveRouteInfo.MoveFrequency)); // 移動ルート moveRouteInfo.MoveType = MoveType.FromByte(status.ReadByte()); status.IncreaseByteOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(MpsFileReader), "マップイベントページ移動ルート種別", moveRouteInfo.MoveType)); var option = new MapEventPageOption(); // オプション var optionByte = status.ReadByte(); option.SetOptionFlag(optionByte); status.IncreaseByteOffset(); result.Option = option; Logger.Debug(FileIOMessage.SuccessRead(typeof(MpsFileReader), "マップイベントページオプション", optionByte)); // カスタム移動ルートフラグ var actionEntry = new ActionEntry(); var customMoveRouteFlag = status.ReadByte(); actionEntry.SetOptionFlag(customMoveRouteFlag); status.IncreaseByteOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(MpsFileReader), "マップイベントページカスタム移動ルートフラグ", customMoveRouteFlag)); // 動作指定コマンド数 actionEntry.CommandList = ReadCharaMoveCommand(status); moveRouteInfo.CustomMoveRoute = actionEntry; result.MoveRouteInfo = moveRouteInfo; // イベント行数 var eventLength = status.ReadInt(); status.IncreaseIntOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(MpsFileReader), "マップイベントページイベント行数", eventLength)); // イベントコマンド var eventCommandListReader = new EventCommandListReader(status, eventLength); result.EventCommands = eventCommandListReader.Read(); // イベントコマンド終端チェック foreach (var b in EventCommandList.EndEventCommand) { if (status.ReadByte() != b) { throw new InvalidOperationException( $"イベントコマンド後の値が異なります。(offset: {status.Offset})"); } status.IncreaseByteOffset(); } Logger.Debug(FileIOMessage.CheckOk(typeof(MpsFileReader), "マップイベントページイベントコマンド終端")); // 影グラフィック番号 result.ShadowGraphicId = status.ReadByte(); status.IncreaseByteOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(MpsFileReader), "マップイベントページ影グラフィック番号", result.ShadowGraphicId)); // 接触範囲拡張X var rangeWidth = status.ReadByte(); status.IncreaseByteOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(MpsFileReader), "マップイベントページ接触範囲拡張X", rangeWidth)); // 接触範囲拡張Y var rangeHeight = status.ReadByte(); status.IncreaseByteOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(MpsFileReader), "マップイベントページ接触範囲拡張Y", rangeHeight)); result.HitExtendRange = (rangeWidth, rangeHeight); // イベントページ末尾チェック foreach (var b in MapEventPage.Footer) { if (status.ReadByte() != b) { throw new InvalidOperationException( $"イベントページ末尾の値が異なります。(offset: {status.Offset})"); } status.IncreaseByteOffset(); } Logger.Debug(FileIOMessage.CheckOk(typeof(MpsFileReader), "マップイベントページ末尾チェック")); // 完了 mapEventPages.Add(result); }
/// <summary> /// イベントコマンド /// </summary> /// <param name="status">読み込み経過状態</param> /// <param name="commandList">データ格納先</param> /// <exception cref="InvalidOperationException">ファイル仕様が異なる場合</exception> private void ReadEventCommand(FileReadStatus status, ICollection <IEventCommand> commandList) { // 数値変数の数 var numVarLength = status.ReadByte(); status.IncreaseByteOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(EventCommandListReader), "数値変数の数", numVarLength)); // 数値変数 var numVarList = new List <int>(); for (var i = 0; i < numVarLength; i++) { var numVar = status.ReadInt(); numVarList.Add(numVar); status.IncreaseIntOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(EventCommandListReader), $"数値変数{i}", numVar)); } // インデント var indent = (sbyte)status.ReadByte(); status.IncreaseByteOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(EventCommandListReader), "インデント", indent)); // 文字データ数 var strVarLength = status.ReadByte(); status.IncreaseByteOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(EventCommandListReader), "文字列変数の数", strVarLength)); // 文字列変数 var strVarList = new List <string>(); for (var i = 0; i < strVarLength; i++) { var woditorString = status.ReadString(); strVarList.Add(woditorString.String); status.AddOffset(woditorString.ByteLength); Logger.Debug(FileIOMessage.SuccessRead(typeof(EventCommandListReader), $"文字列変数{i}", woditorString.String)); } // 動作指定フラグ var hasMoveCommand = status.ReadByte() != 0; status.IncreaseByteOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(EventCommandListReader), "動作指定フラグ", hasMoveCommand)); // 動作指定コマンド ActionEntry actionEntry = null; if (hasMoveCommand) { actionEntry = new ActionEntry(); ReadEventActionEntry(status, actionEntry); } // 引数の数チェック if (numVarLength != numVarList.Count) { throw new InvalidOperationException( "指定された数値引数の数と実際の数値引数の数が一致しません。"); } if (strVarLength != strVarList.Count) { throw new InvalidOperationException( "指定された文字列引数の数と実際の文字列引数の数が一致しません。"); } // 結果 var eventCommand = EventCommandFactory.CreateRaw( numVarList, indent, strVarList, actionEntry); Logger.Debug("イベントコマンド生成成功"); commandList.Add(eventCommand); }
/// <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> /// コンストラクタ /// </summary> /// <param name="status">読み込み経過状態</param> /// <param name="length">コモンイベント数</param> public CommonEventReader(FileReadStatus status, int length) { Status = status; Length = length; }
/// <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); }
// _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ // Constructor // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ /// <summary> /// コンストラクタ /// </summary> /// <param name="status">読み込み経過状態</param> public TileSetSettingReader(FileReadStatus status) { Status = status; }
// _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ // Constructor // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ /// <summary> /// コンストラクタ /// </summary> /// <param name="status">読み込み経過状態</param> /// <param name="length">DBタイプ設定数</param> public DBDataSettingReader(FileReadStatus status, int length) { Status = status; Length = length; }
/// <summary> /// コンストラクタ /// </summary> /// <param name="filePath">読み込みファイルパス</param> /// <exception cref="ArgumentNullException">filePathがnullの場合</exception> public TileSetFileReader(TileSetFilePath filePath) : base(filePath) { ReadStatus = new FileReadStatus(FilePath); }
/// <summary> /// コンストラクタ /// </summary> /// <param name="status">読み込み経過状態</param> /// <param name="length">動作指定コマンド数</param> public CharaMoveCommandListReader(FileReadStatus status, int length) { Status = status; Length = length; }
/// <summary> /// コンストラクタ /// </summary> /// <param name="filePath">読み込みファイルパス</param> /// <exception cref="ArgumentNullException">filePathがnullの場合</exception> public MpsFileReader(MpsFilePath filePath) : base(filePath) { ReadStatus = new FileReadStatus(FilePath); }
/// <summary> /// 動作指定コマンド /// </summary> /// <param name="status">読み込み経過状態</param> /// <param name="commandList">データ格納先</param> /// <exception cref="InvalidOperationException">ファイル仕様が異なる場合</exception> private void ReadCharaMoveCommand(FileReadStatus status, ICollection <ICharaMoveCommand> commandList) { // 動作指定コード var charaMoveCode = status.ReadByte(); CharaMoveCommandCode commandCode; try { commandCode = CharaMoveCommandCode.FromByte(charaMoveCode); } catch { throw new InvalidOperationException( $"存在しない動作指定コマンドコードが読み込まれました。" + $"(コマンドコード値:{charaMoveCode}, offset:{status.Offset}"); } var charaMoveCommand = CharaMoveCommandFactory.CreateRaw(commandCode); status.IncreaseByteOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(EventCommandListReader), "動作指定コード", charaMoveCode)); // 変数の数 var varLength = status.ReadByte(); status.IncreaseByteOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(EventCommandListReader), "変数の数", charaMoveCode)); // 変数 for (var i = 0; i < varLength; i++) { var value = status.ReadInt(); charaMoveCommand.SetNumberValue(i, value); status.IncreaseIntOffset(); Logger.Debug(FileIOMessage.SuccessRead(typeof(EventCommandListReader), $"変数{i}", value)); } // 終端コードチェック foreach (var b in CharaMoveCommandBase.EndBlockCode) { if (status.ReadByte() != b) { throw new InvalidOperationException( $"動作指定コマンド末尾の値が異なります。(offset: {status.Offset})"); } status.IncreaseByteOffset(); } Logger.Debug(FileIOMessage.CheckOk(typeof(EventCommandListReader), $"終端コード")); // 結果 commandList.Add(charaMoveCommand); }
/// <summary> /// タイルセット設定 /// </summary> /// <param name="status"></param> /// <param name="setting"></param> private void ReadTileSetSetting(FileReadStatus status, out TileSetSetting setting) { var reader = new TileSetSettingReader(status); setting = reader.Read(); }
// _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ // Constructor // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ /// <summary> /// コンストラクタ /// </summary> /// <param name="status">読み込み経過状態</param> /// <param name="length">DBタイプ設定数</param> /// <param name="hasDataNameList">データ名リスト含有フラグ</param> public DBTypeSettingReader(FileReadStatus status, int length, bool hasDataNameList) { Status = status; Length = length; HasDataNameList = hasDataNameList; }
/// <summary> /// コンストラクタ /// </summary> /// <param name="status">読み込み経過状態</param> /// <param name="length">イベントコマンド数</param> public EventCommandListReader(FileReadStatus status, int length) { Status = status; Length = length; }