public static fogAnimation extractFogAnimationData(BinaryReaderBigEndian input) { fogAnimation newAnimation = new fogAnimation(); input.BaseStream.Position = 0xB0; // fog animation header offset location uint currentHeaderOffset = input.ReadUInt32(); // fog animation header if (input.BaseStream.Position == 0) { throw new Exception("No fog animation header found!"); } object newAnim = newAnimation; foreach (var field in typeof(fogAnimation).GetFields()) { input.BaseStream.Position = currentHeaderOffset; uint keyframeCount = input.ReadUInt32(); uint currentOffset = input.ReadUInt32(); List <keyframe> currentList = new List <keyframe>(); for (uint offsetIterate = currentOffset; offsetIterate < currentOffset + (keyframeCount * 0x14); offsetIterate += 0x14) { keyframe currentKeyframe; input.BaseStream.Position = offsetIterate; currentKeyframe.easingType = (easingTypes)input.ReadUInt32(); currentKeyframe.time = input.ReadSingle(); currentKeyframe.value = input.ReadSingle(); currentKeyframe.easingValue1 = input.ReadSingle(); currentKeyframe.easingValue2 = input.ReadSingle(); currentList.Add(currentKeyframe); } field.SetValue(newAnim, currentList); currentHeaderOffset += 0x8; } newAnimation = (fogAnimation)newAnim; return(newAnimation); }
public static fogHeader extractFogData(BinaryReaderBigEndian input) { fogHeader newHeader; input.BaseStream.Position = 0xBC; // fog header offset location input.BaseStream.Position = input.ReadUInt32(); // fog header offset if (input.BaseStream.Position == 0) { throw new Exception("No fog header found!"); } newHeader.fogType = (fogTypes)input.ReadByte(); input.ReadBytes(3); // unknown/null newHeader.fogStartDistance = input.ReadSingle(); newHeader.fogEndDistance = input.ReadSingle(); newHeader.color.X = input.ReadSingle(); newHeader.color.Y = input.ReadSingle(); newHeader.color.Z = input.ReadSingle(); return(newHeader); }