/// <summary> /// キーIDから配列インデックスに変換する /// </summary> /// <param name="keyId">キーID</param> /// <param name="index">変換したインデックス</param> /// <returns>処理結果</returns> bool TryConvertIndex(int keyId, out int index) { if (!DataId.EqualsUpper(keyId, _data[0].id)) { Log.Error("IDの種類が異なります(KID:{0:X8}, Offset:{1:X8})", keyId, _data[0].id); index = -1; return false; } if (DataId.GetData(keyId) != DataId.GetIndex(Id)) { Log.Error("マップIDが異なります(KID:{0:X8}, MID:{1:X8})", keyId, Id); index = -1; return false; } index = DataId.GetIndex(keyId); if (index <= 0 || index >= _data.Length) { Log.Error("インデックスが不正(KID:{0:X8}, Num:{1})", keyId, _data.Length - 1); index = -1; return false; } return true; }
/// <summary> /// キーフィールドを追加し、キーを変更するハンドラを取得する /// </summary> /// <param name="field"></param> /// <param name="handler"></param> public void AddKeyField(IKeyFieldAccesser field, out IAlterKeyHandler handler) { int index = DataId.GetData(field.KeyId); _fields.Add(field); _alters[index].AddKeyField(field); handler = _alters[index]; }
/// <summary> /// キー設定を反映させる /// </summary> /// <param name="keys">キー設定</param> public void ApplyKey(Dictionary <int, KeyCode> keys) { int index; foreach (var pair in keys) { if (!DataId.EqualsUpper(pair.Key, _idOffset)) { Log.Error("キーIDの種類が異なります(ID:{0:X8})", pair.Key); return; } index = DataId.GetData(pair.Key); if (index <= 0) { Log.Warning("キーIDのインデックスが不正(ID:{0:X8})", pair.Key); continue; } _keyMaps[index].AlterKeyCode(pair.Key, pair.Value); } }