Beispiel #1
0
        public static void SendDocked(VehicleDockingBay bay, Vehicle vehicle, bool status)
        {
            if (bay == null || vehicle == null || Multiplayer.main.blocked)
            {
                return;
            }

            var sync = vehicle.GetComponent <SyncedVehicle>();

            if (sync != null && sync.activePlayer != null)
            {
                return;
            }

            var res = new ClientVehicleDocking();

            res.id          = Multiplayer.main.self.id;
            res.vehicleGuid = GuidHelper.Get(vehicle.gameObject);
            res.bayGuid     = GuidHelper.Get(bay.gameObject);
            res.subGuid     = GuidHelper.Get(bay.subRoot?.gameObject);
            res.bayPosition = bay.transform.position;
            res.docked      = status;

            Multiplayer.main.Send(res);
        }
Beispiel #2
0
        private void OnVehiclePrefabLoaded(GameObject prefab, string guid, Vector3 spawnPosition, Quaternion spawnRotation, Optional <List <InteractiveChildObjectIdentifier> > interactiveChildIdentifiers, Optional <string> dockingBayGuid)
        {
            // Partially copied from SubConsoleCommand.OnSubPrefabLoaded
            GameObject gameObject = Utils.SpawnPrefabAt(prefab, null, spawnPosition);

            gameObject.transform.rotation = spawnRotation;
            gameObject.SetActive(true);
            gameObject.SendMessage("StartConstruction", SendMessageOptions.DontRequireReceiver);
            CrafterLogic.NotifyCraftEnd(gameObject, CraftData.GetTechType(gameObject));
            Rigidbody rigidBody = gameObject.GetComponent <Rigidbody>();

            rigidBody.isKinematic = false;
            GuidHelper.SetNewGuid(gameObject, guid);
            if (interactiveChildIdentifiers.IsPresent())
            {
                VehicleChildObjectIdentifierHelper.SetInteractiveChildrenGuids(gameObject, interactiveChildIdentifiers.Get()); //Copy From ConstructorBeginCraftingProcessor
            }

            if (dockingBayGuid.IsPresent())
            {
                GameObject        dockingBayBase = GuidHelper.RequireObjectFrom(dockingBayGuid.Get());
                VehicleDockingBay dockingBay     = dockingBayBase.GetComponentInChildren <VehicleDockingBay>();

                Vehicle vehicle = gameObject.GetComponent <Vehicle>();

                dockingBay.DockVehicle(vehicle);
            }
        }
Beispiel #3
0
        public bool ShouldApplyNextHealthUpdate(LiveMixin reciever, GameObject dealer = null)
        {
            NitroxId id = NitroxEntity.GetId(reciever.gameObject);

            if (!simulationOwnership.HasAnyLockType(id) && !processingRemoteHealthChange)
            {
                return(false);
            }

            // Check to see if this health change is caused by docked vehicle collisions.  If so, we don't want to apply it.
            if (dealer)
            {
                Vehicle           dealerVehicle     = dealer.GetComponent <Vehicle>();
                VehicleDockingBay vehicleDockingBay = reciever.GetComponentInChildren <VehicleDockingBay>();

                if (vehicleDockingBay && dealerVehicle)
                {
                    if (vehicleDockingBay.GetDockedVehicle() == dealerVehicle || vehicleDockingBay.interpolatingVehicle == dealerVehicle ||
                        vehicleDockingBay.nearbyVehicle == dealerVehicle)
                    {
                        Log.Debug($"Dealer {dealer} is vehicle and currently docked or nearby {reciever}, do not harm it!");
                        return(false);
                    }
                }
            }

            return(true);
        }
Beispiel #4
0
        public void BroadcastVehicleUndocking(VehicleDockingBay dockingBay, Vehicle vehicle, bool undockingStart)
        {
            NitroxId dockId;

            if (dockingBay.GetSubRoot() is BaseRoot)
            {
                dockId = NitroxEntity.GetId(dockingBay.GetComponentInParent <BaseRoot>().gameObject);
            }
            else if (dockingBay.GetSubRoot() is SubRoot)
            {
                dockId = NitroxEntity.GetId(dockingBay.GetSubRoot().gameObject);
            }
            else
            {
                dockId = NitroxEntity.GetId(dockingBay.GetComponentInParent <ConstructableBase>().gameObject);
            }

            NitroxId vehicleId = NitroxEntity.GetId(vehicle.gameObject);
            ushort   playerId  = multiplayerSession.Reservation.PlayerId;

            PacketSuppressor <Movement>        movementSuppressor        = packetSender.Suppress <Movement>();
            PacketSuppressor <VehicleMovement> vehicleMovementSuppressor = packetSender.Suppress <VehicleMovement>();

            if (!undockingStart)
            {
                movementSuppressor.Dispose();
                vehicleMovementSuppressor.Dispose();
            }

            VehicleUndocking packet = new VehicleUndocking(vehicleId, dockId, playerId, undockingStart);

            packetSender.Send(packet);
        }
        public static bool Prefix(DockedVehicleHandTarget __instance, GUIHand hand)
        {
            vehicleDockingBay = __instance.dockingBay;
            Vehicle vehicle = vehicleDockingBay.GetDockedVehicle();

            if (skipPrefix || vehicle == null)
            {
                return(true);
            }

            dockedVehicle = __instance;
            guiHand       = hand;

            SimulationOwnership simulationOwnership = NitroxServiceLocator.LocateService <SimulationOwnership>();

            NitroxId id = NitroxEntity.GetId(vehicle.gameObject);

            if (simulationOwnership.HasExclusiveLock(id))
            {
                Log.Debug($"Already have an exclusive lock on this vehicle: {id}");
                return(true);
            }

            simulationOwnership.RequestSimulationLock(id, SimulationLockType.EXCLUSIVE, ReceivedSimulationLockResponse);

            return(false);
        }
 private static void Postfix(VehicleDockingBay __instance)
 {
     if (__instance.subRoot is BaseRoot)
     {
         __instance.StartCoroutine(CreateConsole(__instance));
     }
 }
        public static bool Prefix(VehicleDockingBay __instance, Collider other)
        {
            Vehicle vehicle = other.GetComponentInParent <Vehicle>();

            prevInterpolatingVehicle = __instance.interpolatingVehicle;
            return(vehicle == null || NitroxServiceLocator.LocateService <SimulationOwnership>().HasAnyLockType(NitroxEntity.GetId(vehicle.gameObject)));
        }
        private static IEnumerator CreateConsole(VehicleDockingBay __instance)
        {
            if (prefab == null)
            {
                yield return(CreatePrefab());
            }

            GameObject console = GameObject.Instantiate(prefab);

            console.transform.SetParent(__instance.transform, false);
            console.transform.localPosition    = new Vector3(4.96f, 1.4f, 3.23f);
            console.transform.localEulerAngles = new Vector3(0, 42.5f, 0);

            console.AddComponent <MoonpoolTerminalController>();

            var terminalManager = console.GetComponent <CyclopsVehicleStorageTerminalManager>();

            terminalManager.dockingBay = __instance;

            // This resets and then calls the OnDockingChanged event handler
            console.SetActive(false);
            console.SetActive(true);
            CyclopsVehicleStorageTerminalManager_OnDockedChanged.Invoke(terminalManager, new object[] { });

            var mesh         = console.transform.Find("Mesh").gameObject;
            var meshRenderer = mesh.GetComponent <MeshRenderer>();

            console.SetActive(false);
            var skyApplier = console.AddComponent <SkyApplier>();

            skyApplier.dynamic   = true;
            skyApplier.renderers = new Renderer[] { meshRenderer };
            skyApplier.anchorSky = Skies.BaseInterior;
            console.SetActive(true);
        }
Beispiel #9
0
        private static bool Prefix(VehicleDockingBay __instance)
        {
            if (__instance != null)
            {
                Dockable docked = __instance.GetDockedObject();

                if (docked != null)
                {
                    if (docked.name.Contains("SeaTruck"))
                    {
                        MainPatch.seaTruckIsDocked = true;
                    }
                    else if (docked.name.Contains("Exosuit"))
                    {
                        MainPatch.exoSuitIsDocked = true;
                    }
                }
                else
                {
                    MainPatch.seaTruckIsDocked = false;
                    MainPatch.exoSuitIsDocked  = false;
                }
            }
            return(false);
        }
Beispiel #10
0
        public void BroadcastVehicleDocking(VehicleDockingBay dockingBay, Vehicle vehicle)
        {
            NitroxId dockId;

            if (dockingBay.GetSubRoot() is BaseRoot)
            {
                dockId = NitroxEntity.GetId(dockingBay.GetComponentInParent <BaseRoot>().gameObject);
            }
            else if (dockingBay.GetSubRoot() is SubRoot)
            {
                dockId = NitroxEntity.GetId(dockingBay.GetSubRoot().gameObject);
            }
            else
            {
                dockId = NitroxEntity.GetId(dockingBay.GetComponentInParent <ConstructableBase>().gameObject);
            }

            NitroxId vehicleId = NitroxEntity.GetId(vehicle.gameObject);
            ushort   playerId  = multiplayerSession.Reservation.PlayerId;

            VehicleDocking packet = new VehicleDocking(vehicleId, dockId, playerId);

            packetSender.Send(packet);

            PacketSuppressor <Movement> movementSuppressor = packetSender.Suppress <Movement>();

            vehicle.StartCoroutine(AllowMovementPacketsAfterDockingAnimation(movementSuppressor));
        }
Beispiel #11
0
            public static bool Prefix(VehicleDockingBay __instance, GameObject nearby)
            {
                SubRoot cyclops = UWE.Utils.GetComponentInHierarchy <SubRoot>(nearby.gameObject);

                if (cyclops != null && !InceptionManager.DockedCyclopses.Contains(cyclops))
                {
                    if ((bool)__instance.GetInstanceField("powered"))
                    {
                        SubRoot main = __instance.GetSubRoot();
                        main.BroadcastMessage("OnLaunchBayOpening", SendMessageOptions.DontRequireReceiver);
                        main.BroadcastMessage("LockDoors", SendMessageOptions.DontRequireReceiver);
                        if ((bool)__instance.GetInstanceField("soundReset"))
                        {
                            if (__instance.bayDoorsOpenSFX != null)
                            {
                                __instance.bayDoorsOpenSFX.Play();
                            }
                            __instance.SetInstanceField("soundReset", false);
                            __instance.Invoke("SoundReset", 1f);
                        }
                    }
                    __instance.SetInstanceField("nearbyVehicle", null);
                    return(false);
                }
                return(true);
            }
Beispiel #12
0
    protected override void SpawnPostProcess(Base latestBase, Int3 latestCell, GameObject finishedPiece)
    {
        NitroxId          moonpoolId = NitroxEntity.GetId(finishedPiece);
        VehicleDockingBay dockingBay = finishedPiece.RequireComponentInChildren <VehicleDockingBay>();

        NitroxId dockingBayId = moonpoolId.Increment();

        NitroxEntity.SetNewId(dockingBay.gameObject, dockingBayId);
    }
Beispiel #13
0
 private static void Postfix(VehicleDockingBay __instance)
 {
     if (!(__instance.subRoot is BaseRoot))
     {
         return;
     }
     (__instance).CancelInvoke("GetDockedObject");
     (__instance).InvokeRepeating("GetDockedObject", 0.0f, 1f);
 }
        static void Postfix(VehicleDockingBay __instance)
        {
            var CinematicHatchControl = __instance.subRoot.GetComponentInChildren <CinematicHatchControl>();

            if (CinematicHatchControl != null)
            {
                CinematicHatchControl.hatch.Invoke(nameof(CinematicHatchControl.hatch.Close), 5.5f);
            }
        }
        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 #16
0
            public static bool Prefix(VehicleDockingBay __instance, Collider other)
            {
                SubRoot cyclops = UWE.Utils.GetComponentInHierarchy <SubRoot>(other.gameObject);

                if (cyclops == null || InceptionManager.DockedCyclopses.ContainsKey(cyclops) || InceptionManager.GetRecentlyUndocked(cyclops) || __instance.GetDockedVehicle() || (GameModeUtils.RequiresPower() && !(bool)__instance.GetInstanceField("powered")) || (Vehicle)__instance.GetInstanceField("interpolatingVehicle") != null)
                {
                    return(true);
                }
                InceptionManager.DockedCyclopses.Add(cyclops, __instance.GetSubRoot());
                return(false);
            }
Beispiel #17
0
        private static void Postfix(VehicleDockingBay __instance)
        {
            bool flag  = __instance.subRoot is BaseRoot;
            bool flag2 = flag;

            if (flag2)
            {
                __instance.CancelInvoke("OnUndockingStart");
                __instance.InvokeRepeating("OnUndockingStart", 0.0f, 1f);
            }
        }
Beispiel #18
0
        /// <summary>
        /// Indicates if a LiveMixin object should execute TakeDamage or HealthBack method
        /// </summary>
        /// <param name="reciever">The one who takes damage or gets health back</param>
        /// <param name="healthChange">The amount of health it gets back or damage dealt</param>
        /// <param name="dealer">Damage dealer</param>
        /// <returns>Tuple where the first item indicates execution and the second indicates if the player has the ownership of the reciever GameObject (if vehicle)</returns>
        public ExecutionAndOwnership ShouldExecute(LiveMixin reciever, float healthChange, GameObject dealer)
        {
            Vehicle vehicle = reciever.GetComponent <Vehicle>();
            SubRoot subRoot = reciever.GetComponent <SubRoot>();


            if (vehicle != null || subRoot != null && subRoot.isCyclops)
            {
                NitroxId id = NitroxEntity.GetId(reciever.gameObject);

                bool isOutstandingPresent = outstandingChangeHealth.TryGetValue(id, out Tuple <float, float> healthChangeAndTotal) &&
                                            healthChangeAndTotal.Item1 == healthChange && healthChangeAndTotal.Item2 == reciever.health;
                bool hasOwnership = simulationOwnership.HasAnyLockType(id);

                // We either have a lock or an outstanding health change with the same health change and current total health when we execute the code
                if (!hasOwnership && !isOutstandingPresent)
                {
                    return(new ExecutionAndOwnership(false, false));
                }

                // Remove the outstandingHealthChange if present.
                if (isOutstandingPresent)
                {
                    outstandingChangeHealth.Remove(id);
                }

                if (healthChange > 0)
                {
                    return(new ExecutionAndOwnership(true, hasOwnership));
                }
                // To prevent damage that happens while docking, we check if dealer is the vehicle that is also docked.
                VehicleDockingBay vehicleDockingBay = reciever.GetComponent <VehicleDockingBay>();
                if (!vehicleDockingBay)
                {
                    vehicleDockingBay = reciever.GetComponentInChildren <VehicleDockingBay>();
                }
                Vehicle dealerVehicle = dealer.GetComponent <Vehicle>();
                if (vehicleDockingBay && dealerVehicle)
                {
                    if (vehicleDockingBay.GetDockedVehicle() == dealerVehicle || (Vehicle)vehicleDockingBay.ReflectionGet("interpolatingVehicle") == dealerVehicle ||
                        (Vehicle)vehicleDockingBay.ReflectionGet("nearbyVehicle") == dealerVehicle)
                    {
                        Log.Debug($"Dealer {dealer} is vehicle and currently docked or nearby {reciever}, do not harm it!");
                        return(new ExecutionAndOwnership(false, false));
                    }
                }
                return(new ExecutionAndOwnership(true, hasOwnership));
            }
            return(new ExecutionAndOwnership(true, false));
        }
        public static void Postfix(VehicleDockingBay __instance, Collider other)
        {
            Vehicle  interpolatingVehicle = (Vehicle)__instance.ReflectionGet("interpolatingVehicle");
            NitroxId id = NitroxEntity.GetId(interpolatingVehicle.gameObject);

            // Only send data, when interpolatingVehicle changes to avoid multiple packages send
            if (interpolatingVehicle &&
                interpolatingVehicle != prevInterpolatingVehicle &&
                NitroxServiceLocator.LocateService <SimulationOwnership>().HasAnyLockType(id))
            {
                Log.Debug($"Will send vehicle docking for {id}");
                NitroxServiceLocator.LocateService <Vehicles>().BroadcastVehicleDocking(__instance, interpolatingVehicle);
            }
        }
Beispiel #20
0
        public void BroadcastVehicleUndocking(VehicleDockingBay dockingBay, Vehicle vehicle)
        {
            string dockGuid    = GuidHelper.GetGuid(dockingBay.gameObject);
            string vehicleGuid = GuidHelper.GetGuid(vehicle.gameObject);
            ushort playerId    = multiplayerSession.Reservation.PlayerId;

            VehicleUndocking packet = new VehicleUndocking(vehicleGuid, dockGuid, playerId);

            packetSender.Send(packet);

            PacketSuppressor <Movement> movementSuppressor = packetSender.Suppress <Movement>();

            vehicle.StartCoroutine(AllowMovementPacketsAfterDockingAnimation(movementSuppressor));
        }
        public override void Process(VehicleDocking packet)
        {
            GameObject vehicleGo           = GuidHelper.RequireObjectFrom(packet.VehicleGuid);
            GameObject vehicleDockingBayGo = GuidHelper.RequireObjectFrom(packet.DockGuid);

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

            using (packetSender.Suppress <VehicleDocking>())
            {
                vehicleDockingBay.DockVehicle(vehicle);
            }

            vehicle.StartCoroutine(DisablePilotingAfterAnimation(packet.VehicleGuid, packet.PlayerId));
        }
Beispiel #22
0
        public override void Process(VehicleDocking packet)
        {
            GameObject vehicleGo           = NitroxEntity.RequireObjectFrom(packet.VehicleId);
            GameObject vehicleDockingBayGo = NitroxEntity.RequireObjectFrom(packet.DockId);

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

            using (packetSender.Suppress <VehicleDocking>())
            {
                vehicleDockingBay.SetVehicleDocked(vehicle);
            }

            vehicle.StartCoroutine(DisablePilotingAfterAnimation(packet.VehicleId, packet.PlayerId));
        }
        IEnumerator DelayAnimationAndDisablePiloting(Vehicle vehicle, VehicleDockingBay vehicleDockingBay, NitroxId vehicleId, ushort playerId)
        {
            yield return(new WaitForSeconds(1.0f));

            // DockVehicle sets the rigid body kinematic of the vehicle to true, we don't want that behaviour
            // Therefore disable kinematic (again) to remove the bouncing behavior
            vehicleDockingBay.DockVehicle(vehicle);
            vehicle.useRigidbody.isKinematic = false;
            yield return(new WaitForSeconds(2.0f));

            vehicles.SetOnPilotMode(vehicleId, playerId, false);
            if (!vehicle.docked)
            {
                Log.Error($"Vehicle {vehicleId} not docked after docking process");
            }
        }
        public override void Process(VehicleDocking packet)
        {
            GameObject vehicleGo           = NitroxEntity.RequireObjectFrom(packet.VehicleId);
            GameObject vehicleDockingBayGo = NitroxEntity.RequireObjectFrom(packet.DockId);

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

            using (packetSender.Suppress <VehicleDocking>())
            {
                Log.Debug($"Set vehicle docked for {vehicleDockingBay.gameObject.name}");
                vehicle.GetComponent <MultiplayerVehicleControl>().SetPositionVelocityRotation(vehicle.transform.position, Vector3.zero, vehicle.transform.rotation, Vector3.zero);
                vehicle.GetComponent <MultiplayerVehicleControl>().Exit();
            }
            vehicle.StartCoroutine(DelayAnimationAndDisablePiloting(vehicle, vehicleDockingBay, packet.VehicleId, packet.PlayerId));
        }
Beispiel #25
0
        public void BroadcastVehicleDocking(VehicleDockingBay dockingBay, Vehicle vehicle)
        {
            NitroxId dockId = NitroxEntity.GetId(dockingBay.gameObject);


            NitroxId vehicleId = NitroxEntity.GetId(vehicle.gameObject);
            ushort   playerId  = multiplayerSession.Reservation.PlayerId;

            VehicleDocking packet = new VehicleDocking(vehicleId, dockId, playerId);

            packetSender.Send(packet);

            PacketSuppressor <Movement>        movementSuppressor        = packetSender.Suppress <Movement>();
            PacketSuppressor <VehicleMovement> vehicleMovementSuppressor = packetSender.Suppress <VehicleMovement>();

            vehicle.StartCoroutine(AllowMovementPacketsAfterDockingAnimation(movementSuppressor, vehicleMovementSuppressor));
        }
        public static void Postfix(VehicleDockingBay __instance)
        {
            Vehicle interpolatingVehicle = __instance.interpolatingVehicle;

            // Only send data, when interpolatingVehicle changes to avoid multiple packages send
            if (!interpolatingVehicle || interpolatingVehicle == prevInterpolatingVehicle)
            {
                return;
            }
            NitroxId id = NitroxEntity.GetId(interpolatingVehicle.gameObject);

            if (NitroxServiceLocator.LocateService <SimulationOwnership>().HasAnyLockType(id))
            {
                Log.Debug($"Will send vehicle docking for {id}");
                NitroxServiceLocator.LocateService <Vehicles>().BroadcastVehicleDocking(__instance, interpolatingVehicle);
            }
        }
Beispiel #27
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 static void ReceivedSimulationLockResponse(NitroxId id, bool lockAquired, HandInteraction <DockedVehicleHandTarget> context)
        {
            if (lockAquired)
            {
                VehicleDockingBay dockingBay = context.Target.dockingBay;
                NitroxServiceLocator.LocateService <Vehicles>().BroadcastVehicleUndocking(dockingBay, dockingBay.GetDockedVehicle(), true);

                skipPrefix = true;
                context.Target.OnHandClick(context.GuiHand);
                skipPrefix = false;
            }
            else
            {
                HandReticle.main.SetInteractText("Another player is using this vehicle!");
                HandReticle.main.SetIcon(HandReticle.IconType.HandDeny, 1f);
                context.Target.isValidHandTarget = false;
            }
        }
        public override void Process(VehicleUndocking packet)
        {
            GameObject vehicleGo           = NitroxEntity.RequireObjectFrom(packet.VehicleId);
            GameObject vehicleDockingBayGo = NitroxEntity.RequireObjectFrom(packet.DockId);

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

            using (packetSender.Suppress <VehicleUndocking>())
            {
                vehicles.SetOnPilotMode(packet.VehicleId, packet.PlayerId, true);
                vehicleDockingBay.subRoot.BroadcastMessage("OnLaunchBayOpening", SendMessageOptions.DontRequireReceiver);
                SkyEnvironmentChanged.Broadcast(vehicleGo, (GameObject)null);



                vehicle.StartCoroutine(WaitBeforePushDown(vehicle, vehicleDockingBay));
            }
        }
Beispiel #30
0
        public void BroadcastVehicleUndocking(VehicleDockingBay dockingBay, Vehicle vehicle)
        {
            string dockGuid = string.Empty;

            if (dockingBay.GetSubRoot() is BaseRoot)
            {
                dockGuid = GuidHelper.GetGuid(dockingBay.GetComponentInParent <BaseRoot>().gameObject);
            }
            else
            {
                dockGuid = GuidHelper.GetGuid(dockingBay.GetComponentInParent <ConstructableBase>().gameObject);
            }

            string vehicleGuid = GuidHelper.GetGuid(vehicle.gameObject);
            ushort playerId    = multiplayerSession.Reservation.PlayerId;

            VehicleUndocking packet = new VehicleUndocking(vehicleGuid, dockGuid, playerId);

            packetSender.Send(packet);
        }