Ejemplo n.º 1
0
        public GameObject CreateNewEscapePod(EscapePodModel model)
        {
            SURPRESS_ESCAPE_POD_AWAKE_METHOD = true;

            GameObject escapePod;

            if (model.Id == MyEscapePodId)
            {
                escapePod = EscapePod.main.gameObject;
            }
            else
            {
                escapePod = Object.Instantiate(EscapePod.main.gameObject);
                NitroxEntity.SetNewId(escapePod, model.Id);
            }

            escapePod.transform.position = model.Location.ToUnity();

            StorageContainer storageContainer = escapePod.RequireComponentInChildren <StorageContainer>();

            using (packetSender.Suppress <ItemContainerRemove>())
            {
                storageContainer.container.Clear();
            }

            NitroxEntity.SetNewId(storageContainer.gameObject, model.StorageContainerId);

            MedicalCabinet medicalCabinet = escapePod.RequireComponentInChildren <MedicalCabinet>();

            NitroxEntity.SetNewId(medicalCabinet.gameObject, model.MedicalFabricatorId);

            Fabricator fabricator = escapePod.RequireComponentInChildren <Fabricator>();

            NitroxEntity.SetNewId(fabricator.gameObject, model.FabricatorId);

            Radio radio = escapePod.RequireComponentInChildren <Radio>();

            NitroxEntity.SetNewId(radio.gameObject, model.RadioId);

            DamageEscapePod(model.Damaged, model.RadioDamaged);
            FixStartMethods(escapePod);

            // Start() isn't executed for the EscapePod, why? Idk, maybe because it's a scene...
            MultiplayerCinematicReference reference = escapePod.AddComponent <MultiplayerCinematicReference>();

            foreach (PlayerCinematicController controller in escapePod.GetComponentsInChildren <PlayerCinematicController>())
            {
                reference.AddController(controller);
            }

            SURPRESS_ESCAPE_POD_AWAKE_METHOD = false;

            return(escapePod);
        }
    public static void Prefix(PlayerCinematicController __instance)
    {
        if (!__instance.cinematicModeActive)
        {
            return;
        }

        if (!__instance.TryGetComponent(out NitroxEntity entity))
        {
            entity = __instance.GetComponentInParent <NitroxEntity>();
            if (!entity)
            {
                Log.Warn($"[{nameof(PlayerCinematicController_OnPlayerCinematicModeEnd_Patch)}] - No NitroxEntity for \"{__instance.GetFullHierarchyPath()}\" found!");
                return;
            }
        }

        int identifier = MultiplayerCinematicReference.GetCinematicControllerIdentifier(__instance.gameObject, entity.gameObject);

        Resolve <PlayerCinematics>().EndCinematicMode(playerId, entity.Id, identifier, __instance.playerViewAnimationName);
    }
    public override void Process(PlayerCinematicControllerCall packet)
    {
        Optional <GameObject> opEntity = NitroxEntity.GetObjectFrom(packet.ControllerID);

        Validate.IsPresent(opEntity);

        MultiplayerCinematicReference reference = opEntity.Value.GetComponent <MultiplayerCinematicReference>();

        Validate.IsTrue(reference);

        Optional <RemotePlayer> opPlayer = playerManager.Find(packet.PlayerId);

        Validate.IsPresent(opPlayer);

        if (packet.StartPlaying)
        {
            reference.CallStartCinematicMode(packet.Key, packet.ControllerNameHash, opPlayer.Value);
        }
        else
        {
            reference.CallCinematicModeEnd(packet.Key, packet.ControllerNameHash, opPlayer.Value);
        }
    }