Example #1
0
        public ScnMemCell(ScnNodeLexer.Node node, List <string> param_list, V3D rotation)
        {
            Point           = new V3D();
            EventCollection = new List <ScnEvent>();
            SpeedListNormal = new Dictionary <double, Dictionary <double, string> >();
            SpeedListShunt  = new Dictionary <double, string>();
            int block = 0;

            Angle = rotation.Y;
            Name  = Tools.ChangeParamsToText(node.Name, param_list);
            foreach (var value in node.Values)
            {
                try {
                    switch (block++)
                    {
                    case 0: Point.X = value.GetType() != typeof(double) ? double.Parse(Tools.ChangeParamsToText((string)value, param_list), FP) : (double)value; break;

                    case 1: Point.Y = value.GetType() != typeof(double) ? double.Parse(Tools.ChangeParamsToText((string)value, param_list), FP) : (double)value; break;

                    case 2: Point.Z = value.GetType() != typeof(double) ? double.Parse(Tools.ChangeParamsToText((string)value, param_list), FP) : (double)value; break;

                    case 3: Type = value != null?Tools.GetEventTypeFromString((string)value) : EventTypes.Unknown; break;
                    }
                }
                catch (Exception x) {
                    log.Error(x.Message + "\r\n" + x.StackTrace + "\r\n");
                }
            }
        }
Example #2
0
        /// <summary>
        /// Track created from lexer node
        /// </summary>
        /// <param name="path"></param>
        /// <param name="buffer"></param>
        /// <param name="node"></param>
        public ScnTrack(string path, ScnNodeLexer.Node node)
        {
            int           i = 0, block = 0;
            string        xname  = null;
            List <string> extras = new List <string>();

            foreach (var value in node.Values)
            {
                switch (block)
                {
                case 0:     // common properties
                    switch (i++)
                    {
                    case 0: TrackType = GetLCString(value); break;

                    case 1: TrackLength = (double)value; break;

                    case 2: TrackWidth = (double)value; break;

                    case 3: Friction = (double)value; break;

                    case 4: SoundDist = (double)value; break;

                    case 5: Quality = (int)(double)value; break;

                    case 6: DamageFlag = (int)(double)value; break;

                    case 7: Environment = GetLCString(value); break;

                    case 8: Visibility = GetLCString(value);
                        block          = Visibility == "vis" ? 1 : 2;
                        i = 0;
                        break;
                    }
                    break;

                case 1:     // fields for visible tracks
                    switch (i++)
                    {
                    case 0: Tex1 = GetString(value);  break;

                    case 1: TexLength = (double?)value; break;

                    case 2: Tex2 = GetString(value); break;

                    case 3: TexHeight = (double?)value; break;

                    case 4: TexWidth = (double?)value; break;

                    case 5: TexSlope = (double?)value;
                        block++;
                        i = 0;
                        break;
                    }
                    break;

                case 2:     // track vectors and parameters
                    switch (i++)
                    {
                    case 0: Point1 = new V3D {
                            X = (double)value
                    }; break;

                    case 1: Point1.Y = (double)value; break;

                    case 2: Point1.Z = (double)value; break;

                    case 3: Roll1 = (double)value; break;

                    case 4: CVec1 = new V3D {
                            X = (double)value
                    }; break;

                    case 5: CVec1.Y = (double)value; break;

                    case 6: CVec1.Z = (double)value; break;

                    case 7: CVec2 = new V3D {
                            X = (double)value
                    }; break;

                    case 8: CVec2.Y = (double)value; break;

                    case 9: CVec2.Z = (double)value; break;

                    case 10: Point2 = new V3D {
                            X = (double)value
                    }; break;

                    case 11: Point2.Y = (double)value; break;

                    case 12: Point2.Z = (double)value; break;

                    case 13: Roll2 = (double)value; break;

                    case 14: Radius1 = (double)value;
                        block        = (TrackType == "switch" || TrackType == "cross") ? 3 : 4;
                        i            = 0;
                        break;
                    }
                    break;

                case 3:     // switch vectors and parameters
                    switch (i++)
                    {
                    case 0: Point3 = new V3D {
                            X = (double)value
                    }; break;

                    case 1: Point3.Y = (double)value; break;

                    case 2: Point3.Z = (double)value; break;

                    case 3: Roll3 = (double)value; break;

                    case 4: CVec3 = new V3D {
                            X = (double)value
                    }; break;

                    case 5: CVec3.Y = (double)value; break;

                    case 6: CVec3.Z = (double)value; break;

                    case 7: CVec4 = new V3D {
                            X = (double)value
                    }; break;

                    case 8: CVec4.Y = (double)value; break;

                    case 9: CVec4.Z = (double)value; break;

                    case 10: Point4 = new V3D {
                            X = (double)value
                    }; break;

                    case 11: Point4.Y = (double)value; break;

                    case 12: Point4.Z = (double)value; break;

                    case 13: Roll4 = (double)value; break;

                    case 14: Radius2 = (double)value;
                        block++;
                        i = 0;
                        break;
                    }
                    break;

                case 4:     // extras
                    if (i++ % 2 == 0)
                    {
                        xname = GetLCString(value);
                    }
                    else
                    {
                        switch (xname)
                        {
                        case "velocity": Velocity = (double)value; break;

                        case "event0": Event0 = (string)value; break;

                        case "event1": Event1 = (string)value; break;

                        case "event2": Event2 = (string)value; break;

                        case "eventall0": Eventall0 = (string)value; break;

                        case "eventall1": Eventall1 = (string)value; break;

                        case "eventall2": Eventall2 = (string)value; break;

                        case "isolated": Isolated = (string)value; break;

                        default: extras.Add(xname); extras.Add(GetString(value)); break;
                        }
                    }
                    break;
                }
            }
            if (extras.Count > 0)
            {
                Extras = String.Join(" ", extras);
            }
            ScnType      = "track";
            SourcePath   = path;
            Name         = node.Name;
            SourceIndex  = node.SourceIndex;
            SourceLength = node.SourceLength;
        }