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); } }