Esempio n. 1
0
 public FreightAnimationDiscrete(STFReader stf)
 {
     stf.MustMatch("(");
     stf.ParseBlock(new STFReader.TokenProcessor[]
     {
         new STFReader.TokenProcessor("subtype", () =>
         {
             var typeString = stf.ReadStringBlock(null);
             switch (typeString)
             {
             default:
                 SubType = FreightAnimationDiscrete.Type.DEFAULT;
                 break;
             }
         }),
         new STFReader.TokenProcessor("shape", () => { ShapeFileName = stf.ReadStringBlock(null); }),
         new STFReader.TokenProcessor("offset", () => {
             stf.MustMatch("(");
             XOffset = stf.ReadFloat(STFReader.UNITS.Distance, 0);
             YOffset = stf.ReadFloat(STFReader.UNITS.Distance, 0);
             ZOffset = stf.ReadFloat(STFReader.UNITS.Distance, 0);
             stf.MustMatch(")");
         }),
         new STFReader.TokenProcessor("loadweight", () => { LoadWeight = stf.ReadFloatBlock(STFReader.UNITS.Mass, 0); }),
         new STFReader.TokenProcessor("loadedatstart", () => { LoadedAtStart = stf.ReadBoolBlock(true); }),
     });
 }
Esempio n. 2
0
        public float FullStaticCentreOfGravityM_Y     = -9999; // get centre of gravity after adjusted for freight animation

        public FreightAnimationStatic(STFReader stf)
        {
            stf.MustMatch("(");
            stf.ParseBlock(new STFReader.TokenProcessor[] {
                new STFReader.TokenProcessor("subtype", () =>
                {
                    var typeString = stf.ReadStringBlock(null);
                    switch (typeString)
                    {
                    default:
                        SubType = FreightAnimationStatic.Type.DEFAULT;
                        break;
                    }
                }),
                new STFReader.TokenProcessor("shape", () => { ShapeFileName = stf.ReadStringBlock(null); }),
                new STFReader.TokenProcessor("freightweight", () => { FreightWeight = stf.ReadFloatBlock(STFReader.UNITS.Mass, 0); }),
                new STFReader.TokenProcessor("offset", () => {
                    stf.MustMatch("(");
                    XOffset = stf.ReadFloat(STFReader.UNITS.Distance, 0);
                    YOffset = stf.ReadFloat(STFReader.UNITS.Distance, 0);
                    ZOffset = stf.ReadFloat(STFReader.UNITS.Distance, 0);
                    stf.MustMatch(")");
                }),
                new STFReader.TokenProcessor("flip", () => { Flipped = stf.ReadBoolBlock(true); }),
                // additions to manage consequences of variable weight on friction and brake forces
                new STFReader.TokenProcessor("fullortsdavis_a", () => { FullStaticORTSDavis_A = stf.ReadFloatBlock(STFReader.UNITS.Force, -1); }),
                new STFReader.TokenProcessor("fullortsdavis_b", () => { FullStaticORTSDavis_B = stf.ReadFloatBlock(STFReader.UNITS.Resistance, -1); }),
                new STFReader.TokenProcessor("fullortsdavis_c", () => { FullStaticORTSDavis_C = stf.ReadFloatBlock(STFReader.UNITS.ResistanceDavisC, -1); }),
                new STFReader.TokenProcessor("fullortswagonfrontalarea", () => { FullStaticORTSWagonFrontalAreaM2 = stf.ReadFloatBlock(STFReader.UNITS.AreaDefaultFT2, -1); }),
                new STFReader.TokenProcessor("fullortsdavisdragconstant", () => { FullStaticORTSDavisDragConstant = stf.ReadFloatBlock(STFReader.UNITS.Any, -1); }),
                new STFReader.TokenProcessor("fullmaxbrakeforce", () => { FullStaticMaxBrakeForceN = stf.ReadFloatBlock(STFReader.UNITS.Force, -1); }),
                new STFReader.TokenProcessor("fullmaxhandbrakeforce", () => { FullStaticMaxHandbrakeForceN = stf.ReadFloatBlock(STFReader.UNITS.Force, -1); }),
                new STFReader.TokenProcessor("fullcentreofgravity_y", () => { FullStaticCentreOfGravityM_Y = stf.ReadFloatBlock(STFReader.UNITS.Distance, -1); })
            });
        }
Esempio n. 3
0
        public Turntable(STFReader stf, Simulator simulator)
            : base(stf, simulator)
        {
            signalRef = Simulator.SignalEnvironment;
            string animation;
            Matrix position = Matrix.Identity;

            position.M44 = 100000000; //WorlPosition not yet defined, will be loaded when loading related tile;
            stf.MustMatch("(");
            stf.ParseBlock(new[] {
                new STFReader.TokenProcessor("wfile", () => {
                    WFile         = stf.ReadStringBlock(null);
                    WorldPosition = new WorldPosition(int.Parse(WFile.Substring(1, 7)), int.Parse(WFile.Substring(8, 7)), position);
                }),
                new STFReader.TokenProcessor("uid", () => { UID = stf.ReadIntBlock(-1); }),
                new STFReader.TokenProcessor("animation", () => { animation = stf.ReadStringBlock(null);
                                                                  Animations.Add(animation.ToLower()); }),
                new STFReader.TokenProcessor("diameter", () => { Length = stf.ReadFloatBlock(STFReader.Units.None, null); }),
                new STFReader.TokenProcessor("xoffset", () => { CenterOffset.X = stf.ReadFloatBlock(STFReader.Units.None, null); }),
                new STFReader.TokenProcessor("zoffset", () => { CenterOffset.Z = -stf.ReadFloatBlock(STFReader.Units.None, null); }),
                new STFReader.TokenProcessor("trackshapeindex", () =>
                {
                    TrackShapeIndex = stf.ReadIntBlock(-1);
                    InitializeAnglesAndTrackNodes();
                }),
            });
        }
Esempio n. 4
0
        private bool saveConnected  = true; // Transfertable is connected to a track

        internal TransferTable(STFReader stf)
        {
            string animation;
            Matrix location = Matrix.Identity;

            location.M44 = 100_000_000; //WorlPosition not yet defined, will be loaded when loading related tile;
            stf.MustMatch("(");
            stf.ParseBlock(new[] {
                new STFReader.TokenProcessor("wfile", () => {
                    WFile    = stf.ReadStringBlock(null);
                    position = new WorldPosition(int.Parse(WFile.Substring(1, 7), CultureInfo.InvariantCulture), int.Parse(WFile.Substring(8, 7), CultureInfo.InvariantCulture), location);
                }),
                new STFReader.TokenProcessor("uid", () => { UID = stf.ReadIntBlock(-1); }),
                new STFReader.TokenProcessor("animation", () => { animation = stf.ReadStringBlock(null);
                                                                  Animations.Add(animation); }),
                new STFReader.TokenProcessor("verticaltransfer", () => { verticalTransfer = stf.ReadBoolBlock(false); }),
                new STFReader.TokenProcessor("length", () => { Length = stf.ReadFloatBlock(STFReader.Units.None, null); }),
                new STFReader.TokenProcessor("xoffset", () => { offset.X = stf.ReadFloatBlock(STFReader.Units.None, null); }),
                new STFReader.TokenProcessor("zoffset", () => { offset.Z = -stf.ReadFloatBlock(STFReader.Units.None, null); }),
                new STFReader.TokenProcessor("yoffset", () => { offset.Y = stf.ReadFloatBlock(STFReader.Units.None, null); }),
                new STFReader.TokenProcessor("trackshapeindex", () =>
                {
                    TrackShapeIndex = stf.ReadIntBlock(-1);
                    InitializeOffsetsAndTrackNodes();
                }),
            });
        }
Esempio n. 5
0
 private void ParseActivityHeader(STFReader stf)
 {
     stf.MustMatchBlockStart();
     stf.ParseBlock(new STFReader.TokenProcessor[] {
         new STFReader.TokenProcessor("routeid", () => { Header.RouteID = stf.ReadStringBlock(null); }),
         new STFReader.TokenProcessor("name", () => { Header.Name = stf.ReadStringBlock(null); }),
         new STFReader.TokenProcessor("description", () => { Header.Description = stf.ReadStringBlock(string.Empty); }),
         new STFReader.TokenProcessor("briefing", () => { Header.Briefing = stf.ReadStringBlock(string.Empty); }),
         new STFReader.TokenProcessor("completeactivity", () => { Header.CompleteActivity = (stf.ReadIntBlock(1) == 1); }),
         new STFReader.TokenProcessor("type", () => { Header.Type = stf.ReadIntBlock(0); }),
         new STFReader.TokenProcessor("mode", () => { Header.Mode = (ActivityMode)stf.ReadIntBlock((int)Header.Mode); }),
         new STFReader.TokenProcessor("starttime", () => {
             stf.MustMatchBlockStart();
             Header.StartTime = new TimeSpan(stf.ReadInt(null), stf.ReadInt(null), stf.ReadInt(null));
             stf.MustMatchBlockEnd();
         }),
         new STFReader.TokenProcessor("season", () => { Header.Season = (SeasonType)stf.ReadIntBlock(null); }),
         new STFReader.TokenProcessor("weather", () => { Header.Weather = (WeatherType)stf.ReadIntBlock(null); }),
         new STFReader.TokenProcessor("pathid", () => { Header.PathID = stf.ReadStringBlock(null); }),
         new STFReader.TokenProcessor("startingspeed", () => { Header.StartingSpeed = stf.ReadFloatBlock(STFReader.Units.Speed, Header.StartingSpeed); }),
         new STFReader.TokenProcessor("duration", () => {
             stf.MustMatchBlockStart();
             Header.Duration = new TimeSpan(stf.ReadInt(null), stf.ReadInt(null), 0);
             stf.MustMatchBlockEnd();
         }),
         new STFReader.TokenProcessor("difficulty", () => { Header.Difficulty = (Difficulty)stf.ReadIntBlock(null); }),
         new STFReader.TokenProcessor("animals", () => { Header.Animals = stf.ReadIntBlock(Header.Animals); }),
         new STFReader.TokenProcessor("workers", () => { Header.Workers = stf.ReadIntBlock(Header.Workers); }),
         new STFReader.TokenProcessor("fuelwater", () => { Header.FuelWater = stf.ReadIntBlock(Header.FuelWater); }),
         new STFReader.TokenProcessor("fuelcoal", () => { Header.FuelCoal = stf.ReadIntBlock(Header.FuelCoal); }),
         new STFReader.TokenProcessor("fueldiesel", () => { Header.FuelDiesel = stf.ReadIntBlock(Header.FuelDiesel); }),
     });
 }
        public Transfertable(STFReader stf, Simulator simulator) : base(stf, simulator)
        {
            signalRef = Simulator.Signals;
            string animation;

            WorldPosition.XNAMatrix.M44 = 100000000; //WorlPosition not yet defined, will be loaded when loading related tile
            stf.MustMatch("(");
            stf.ParseBlock(new[] {
                new STFReader.TokenProcessor("wfile", () => {
                    WFile = stf.ReadStringBlock(null);
                    WorldPosition.TileX = int.Parse(WFile.Substring(1, 7));
                    WorldPosition.TileZ = int.Parse(WFile.Substring(8, 7));
                }),
                new STFReader.TokenProcessor("uid", () => { UID = stf.ReadIntBlock(-1); }),
                new STFReader.TokenProcessor("animation", () => { animation = stf.ReadStringBlock(null);
                                                                  Animations.Add(animation.ToLower()); }),
                new STFReader.TokenProcessor("length", () => { Length = stf.ReadFloatBlock(STFReader.UNITS.None, null); }),
                new STFReader.TokenProcessor("xoffset", () => { CenterOffset.X = stf.ReadFloatBlock(STFReader.UNITS.None, null); }),
                new STFReader.TokenProcessor("zoffset", () => { CenterOffset.Z = -stf.ReadFloatBlock(STFReader.UNITS.None, null); }),
                new STFReader.TokenProcessor("trackshapeindex", () =>
                {
                    TrackShapeIndex = stf.ReadIntBlock(-1);
                    InitializeOffsetsAndTrackNodes();
                }),
            });
        }
Esempio n. 7
0
 public SpeedpostDatFile(string filePath, string shapePath)
 {
     using (STFReader stf = new STFReader(filePath, false))
     {
         stf.ParseBlock(new STFReader.TokenProcessor[] {
             new STFReader.TokenProcessor("speed_warning_sign_shape", () =>
             {
                 var dataItem = stf.ReadStringBlock(null);
                 if (dataItem != null)
                 {
                     dataItem = shapePath + dataItem;
                     if (File.Exists(dataItem))
                     {
                         TempSpeedShapeNames[0] = dataItem;
                     }
                     else
                     {
                         STFException.TraceWarning(stf, String.Format("Non-existent shape file {0} referenced", dataItem));
                     }
                 }
             }
                                          ),
             new STFReader.TokenProcessor("restricted_shape", () =>
             {
                 var dataItem = stf.ReadStringBlock(null);
                 if (dataItem != null)
                 {
                     dataItem = shapePath + dataItem;
                     if (File.Exists(dataItem))
                     {
                         TempSpeedShapeNames[1] = dataItem;
                     }
                     else
                     {
                         STFException.TraceWarning(stf, String.Format("Non-existent shape file {0} referenced", dataItem));
                     }
                 }
             }
                                          ),
             new STFReader.TokenProcessor("end_restricted_shape", () =>
             {
                 var dataItem = stf.ReadStringBlock(null);
                 if (dataItem != null)
                 {
                     dataItem = shapePath + dataItem;
                     if (File.Exists(dataItem))
                     {
                         TempSpeedShapeNames[2] = dataItem;
                     }
                     else
                     {
                         STFException.TraceWarning(stf, String.Format("Non-existent shape file {0} referenced", dataItem));
                     }
                 }
             }
                                          ),
         });
     }
 }
Esempio n. 8
0
 public Tr_RouteFile(STFReader stf)
 {
     stf.MustMatch("(");
     stf.ParseBlock(new STFReader.TokenProcessor[] {
         new STFReader.TokenProcessor("routeid", () => { RouteID = stf.ReadStringBlock(null); }),
         new STFReader.TokenProcessor("name", () => { Name = stf.ReadStringBlock(null); }),
         new STFReader.TokenProcessor("filename", () => { FileName = stf.ReadStringBlock(null); }),
         new STFReader.TokenProcessor("description", () => { Description = stf.ReadStringBlock(null); }),
         new STFReader.TokenProcessor("maxlinevoltage", () => { MaxLineVoltage = stf.ReadFloatBlock(STFReader.UNITS.None, null); }),
         new STFReader.TokenProcessor("routestart", () => { if (RouteStart == null)
                                                            {
                                                                RouteStart = new RouteStart(stf);
                                                            }
                                      }),
         new STFReader.TokenProcessor("environment", () => { Environment = new TRKEnvironment(stf); }),
         new STFReader.TokenProcessor("milepostunitskilometers", () => { MilepostUnitsMetric = true; }),
         new STFReader.TokenProcessor("electrified", () => { Electrified = stf.ReadBoolBlock(false); }),
         new STFReader.TokenProcessor("overheadwireheight", () => { OverheadWireHeight = stf.ReadFloatBlock(STFReader.UNITS.Distance, 6.0f); }),
         new STFReader.TokenProcessor("speedlimit", () => { SpeedLimit = stf.ReadFloatBlock(STFReader.UNITS.Speed, 500.0f); }),
         new STFReader.TokenProcessor("defaultcrossingsms", () => { DefaultCrossingSMS = stf.ReadStringBlock(null); }),
         new STFReader.TokenProcessor("defaultcoaltowersms", () => { DefaultCoalTowerSMS = stf.ReadStringBlock(null); }),
         new STFReader.TokenProcessor("defaultdieseltowersms", () => { DefaultDieselTowerSMS = stf.ReadStringBlock(null); }),
         new STFReader.TokenProcessor("defaultwatertowersms", () => { DefaultWaterTowerSMS = stf.ReadStringBlock(null); }),
         new STFReader.TokenProcessor("defaultsignalsms", () => { DefaultSignalSMS = stf.ReadStringBlock(null); }),
         new STFReader.TokenProcessor("temprestrictedspeed", () => { TempRestrictedSpeed = stf.ReadFloatBlock(STFReader.UNITS.Speed, -1f); }),
         // values for tunnel operation
         new STFReader.TokenProcessor("ortssingletunnelarea", () => { SingleTunnelAreaM2 = stf.ReadFloatBlock(STFReader.UNITS.AreaDefaultFT2, null); }),
         new STFReader.TokenProcessor("ortssingletunnelperimeter", () => { SingleTunnelPerimeterM = stf.ReadFloatBlock(STFReader.UNITS.Distance, null); }),
         new STFReader.TokenProcessor("ortsdoubletunnelarea", () => { DoubleTunnelAreaM2 = stf.ReadFloatBlock(STFReader.UNITS.AreaDefaultFT2, null); }),
         new STFReader.TokenProcessor("ortsdoubletunnelperimeter", () => { DoubleTunnelPerimeterM = stf.ReadFloatBlock(STFReader.UNITS.Distance, null); }),
         // if > 0 indicates distance from track without forest trees
         new STFReader.TokenProcessor("ortsuserpreferenceforestcleardistance", () => { ForestClearDistance = stf.ReadFloatBlock(STFReader.UNITS.Distance, 0); }),
         // values for superelevation
         new STFReader.TokenProcessor("ortstracksuperelevation", () => { SuperElevationHgtpRadiusM = new Interpolator(stf); }),
     });
     //TODO This should be changed to STFException.TraceError() with defaults values created
     if (RouteID == null)
     {
         throw new STFException(stf, "Missing RouteID");
     }
     if (Name == null)
     {
         throw new STFException(stf, "Missing Name");
     }
     if (Description == null)
     {
         throw new STFException(stf, "Missing Description");
     }
     if (RouteStart == null)
     {
         throw new STFException(stf, "Missing RouteStart");
     }
 }
Esempio n. 9
0
 public Camera(STFReader stf)
 {
     stf.MustMatchBlockStart();
     stf.ParseBlock(new STFReader.TokenProcessor[] {
         new STFReader.TokenProcessor("camtype", () => { CameraType = stf.ReadStringBlock(null); CameraControl = stf.ReadStringBlock(null); }),
         new STFReader.TokenProcessor("cameraoffset", () => { stf.ReadVector3Block(STFReader.Units.None, ref cameraOffset); }),
         new STFReader.TokenProcessor("direction", () => { stf.ReadVector3Block(STFReader.Units.None, ref direction); }),
         new STFReader.TokenProcessor("objectoffset", () => { stf.ReadVector3Block(STFReader.Units.None, ref objectOffset); }),
         new STFReader.TokenProcessor("rotationlimit", () => { stf.ReadVector3Block(STFReader.Units.None, ref rotationLimit); }),
         new STFReader.TokenProcessor("description", () => { Description = stf.ReadStringBlock(null); }),
         new STFReader.TokenProcessor("fov", () => { Fov = stf.ReadFloatBlock(STFReader.Units.None, null); }),
         new STFReader.TokenProcessor("zclip", () => { ZClip = stf.ReadFloatBlock(STFReader.Units.None, null); }),
         new STFReader.TokenProcessor("wagonnum", () => { WagonNumber = stf.ReadIntBlock(null); }),
     });
 }
Esempio n. 10
0
 public ServiceFile(string fileName)
 {
     using (STFReader stf = new STFReader(fileName, false))
         stf.ParseFile(new STFReader.TokenProcessor[] {
             new STFReader.TokenProcessor("service_definition", () => { stf.MustMatchBlockStart(); stf.ParseBlock(new STFReader.TokenProcessor[] {
                     new STFReader.TokenProcessor("serial", () => { Serial = stf.ReadIntBlock(null); }),
                     new STFReader.TokenProcessor("name", () => { Name = stf.ReadStringBlock(null); }),
                     new STFReader.TokenProcessor("train_config", () => { TrainConfig = stf.ReadStringBlock(null); }),
                     new STFReader.TokenProcessor("pathid", () => { PathId = stf.ReadStringBlock(null); }),
                     new STFReader.TokenProcessor("maxwheelacceleration", () => { MaxWheelAcceleration = stf.ReadFloatBlock(STFReader.Units.Any, null); }),
                     new STFReader.TokenProcessor("efficiency", () => { Efficiency = stf.ReadFloatBlock(STFReader.Units.Any, null); }),
                     new STFReader.TokenProcessor("timetable", () => { TimeTable = new TimeTable(stf); }),
                 }); }),
         });
 }
Esempio n. 11
0
 public Camera(STFReader stf)
 {
     stf.MustMatch("(");
     stf.ParseBlock(new STFReader.TokenProcessor[] {
         new STFReader.TokenProcessor("camtype", () => { CamType = stf.ReadStringBlock(null); CamControl = stf.ReadStringBlock(null); }),
         new STFReader.TokenProcessor("cameraoffset", () => { CameraOffset = stf.ReadVector3Block(STFReader.UNITS.None, CameraOffset); }),
         new STFReader.TokenProcessor("direction", () => { Direction = stf.ReadVector3Block(STFReader.UNITS.None, Direction); }),
         new STFReader.TokenProcessor("objectoffset", () => { ObjectOffset = stf.ReadVector3Block(STFReader.UNITS.None, ObjectOffset); }),
         new STFReader.TokenProcessor("rotationlimit", () => { RotationLimit = stf.ReadVector3Block(STFReader.UNITS.None, RotationLimit); }),
         new STFReader.TokenProcessor("description", () => { Description = stf.ReadStringBlock(null); }),
         new STFReader.TokenProcessor("fov", () => { Fov = stf.ReadFloatBlock(STFReader.UNITS.None, null); }),
         new STFReader.TokenProcessor("zclip", () => { ZClip = stf.ReadFloatBlock(STFReader.UNITS.None, null); }),
         new STFReader.TokenProcessor("wagonnum", () => { WagonNum = stf.ReadIntBlock(null); }),
     });
 }
Esempio n. 12
0
        public virtual void Parse(string lowercasetoken, STFReader stf)
        {
            switch (lowercasetoken)
            {
            case "engine(ortspowersupply":
                ScriptName = stf.ReadStringBlock(null);
                break;

            case "engine(ortspowerondelay":
                PowerOnDelayS = stf.ReadFloatBlock(STFReader.Units.Time, null);
                break;

            case "engine(ortsauxpowerondelay":
                AuxPowerOnDelayS = stf.ReadFloatBlock(STFReader.Units.Time, null);
                break;

            case "engine(ortsbattery(mode":
            case "engine(ortsbattery(delay":
                BatterySwitch.Parse(lowercasetoken, stf);
                break;

            case "engine(ortsmasterkey(mode":
            case "engine(ortsmasterkey(delayoff":
            case "engine(ortsmasterkey(headlightcontrol":
                MasterKey.Parse(lowercasetoken, stf);
                break;

            case "engine(ortselectrictrainsupply(mode":
                ElectricTrainSupplySwitch.Parse(lowercasetoken, stf);
                break;
            }
        }
Esempio n. 13
0
        public float FullCentreOfGravityM_Y     = -9999; // get centre of gravity after adjusted for freight animation

        public FreightAnimationContinuous(STFReader stf, MSTSWagon wagon)
        {
            stf.MustMatch("(");
            stf.ParseBlock(new STFReader.TokenProcessor[] {
                new STFReader.TokenProcessor("intakepoint", () =>
                {
                    wagon.IntakePointList.Add(new IntakePoint(stf));
                    wagon.IntakePointList.Last().LinkedFreightAnim = this;
                    LinkedIntakePoint = wagon.IntakePointList.Last();
                }),
                new STFReader.TokenProcessor("shape", () => { ShapeFileName = stf.ReadStringBlock(null); }),
                new STFReader.TokenProcessor("maxheight", () => { MaxHeight = stf.ReadFloatBlock(STFReader.UNITS.Distance, 0); }),
                new STFReader.TokenProcessor("minheight", () => { MinHeight = stf.ReadFloatBlock(STFReader.UNITS.Distance, 0); }),
                new STFReader.TokenProcessor("freightweightwhenfull", () => { FreightWeightWhenFull = stf.ReadFloatBlock(STFReader.UNITS.Mass, 0); }),
                new STFReader.TokenProcessor("fullatstart", () => { FullAtStart = stf.ReadBoolBlock(true); }),

                // additions to manage consequences of variable weight on friction and brake forces
                new STFReader.TokenProcessor("fullortsdavis_a", () => { FullORTSDavis_A = stf.ReadFloatBlock(STFReader.UNITS.Force, -1); }),
                new STFReader.TokenProcessor("fullortsdavis_b", () => { FullORTSDavis_B = stf.ReadFloatBlock(STFReader.UNITS.Resistance, -1); }),
                new STFReader.TokenProcessor("fullortsdavis_c", () => { FullORTSDavis_C = stf.ReadFloatBlock(STFReader.UNITS.ResistanceDavisC, -1); }),
                new STFReader.TokenProcessor("fullortswagonfrontalarea", () => { FullORTSWagonFrontalAreaM2 = stf.ReadFloatBlock(STFReader.UNITS.AreaDefaultFT2, -1); }),
                new STFReader.TokenProcessor("fullortsdavisdragconstant", () => { FullORTSDavisDragConstant = stf.ReadFloatBlock(STFReader.UNITS.Any, -1); }),
                new STFReader.TokenProcessor("fullmaxbrakeforce", () => { FullMaxBrakeForceN = stf.ReadFloatBlock(STFReader.UNITS.Force, -1); }),
                new STFReader.TokenProcessor("fullmaxhandbrakeforce", () => { FullMaxHandbrakeForceN = stf.ReadFloatBlock(STFReader.UNITS.Force, -1); }),
                new STFReader.TokenProcessor("fullcentreofgravity_y", () => { FullCentreOfGravityM_Y = stf.ReadFloatBlock(STFReader.UNITS.Distance, -1); })
            });
        }
Esempio n. 14
0
        public CabViewControls CabViewControls;                  // Controls in CAB - by GeorgeS

        public CabViewFile(string filePath, string basePath)
        {
            using (STFReader stf = new STFReader(filePath, false))
                stf.ParseFile(new STFReader.TokenProcessor[] {
                    new STFReader.TokenProcessor("tr_cabviewfile", () => { stf.MustMatch("("); stf.ParseBlock(new STFReader.TokenProcessor[] {
                            new STFReader.TokenProcessor("position", () => { Locations.Add(stf.ReadVector3Block(STFReader.UNITS.None, new Vector3())); }),
                            new STFReader.TokenProcessor("direction", () => { Directions.Add(stf.ReadVector3Block(STFReader.UNITS.None, new Vector3())); }),
                            new STFReader.TokenProcessor("cabviewfile", () => {
                                var fileName = stf.ReadStringBlock(null);
                                var path     = Path.Combine(basePath, Path.GetDirectoryName(fileName));
                                var name     = Path.GetFileName(fileName);

                                // Use *Frnt1024.ace if available
                                string s            = name;
                                string[] nameParts  = s.Split('.');
                                string name1024     = nameParts[0] + "1024." + nameParts[1];
                                var tstFileName1024 = Path.Combine(path, name1024);
                                if (File.Exists(tstFileName1024))
                                {
                                    name = name1024;
                                }

                                TwoDViews.Add(Path.Combine(path, name));
                                NightViews.Add(Path.Combine(path, Path.Combine("NIGHT", name)));
                                LightViews.Add(Path.Combine(path, Path.Combine("CABLIGHT", name)));
                            }),
                            new STFReader.TokenProcessor("cabviewcontrols", () => { CabViewControls = new CabViewControls(stf, basePath); }),
                        }); }),
                });
        }
Esempio n. 15
0
        public virtual void Parse(string lowercasetoken, STFReader stf)
        {
            switch (lowercasetoken)
            {
            case "wagon(ortspowersupply":
                ScriptName = stf.ReadStringBlock(null);
                break;

            case "wagon(ortspowerondelay":
                PowerOnDelayS = stf.ReadFloatBlock(STFReader.UNITS.Time, null);
                break;

            case "wagon(ortsbattery(mode":
            case "wagon(ortsbattery(delay":
                BatterySwitch.Parse(lowercasetoken, stf);
                break;

            case "wagon(ortspowersupplycontinuouspower":
                ContinuousPowerW = stf.ReadFloatBlock(STFReader.UNITS.Power, 0f);
                break;

            case "wagon(ortspowersupplyheatingpower":
                HeatingPowerW = stf.ReadFloatBlock(STFReader.UNITS.Power, 0f);
                break;

            case "wagon(ortspowersupplyairconditioningpower":
                AirConditioningPowerW = stf.ReadFloatBlock(STFReader.UNITS.Power, 0f);
                break;

            case "wagon(ortspowersupplyairconditioningyield":
                AirConditioningYield = stf.ReadFloatBlock(STFReader.UNITS.Power, 0.9f);
                break;
            }
        }
 public virtual void Parse(string lowercasetoken, STFReader stf)
 {
     switch (lowercasetoken)
     {
     case "engine(ortselectrictrainsupply(mode":
         string text = stf.ReadStringBlock("").ToLower();
         if (text == "automatic")
         {
             Mode = ModeType.Automatic;
         }
         else if (text == "unfitted")
         {
             Mode = ModeType.Unfitted;
         }
         else if (text == "switch")
         {
             Mode = ModeType.Switch;
         }
         else
         {
             STFException.TraceWarning(stf, "Skipped invalid electric train supply switch mode");
         }
         break;
     }
 }
Esempio n. 17
0
        public virtual void Parse(string lowercasetoken, STFReader stf)
        {
            switch (lowercasetoken)
            {
            case "engine(ortsbattery(mode":
            case "wagon(ortsbattery(mode":
                string text = stf.ReadStringBlock("").ToLower();
                if (text == "alwayson")
                {
                    Mode = ModeType.AlwaysOn;
                }
                else if (text == "switch")
                {
                    Mode = ModeType.Switch;
                }
                else if (text == "pushbuttons")
                {
                    Mode = ModeType.PushButtons;
                }
                else
                {
                    STFException.TraceWarning(stf, "Skipped invalid battery switch mode");
                }
                break;

            case "engine(ortsbattery(delay":
            case "wagon(ortsbattery(delay":
                DelayS = stf.ReadFloatBlock(STFReader.UNITS.Time, 0f);
                break;
            }
        }
Esempio n. 18
0
        public virtual void Parse(string lowercasetoken, STFReader stf)
        {
            switch (lowercasetoken)
            {
            case "engine(ortsmasterkey(mode":
                string text = stf.ReadStringBlock("").ToLower();
                if (text == "alwayson")
                {
                    Mode = ModeType.AlwaysOn;
                }
                else if (text == "manual")
                {
                    Mode = ModeType.Manual;
                }
                else
                {
                    STFException.TraceWarning(stf, "Skipped invalid master key mode");
                }
                break;

            case "engine(ortsmasterkey(delayoff":
                DelayS = stf.ReadFloatBlock(STFReader.UNITS.Time, 0f);
                break;

            case "engine(ortsmasterkey(headlightcontrol":
                HeadlightControl = stf.ReadBoolBlock(false);
                break;
            }
        }
Esempio n. 19
0
        public CabViewFile(string basePath, string fileName)
        {
            using (STFReader stf = new STFReader(Path.GetFullPath(Path.Combine(basePath, fileName)), false))
                stf.ParseFile(new STFReader.TokenProcessor[] {
                    new STFReader.TokenProcessor("tr_cabviewfile", () => { stf.MustMatchBlockStart(); stf.ParseBlock(new STFReader.TokenProcessor[] {
                            new STFReader.TokenProcessor("position", () => { Locations.Add(stf.ReadVector3Block(STFReader.Units.None, new Vector3())); }),
                            new STFReader.TokenProcessor("direction", () => { Directions.Add(stf.ReadVector3Block(STFReader.Units.None, new Vector3())); }),
                            new STFReader.TokenProcessor("cabviewfile", () => {
                                string cvfileName = stf.ReadStringBlock(null);
                                string path       = Path.Combine(basePath, Path.GetDirectoryName(cvfileName));
                                string name       = Path.GetFileName(cvfileName);

                                // Use *Frnt1024.ace if available
                                if (!Path.GetFileNameWithoutExtension(cvfileName).EndsWith("1024", StringComparison.OrdinalIgnoreCase))
                                {
                                    string name1024 = Path.GetFileNameWithoutExtension(cvfileName) + "1024" + Path.GetExtension(cvfileName);
                                    if (File.Exists(Path.Combine(path, name1024)))
                                    {
                                        name = name1024;
                                    }
                                }

                                Views2D.Add(Path.Combine(path, name));
                                ViewsNight.Add(Path.Combine(path, "NIGHT", name));
                                ViewsLight.Add(Path.Combine(path, "CABLIGHT", name));
                            }),
                            new STFReader.TokenProcessor("cabviewcontrols", () => { CabViewControls = new CabViewControls(stf, basePath); }),
                        }); }),
                });
        }
Esempio n. 20
0
 internal override void Update(STFReader stf)
 {
     stf.ParseBlock(new STFReader.TokenProcessor[] {
         new STFReader.TokenProcessor("id", () => { ID = stf.ReadIntBlock(null); }),
         new STFReader.TokenProcessor("activation_level", () => { ActivationLevel = stf.ReadIntBlock(null); }),
         new STFReader.TokenProcessor("outcomes", () =>
         {
             if (Outcomes == null)
             {
                 Outcomes = new Outcomes(stf);
             }
             else
             {
                 Outcomes.Update(stf);
             }
         }),
         new STFReader.TokenProcessor("texttodisplayoncompletioniftriggered", () => { TextToDisplayOnCompletionIfTriggered = stf.ReadStringBlock(""); }),
         new STFReader.TokenProcessor("texttodisplayoncompletionifnotriggered", () => { TextToDisplayOnCompletionIfNotTriggered = stf.ReadStringBlock(""); }),
         new STFReader.TokenProcessor("name", () => { Name = stf.ReadStringBlock(""); }),
         new STFReader.TokenProcessor("time", () => { Time = (int)stf.ReadFloatBlock(STFReader.Units.Time, null); }),
         new STFReader.TokenProcessor("ortscontinue", () => { OrtsContinue = stf.ReadIntBlock(0); }),
         new STFReader.TokenProcessor("ortsactsoundfile", () => OrtsActivitySoundProcessor(stf)),
         new STFReader.TokenProcessor("ortsweatherchange", () => { WeatherChange = new OrtsWeatherChange(stf); }),
     });
 }
Esempio n. 21
0
 public OpenRailsData(STFReader stf)
 {
     stf.MustMatch("(");
     stf.ParseBlock(new STFReader.TokenProcessor[] {
         new STFReader.TokenProcessor("ortsdll", () => { DLL = stf.ReadStringBlock(null); }),
     });
 }
Esempio n. 22
0
 internal override void Update(STFReader stf)
 {
     stf.ParseBlock(new STFReader.TokenProcessor[] {
         new STFReader.TokenProcessor("eventtypelocation", () => { stf.MustMatchBlockStart(); stf.MustMatchBlockEnd(); }),
         new STFReader.TokenProcessor("id", () => { ID = stf.ReadIntBlock(null); }),
         new STFReader.TokenProcessor("ortstriggeringtrain", () => { ParseTrain(stf); }),
         new STFReader.TokenProcessor("activation_level", () => { ActivationLevel = stf.ReadIntBlock(null); }),
         new STFReader.TokenProcessor("outcomes", () =>
         {
             if (Outcomes == null)
             {
                 Outcomes = new Outcomes(stf);
             }
             else
             {
                 Outcomes.Update(stf);
             }
         }),
         new STFReader.TokenProcessor("name", () => { Name = stf.ReadStringBlock(null); }),
         new STFReader.TokenProcessor("texttodisplayoncompletioniftriggered", () => { TextToDisplayOnCompletionIfTriggered = stf.ReadStringBlock(null); }),
         new STFReader.TokenProcessor("texttodisplayoncompletionifnottriggered", () => { TextToDisplayOnCompletionIfNotTriggered = stf.ReadStringBlock(null); }),
         new STFReader.TokenProcessor("triggeronstop", () => { TriggerOnStop = stf.ReadBoolBlock(true); }),
         new STFReader.TokenProcessor("location", () => {
             stf.MustMatchBlockStart();
             location = new WorldLocation(stf.ReadInt(null), stf.ReadInt(null),
                                          stf.ReadFloat(STFReader.Units.None, null), 0f, stf.ReadFloat(STFReader.Units.None, null));
             RadiusM = stf.ReadFloat(STFReader.Units.Distance, null);
             stf.MustMatchBlockEnd();
         }),
         new STFReader.TokenProcessor("ortscontinue", () => { OrtsContinue = stf.ReadIntBlock(0); }),
         new STFReader.TokenProcessor("ortsactsoundfile", () => OrtsActivitySoundProcessor(stf)),
         new STFReader.TokenProcessor("ortsweatherchange", () => { WeatherChange = new OrtsWeatherChange(stf); }),
     });
 }
Esempio n. 23
0
 public ORCarSpawnerFile(string fileName, string shapePath)
 {
     using (STFReader stf = new STFReader(fileName, false))
     {
         var    listCount = stf.ReadInt(null);
         string listName  = null;
         stf.ParseBlock(new STFReader.TokenProcessor[] {
             new STFReader.TokenProcessor("carspawnerlist", () => {
                 if (--listCount < 0)
                 {
                     STFException.TraceWarning(stf, "Skipped extra CarSpawner List");
                 }
                 else
                 {
                     stf.MustMatchBlockStart();
                     stf.MustMatch("ListName");
                     listName = stf.ReadStringBlock(null);
                     CarSpawners.Add(new CarSpawnerList(stf, shapePath, listName));
                 }
             }),
         });
         if (listCount > 0)
         {
             STFException.TraceWarning(stf, listCount + " missing CarSpawner List(s)");
         }
     }
 }
Esempio n. 24
0
 public EngineClass(STFReader stf)
 {
     stf.MustMatch("(");
     stf.ReadString();
     stf.ParseBlock(new STFReader.TokenProcessor[] {
         new STFReader.TokenProcessor("type", () => { Type = stf.ReadStringBlock(null); }),
     });
 }
Esempio n. 25
0
 internal void Update(STFReader stf)
 {
     stf.MustMatchBlockStart();
     stf.ParseBlock(new STFReader.TokenProcessor[] {
         new STFReader.TokenProcessor("activitysuccess", () => { stf.MustMatchBlockStart(); stf.MustMatchBlockEnd(); ActivitySuccess = true; }),
         new STFReader.TokenProcessor("activityfail", () => { ActivityFail = stf.ReadStringBlock(""); }),
         new STFReader.TokenProcessor("activateevent", () => { ActivateList.Add(stf.ReadIntBlock(null)); }),
         new STFReader.TokenProcessor("restoreactlevel", () => { RestoreActivityLevels.Add(stf.ReadIntBlock(null)); }),
         new STFReader.TokenProcessor("decactlevel", () => { DecrementActivityLevels.Add(stf.ReadIntBlock(null)); }),
         new STFReader.TokenProcessor("incactlevel", () => { IncrementActivityLevels.Add(stf.ReadIntBlock(null)); }),
         new STFReader.TokenProcessor("displaymessage", () => {
             DisplayMessage = stf.ReadStringBlock("");
         }),
         new STFReader.TokenProcessor("ortsrestartwaitingtrain", () => { RestartWaitingTrain = new RestartWaitingTrain(stf); }),
         new STFReader.TokenProcessor("ortsweatherchange", () => { WeatherChange = new OrtsWeatherChange(stf); }),
         new STFReader.TokenProcessor("ortsactivitysound", () => { ActivitySound = new ActivitySound(stf); }),
     });
 }
Esempio n. 26
0
        private static IList <string> ReadScriptFiles(STFReader stf)
        {
            stf.MustMatch("(");
            List <string> scriptFiles = new List <string>();

            stf.ParseBlock(new STFReader.TokenProcessor[] {
                new STFReader.TokenProcessor("scriptfile", () => { scriptFiles.Add(stf.ReadStringBlock(null)); }),
            });
            return(scriptFiles);
        }
Esempio n. 27
0
        public void Parse(string lowercasetoken, STFReader stf)
        {
            switch (lowercasetoken)
            {
            case "engine(vigilancemonitor": VigilanceMonitor = new MonitoringDevice(stf); break;

            case "engine(overspeedmonitor": OverspeedMonitor = new MonitoringDevice(stf); break;

            case "engine(emergencystopmonitor": EmergencyStopMonitor = new MonitoringDevice(stf); break;

            case "engine(awsmonitor": AWSMonitor = new MonitoringDevice(stf); break;

            case "engine(ortstraincontrolsystem": ScriptName = stf.ReadStringBlock(null); break;

            case "engine(ortstraincontrolsystemsound": SoundFileName = stf.ReadStringBlock(null); break;

            case "engine(ortstraincontrolsystemparameters": ParametersFileName = stf.ReadStringBlock(null); break;
            }
        }
Esempio n. 28
0
 public TRKEnvironment(STFReader stf)
 {
     stf.MustMatch("(");
     for (int i = 0; i < 12; ++i)
     {
         string s = stf.ReadString();
         ENVFileNames[i] = stf.ReadStringBlock(null);
     }
     stf.SkipRestOfBlock();
 }
Esempio n. 29
0
        private SignalFunction ReadFunctionType(STFReader stf)
        {
            string signalType = stf.ReadStringBlock(null);

            if (!EnumExtension.GetValue(signalType, out SignalFunction result))
            {
                STFException.TraceInformation(stf, $"Skipped unknown SignalFnType {signalType}");
                return(SignalFunction.Info);
            }
            return(result);
        }
Esempio n. 30
0
 internal Environment(STFReader stf)
 {
     stf.MustMatchBlockStart();
     for (int i = 0; i < 12; ++i)
     {
         string envfilekey = stf.ReadString();
         string envfile    = stf.ReadStringBlock(null);
         fileNames.Add(envfilekey, envfile);
     }
     stf.SkipRestOfBlock();
 }