private IEnumerator EnterVehicleAnimation(Vehicle.Seat seat, bool immediate) { var animIndex = seat.IsLeftHand ? AnimIndex.GetInLeft : AnimIndex.GetInRight; PlayerModel.VehicleParentOffset = Vector3.Scale(PlayerModel.GetAnim(AnimGroup.Car, animIndex).RootEnd, new Vector3(-1, -1, -1)); if (!immediate) { var animState = PlayerModel.PlayAnim(AnimGroup.Car, animIndex, PlayMode.StopAll); animState.wrapMode = WrapMode.Once; while (animState.enabled) { yield return(new WaitForEndOfFrame()); } } // player now completely entered the vehicle IsInVehicleSeat = true; if (seat.IsDriver) { PlayerModel.PlayAnim(AnimGroup.Car, AnimIndex.Sit, PlayMode.StopAll); CurrentVehicle.StartControlling(); } else { PlayerModel.PlayAnim(AnimGroup.Car, AnimIndex.SitPassenger, PlayMode.StopAll); CurrentVehicle.StopControlling(); } }
public void ExitVehicle(bool immediate = false) { if (!IsInVehicle || !IsInVehicleSeat) { return; } // this should be done only if player was a driver ? CurrentVehicle.StopControlling(); if (IsLocalPlayer) { /* * SendToServer(_lastPassengerState = new PlayerPassengerState { * Vechicle = null * }, DeliveryMethod.ReliableOrdered, 1); */ } else { // _snapshots.Reset(); } StartCoroutine(ExitVehicleAnimation(immediate)); }
public void ExitVehicle(bool immediate = false) { if (!IsInVehicle || !IsInVehicleSeat) { return; } CurrentVehicle.StopControlling(); if (IsLocalPlayer) { SendToServer(_lastPassengerState = new PlayerPassengerState { Vechicle = null }, DeliveryMethod.ReliableOrdered, 1); } else { _snapshots.Reset(); } StartCoroutine(ExitVehicleAnimation(immediate)); }