Exemple #1
0
 public LightState(STFReader stf)
 {
     stf.MustMatch("(");
     stf.ParseBlock(new[] {
         new STFReader.TokenProcessor("duration", () => { Duration = stf.ReadFloatBlock(STFReader.UNITS.None, null); }),
         new STFReader.TokenProcessor("lightcolour", () => { Color = stf.ReadHexBlock(null); }),
         new STFReader.TokenProcessor("position", () => { Position = stf.ReadVector3Block(STFReader.UNITS.None, Vector3.Zero); }),
         new STFReader.TokenProcessor("radius", () => { Radius = stf.ReadFloatBlock(STFReader.UNITS.Distance, null); }),
         new STFReader.TokenProcessor("azimuth", () => { Azimuth = stf.ReadVector3Block(STFReader.UNITS.None, Vector3.Zero); }),
         new STFReader.TokenProcessor("elevation", () => { Elevation = stf.ReadVector3Block(STFReader.UNITS.None, Vector3.Zero); }),
         new STFReader.TokenProcessor("transition", () => { Transition = 1 <= stf.ReadFloatBlock(STFReader.UNITS.None, 0); }),
         new STFReader.TokenProcessor("angle", () => { Angle = stf.ReadFloatBlock(STFReader.UNITS.None, null); }),
     });
 }
Exemple #2
0
 public LightState(STFReader stf)
 {
     stf.MustMatch("(");
     stf.ParseBlock(new[] {
         new STFReader.TokenProcessor("duration", () => { Duration = stf.ReadFloatBlock(STFReader.UNITS.None, null); }),
         new STFReader.TokenProcessor("lightcolour", () => { Color = stf.ReadHexBlock(null); }),
         new STFReader.TokenProcessor("position", () => { Position = stf.ReadVector3Block(STFReader.UNITS.None, Vector3.Zero); }),
         new STFReader.TokenProcessor("radius", () => { Radius = stf.ReadFloatBlock(STFReader.UNITS.Distance, null); }),
         new STFReader.TokenProcessor("azimuth", () => { Azimuth = stf.ReadVector3Block(STFReader.UNITS.None, Vector3.Zero); }),
         new STFReader.TokenProcessor("elevation", () => { Elevation = stf.ReadVector3Block(STFReader.UNITS.None, Vector3.Zero); }),
         new STFReader.TokenProcessor("transition", () => { Transition = 1 <= stf.ReadFloatBlock(STFReader.UNITS.None, 0); }),
         new STFReader.TokenProcessor("angle", () => { Angle = stf.ReadFloatBlock(STFReader.UNITS.None, null); }),
     });
     // Color byte order changed in XNA 4 from BGRA to RGBA
     Color = new Color()
     {
         B = (byte)(Color),
         G = (byte)(Color >> 8),
         R = (byte)(Color >> 16),
         A = (byte)(Color >> 24)
     }.PackedValue;
 }
Exemple #3
0
        /// <summary>
        /// Parses parameters from the stf reader
        /// </summary>
        /// <param name="stf">Reference to the stf reader</param>
        /// <param name="loco">Reference to the locomotive</param>
        public virtual void Parse(STFReader stf, MSTSDieselLocomotive loco)
        {
            locomotive = loco;
            stf.MustMatch("(");
            bool end = false;

            while (!end)
            {
                string lowercasetoken = stf.ReadItem().ToLower();
                switch (lowercasetoken)
                {
                case "idlerpm": IdleRPM = stf.ReadFloatBlock(STFReader.UNITS.None, 0); initLevel |= SettingsFlags.IdleRPM; break;

                case "maxrpm":          MaxRPM = stf.ReadFloatBlock(STFReader.UNITS.None, 0); initLevel |= SettingsFlags.MaxRPM; break;

                case "startingrpm": StartingRPM = stf.ReadFloatBlock(STFReader.UNITS.None, 0); initLevel |= SettingsFlags.StartingRPM; break;

                case "startingconfirmrpm": StartingConfirmationRPM = stf.ReadFloatBlock(STFReader.UNITS.None, 0); initLevel |= SettingsFlags.StartingConfirmRPM; break;

                case "changeuprpmps": ChangeUpRPMpS = stf.ReadFloatBlock(STFReader.UNITS.None, 0); initLevel |= SettingsFlags.ChangeUpRPMpS; break;

                case "changedownrpmps": ChangeDownRPMpS = stf.ReadFloatBlock(STFReader.UNITS.None, 0); initLevel |= SettingsFlags.ChangeDownRPMpS; break;

                case "rateofchangeuprpmpss": RateOfChangeUpRPMpSS = stf.ReadFloatBlock(STFReader.UNITS.None, 0); initLevel |= SettingsFlags.RateOfChangeUpRPMpSS; break;

                case "rateofchangedownrpmpss": RateOfChangeDownRPMpSS = stf.ReadFloatBlock(STFReader.UNITS.None, 0); initLevel |= SettingsFlags.RateOfChangeDownRPMpSS; break;

                case "maximalpower":   MaximalPowerW = stf.ReadFloatBlock(STFReader.UNITS.Power, 0); initLevel |= SettingsFlags.MaximalPowerW; break;

                case "idleexhaust":     InitialExhaust = stf.ReadFloatBlock(STFReader.UNITS.None, 0); initLevel |= SettingsFlags.IdleExhaust; break;

                case "maxexhaust":      MaxExhaust = stf.ReadFloatBlock(STFReader.UNITS.None, 0); initLevel |= SettingsFlags.MaxExhaust; break;

                case "exhaustdynamics": ExhaustAccelIncrease = stf.ReadFloatBlock(STFReader.UNITS.None, 0); initLevel |= SettingsFlags.ExhaustDynamics; break;

                case "exhaustdynamicsdown": ExhaustDecelReduction = stf.ReadFloatBlock(STFReader.UNITS.None, null); initLevel |= SettingsFlags.ExhaustDynamics; break;

                case "exhaustcolor":    ExhaustSteadyColor.PackedValue = stf.ReadHexBlock(Color.Gray.PackedValue); initLevel |= SettingsFlags.ExhaustColor; break;

                case "exhausttransientcolor": ExhaustTransientColor.PackedValue = stf.ReadHexBlock(Color.Black.PackedValue); initLevel |= SettingsFlags.ExhaustTransientColor; break;

                case "dieselpowertab": DieselPowerTab = new Interpolator(stf); initLevel |= SettingsFlags.DieselPowerTab; break;

                case "dieselconsumptiontab": DieselConsumptionTab = new Interpolator(stf); initLevel |= SettingsFlags.DieselConsumptionTab; break;

                case "throttlerpmtab": ThrottleRPMTab = new Interpolator(stf); initLevel |= SettingsFlags.ThrottleRPMTab; break;

                case "dieseltorquetab": DieselTorqueTab = new Interpolator(stf); initLevel |= SettingsFlags.DieselTorqueTab; break;

                case "minoilpressure": DieselMinOilPressurePSI = stf.ReadFloatBlock(STFReader.UNITS.PressureDefaultPSI, 40f); initLevel |= SettingsFlags.MinOilPressure; break;

                case "maxoilpressure": DieselMaxOilPressurePSI = stf.ReadFloatBlock(STFReader.UNITS.PressureDefaultPSI, 120f); initLevel |= SettingsFlags.MaxOilPressure; break;

                case "maxtemperature": DieselMaxTemperatureDeg = stf.ReadFloatBlock(STFReader.UNITS.TemperatureDifference, 100f); initLevel |= SettingsFlags.MaxTemperature; break;

                case "cooling": EngineCooling = (Cooling)stf.ReadIntBlock((int)Cooling.Proportional); initLevel |= SettingsFlags.Cooling; break;      //ReadInt changed to ReadIntBlock

                case "temptimeconstant": DieselTempTimeConstantSec = stf.ReadFloatBlock(STFReader.UNITS.Time, 720f); initLevel |= SettingsFlags.TempTimeConstant; break;

                case "opttemperature": DieselOptimalTemperatureDegC = stf.ReadFloatBlock(STFReader.UNITS.TemperatureDifference, 95f); initLevel |= SettingsFlags.OptTemperature; break;

                case "idletemperature": DieselIdleTemperatureDegC = stf.ReadFloatBlock(STFReader.UNITS.TemperatureDifference, 75f); initLevel |= SettingsFlags.IdleTemperature; break;

                default:
                    end = true;
                    break;
                }
            }
        }
Exemple #4
0
 /// <summary>
 /// Open a PAT file, parse it and store it
 /// </summary>
 /// <param name="fileName">path to the PAT file, including full path and extension</param>
 public PathFile(string fileName)
 {
     try
     {
         using (STFReader stf = new STFReader(fileName, false))
             stf.ParseFile(new STFReader.TokenProcessor[] {
                 new STFReader.TokenProcessor("trackpdps", () => { stf.MustMatchBlockStart(); stf.ParseBlock(new STFReader.TokenProcessor[] {
                         new STFReader.TokenProcessor("trackpdp", () => { DataPoints.Add(new PathDataPoint(stf)); }),
                     }); }),
                 new STFReader.TokenProcessor("trackpath", () => { stf.MustMatchBlockStart(); stf.ParseBlock(new STFReader.TokenProcessor[] {
                         new STFReader.TokenProcessor("trpathname", () => { PathID = stf.ReadStringBlock(null); }),
                         new STFReader.TokenProcessor("name", () => { Name = stf.ReadStringBlock(null); }),
                         new STFReader.TokenProcessor("trpathflags", () => { Flags = (PathFlags)stf.ReadHexBlock(null); }),
                         new STFReader.TokenProcessor("trpathstart", () => { Start = stf.ReadStringBlock(null); }),
                         new STFReader.TokenProcessor("trpathend", () => { End = stf.ReadStringBlock(null); }),
                         new STFReader.TokenProcessor("trpathnodes", () => {
                             stf.MustMatchBlockStart();
                             int count = stf.ReadInt(null);
                             stf.ParseBlock(new STFReader.TokenProcessor[] {
                                 new STFReader.TokenProcessor("trpathnode", () => {
                                     if (--count < 0)
                                     {
                                         STFException.TraceWarning(stf, "Skipped extra TrPathNodes");
                                     }
                                     else
                                     {
                                         PathNodes.Add(new PathNode(stf));
                                     }
                                 }),
                             });
                             if (count > 0)
                             {
                                 STFException.TraceWarning(stf, count + " missing TrPathNodes(s)");
                             }
                         }),
                     }); }),
             });
     }
     catch (Exception error)
     {
         Trace.TraceWarning(error.Message);
     }
 }