コード例 #1
0
ファイル: NetPlayer.cs プロジェクト: UnsignedVoid/MSCMP
        /// <summary>
        /// Enter vehicle.
        /// </summary>
        /// <param name="vehicle">The vehicle to enter.</param>
        /// <param name="passenger">Is player entering vehicle as passenger?</param>
        public virtual void EnterVehicle(
            Game.Components.ObjectSyncComponent vehicle, bool passenger)
        {
            Client.Assert(currentVehicle == null,
                          "Entered vehicle but player is already in vehicle.");
            Client.Assert(
                state == State.OnFoot, "Entered vehicle but player is not on foot.");

            currentVehicle = vehicle;

            Game.Objects.PlayerVehicle vehicleSubtype =
                currentVehicle.GetObjectSubtype() as Game.Objects.PlayerVehicle;
            if (!passenger)
            {
                // Remote player is now driver.
                vehicleSubtype.CurrentDrivingState =
                    Game.Objects.PlayerVehicle.DrivingStates.Driver;
            }
            else
            {
                vehicleSubtype.CurrentDrivingState =
                    Game.Objects.PlayerVehicle.DrivingStates.Passenger;
            }

            SitInCurrentVehicle();

            // Set state of the player.
            SwitchState(passenger ? State.Passenger : State.DrivingVehicle);
        }
コード例 #2
0
ファイル: NetPlayer.cs プロジェクト: UnsignedVoid/MSCMP
        /// <summary>
        /// Leave vehicle player is currently sitting in.
        /// </summary>
        public virtual void LeaveVehicle()
        {
            Client.Assert(currentVehicle != null && state != State.OnFoot,
                          "Player is leaving vehicle but he is not in vehicle.");

            // Detach character game object from vehicle.

            if (IsSpawned)
            {
                characterGameObject.transform.SetParent(null);

                Game.Objects.PlayerVehicle vehicleGameObject =
                    currentVehicle.GetObjectSubtype() as Game.Objects.PlayerVehicle;
                Transform seatTransform = vehicleGameObject.SeatTransform;
                Teleport(seatTransform.position, seatTransform.rotation);

                // Notify vehicle that the player left.
                vehicleGameObject.CurrentDrivingState =
                    Game.Objects.PlayerVehicle.DrivingStates.None;
            }

            currentVehicle = null;

            // Set state of the player.
            SwitchState(State.OnFoot);
        }
コード例 #3
0
ファイル: NetPlayer.cs プロジェクト: UnsignedVoid/MSCMP
        /// <summary>
        /// Sit in current vehicle.
        /// </summary>
        private void SitInCurrentVehicle()
        {
            if (currentVehicle != null)
            {
                // Make sure player character is attached as we will not update it's position
                // until he leaves vehicle.

                if (IsSpawned)
                {
                    Game.Objects.PlayerVehicle vehicleGameObject =
                        currentVehicle.GetObjectSubtype() as Game.Objects.PlayerVehicle;
                    if (state == State.DrivingVehicle)
                    {
                        Transform seatTransform = vehicleGameObject.SeatTransform;
                        Teleport(seatTransform.position, seatTransform.rotation);
                    }
                    else if (state == State.Passenger)
                    {
                        Transform passangerSeatTransform =
                            vehicleGameObject.PassengerSeatTransform;
                        Teleport(
                            passangerSeatTransform.position, passangerSeatTransform.rotation);
                    }

                    characterGameObject.transform.SetParent(
                        vehicleGameObject.ParentGameObject.transform, false);
                }
            }
        }