internal static W3dVector2List Parse(BinaryReader reader, W3dParseContext context, W3dChunkType chunkType) { var result = ParseList(reader, context, r => r.ReadVector2()); result._chunkType = chunkType; return(result); }
internal static Exception CreateUnknownChunkException(W3dChunkType chunkType) { return(new InvalidDataException($"Unrecognised chunk: {chunkType}")); }
internal static W3dVertexMapperArgs Parse(BinaryReader reader, W3dParseContext context, W3dChunkType chunkType) { return(ParseChunk(reader, context, header => { var value = reader.ReadFixedLengthString((int)header.ChunkSize); var result = new W3dVertexMapperArgs(chunkType) { RawValue = value }; if (string.IsNullOrEmpty(value)) { return result; } var splitMapperArgs0 = value.Split(new[] { "\r\n", "\n" }, System.StringSplitOptions.RemoveEmptyEntries); foreach (var mapperArg in splitMapperArgs0) { var splitByDash = mapperArg.Contains("-"); // EnB asset ("pu09a.w3d") contains erroneous mapping. - is used instead of =. var splitByEquals = mapperArg.Contains("="); var splitValue = (splitByEquals) ? '=' : '-'; var splitMapperArg = mapperArg.Split(splitValue); var mapperArgName = splitMapperArg[0].Trim(); // enb contains assets that use ":" as comments start as well as some that contain no value or comment dilimeter. if (!mapperArgName.Contains(";") && !mapperArgName.Contains(":") && splitMapperArg.Length == 2) { var mapperArgValue = splitMapperArg[1].Trim(); if (mapperArgValue.Contains(";")) { // ';' indicates a comment mapperArgValue = mapperArgValue.Substring(0, mapperArgValue.IndexOf(';')).Trim(); } mapperArgValue = mapperArgValue.TrimEnd('f').Replace("..", "."); switch (mapperArgName) { case "UPerSec": ParseUtility.TryParseFloat(mapperArgValue, out result.UPerSec); break; case "VPerSec": ParseUtility.TryParseFloat(mapperArgValue, out result.VPerSec); break; case "UScale": ParseUtility.TryParseFloat(mapperArgValue, out result.UScale); break; case "VScale": ParseUtility.TryParseFloat(mapperArgValue, out result.VScale); break; case "FPS": ParseUtility.TryParseFloat(mapperArgValue, out result.FPS); break; case "Log1Width": result.Log1Width = int.Parse(mapperArgValue); break; case "Log2Width": result.Log2Width = int.Parse(mapperArgValue); break; case "Last": int.TryParse(mapperArgValue, out result.Last); break; case "Speed": ParseUtility.TryParseFloat(mapperArgValue, out result.Speed); break; case "UCenter": ParseUtility.TryParseFloat(mapperArgValue, out result.UCenter); break; case "VCenter": ParseUtility.TryParseFloat(mapperArgValue, out result.VCenter); break; case "UAmp": ParseUtility.TryParseFloat(mapperArgValue, out result.UAmp); break; case "UFreq": ParseUtility.TryParseFloat(mapperArgValue, out result.UFreq); break; case "UPhase": ParseUtility.TryParseFloat(mapperArgValue, out result.UPhase); break; case "VAmp": ParseUtility.TryParseFloat(mapperArgValue, out result.VAmp); break; case "VFreq": ParseUtility.TryParseFloat(mapperArgValue, out result.VFreq); break; case "VPhase": ParseUtility.TryParseFloat(mapperArgValue, out result.VPhase); break; case "BumpRotation": ParseUtility.TryParseFloat(mapperArgValue, out result.BumpRotation); break; case "BumpScale": ParseUtility.TryParseFloat(mapperArgValue, out result.BumpScale); break; case "UStep": ParseUtility.TryParseFloat(mapperArgValue, out result.UStep); break; case "VStep": ParseUtility.TryParseFloat(mapperArgValue, out result.VStep); break; case "SPS": ParseUtility.TryParseFloat(mapperArgValue, out result.StepsPerSecond); break; case "Offset": ParseUtility.TryParseFloat(mapperArgValue, out result.Offset); break; case "Axis": ParseUtility.TryParseFloat(mapperArgValue, out result.Axis); break; case "UOffset": ParseUtility.TryParseFloat(mapperArgValue, out result.UOffset); break; case "VOffset": ParseUtility.TryParseFloat(mapperArgValue, out result.VOffset); break; case "ClampFix": ParseUtility.TryParseFloat(mapperArgValue, out result.ClampFix); break; case "UseReflect": ParseUtility.TryParseFloat(mapperArgValue, out result.UseReflect); break; case "VPreSec": ParseUtility.TryParseFloat(mapperArgValue, out result.VPerSec); break; case "Period": ParseUtility.TryParseFloat(mapperArgValue, out result.Period); break; case "UperSec": ParseUtility.TryParseFloat(mapperArgValue, out result.UPerSec); break; case "fps": ParseUtility.TryParseFloat(mapperArgValue, out result.FPS); break; case "VPerScale": ParseUtility.TryParseFloat(mapperArgValue, out result.VPerScale); break; default: throw new InvalidDataException($"Unknown mapper arg. Name = {mapperArgName}, Value = {splitMapperArg[1]}"); } } } return result; })); }
public W3dVertexMapperArgs(W3dChunkType chunkType) { ChunkType = chunkType; }
internal static W3dRgbaList Parse(BinaryReader reader, W3dParseContext context, W3dChunkType chunkType) { var result = ParseList(reader, context, W3dRgba.Parse); result._chunkType = chunkType; return(result); }
internal static W3dVertexMapperArgs Parse(BinaryReader reader, W3dParseContext context, W3dChunkType chunkType) { return(ParseChunk(reader, context, header => { var value = reader.ReadFixedLengthString((int)header.ChunkSize); var result = new W3dVertexMapperArgs(chunkType) { RawValue = value }; if (string.IsNullOrEmpty(value)) { return result; } var splitMapperArgs0 = value.Split(new[] { "\r\n", "\n" }, System.StringSplitOptions.RemoveEmptyEntries); foreach (var mapperArg in splitMapperArgs0) { var splitMapperArg = mapperArg.Split('='); var mapperArgName = splitMapperArg[0].Trim(); var mapperArgValue = splitMapperArg[1].Trim(); if (mapperArgValue.Contains(";")) { // ';' indicates a comment mapperArgValue = mapperArgValue.Substring(0, mapperArgValue.IndexOf(';')).Trim(); } mapperArgValue = mapperArgValue.TrimEnd('f').Replace("..", "."); switch (mapperArgName) { case "UPerSec": TryParseFloat(mapperArgValue, out result.UPerSec); break; case "VPerSec": TryParseFloat(mapperArgValue, out result.VPerSec); break; case "UScale": TryParseFloat(mapperArgValue, out result.UScale); break; case "VScale": TryParseFloat(mapperArgValue, out result.VScale); break; case "FPS": TryParseFloat(mapperArgValue, out result.FPS); break; case "Log1Width": result.Log1Width = int.Parse(mapperArgValue); break; case "Log2Width": result.Log2Width = int.Parse(mapperArgValue); break; case "Last": int.TryParse(mapperArgValue, out result.Last); break; case "Speed": TryParseFloat(mapperArgValue, out result.Speed); break; case "UCenter": TryParseFloat(mapperArgValue, out result.UCenter); break; case "VCenter": TryParseFloat(mapperArgValue, out result.VCenter); break; case "UAmp": TryParseFloat(mapperArgValue, out result.UAmp); break; case "UFreq": TryParseFloat(mapperArgValue, out result.UFreq); break; case "UPhase": TryParseFloat(mapperArgValue, out result.UPhase); break; case "VAmp": TryParseFloat(mapperArgValue, out result.VAmp); break; case "VFreq": TryParseFloat(mapperArgValue, out result.VFreq); break; case "VPhase": TryParseFloat(mapperArgValue, out result.VPhase); break; case "BumpRotation": TryParseFloat(mapperArgValue, out result.BumpRotation); break; case "BumpScale": TryParseFloat(mapperArgValue, out result.BumpScale); break; case "UStep": TryParseFloat(mapperArgValue, out result.UStep); break; case "VStep": TryParseFloat(mapperArgValue, out result.VStep); break; case "SPS": TryParseFloat(mapperArgValue, out result.StepsPerSecond); break; default: throw new InvalidDataException($"Unknown mapper arg. Name = {mapperArgName}, Value = {splitMapperArg[1]}"); } } return result; })); }