public static ChangeSpellData ReadChangeSpellData(this ByteReader reader) { ChangeSpellData data; byte spellSlot = reader.ReadByte(); byte bitfield = reader.ReadByte(); bool isSummonerSpell = (bitfield & 0x01) != 0; ChangeSlotSpellDataType type = (ChangeSlotSpellDataType)reader.ReadUInt32(); switch (type) { case ChangeSlotSpellDataType.TargetingType: data = new ChangeSpellDataTargetingType(); break; case ChangeSlotSpellDataType.SpellName: data = new ChangeSpellDataSpellName(); break; case ChangeSlotSpellDataType.Range: data = new ChangeSpellDataRange(); break; case ChangeSlotSpellDataType.MaxGrowthRange: data = new ChangeSpellDataMaxGrowthRange(); break; case ChangeSlotSpellDataType.RangeDisplay: data = new ChangeSpellDataRangeDisplay(); break; case ChangeSlotSpellDataType.IconIndex: data = new ChangeSpellDataIconIndex(); break; case ChangeSlotSpellDataType.OffsetTarget: data = new ChangeSpellDataOffsetTarget(); break; default: data = new ChangeSpellDataUnknown(); break; } data.SpellSlot = spellSlot; data.IsSummonerSpell = isSummonerSpell; data.ReadBodyInternal(reader); return(data); }
public static IChangeSpellData ReadChangeSpellData(this LittleEndianReader reader) { IChangeSpellData data; ChangeSlotSpellDataType type = (ChangeSlotSpellDataType)reader.ReadByte(); switch (type) { case ChangeSlotSpellDataType.TargetingType: data = new ChangeSpellDataTargetingType(); break; case ChangeSlotSpellDataType.SpellName: data = new ChangeSpellDataSpellName(); break; case ChangeSlotSpellDataType.Range: data = new ChangeSpellDataRange(); break; case ChangeSlotSpellDataType.MaxGrowthRange: data = new ChangeSpellDataMaxGrowthRange(); break; case ChangeSlotSpellDataType.RangeDisplay: data = new ChangeSpellDataRangeDisplay(); break; case ChangeSlotSpellDataType.IconIndex: data = new ChangeSpellDataIconIndex(); break; case ChangeSlotSpellDataType.OffsetTarget: data = new ChangeSpellDataOffsetTarget(); break; default: data = new ChangeSpellDataUnknown(); break; } data.Deserialize(reader); return(data); }