Esempio n. 1
0
 public Timer(EOT eot)
 {
     CurrentValue = () => (float)eot.Train.Simulator.GameTime;
 }
Esempio n. 2
0
        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);
        }