public void EnterVehicle(Vehicle vehicle, Vehicle.Seat seat) { this.CurrentVehicle = vehicle; this.CurrentVehicleSeatAlignment = seat.Alignment; m_ped.SwitchState <VehicleSittingState> (); }
void EnterVehicleInternal() { Vehicle vehicle = this.CurrentVehicle; Vehicle.Seat seat = this.CurrentVehicleSeat; if (m_isServer) { m_vehicleParentOffset = m_model.VehicleParentOffset; } else if (m_isClientOnly) { m_model.VehicleParentOffset = m_vehicleParentOffset; } BaseVehicleState.PreparePedForVehicle(m_ped, vehicle, seat); // save root frame position // this.UpdateDriverAnim(); // play driver anim // m_model.AnimComponent.Sample(); // sample it // if (m_model.RootFrame != null) // m_rootFramePos = m_model.RootFrame.transform.localPosition; // save root frame position // this.UpdateAnimsInternal(); // restore the correct anim // m_model.AnimComponent.Sample(); // play anims this.UpdateAnimsInternal(); // start vehicle radio if (m_ped.IsControlledByLocalPlayer) { vehicle.PlayRadio(); } }
public void EnterVehicle(Vehicle vehicle, Vehicle.Seat seat) { this.CurrentVehicle = vehicle; this.CurrentVehicleSeatAlignment = seat.Alignment; m_ped.SwitchState(this.GetType()); }
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()); } } if (seat.IsDriver) { IsDrivingVehicle = true; PlayerModel.PlayAnim(AnimGroup.Car, AnimIndex.Sit, PlayMode.StopAll); } else { PlayerModel.PlayAnim(AnimGroup.Car, AnimIndex.SitPassenger, PlayMode.StopAll); } IsInVehicleSeat = true; }
private System.Collections.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; // TODO: also check if this state is still active state while (animState.enabled) { yield return(new WaitForEndOfFrame()); } } // TODO: check if this state is still active, and if vehicle is alive // player now completely entered the vehicle // call method from CarSittingState - he will switch state m_ped.GetStateOrLogError <VehicleSittingState> ().EnterVehicle(this.CurrentVehicle, seat); // this variable is not needed - it can be obtained based on current state // IsInVehicleSeat = true; }
void EnterVehicleInternal() { Vehicle vehicle = this.CurrentVehicle; Vehicle.Seat seat = this.CurrentVehicleSeat; bool immediate = m_immediate; PreparePedForVehicle(m_ped, vehicle, seat); if (seat.IsDriver) { // TODO: this should be done when ped enters the car - or, it should be removed, because // vehicle should know if it has a driver vehicle.StartControlling(); // if (m_isServer) { // var p = Net.Player.GetOwningPlayer(m_ped); // if (p != null) // Net.NetManager.AssignAuthority(vehicle.gameObject, p); // } } if (!vehicle.IsNightToggled && WorldController.IsNight) { vehicle.IsNightToggled = true; } else if (vehicle.IsNightToggled && !WorldController.IsNight) { vehicle.IsNightToggled = false; } m_coroutine = StartCoroutine(EnterVehicleAnimation(seat, immediate)); }
public void EnterVehicle(Vehicle vehicle, Vehicle.Seat seat) { this.CurrentVehicle = vehicle; this.CurrentVehicleSeat = seat; m_ped.SwitchState <VehicleSittingState> (); if (seat.IsDriver) { m_ped.PlayerModel.PlayAnim(AnimGroup.Car, AnimIndex.Sit, PlayMode.StopAll); } else { m_ped.PlayerModel.PlayAnim(AnimGroup.Car, AnimIndex.SitPassenger, PlayMode.StopAll); } }
void EnterVehicleInternal() { Vehicle vehicle = this.CurrentVehicle; Vehicle.Seat seat = this.CurrentVehicleSeat; VehicleEnteringState.PreparePedForVehicle(m_ped, vehicle, seat); if (seat.IsDriver) { m_model.PlayAnim(AnimGroup.Car, AnimIndex.Sit, PlayMode.StopAll); } else { m_model.PlayAnim(AnimGroup.Car, AnimIndex.SitPassenger, PlayMode.StopAll); } }
public static void PreparePedForVehicle(Ped ped, Vehicle vehicle, Vehicle.Seat seat) { seat.OccupyingPed = ped; ped.characterController.enabled = false; ped.transform.SetParent(seat.Parent); ped.transform.localPosition = Vector3.zero; ped.transform.localRotation = Quaternion.identity; ped.PlayerModel.IsInVehicle = true; if (!VehicleManager.Instance.syncPedTransformWhileInVehicle) { if (ped.NetTransform != null) { ped.NetTransform.enabled = false; } } }
private System.Collections.IEnumerator EnterVehicleAnimation(Vehicle.Seat seat, bool immediate) { var animIndex = seat.IsLeftHand ? AnimIndex.GetInLeft : AnimIndex.GetInRight; m_model.VehicleParentOffset = Vector3.Scale(m_model.GetAnim(AnimGroup.Car, animIndex).RootEnd, new Vector3(-1, -1, -1)); if (!immediate) { var animState = m_model.PlayAnim(AnimGroup.Car, animIndex, PlayMode.StopAll); animState.wrapMode = WrapMode.Once; // wait until anim is finished or vehicle is destroyed while (animState.enabled && this.CurrentVehicle != null) { yield return(new WaitForEndOfFrame()); } } // check if vehicle is alive if (null == this.CurrentVehicle) { // vehicle destroyed in the meantime ? hmm... ped is a child of vehicle, so it should be // destroyed as well ? // anyway, switch to stand state if (m_isServer) { m_ped.SwitchState <StandState>(); } yield break; } // ped now completely entered the vehicle // call method from VehicleSittingState - he will switch state if (m_isServer) { m_ped.GetStateOrLogError <VehicleSittingState> ().EnterVehicle(this.CurrentVehicle, seat); } }
public bool TryEnterVehicle(Vehicle vehicle, Vehicle.SeatAlignment seatAlignment, bool immediate = false) { if (!this.CanEnterVehicle(vehicle, seatAlignment)) { return(false); } Vehicle.Seat seat = vehicle.GetSeat(seatAlignment); // switch state here m_ped.SwitchState <VehicleEnteringState>(); this.CurrentVehicle = vehicle; this.CurrentVehicleSeat = seat; seat.OccupyingPed = m_ped; m_ped.characterController.enabled = false; if (m_ped.IsLocalPlayer) { if (m_ped.Camera != null) { // m_ped.Camera.transform.SetParent (seat.Parent, true); } /* * SendToServer(_lastPassengerState = new PlayerPassengerState { * Vechicle = vehicle, * SeatAlignment = (int) seatAlignment * }, DeliveryMethod.ReliableOrdered, 1); */ } m_ped.transform.SetParent(seat.Parent); m_ped.transform.localPosition = Vector3.zero; m_ped.transform.localRotation = Quaternion.identity; if (m_ped.IsLocalPlayer && seat.IsDriver) { vehicle.StartControlling(); } m_ped.PlayerModel.IsInVehicle = true; if (!vehicle.IsNightToggled && WorldController.IsNight) { vehicle.IsNightToggled = true; } else if (vehicle.IsNightToggled && !WorldController.IsNight) { vehicle.IsNightToggled = false; } Debug.Log("IsNightToggled? " + vehicle.IsNightToggled); StartCoroutine(EnterVehicleAnimation(seat, immediate)); return(true); }