public Timer(EOT eot) { CurrentValue = () => (float)eot.Train.Simulator.GameTime; }
public static TrainCar Load(Simulator simulator, Train train, string wagFilePath, bool initialize = true) { GenericWAGFile wagFile = SharedGenericWAGFileManager.Get(wagFilePath); TrainCar car; if (wagFile.OpenRails != null && wagFile.OpenRails.DLL != null) { // wag file specifies an external DLL try { // TODO search the path list string wagFolder = Path.GetDirectoryName(wagFilePath); string dllPath = ORTSPaths.FindTrainCarPlugin(wagFolder, wagFile.OpenRails.DLL); Assembly customDLL = Assembly.LoadFrom(dllPath); object[] args = new object[] { wagFilePath }; car = (TrainCar)customDLL.CreateInstance("ORTS.CustomCar", true, BindingFlags.CreateInstance, null, args, null, null); car.Train = train; train.Cars.Add(car); return(car); } catch (Exception error) { Trace.WriteLine(new FileLoadException(wagFile.OpenRails.DLL, error)); // on error, fall through and try loading without the custom dll } } if (!wagFile.IsEngine) { if (wagFilePath.ToLower().Contains("orts_eot")) { car = new EOT(simulator, wagFilePath); } else { // its an ordinary MSTS wagon car = new MSTSWagon(simulator, wagFilePath); } } else { // its an ordinary MSTS engine of some type. if (wagFile.Engine.Type == null) { throw new InvalidDataException(wagFilePath + "\r\n\r\nEngine type missing"); } switch (wagFile.Engine.Type.ToLower()) { // TODO complete parsing of proper car types case "electric": car = new MSTSElectricLocomotive(simulator, wagFilePath); break; case "steam": car = new MSTSSteamLocomotive(simulator, wagFilePath); break; case "diesel": car = new MSTSDieselLocomotive(simulator, wagFilePath); break; case "control": car = new MSTSControlTrailerCar(simulator, wagFilePath); break; default: throw new InvalidDataException(wagFilePath + "\r\n\r\nUnknown engine type: " + wagFile.Engine.Type); } } car.Train = train; if (car is MSTSWagon wagon) { wagon.Load(); if (initialize) { wagon.Initialize(); } } // Loading is complete, the car can be added to the train train.Cars.Add(car); return(car); }