Пример #1
0
        public void HandleTrainSync(TrainSyncRpc rpc)
        {
            for (int i = 0; i < rpc.TrainCount; i++)
            {
                string[]       carData = rpc.TrainCars[i].Split("-");
                RailcarModel[] models  = new RailcarModel[carData.Length];
                for (int j = 0; j < carData.Length; j++)
                {
                    models[j] = Models[int.Parse(carData[j])];
                }

                Train train;
                if (i >= Trains.Count)
                {
                    train = new Train(this, models[i], TrackPosition.FromString(this, rpc.TrainPositions[i]));
                    for (int j = 1; j < models.Length; j++)
                    {
                        train.AddRailcar(models[j]);
                    }
                }
                else
                {
                    train = (Train)Trains[i];
                }

                train.UpdatePosition(TrackPosition.FromString(this, rpc.TrainPositions[i]));
                train.Speed        = rpc.TrainSpeeds[i];
                train.Acceleration = rpc.TrainAccelerations[i];
            }

            for (int i = 0; i < rpc.SwitchInfo.Length; i++)
            {
                Switches[i].SwitchPosition = rpc.SwitchInfo[i];
            }
        }
Пример #2
0
        private void OnRailPulse(object sender, ElapsedEventArgs e)
        {
            int   currentTick = GameServer.TickCount;
            float dt          = (float)(currentTick - lastSyncTick) / 1000;

            lastSyncTick = currentTick;

            TrainSyncRpc syncPacket = new TrainSyncRpc(Trains.Count, Switches.Count);

            int c = 0;

            foreach (Train train in Trains)
            {
                // Update the position
                train.Move(dt);

                // Prepare the data
                syncPacket.TrainSpeeds[c]        = train.Speed;
                syncPacket.TrainAccelerations[c] = train.Acceleration;
                syncPacket.TrainPositions[c]     = train.FrontPosition.ToString();
                string trainCarsString = "";
                foreach (SharedRailcar car in train.Railcars)
                {
                    trainCarsString = trainCarsString + car.Model.Id + "-";
                }

                syncPacket.TrainCars[c] = trainCarsString.Remove(trainCarsString.Length - 1);
                c++;
            }

            c = 0;
            foreach (TrackSwitch s in Switches)
            {
                syncPacket.SwitchInfo[c] = s.SwitchPosition;
                c++;
            }

            // Send the rpc to all clients
            RpcManager.Instance.TriggerRPC("trainSyncRpc", syncPacket);
        }