Exemple #1
0
    public void Move()
    {
        if (IsOutside)
        {
            return;
        }
        if (CompEngine)
        {
            step = CompEngine.EngineStep;
        }
        else
        {
            step = 0;
        }

        for (int i = 0; i < Quantity; i++)
        {
            CompCar = Cars [i];
            if (i == 0)
            {
                CompCar.MoveByPath(step);
                CompCar.BogeyLeft.CalcCompositionPosition(CompCar, CompCar.BogeyLeft.Offset);
                CompCar.BogeyRight.CalcCompositionPosition(CompCar, CompCar.BogeyRight.Offset);
            }
            else
            {
                CompCar.CalcCompositionPosition(Cars [i - 1], Constants.RS_OFFSET);
                CompCar.BogeyLeft.CalcCompositionPosition(CompCar, CompCar.BogeyLeft.Offset);
                CompCar.BogeyRight.CalcCompositionPosition(CompCar, CompCar.BogeyRight.Offset);
            }
        }
    }
    public void SetCarsToBackSide(float position, int carNum)
    {
        RollingStock rs = GetCar(carNum);

        //clear engine
        if (rs.IsEngine)
        {
            rs.Engine.IsActive = false;
            rs.Engine.IsPlayer = false;
        }
        //clear all connections
        ClearConnections(rs);
        //release prev TC
        tempTC = rs.OwnTrackCircuit;
        // set new TPU
        rs.OwnTrack = TrackPath.Instance.GetTrackPathUnitByName(Constants.TRACK_BACKSIDE);
        // set new TC
        rs.OwnTrackCircuit = rs.OwnTrack.TrackCircuit;
        // release prev tracks
        ReleaseStartTracks(rs, tempTC);
        //set position
        rs.OwnPosition = position;
        //set bogeys the same trackpathunit
        rs.ResetBogeys();

        CompositionManager.Instance.FormCompositionOnBackSide(rs);
        IndicationManager.Instance.UpdateCouplerIndication();
    }
Exemple #3
0
        public TrainCar SubCar(Train train, string wagonFilePath, int length)
        {
            Console.WriteLine("Will substitute with your existing stocks\n.");

            try
            {
                char type = 'w';
                if (wagonFilePath.ToLower().Contains(".eng"))
                {
                    type = 'e';
                }
                string newWagonFilePath = SubMissingCar(length, type);

                TrainCar car = RollingStock.Load(Simulator, train, newWagonFilePath);
                car.CarLengthM      = length;
                car.RealWagFilePath = wagonFilePath;

                Simulator.Confirmer?.Information(MPManager.Catalog.GetString("Missing car, have substituted with other one."));

                return(car);
            }
            catch (Exception error)
            {
                Console.WriteLine(error.Message + "Substitution failed, will ignore it\n.");
                return(null);
            }
        }
Exemple #4
0
        public async Task <ActionResult <RollingStockModel> > Create(RollingStockModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            // TODO: Validate road, road + road number combo
            // TODO: Validate rs type and rs class

            var rollingStock = new RollingStock
            {
                RoadId              = model.RoadId,
                RoadNumber          = model.RoadNumber,
                Notes               = model.Notes,
                Slug                = model.Slug, // TODO: auto generate = road marks + road number
                RollingStockTypeId  = model.RollingStockTypeId,
                RollingStockClassId = model.RollingStockClassId,
                Details             = model.Details,
                Plate               = model.Plate,
                MaxGrossWeight      = model.MaxGrossWeight,
                LoadLimit           = model.LoadLimit,
                DryCapacity         = model.DryCapacity,
                ExteriorDimensions  = model.ExteriorDimensions,
                InteriorDimensions  = model.InteriorDimensions
            };

            await _rollingStockRepository.CreateAsync(rollingStock);

            model = _mapper.Map <RollingStockModel>(rollingStock);

            return(CreatedAtAction(nameof(GetById), new { id = rollingStock.Id }, model));
        }
 private void ClearConnections(RollingStock rs)
 {
     if (rs.RSConnection.IsConnectedRight)
     {
         rs.RSConnection.RemoveConnection();
     }
 }
    public void PutOneCarOnBackTrack(RollingStock car)
    {
        int num   = car.Number;
        int count = car.BackSidePosition;

        SetCarsToBackSide(count * 100, num);
    }
Exemple #7
0
 public void UpdateCargoIcon(RollingStock rs)
 {
     if (CarUI.activeSelf)
     {
         CargoIcon.SetIcon(rs);
     }
 }
Exemple #8
0
    // 7 - oil
    // 6 - wood
    // 2 - goods
    // 0 - passengers
    // -1 - Empty

    public void SetIcon(RollingStock rs)
    {
        if (rs.CarProperties.IsLoaded)
        {
            commodityNumber = rs.CarProperties.commodityNumber;
            if (commodityNumber == 7)
            {
                img.sprite = WithOil;
            }
            else if (commodityNumber == 6)
            {
                img.sprite = WithWood;
            }
            else if (commodityNumber == 2)
            {
                img.sprite = WithGoods;
            }
            else if (commodityNumber == 0)
            {
                img.sprite = WithPassengers;
            }
        }
        else
        {
            img.sprite = Empty;
        }
    }
Exemple #9
0
    public void FormCompositionOnBackSide(RollingStock _car)
    {
        // cache old comp
        Composition oldComposition = _car.RSComposition.CarComposition;

        // if it is last car
        if (_car.RSComposition.NumInComposition == oldComposition.Quantity - 1)
        {
            oldComposition.IsActive = false;
        }
        //delete car from comp
        oldComposition.Cars [_car.RSComposition.NumInComposition] = null;
        oldComposition.Quantity -= 1;
        //delete comp engine
        oldComposition.CompEngine = null;
        // make new comp
        Composition carComposition = Compositions[GetFreeCompositionSlotNum(1)];

        //clear engine
        carComposition.CompEngine           = null;
        _car.RSComposition.CarComposition   = carComposition;
        _car.RSComposition.NumInComposition = 0;
        carComposition.Quantity             = 1;
        carComposition.Cars [0]             = _car;
        carComposition.LeftCar  = _car;
        carComposition.RightCar = _car;
        // Make it mainCar
        _car.RSComposition.IsMainCar = true;
        carComposition.MainCar       = _car;
        carComposition.IsOutside     = true;
        TrackPath.Instance.GetTrackPath(carComposition.MainCar);
        carComposition.Instantiate();
    }
Exemple #10
0
    public void UpdateCompositionsAfterUncoupling(RollingStock rightCar)
    {
        // cache old comp num
        Composition startComposition = rightCar.RSComposition.CarComposition;
        Composition rightComposition;
        // Get newComposition
        int newCompQuantity = startComposition.Quantity - rightCar.RSComposition.NumInComposition;

        //find comp slot
        rightComposition = Compositions [GetFreeCompositionSlotNum(newCompQuantity)];
        // clear engines
        rightComposition.CompEngine = null;
        startComposition.CompEngine = null;
        //set Quantity to new comp
        rightComposition.Quantity = newCompQuantity;
        // take all cars after uncoupled car
        int count = 0;
        int num   = rightCar.RSComposition.NumInComposition;

        for (int i = 0; i < startComposition.Quantity; i++)
        {
            if (i >= num)
            {
                // put all cars after coupler to new comp
                rightComposition.Cars [count] = startComposition.Cars [i];
                // set Num in comp
                rightComposition.Cars [count].RSComposition.NumInComposition = count;
                // set new comp to cars after coupler
                rightComposition.Cars [count].RSComposition.CarComposition = rightComposition;
                // set engine to right comp
                CheckEngineToComp(rightComposition, startComposition.Cars [i].Engine);
                //delete old cars
                startComposition.Cars [i] = null;
                count++;
            }
            else
            {
                // set engine to startComposition comp
                CheckEngineToComp(startComposition, startComposition.Cars [i].Engine);
            }
        }
        // set Quantity to old comp
        startComposition.Quantity = num;
        // set pos of car after coupler
        rightCar.RSComposition.NumInComposition = 0;
        //Set main Car to new comp
        rightCar.RSComposition.IsMainCar = true;
        rightComposition.MainCar         = rightCar;
        // set left and right cars
        rightComposition.LeftCar  = rightCar;
        rightComposition.RightCar = rightComposition.Cars [count - 1];
        startComposition.RightCar = startComposition.Cars [startComposition.Quantity - 1];
        // stop engine
        StopEngine(rightComposition.CompEngine);
        StopEngine(startComposition.CompEngine);
        //make comp not outside
        rightComposition.IsOutside = false;
        UpdatePath();
    }
Exemple #11
0
 private void ReleaseStartTracks(RollingStock _rs, TrackCircuit _tc)
 {
     if (_tc != null)
     {
         _tc.RemoveCars(_rs.BogeyLeft);
         _tc.RemoveCars(_rs.BogeyRight);
     }
 }
Exemple #12
0
 private void Awake()
 {
     OwnTransform = gameObject.GetComponent <Transform>();
     RollingStock = GetComponentInParent <RollingStock>();
     OwnEngine    = RollingStock.GetComponent <Engine>();
     bogeyPos     = Offset > 0 ? 1 : -1;
     IsRightBogey = bogeyPos == 1 ? true : false;
 }
 private void Awake()
 {
     engine        = GetComponent <Engine> ();
     rSConnection  = GetComponent <RSConnection> ();
     rsComposition = GetComponent <RSComposition> ();
     engineT       = GetComponent <Transform> ();
     car           = GetComponent <RollingStock> ();
 }
Exemple #14
0
 public virtual void OnTriggerEnter(Collider collider)
 {
     rs        = collider.GetComponent <RollingStock> ();
     direction = rs.Translation > 0 ? 1 : -1;
     if (CheckViolation(direction))
     {
         print(rs.name + " falt signal " + signal.name);
         GameManager.Instance.GameOver();
     }
 }
Exemple #15
0
 private void ClearPath(RollingStock car)
 {
     if (car.OwnPath != null)
     {
         for (int i = car.FirstTrackIndex; i <= car.LastTrackIndex; i++)
         {
             car.OwnPath [i] = null;
         }
     }
 }
Exemple #16
0
    public void SetUnactiveRS(int rsNum)
    {
        RollingStock car = GetCar(rsNum);

        car.BogeyLeft.OwnTrackCircuit  = null;
        car.BogeyRight.OwnTrackCircuit = null;
        car.BogeyLeft.ProvidePresence();
        car.BogeyRight.ProvidePresence();
        rsGO = car.gameObject;
        rsGO.SetActive(false);
    }
Exemple #17
0
 public void SetActiveRS(int rsNum)
 {
     rsGO = GetCar(rsNum).gameObject;
     rs   = GetCar(rsNum);
     rsGO.SetActive(true);
     if (rs.IsEngine)
     {
         rs.OwnEngine       = rs.Engine;
         rs.Engine.IsActive = true;
     }
 }
Exemple #18
0
    public void FormCompositionsAfterSettingCars(RollingStock [] _cars, RollingStock activeEngine)
    {
        for (int i = 0; i < _cars.Length; i++)
        {
            // we take only cars from left
            if (_cars [i].RSConnection.LeftCar == null)   // it means that it is still Maincar
            {
                RollingStock car = _cars [i];
                Composition  thisCarComposition = car.RSComposition.CarComposition;

                // set engine
                if (activeEngine != null)
                {
                    thisCarComposition.CompEngine          = activeEngine.Engine;
                    thisCarComposition.CompEngine.IsActive = true;
                }
                else
                {
                    thisCarComposition.CompEngine = null;
                }

                //it is in first position now
                car.RSComposition.NumInComposition = 0;
                int count = 1;
                //it is next car now
                rightConnection = car.RSConnection.RightCar;
                while (rightConnection != null)
                {
                    // define num in comp
                    rightConnection.RSComposition.NumInComposition = count;
                    // comp of connected cars is not active
                    rightConnection.RSComposition.CarComposition.IsActive = false;
                    // set cars comp to each next car
                    rightConnection.RSComposition.CarComposition = thisCarComposition;
                    // place of each next car in comp
                    thisCarComposition.Cars [count] = rightConnection.RollingStock;
                    // each next car is not main now
                    rightConnection.RSComposition.IsMainCar = false;
                    // take next car
                    rightConnection = rightConnection.RightCar;
                    count++;
                }
                thisCarComposition.Quantity  = count;
                thisCarComposition.LeftCar   = car;
                thisCarComposition.RightCar  = thisCarComposition.Cars [count - 1];
                thisCarComposition.IsOutside = false;
                TrackPath.Instance.GetTrackPath(thisCarComposition.MainCar);
            }
        }
    }
Exemple #19
0
    // Return Destination
    // 0 - Bravo
    // 1 - Charlie
    // 2 - AlfaS

    public void SetIcon(RollingStock rs)
    {
        returnNumber = rs.CarProperties.ReturnPoint;
        if (returnNumber == 0)
        {
            img.sprite = Bravo;
        }
        else if (returnNumber == 1)
        {
            img.sprite = Charlie;
        }
        else if (returnNumber == 2)
        {
            img.sprite = Alfa;
        }
    }
Exemple #20
0
    //commodity
    // 7 - oil
    // 6 - wood
    // 2 - goods
    // 0 - passengers
    // Return Destination
    // 0 - Bravo
    // 1 - Charlie
    // 2 - Alfa

    private void Awake()
    {
        rollingStock = GetComponent <RollingStock> ();
        commodity    = GetComponentInChildren <Commodity> ();
        if (commodity)
        {
            IsWaggon = true;
            CalcCommodity(GetComponent <RollingStock> ().Number);
        }
        else
        {
            commodityNumber = -1;
        }

        CalcReturnPoint();
    }
Exemple #21
0
    public void GetTrackPath(RollingStock car)
    {
        PathMade++;
        ClearPath(car);
        // if we change swithces in indication mode
        if (IndicationManager.Instance.IsPathIndicate)
        {
            IndicationManager.Instance.TurnPathIndicationOff();
            IndicationManager.Instance.IsPathIndicate = true;
        }

        SetEachPathClosePaths();
        TrackPathUnit currentTrack = car.OwnTrack;

        tempLeft  = currentTrack.LeftTrackPathUnit;
        tempRight = currentTrack.RightTrackPathUnit;

        count      = Constants.PATHS_NUM / 2;
        countLeft  = count;
        countRight = count;
        TrackPathUnit [] pathOwn = new TrackPathUnit [Constants.PATHS_NUM];
        pathOwn [count] = currentTrack;

        while (tempLeft != null || tempRight != null)
        {
            if (tempLeft != null)
            {
                pathOwn[countLeft - 1] = tempLeft;
                countLeft--;
                tempLeft = tempLeft.LeftTrackPathUnit;
            }
            if (tempRight != null)
            {
                pathOwn [countRight + 1] = tempRight;
                countRight++;
                tempRight = tempRight.RightTrackPathUnit;
            }
        }
        car.SetPathToRS(pathOwn, countLeft, countRight);
        PathMade--;
        // if all paths of all compositions are made
        if (PathMade == 0)
        {
            print("PathMade");
            EventManager.PathUpdated();
        }
    }
Exemple #22
0
    public void SetCarsPosition(string trackName, float position, int [] carsNums, int activeEngine = 0)
    {
        RollingStock [] cars   = new RollingStock [carsNums.Length];
        RollingStock    rs     = GetCar(carsNums [0]);
        RollingStock    actEng = GetCar(activeEngine);

        // fill array of cars
        cars [0] = rs;
        //clear all connections
        ClearConnections(rs);

        //release prev TC
        tempTC = rs.OwnTrackCircuit;

        rs.OwnTrack        = TrackPath.Instance.GetTrackPathUnitByName(trackName);
        rs.OwnTrackCircuit = rs.OwnTrack.TrackCircuit;

        ReleaseStartTracks(rs, tempTC);
        //set position
        rs.OwnPosition = position;
        //set bogeys the same trackpathunit
        rs.ResetBogeys();

        // if one car no need
        for (int i = 1; i < carsNums.Length; i++)
        {
            //take previous car
            rs = GetCar(carsNums [i - 1]);
            // get next car
            RollingStock rightCar = GetCar(carsNums [i]);
            // fill array of cars
            cars [i] = rightCar;
            //clear all connections
            ClearConnections(rightCar);
            //release prev TC
            tempTC                   = rightCar.OwnTrackCircuit;
            rightCar.OwnTrack        = rs.OwnTrack;
            rightCar.OwnTrackCircuit = rs.OwnTrack.TrackCircuit;
            ReleaseStartTracks(rightCar, tempTC);

            rs.RSConnection.InitConnection(rightCar.RSConnection);
            rightCar.ResetBogeys();
        }
        CompositionManager.Instance.FormCompositionsAfterSettingCars(cars, actEng);
        IndicationManager.Instance.UpdateCouplerIndication();
    }
Exemple #23
0
    public void UpdateCompositionsAfterCoupling(RollingStock leftCar, RollingStock rightCar)
    {
        // cach new composition
        Composition leftComposition = leftCar.RSComposition.CarComposition;
        // cach old composition
        Composition rightComposition = rightCar.RSComposition.CarComposition;

        // clear maincar from right comp
        rightCar.RSComposition.IsMainCar = false;
        // get left comp last car number
        int leftCompQuantity = leftComposition.Quantity;
        // get right comp Quantity
        int rightCompQuantity = rightComposition.Quantity;
        // add cars from right to left comp
        int count = 0;

        for (int i = 0; i < rightCompQuantity + leftCompQuantity; i++)
        {
            if (i >= leftCompQuantity)
            {
                leftComposition.Cars [i] = rightComposition.Cars [count];
                // set new comp to cars after coupler
                leftComposition.Cars [i].RSComposition.CarComposition = leftComposition;
                // set num in composition
                leftComposition.Cars [i].RSComposition.NumInComposition = i;
                // delete cars from right comp
                rightComposition.Cars [count] = null;
                count++;
            }
        }
        // set right car to new comp
        leftComposition.RightCar = leftComposition.Cars [count];
        // set Quantity to new comp
        leftComposition.Quantity = rightCompQuantity + leftCompQuantity;
        // define engines
        CheckEngineToComp(leftComposition, leftComposition.CompEngine, rightComposition.CompEngine);
        //clear right comp
        ClearComposition(rightComposition);
        // stop engine
        if (leftComposition.CompEngine)
        {
            leftComposition.CompEngine.HandlerZero();
        }
        UpdatePath();
    }
Exemple #24
0
 private void SetViewer(RollingStock rs)
 {
     Viewer.SetText(rs.Number.ToString());
     if (rs.IsEngine)
     {
         Viewer.SetLocoUI();
         Viewer.SetEngine(rs.Engine);
         Viewer.SetEngineForSpeed(rs.Engine);
         // to set camera taget
         EventManager.ThrottleChanged();
     }
     else
     {
         Viewer.SetCarUI(rs);
         rs.Model.HighLightCarOutline();
     }
     Viewer.SetIcon(rs);
     Viewer.SetReturnPoint(rs);
 }
Exemple #25
0
    public void TrainBuild()
    {
        int time = TimeManager.Instance.TimeValue [0];

        if (time == StartTime && time == 1)
        {
            if (startTrack.TrackCircuit.HasCarPresence)
            {
                print("Game Over. Track is not free");
            }

            CarsHolder.SetCarsPosition(startTrack.name, 1000, Cars, intEngine);
            trainEngine = engine;
            // cache maincar
            mainCar  = trainEngine.EngineRS.RSComposition.CarComposition.MainCar;
            IsActive = true;
            EventManager.SignalChanged();
            trainEngine.EngineAI.MoveWithDirection(TrainDirection * Constants.MAX_THROTTLE);
        }
    }
    private void SetCameraPosition()
    {
        if (engine.InstructionsHandler == 0)
        {
            OffsetX = 0;
        }
        else if (engine.InstructionsHandler > 0)
        {
            OffsetX         = 100;
            Target          = composition.CarComposition.RightCar;
            targetTransform = Target.transform;
        }

        else if (engine.InstructionsHandler < 0)
        {
            OffsetX         = -100;
            Target          = composition.CarComposition.LeftCar;
            targetTransform = Target.transform;
        }
    }
Exemple #27
0
 public void RollingStockListener(Collider collider)
 {
     if (collider.CompareTag("Engine"))
     {
         HitEngine = collider.GetComponent <Engine> ();
         if (!HitEngine.IsPlayer)
         {
             TempEngine          = PlayerEngine;
             TempEngine.IsPlayer = false;
             //set outlines
             TempEngine.EngineRS.Model.DefaultOutline();
             PlayerEngine          = HitEngine;
             PlayerEngine.IsActive = true;
             PlayerEngine.IsPlayer = true;
             ccc.Target            = PlayerEngine.EngineRS;
             ccc.UpdateCameraTarget();
             IndicationManager.Instance.engine = PlayerEngine;
             SetPlayerEngineInComposition();
         }
         SetViewer(PlayerEngine.EngineRS);
         PlayerEngine.EngineRS.Model.HighLightEngineOutline();
         if (tempRollingStock != null)
         {
             tempRollingStock.Model.DefaultOutline();
             tempRollingStock = null;
         }
         EventManager.EngineChanged();
     }
     else if (collider.CompareTag("RollingStock"))
     {
         rollingStock = collider.GetComponent <RollingStock> ();
         SetViewer(rollingStock);
         if (tempRollingStock != null && !tempRollingStock.Equals(rollingStock))
         {
             tempRollingStock.Model.DefaultOutline();
         }
         tempRollingStock = rollingStock;
     }
 }
Exemple #28
0
        public void AddPlayers(MSGPlayer player, OnlinePlayer p)
        {
            if (Players.ContainsKey(player.user))
            {
                return;
            }
            if (MPManager.Client != null && player.user == MPManager.Client.UserName)
            {
                return;                                                                       //do not add self//WARNING: may need to worry about train number here
            }
            if (p == null)
            {
                p = new OnlinePlayer(null, null);
            }
            p.url = player.url;
            p.LeadingLocomotiveID = player.leadingID;
            p.con  = MPManager.Simulator.BasePath + "\\TRAINS\\CONSISTS\\" + player.con;
            p.path = MPManager.Simulator.RoutePath + "\\PATHS\\" + player.path;
            Train train = new Train(MPManager.Simulator);

            train.TrainType = Train.TRAINTYPE.REMOTE;
            if (MPManager.IsServer()) //server needs to worry about correct train number
            {
            }
            else
            {
                train.Number = player.num;
            }
            if (player.con.Contains("tilted"))
            {
                train.IsTilting = true;
            }
            int direction = player.dir;

            train.travelled        = player.Travelled;
            train.TrainMaxSpeedMpS = player.trainmaxspeed;

            if (MPManager.IsServer())
            {
                try
                {
#if ACTIVITY_EDITOR
                    AIPath aiPath = new AIPath(MPManager.Simulator.TDB, MPManager.Simulator.TSectionDat, p.path, MPManager.Simulator.TimetableMode, MPManager.Simulator.orRouteConfig);
#else
                    AIPath aiPath = new AIPath(MPManager.Simulator.TDB, MPManager.Simulator.TSectionDat, p.path);
#endif
                }
                catch (Exception) { MPManager.BroadCast((new MSGMessage(player.user, "Warning", "Server does not have path file provided, signals may always be red for you.")).ToString()); }
            }

            try
            {
                train.RearTDBTraveller = new Traveller(MPManager.Simulator.TSectionDat, MPManager.Simulator.TDB.TrackDB.TrackNodes, player.TileX, player.TileZ, player.X, player.Z, direction == 1 ? Traveller.TravellerDirection.Forward : Traveller.TravellerDirection.Backward);
            }
            catch (Exception e)
            {
                if (MPManager.IsServer())
                {
                    MPManager.BroadCast((new MSGMessage(player.user, "Error", "MultiPlayer Error:" + e.Message)).ToString());
                }
                else
                {
                    throw new Exception();
                }
            }

            for (var i = 0; i < player.cars.Length; i++)// cars.Length-1; i >= 0; i--) {
            {
                string   wagonFilePath = MPManager.Simulator.BasePath + @"\trains\trainset\" + player.cars[i];
                TrainCar car;

                try
                {
                    car            = RollingStock.Load(MPManager.Simulator, train, wagonFilePath);
                    car.CarLengthM = player.lengths[i] / 100.0f;
                }
                catch (Exception error)
                {
                    Console.WriteLine(error.Message);
                    car = MPManager.Instance().SubCar(train, wagonFilePath, player.lengths[i]);
                }

                if (car == null)
                {
                    continue;
                }

                car.Flipped = player.flipped[i] != 0;
                car.CarID   = player.ids[i];

                if (car is MSTSWagon w)
                {
                    w.SignalEvent((player.pantofirst == 1 ? PowerSupplyEvent.RaisePantograph : PowerSupplyEvent.LowerPantograph), 1);
                    w.SignalEvent((player.pantosecond == 1 ? PowerSupplyEvent.RaisePantograph : PowerSupplyEvent.LowerPantograph), 2);
                    w.SignalEvent((player.pantothird == 1 ? PowerSupplyEvent.RaisePantograph : PowerSupplyEvent.LowerPantograph), 3);
                    w.SignalEvent((player.pantofourth == 1 ? PowerSupplyEvent.RaisePantograph : PowerSupplyEvent.LowerPantograph), 4);
                }
            }

            if (train.Cars.Count == 0)
            {
                throw (new Exception("The train of player " + player.user + " is empty from "));
            }

            p.Username        = player.user;
            train.ControlMode = Train.TRAIN_CONTROL.EXPLORER;
            train.CheckFreight();
            train.InitializeBrakes();
            bool canPlace = true;
            Train.TCSubpathRoute tempRoute = train.CalculateInitialTrainPosition(ref canPlace);
            if (tempRoute.Count == 0 || !canPlace)
            {
                MPManager.BroadCast((new MSGMessage(p.Username, "Error", "Cannot be placed into the game")).ToString());//server will broadcast this error
                throw new InvalidDataException("Remote train original position not clear");
            }

            train.SetInitialTrainRoute(tempRoute);
            train.CalculatePositionOfCars();
            train.ResetInitialTrainRoute(tempRoute);

            train.CalculatePositionOfCars();
            train.AITrainBrakePercent = 100;

            //if (MPManager.Instance().AllowedManualSwitch) train.InitializeSignals(false);
            for (int iCar = 0; iCar < train.Cars.Count; iCar++)
            {
                var car = train.Cars[iCar];
                if (car.CarID == p.LeadingLocomotiveID)
                {
                    train.LeadLocomotive = car;
                    (train.LeadLocomotive as MSTSLocomotive).Headlight    = player.headlight;
                    (train.LeadLocomotive as MSTSLocomotive).UsingRearCab = player.frontorrearcab == "R" ? true : false;
                }
                if (car is MSTSLocomotive && MPManager.IsServer())
                {
                    MPManager.Instance().AddOrRemoveLocomotive(player.user, train.Number, iCar, true);
                }
            }
            if (train.LeadLocomotive == null)
            {
                train.LeadNextLocomotive();
                p.LeadingLocomotiveID = train.LeadLocomotive?.CarID ?? "NA";
            }

            if (train.LeadLocomotive != null)
            {
                train.Name = train.GetTrainName(train.LeadLocomotive.CarID);
            }
            else if (train.Cars != null && train.Cars.Count > 0)
            {
                train.Name = train.GetTrainName(train.Cars[0].CarID);
            }
            else if (player?.user != null)
            {
                train.Name = player.user;
            }

            if (MPManager.IsServer())
            {
                train.InitializeSignals(false);
            }
            p.Train = train;

            Players.Add(player.user, p);
            MPManager.Instance().AddOrRemoveTrain(train, true);
        }
Exemple #29
0
 public void SetCarUI(RollingStock rs)
 {
     LocoUI.SetActive(false);
     CarUI.SetActive(true);
     UpdateCargoIcon(rs);
 }
Exemple #30
0
 public void SetReturnPoint(RollingStock rs)
 {
     RSReturnDestination.SetIcon(rs);
 }
Exemple #31
0
        static void Main(string[] args)
        {
            RollingStock rollingStock = new RollingStock()
            {
                new Diesel()
                {
                    Model = "Diesel E56",
                    BuildDate = new DateTime(2010,5,12),
                    EnginePower = 30000,
                    MaxSpeed = 150,
                    SpeedUp = 4.1,
                    Weight = 3000
                },
                new Coach()
                {
                    Model = "Coach C605",
                    BuildDate = new DateTime(2005, 1, 19),
                    Weight = 2000,
                    CoachSeats = 38,
                    CoachType = PassengerCarsType.Second
                },
                new BaggageCar()
                {
                    Model = "Baggage B605",
                    BuildDate = new DateTime(2010, 4, 1),
                    Weight = 2000,
                    CoachSeats = 45,
                    BaggageQuantity = 111,
                    CoachType = PassengerCarsType.First
                },
                new Coach()
                {
                    Model = "Coach C609",
                    BuildDate = new DateTime(2005, 1, 19),
                    Weight = 2000,
                    CoachSeats = 38,
                    CoachType = PassengerCarsType.First
                },
                new BaggageCar()
                {
                    Model = "Baggage B610",
                    BuildDate = new DateTime(2010, 4, 1),
                    Weight = 2000,
                    CoachSeats = 45,
                    BaggageQuantity = 111,
                    CoachType = PassengerCarsType.Third
                },
                new DiningCar()
                {
                    Model = "Dining E57",
                    BuildDate = new DateTime(2010,5,12),
                    DeanerSeats = 20,
                    Weight = 3000
                },
            };

            foreach (var i in rollingStock)
            {
                Console.WriteLine("{0}, {1}", i.Model, i.Builder);
            }

            Console.WriteLine("\n GetCoachItemByNumber()");
            foreach (var i in rollingStock.GetCoachItemByNumber(1, 100))
            {
                Console.WriteLine("{0}, {1}", i.Model, i.Builder);
            }

            Console.WriteLine("\n GetCoachSeatsSum()");
            Console.WriteLine("{0}", rollingStock.GetCoachSeatsSum());

            Console.WriteLine("\n GetBaggagSeatsSum()");
            Console.WriteLine("{0}", rollingStock.GetBaggageQuantitySum());

            Console.WriteLine("\n SortByCoachType()");
            foreach (var i in rollingStock.Sort(new TrainItemComparerBySeatsCount()))
            {
                Console.WriteLine("{0}, {1}", i.Model, i.Builder);
            }

            Console.ReadKey();
        }