internal OrtsWeatherChange(STFReader stf) { stf.MustMatchBlockStart(); stf.ParseBlock(new STFReader.TokenProcessor[] { new STFReader.TokenProcessor("ortsovercast", () => { stf.MustMatchBlockStart(); Overcast = stf.ReadFloat(STFReader.Units.None, -1); OvercastTransitionTime = stf.ReadInt(-1); stf.MustMatchBlockEnd(); }), new STFReader.TokenProcessor("ortsfog", () => { stf.MustMatchBlockStart(); Fog = stf.ReadFloat(STFReader.Units.None, -1); FogTransitionTime = stf.ReadInt(-1); stf.MustMatchBlockEnd(); }), new STFReader.TokenProcessor("ortsprecipitationintensity", () => { stf.MustMatchBlockStart(); PrecipitationIntensity = stf.ReadFloat(STFReader.Units.None, -1); PrecipitationIntensityTransitionTime = stf.ReadInt(-1); stf.MustMatchBlockEnd(); }), new STFReader.TokenProcessor("ortsprecipitationliquidity", () => { stf.MustMatchBlockStart(); PrecipitationLiquidity = stf.ReadFloat(STFReader.Units.None, -1); PrecipitationLiquidityTransitionTime = stf.ReadInt(-1); stf.MustMatchBlockEnd(); }) }); }
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); }), }); }
internal ActivitySound(STFReader stf) { stf.MustMatchBlockStart(); stf.ParseBlock(new STFReader.TokenProcessor[] { new STFReader.TokenProcessor("ortsactsoundfile", () => { stf.MustMatchBlockStart(); string soundFile = stf.ReadString(); SoundFile = Path.Combine(FolderStructure.RouteFromActivity(stf.FileName).SoundFile(soundFile)); if (!EnumExtension.GetValue(stf.ReadString(), out OrtsActivitySoundFileType soundFileType)) { stf.StepBackOneItem(); STFException.TraceInformation(stf, "Skipped unknown activity sound file type " + stf.ReadString()); SoundFileType = OrtsActivitySoundFileType.None; } else { SoundFileType = soundFileType; } stf.MustMatchBlockEnd(); }), new STFReader.TokenProcessor("ortssoundlocation", () => { stf.MustMatchBlockStart(); location = new WorldLocation(stf.ReadInt(null), stf.ReadInt(null), stf.ReadFloat(STFReader.Units.None, null), stf.ReadFloat(STFReader.Units.None, null), stf.ReadFloat(STFReader.Units.None, null)); stf.MustMatchBlockEnd(); }), });
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.MustMatchBlockStart(); XOffset = stf.ReadFloat(STFReader.Units.Distance, 0); YOffset = stf.ReadFloat(STFReader.Units.Distance, 0); ZOffset = stf.ReadFloat(STFReader.Units.Distance, 0); stf.MustMatchBlockEnd(); }), new STFReader.TokenProcessor("loadweight", () => { LoadWeight = stf.ReadFloatBlock(STFReader.Units.Mass, 0); }), new STFReader.TokenProcessor("loadedatstart", () => { LoadedAtStart = stf.ReadBoolBlock(true); }), }); }
public Duration(STFReader stf) { stf.MustMatchBlockStart(); hour = stf.ReadInt(null); minute = stf.ReadInt(null); stf.MustMatchBlockEnd(); }
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); }), }); }
internal PlatformData(STFReader stf) { stf.MustMatchBlockStart(); ID = stf.ReadInt(null); PassengerCount = stf.ReadInt(null); stf.MustMatchBlockEnd(); }
internal MaxVelocity(STFReader stf) { stf.MustMatchBlockStart(); A = stf.ReadFloat(STFReader.Units.Speed, null); B = stf.ReadFloat(STFReader.Units.Speed, null); stf.MustMatchBlockEnd(); }
public StartTime(STFReader stf) { stf.MustMatchBlockStart(); Hour = stf.ReadInt(null); Minute = stf.ReadInt(null); Second = stf.ReadInt(null); stf.MustMatchBlockEnd(); }
internal RestrictedSpeedZone(STFReader stf) { stf.MustMatchBlockStart(); stf.ParseBlock(new STFReader.TokenProcessor[] { new STFReader.TokenProcessor("startposition", () => { stf.MustMatchBlockStart(); startPosition = new WorldLocation(stf.ReadInt(null), stf.ReadInt(null), stf.ReadFloat(STFReader.Units.None, null), 0f, stf.ReadFloat(STFReader.Units.None, null)); stf.MustMatchBlockEnd(); }), new STFReader.TokenProcessor("endposition", () => { stf.MustMatchBlockStart(); endPosition = new WorldLocation(stf.ReadInt(null), stf.ReadInt(null), stf.ReadFloat(STFReader.Units.None, null), 0f, stf.ReadFloat(STFReader.Units.None, null)); stf.MustMatchBlockEnd(); }) }); }
internal ActivityObject(STFReader stf) { stf.MustMatchBlockStart(); stf.ParseBlock(new STFReader.TokenProcessor[] { new STFReader.TokenProcessor("objecttype", () => { stf.MustMatchBlockStart(); stf.MustMatch("WagonsList"); stf.MustMatchBlockEnd(); }), new STFReader.TokenProcessor("train_config", () => { TrainSet = new TrainSet(stf); }), new STFReader.TokenProcessor("direction", () => { Direction = stf.ReadIntBlock(null); }), new STFReader.TokenProcessor("id", () => { ID = stf.ReadIntBlock(null); }), new STFReader.TokenProcessor("tile", () => { stf.MustMatchBlockStart(); location = new WorldLocation(stf.ReadInt(null), stf.ReadInt(null), stf.ReadFloat(STFReader.Units.None, null), 0f, stf.ReadFloat(STFReader.Units.None, null)); stf.MustMatchBlockEnd(); }), }); }
private protected void OrtsActivitySoundProcessor(STFReader stf) { stf.MustMatchBlockStart(); string soundFile = stf.ReadString(); SoundFile = FolderStructure.RouteFromActivity(stf.FileName).SoundFile(soundFile); if (!EnumExtension.GetValue(stf.ReadString(), out OrtsActivitySoundFileType soundFileType)) { stf.StepBackOneItem(); STFException.TraceInformation(stf, "Skipped unknown activity sound file type " + stf.ReadString()); SoundFileType = OrtsActivitySoundFileType.None; } else { SoundFileType = soundFileType; } stf.MustMatchBlockEnd(); }
private void TryModify(int category, STFReader stf) { ActivityEvent origEvent; bool wrongEventID = false; int modifiedID = -1; try { stf.MustMatchBlockStart(); stf.MustMatch("id"); stf.MustMatchBlockStart(); modifiedID = stf.ReadInt(null); stf.MustMatchBlockEnd(); origEvent = Find(x => x.ID == modifiedID); if (origEvent == null) { wrongEventID = true; Trace.TraceWarning("Skipped event {0} not present in base activity file", modifiedID); stf.SkipRestOfBlock(); } else { wrongEventID = !TestMatch(category, origEvent); if (!wrongEventID) { origEvent.Update(stf); } else { Trace.TraceWarning("Skipped event {0} of event category not matching with base activity file", modifiedID); stf.SkipRestOfBlock(); } } } catch (Exception error) { Trace.WriteLine(new FileLoadException("Error in additional activity file", error)); } }
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); }), }); }
internal override void Update(STFReader stf) { stf.ParseBlock(new STFReader.TokenProcessor[] { new STFReader.TokenProcessor("eventtypeallstops", () => { stf.MustMatchBlockStart(); stf.MustMatchBlockEnd(); Type = EventType.AllStops; }), new STFReader.TokenProcessor("eventtypeassembletrain", () => { stf.MustMatchBlockStart(); stf.MustMatchBlockEnd(); Type = EventType.AssembleTrain; }), new STFReader.TokenProcessor("eventtypeassembletrainatlocation", () => { stf.MustMatchBlockStart(); stf.MustMatchBlockEnd(); Type = EventType.AssembleTrainAtLocation; }), new STFReader.TokenProcessor("eventtypedropoffwagonsatlocation", () => { stf.MustMatchBlockStart(); stf.MustMatchBlockEnd(); Type = EventType.DropOffWagonsAtLocation; }), new STFReader.TokenProcessor("eventtypepickuppassengers", () => { stf.MustMatchBlockStart(); stf.MustMatchBlockEnd(); Type = EventType.PickUpPassengers; }), new STFReader.TokenProcessor("eventtypepickupwagons", () => { stf.MustMatchBlockStart(); stf.MustMatchBlockEnd(); Type = EventType.PickUpWagons; }), new STFReader.TokenProcessor("eventtypereachspeed", () => { stf.MustMatchBlockStart(); stf.MustMatchBlockEnd(); Type = EventType.ReachSpeed; }), 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("wagon_list", () => { WorkOrderWagons = new WorkOrderWagons(stf); }), new STFReader.TokenProcessor("sidingitem", () => { SidingId = (uint)stf.ReadIntBlock(null); }), new STFReader.TokenProcessor("speed", () => { SpeedMpS = stf.ReadFloatBlock(STFReader.Units.Speed, null); }), new STFReader.TokenProcessor("reversable_event", () => { stf.MustMatchBlockStart(); stf.MustMatchBlockEnd(); Reversible = true; }), // Also support the correct spelling ! new STFReader.TokenProcessor("reversible_event", () => { stf.MustMatchBlockStart(); stf.MustMatchBlockEnd(); Reversible = true; }), new STFReader.TokenProcessor("ortscontinue", () => { OrtsContinue = stf.ReadIntBlock(0); }), new STFReader.TokenProcessor("ortsactsoundfile", () => OrtsActivitySoundProcessor(stf)), }); }
public Wagon(STFReader stf) { stf.MustMatchBlockStart(); stf.ParseBlock(new STFReader.TokenProcessor[] { new STFReader.TokenProcessor("uid", () => { UiD = stf.ReadIntBlock(null); }), new STFReader.TokenProcessor("flip", () => { stf.MustMatchBlockStart(); stf.MustMatchBlockEnd(); Flip = true; }), new STFReader.TokenProcessor("enginedata", () => { stf.MustMatchBlockStart(); Name = stf.ReadString(); Folder = stf.ReadString(); stf.MustMatchBlockEnd(); IsEngine = true; }), new STFReader.TokenProcessor("wagondata", () => { stf.MustMatchBlockStart(); Name = stf.ReadString(); Folder = stf.ReadString(); stf.MustMatchBlockEnd(); }), }); }
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.MustMatchBlockStart(); XOffset = stf.ReadFloat(STFReader.Units.Distance, 0); YOffset = stf.ReadFloat(STFReader.Units.Distance, 0); ZOffset = stf.ReadFloat(STFReader.Units.Distance, 0); stf.MustMatchBlockEnd(); }), new STFReader.TokenProcessor("flip", () => { Flipped = stf.ReadBoolBlock(true); }), new STFReader.TokenProcessor("visibility", () => { for (int index = 0; index < 3; index++) { Visibility[index] = false; } foreach (var visibilityPlace in stf.ReadStringBlock("").ToLower().Replace(" ", "").Split(',')) { switch (visibilityPlace) { case "outside": Visibility[(int)VisibleFrom.Outside] = true; break; case "cab2d": Visibility[(int)VisibleFrom.Cab2D] = true; break; case "cab3d": Visibility[(int)VisibleFrom.Cab3D] = true; break; default: break; } } }), // 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); }) }); }