/// <summary> /// 特殊指定数値パラメータ /// </summary> /// <param name="readStatus">読み込み経過状態</param> /// <returns>特殊指定数値パラメータリスト</returns> private List <List <DatabaseValueCaseNumber> > ReadSpecialNumberValue(BinaryReadStatus readStatus) { var length = readStatus.ReadInt(); readStatus.IncreaseIntOffset(); var result = new List <List <DatabaseValueCaseNumber> >(); for (var i = 0; i < length; i++) { var descriptionLength = readStatus.ReadInt(); readStatus.IncreaseIntOffset(); var paramList = new List <DatabaseValueCaseNumber>(); for (var j = 0; j < descriptionLength; j++) { var value = readStatus.ReadInt(); readStatus.IncreaseIntOffset(); paramList.Add(value); } result.Add(paramList); } return(result); }
/// <summary> /// 設定種別 & 種別順列 /// </summary> /// <param name="readStatus">読み込み経過状態</param> /// <param name="itemTypes">取得した項目種別リスト格納先</param> private void ReadValueType(BinaryReadStatus readStatus, out List <DBItemType> itemTypes) { var length = readStatus.ReadInt(); readStatus.IncreaseIntOffset(); var countDic = new Dictionary <DBItemType, int> { { DBItemType.Int, 0 }, { DBItemType.String, 0 } }; itemTypes = new List <DBItemType>(); for (var i = 0; i < length; i++) { var settingCode = readStatus.ReadInt(); readStatus.IncreaseIntOffset(); var itemType = DBItemType.FromValue(settingCode); // 項目タイプ数集計 countDic[itemType]++; // 種別順位は無視する itemTypes.Add(itemType); } }
/// <summary> /// 数値特殊指定文字列パラメータ /// </summary> /// <param name="readStatus">読み込み経過状態</param> /// <returns>数値特殊指定文字列パラメータリスト</returns> private List <List <string> > ReadSpecialStringArgList(BinaryReadStatus readStatus) { var result = new List <List <string> >(); var length = readStatus.ReadInt(); readStatus.IncreaseIntOffset(); for (var i = 0; i < length; i++) { var caseLength = readStatus.ReadInt(); readStatus.IncreaseIntOffset(); var caseDescriptionList = new List <string>(); for (var j = 0; j < caseLength; j++) { var caseDescription = readStatus.ReadString(); readStatus.AddOffset(caseDescription.ByteLength); caseDescriptionList.Add(caseDescription.String); } result.Add(caseDescriptionList); } return(result); }
/// <summary> /// 数値特殊指定数値パラメータ /// </summary> /// <param name="readStatus">読み込み経過状態</param> /// <returns>数値特殊指定数値パラメータリスト</returns> private List <List <int> > ReadSpecialNumberArgList(BinaryReadStatus readStatus) { var result = new List <List <int> >(); var length = readStatus.ReadInt(); readStatus.IncreaseIntOffset(); for (var i = 0; i < length; i++) { var caseLength = readStatus.ReadInt(); readStatus.IncreaseIntOffset(); var caseNumberList = new List <int>(); for (var j = 0; j < caseLength; j++) { var caseNumber = readStatus.ReadInt(); readStatus.IncreaseIntOffset(); caseNumberList.Add(caseNumber); } result.Add(caseNumberList); } return(result); }
/// <summary> /// タイル通行設定リスト /// </summary> /// <param name="readStatus">読み込み経過状態</param> /// <param name="list">結果格納インスタンス</param> private void ReadTilePathSettingList(BinaryReadStatus readStatus, out List <TilePathSetting> list) { var length = readStatus.ReadInt(); readStatus.IncreaseIntOffset(); list = new List <TilePathSetting>(); for (var i = 0; i < length; i++) { var tilePathSettingCode = readStatus.ReadInt(); readStatus.IncreaseIntOffset(); list.Add(new TilePathSetting(tilePathSettingCode)); } }
/// <summary> /// ラベル色 /// </summary> /// <param name="readStatus">読み込み経過状態</param> /// <param name="commonEvent">結果格納インスタンス</param> private void ReadLabelColor(BinaryReadStatus readStatus, CommonEvent commonEvent) { var colorNumber = readStatus.ReadInt(); readStatus.IncreaseIntOffset(); commonEvent.LabelColor = CommonEventLabelColor.FromInt(colorNumber); }
/// <summary> /// 返戻セルフ変数インデックス /// </summary> /// <param name="readStatus">読み込み経過状態</param> /// <param name="commonEvent">結果格納インスタンス</param> private void ReadReturnVariableIndex(BinaryReadStatus readStatus, CommonEvent commonEvent) { var index = readStatus.ReadInt(); readStatus.IncreaseIntOffset(); commonEvent.SetReturnVariableIndex(index); }
/// <summary> /// 数値特殊指定数値初期値 /// </summary> /// <param name="readStatus">読み込み経過状態</param> /// <returns>数値特殊指定数値初期値リスト</returns> private List <int> ReadInitValue(BinaryReadStatus readStatus) { var result = new List <int>(); var length = readStatus.ReadInt(); readStatus.IncreaseIntOffset(); for (var i = 0; i < length; i++) { var value = readStatus.ReadInt(); readStatus.IncreaseIntOffset(); result.Add(value); } return(result); }
/// <summary> /// イベントコマンド /// </summary> /// <param name="readStatus">読み込み経過状態</param> /// <param name="commonEvent">結果格納インスタンス</param> private void ReadEventCommand(BinaryReadStatus readStatus, CommonEvent commonEvent) { var length = readStatus.ReadInt(); readStatus.IncreaseIntOffset(); var reader = new EventCommandListReader(); commonEvent.EventCommands = reader.Read(readStatus, length); }
private void ReadTypeSettingList(BinaryReadStatus readStatus, DatabaseProject data) { var length = readStatus.ReadInt(); readStatus.IncreaseIntOffset(); var reader = new DBTypeSettingReader(); var settings = reader.Read(readStatus, length, true); data.TypeSettingList.AddRange(settings); }
/// <summary> /// 動作コマンドリスト /// </summary> /// <param name="readStatus">読み込み経過状態</param> /// <exception cref="InvalidOperationException">ファイル仕様が異なる場合</exception> private CharaMoveCommandList ReadCharaMoveCommand(BinaryReadStatus readStatus) { // 動作コマンド数 var commandLength = readStatus.ReadInt(); readStatus.IncreaseIntOffset(); // 動作指定コマンド var reader = new CharaMoveCommandListReader(); var result = reader.Read(commandLength, readStatus); return(new CharaMoveCommandList(result)); }
private void ReadCharaMoveCommand(BinaryReadStatus readStatus, ICollection <ICharaMoveCommand> commandList) { // 動作指定コード var charaMoveCode = readStatus.ReadByte(); CharaMoveCommandCode commandCode; try { commandCode = CharaMoveCommandCode.FromByte(charaMoveCode); } catch { throw new InvalidOperationException( $"存在しない動作指定コマンドコードが読み込まれました。" + $"(コマンドコード値:{charaMoveCode}, offset:{readStatus.Offset}"); } var charaMoveCommand = CharaMoveCommandFactory.CreateRaw(commandCode); readStatus.IncreaseByteOffset(); // 変数の数 var varLength = readStatus.ReadByte(); readStatus.IncreaseByteOffset(); // 変数 for (var i = 0; i < varLength; i++) { var value = readStatus.ReadInt(); charaMoveCommand.SetNumberValue(i, value); readStatus.IncreaseIntOffset(); } // 終端コードチェック foreach (var b in CharaMoveCommandBase.EndBlockCode) { if (readStatus.ReadByte() != b) { throw new InvalidOperationException( $"動作指定コマンド末尾の値が異なります。(offset: {readStatus.Offset})"); } readStatus.IncreaseByteOffset(); } // 結果 commandList.Add(charaMoveCommand); }
/// <summary> /// DBデータ設定値ひとつ分 /// </summary> /// <param name="readStatus">読み込み経過状態</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(BinaryReadStatus readStatus, List <List <DBItemValue> > result, IEnumerable <DBItemType> itemTypes, int numberItemCount, int stringItemCount) { var numberItems = new List <DBValueInt>(); var stringItems = new List <DBValueString>(); for (var i = 0; i < numberItemCount; i++) { var numberItem = readStatus.ReadInt(); readStatus.IncreaseIntOffset(); numberItems.Add(numberItem); } for (var i = 0; i < stringItemCount; i++) { var stringItem = readStatus.ReadString(); readStatus.AddOffset(stringItem.ByteLength); 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); }
/// <summary> /// タグ番号リスト /// </summary> /// <param name="readStatus">読み込み経過状態</param> /// <param name="list">結果格納インスタンス</param> private void ReadTagNumberList(BinaryReadStatus readStatus, out List <TileTagNumber> list) { var length = readStatus.ReadInt(); readStatus.IncreaseIntOffset(); list = new List <TileTagNumber>(); for (var i = 0; i < length; i++) { var tagNumber = readStatus.ReadByte(); readStatus.IncreaseByteOffset(); list.Add(tagNumber); } }
/// <summary> /// 引数特殊指定 /// </summary> /// <param name="readStatus">読み込み経過状態</param> /// <returns>引数特殊指定リスト</returns> private List <CommonEventArgType> ReadSpecialArgType(BinaryReadStatus readStatus) { var result = new List <CommonEventArgType>(); var length = readStatus.ReadInt(); readStatus.IncreaseIntOffset(); for (var i = 0; i < length; i++) { var b = readStatus.ReadByte(); readStatus.IncreaseByteOffset(); result.Add(CommonEventArgType.FromByte(b)); } return(result); }
/// <summary> /// 引数名 /// </summary> /// <param name="readStatus">読み込み経過状態</param> /// <returns>引数名リスト</returns> private List <string> ReadArgNames(BinaryReadStatus readStatus) { var result = new List <string>(); var length = readStatus.ReadInt(); readStatus.IncreaseIntOffset(); for (var i = 0; i < length; i++) { var argName = readStatus.ReadString(); readStatus.AddOffset(argName.ByteLength); result.Add(argName.String); } return(result); }
/// <summary> /// データ名 /// </summary> /// <param name="readStatus">読み込み経過状態</param> /// <param name="setting">結果格納インスタンス</param> private void ReadDataName(BinaryReadStatus readStatus, DBTypeSetting setting) { var length = readStatus.ReadInt(); readStatus.IncreaseIntOffset(); var dataNameList = new List <DataName>(); for (var i = 0; i < length; i++) { var name = readStatus.ReadString(); readStatus.AddOffset(name.ByteLength); dataNameList.Add(name.ToString()); } setting.DataNameList = new DataNameList(dataNameList); }
/// <summary> /// 項目名 /// </summary> /// <param name="readStatus">読み込み経過状態</param> /// <returns>項目名リスト</returns> private List <ItemName> ReadItemName(BinaryReadStatus readStatus) { var length = readStatus.ReadInt(); readStatus.IncreaseIntOffset(); var result = new List <ItemName>(); for (var i = 0; i < length; i++) { var name = readStatus.ReadString(); readStatus.AddOffset(name.ByteLength); result.Add(name.String); } return(result); }
/// <summary> /// DBデータ設定値 /// </summary> /// <param name="readStatus">読み込み経過状態</param> /// <param name="setting">結果格納インスタンス</param> /// <param name="itemTypes">項目種別リスト</param> private void ReadDataSettingValue(BinaryReadStatus readStatus, DBDataSetting setting, IReadOnlyCollection <DBItemType> itemTypes) { var length = readStatus.ReadInt(); readStatus.IncreaseIntOffset(); var numberItemCount = itemTypes.Count(x => x == DBItemType.Int); var stringItemCount = itemTypes.Count(x => x == DBItemType.String); var valuesList = new List <List <DBItemValue> >(); for (var i = 0; i < length; i++) { ReadOneDataSettingValue(readStatus, valuesList, itemTypes, numberItemCount, stringItemCount); } setting.SettingValuesList = new DBItemValuesList(valuesList); }
/// <summary> /// 項目特殊指定 /// </summary> /// <param name="readStatus">読み込み経過状態</param> /// <returns>項目項目特殊指定リスト</returns> private List <DBItemSpecialSettingType> ReadItemSpecialSettingType(BinaryReadStatus readStatus) { var length = readStatus.ReadInt(); readStatus.IncreaseIntOffset(); var result = new List <DBItemSpecialSettingType>(); for (var i = 0; i < length; i++) { var value = readStatus.ReadByte(); readStatus.IncreaseByteOffset(); var type = DBItemSpecialSettingType.FromByte(value); result.Add(type); } return(result); }
/// <summary> /// データIDの設定方法 /// </summary> /// <param name="readStatus">読み込み経過状態</param> /// <param name="setting">結果格納インスタンス</param> private void ReadDataSettingType(BinaryReadStatus readStatus, DBDataSetting setting) { var typeCode = readStatus.ReadInt(); readStatus.IncreaseIntOffset(); var settingType = DBDataSettingType.FromValue(typeCode); // 「指定DBの指定タイプ」の場合、DB種別とタイプIDを取り出す DBKind dbKind = null; TypeId typeId = 0; if (settingType == DBDataSettingType.DesignatedType) { dbKind = DbKindFromSettingTypeCode(typeCode); typeId = TypeIdFromSettingTypeCode(typeCode); } setting.SetDataSettingType(settingType, dbKind, typeId); }
private void ReadEventCommand(BinaryReadStatus readStatus, ICollection <IEventCommand> commandList) { // 数値変数の数 var numVarLength = readStatus.ReadByte(); readStatus.IncreaseByteOffset(); // 数値変数 var numVarList = new List <int>(); for (var i = 0; i < numVarLength; i++) { var numVar = readStatus.ReadInt(); numVarList.Add(numVar); readStatus.IncreaseIntOffset(); } // インデント var indent = (sbyte)readStatus.ReadByte(); readStatus.IncreaseByteOffset(); // 文字データ数 var strVarLength = readStatus.ReadByte(); readStatus.IncreaseByteOffset(); // 文字列変数 var strVarList = new List <string>(); for (var i = 0; i < strVarLength; i++) { var woditorString = readStatus.ReadString(); strVarList.Add(woditorString.String); readStatus.AddOffset(woditorString.ByteLength); } // 動作指定フラグ var hasMoveCommand = readStatus.ReadByte() != 0; readStatus.IncreaseByteOffset(); // 動作指定コマンド ActionEntry actionEntry = null; if (hasMoveCommand) { actionEntry = new ActionEntry(); ReadEventActionEntry(readStatus, actionEntry); } // 引数の数チェック if (numVarLength != numVarList.Count) { throw new InvalidOperationException( "指定された数値引数の数と実際の数値引数の数が一致しません。"); } if (strVarLength != strVarList.Count) { throw new InvalidOperationException( "指定された文字列引数の数と実際の文字列引数の数が一致しません。"); } // 結果 var eventCommand = EventCommandFactory.CreateRaw( numVarList, indent, strVarList, actionEntry); commandList.Add(eventCommand); }
/// <summary> /// コモンイベントID /// </summary> /// <param name="readStatus">読み込み経過状態</param> /// <param name="commonEvent">結果格納インスタンス</param> private void ReadCommonEventId(BinaryReadStatus readStatus, CommonEvent commonEvent) { commonEvent.Id = readStatus.ReadInt(); readStatus.IncreaseIntOffset(); }
/// <summary> /// 起動条件右辺 /// </summary> /// <param name="readStatus">読み込み経過状態</param> /// <param name="condition">結果格納インスタンス</param> private void ReadBootConditionRightSide(BinaryReadStatus readStatus, CommonEventBootCondition condition) { condition.RightSide = readStatus.ReadInt(); readStatus.IncreaseIntOffset(); }