/// <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> /// 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> /// Constructor. /// </summary> public BeerCase(GameObject go) { beerCaseGO = go; osc = beerCaseGO.GetComponent <Components.ObjectSyncComponent>(); Client.Assert(beerCaseFSM = Utils.GetPlaymakerScriptByName(go, "Use"), "Beer case FSM not found!"); HookEvents(); }
/// <summary> /// Enter vehicle. /// </summary> /// <param name="vehicle">The vehicle to enter.</param> /// <param name="passenger">Is player entering vehicle as passenger?</param> public override void EnterVehicle(Game.Components.ObjectSyncComponent vehicle, bool passenger) { base.EnterVehicle(vehicle, passenger); Messages.VehicleEnterMessage msg = new Messages.VehicleEnterMessage(); msg.objectID = vehicle.ObjectID; msg.passenger = passenger; netManager.BroadcastMessage(msg, Steamworks.EP2PSend.k_EP2PSendReliable); vehicle.TakeSyncControl(); }
/// <summary> /// Write vehicle switch changes into vehicle switch message. /// </summary> /// <param name="state">The engine state to write.</param> public void WriteVehicleSwitchMessage(Game.Components.ObjectSyncComponent vehicle, PlayerVehicle.SwitchIDs switchID, bool newValue, float newValueFloat) { Messages.VehicleSwitchMessage msg = new Messages.VehicleSwitchMessage(); msg.objectID = vehicle.ObjectID; msg.switchID = (int)switchID; msg.switchValue = newValue; if (newValueFloat != -1) { msg.SwitchValueFloat = newValueFloat; } netManager.BroadcastMessage(msg, Steamworks.EP2PSend.k_EP2PSendReliable); }
/// <summary> /// Write vehicle engine state into state message. /// </summary> /// <param name="state">The engine state to write.</param> public void WriteVehicleStateMessage(Game.Components.ObjectSyncComponent vehicle, PlayerVehicle.EngineStates state, PlayerVehicle.DashboardStates dashstate, float startTime) { Messages.VehicleStateMessage msg = new Messages.VehicleStateMessage(); msg.objectID = vehicle.ObjectID; msg.state = (int)state; msg.dashstate = (int)dashstate; if (startTime != -1) { msg.StartTime = startTime; } netManager.BroadcastMessage(msg, Steamworks.EP2PSend.k_EP2PSendReliable); }