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"); } } }
/// <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; }