/// <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); }
/// <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); }
/// <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); } } }