コード例 #1
0
        internal static W3dVector2List Parse(BinaryReader reader, W3dParseContext context, W3dChunkType chunkType)
        {
            var result = ParseList(reader, context, r => r.ReadVector2());

            result._chunkType = chunkType;
            return(result);
        }
コード例 #2
0
 internal static Exception CreateUnknownChunkException(W3dChunkType chunkType)
 {
     return(new InvalidDataException($"Unrecognised chunk: {chunkType}"));
 }
コード例 #3
0
        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;
            }));
        }
コード例 #4
0
 public W3dVertexMapperArgs(W3dChunkType chunkType)
 {
     ChunkType = chunkType;
 }
コード例 #5
0
        internal static W3dRgbaList Parse(BinaryReader reader, W3dParseContext context, W3dChunkType chunkType)
        {
            var result = ParseList(reader, context, W3dRgba.Parse);

            result._chunkType = chunkType;
            return(result);
        }
コード例 #6
0
        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;
            }));
        }