IEnumerator WaitBeforePushDown(Vehicle vehicle, VehicleDockingBay vehicleDockingBay)
        {
            yield return(new WaitForSeconds(6.0f));

            vehicleDockingBay.SetVehicleUndocked();
            vehicleDockingBay.ReflectionSet("vehicle_docked_param", false);
            vehicleDockingBay.ReflectionSet("_dockedVehicle", null);
            vehicle.docked = false;
            vehicle.useRigidbody.AddForce(Vector3.down * 5f, ForceMode.VelocityChange);
        }
Beispiel #2
0
        public override void Process(VehicleUndocking packet)
        {
            GameObject vehicleGo           = GuidHelper.RequireObjectFrom(packet.VehicleGuid);
            GameObject vehicleDockingBayGo = GuidHelper.RequireObjectFrom(packet.DockGuid);

            Vehicle           vehicle           = vehicleGo.RequireComponent <Vehicle>();
            VehicleDockingBay vehicleDockingBay = vehicleDockingBayGo.RequireComponentInChildren <VehicleDockingBay>();

            using (packetSender.Suppress <VehicleUndocking>())
            {
                vehicles.SetOnPilotMode(packet.VehicleGuid, packet.PlayerId, true);
                vehicleDockingBay.subRoot.BroadcastMessage("OnLaunchBayOpening", SendMessageOptions.DontRequireReceiver);
                SkyEnvironmentChanged.Broadcast(vehicleGo, (GameObject)null);
                vehicleDockingBay.ReflectionSet("_dockedVehicle", null);
                vehicle.docked = false;
                vehicle.useRigidbody.AddForce(Vector3.down * 5f, ForceMode.VelocityChange);
            }
        }
        private void FinishVehicleUndocking(VehicleUndocking packet, Vehicle vehicle, VehicleDockingBay vehicleDockingBay)
        {
            if (vehicleDockingBay.GetSubRoot().isCyclops)
            {
                vehicleDockingBay.SetVehicleUndocked();
            }
            vehicleDockingBay.ReflectionSet("_dockedVehicle", null);
            vehicleDockingBay.CancelInvoke("RepairVehicle");
            vehicle.docked = false;
            Optional <RemotePlayer> player = remotePlayerManager.Find(packet.PlayerId);

            if (player.HasValue)
            {
                // Sometimes the player is not set accordingly which stretches the player's model instead of putting them in place
                // after undocking. This fixes it (the player rigid body seems to not be set right sometimes)
                player.Value.SetSubRoot(null);
                player.Value.SetVehicle(null);
                player.Value.SetVehicle(vehicle);
            }
            vehicles.SetOnPilotMode(packet.VehicleId, packet.PlayerId, true);
            Log.Debug($"Set vehicle undocking complete");
        }
        public IEnumerator StartUndockingAnimation(VehicleDockingBay vehicleDockingBay)
        {
            yield return(new WaitForSeconds(2.0f));

            vehicleDockingBay.ReflectionSet("vehicle_docked_param", false);
        }