private void TeardownPortalReceiver(OldPortalSettings receiver) { UnityEngine.Transform container = receiver.transform.parent; receiver.transform.SetParent(container.parent); Destroy(container.gameObject); Destroy(receiver.GetComponent <Portal>()); OldPortalTeleporter portalTeleporter = receiver.GetComponentInChildren <OldPortalTeleporter>(); UnityEngine.Transform volumetricPortal = receiver.transform.Find("VolumetricPortal"); OldVolumetricPortalTrigger volumetricPortalTrigger = receiver.GetComponentInChildren <OldVolumetricPortalTrigger>(); if (portalTeleporter != null) { Destroy(portalTeleporter.gameObject); } if (volumetricPortal != null) { Destroy(volumetricPortal.gameObject); } if (volumetricPortalTrigger != null) { Destroy(volumetricPortalTrigger.gameObject); } }
// Use this for initialization new IEnumerator Start() { base.Start(); yield return(null); portalTeleporter = portal.teleporter; GameObject volumetricPortal = portal.volumetricPortal; objectsToEnable = new GameObject[] { volumetricPortal }; objectsToDisable = new GameObject[0]; scriptsToEnable = new MonoBehaviour[0]; scriptsToDisable = new MonoBehaviour[0]; InitializeCollider(); gameObject.name = "VolumetricPortalTrigger"; // Initialize collider for volumetric portal so that we can know when to turn off the volumetric portal (upon exiting its area of rendering) MeshCollider volumetricPortalCollider = volumetricPortal.GetComponent <MeshCollider>(); volumetricPortalCollider.enabled = true; volumetricPortalCollider.convex = true; volumetricPortalCollider.isTrigger = true; volumetricPortal.AddComponent <MagicTrigger>().OnMagicTriggerExit += ctx => TriggerExit(); }
private void InitializePortalsForChannel(int channel) { List <OldPortalSettings> settings = receiversByChannel[channel].ToList(); // Create a container game object which contains all the elements of the portal List <OldPortalContainer> portalContainers = CreatePortalContainers(channel); // Create a Portal Camera which renders to a RenderTexture for each Receiver in the channel List <OldPortalCameraFollow> portalCameras = CreatePortalCameras(channel); // Create the Portal Teleporters on each PortalSettings List <OldPortalTeleporter> portalTeleporters = CreatePortalTeleporters(channel); // Create the volumetric portal gameobjects List <GameObject> volumetricPortalObjects = CreateVolumetricPortalObjects(channel); // Create the trigger zones for volumetric portals List <OldVolumetricPortalTrigger> volumetricPortalTriggers = CreateVolumetricPortalTriggers(channel); // Initialize all references needed for (int i = 0; i < portalContainers.Count; i++) { int other = (i + 1) % 2; OldPortalContainer portalContainer = portalContainers[i]; OldPortalSettings portalSettings = settings[i]; Portal portalCameraRenderTexture = portalSettings.gameObject.AddComponent <Portal>(); OldPortalCameraFollow portalCameraFollow = portalCameras[i]; OldPortalTeleporter portalTeleporter = portalTeleporters[i]; GameObject volumetricPortalObject = volumetricPortalObjects[i]; OldVolumetricPortalTrigger volumetricPortalTrigger = volumetricPortalTriggers[i]; // PortalContainer references portalContainer.otherPortal = portalContainers[other]; portalContainer.portalCamera = portalCameraFollow.GetComponent <Camera>(); portalContainer.settings = portalSettings; portalContainer.teleporter = portalTeleporters[i]; portalContainer.volumetricPortal = volumetricPortalObject; portalContainer.volumetricPortalTrigger = volumetricPortalTrigger; // PortalCameraRenderTexture references portalCameraRenderTexture.portal = portalContainer; // PortalCameraFollow references portalCameraFollow.portalBeingRendered = portalContainer; // PortalTeleporter references portalTeleporter.portal = portalContainer; // VolumetricPortalTrigger references volumetricPortalTrigger.portal = portalContainer; if (Vector3.Dot(portalTeleporter.portalNormal, portalTeleporter.transform.forward) > 0) { volumetricPortalObject.transform.localRotation = Quaternion.Euler(0, 180, 0); } } }
private void Start() { otherPortalTeleporter = portal.otherPortal.teleporter; teleporter.trigger.triggerCondition = MagicTrigger.TriggerConditionType.PlayerMovingDirection; teleporter.trigger.playerFaceThreshold = 0.01f; if (transformationsBeforeTeleport != null && transformationsBeforeTeleport.Length > 0) { teleporter.OnTeleport += (enter, exit, player) => TransformObjectsOnTeleport(player); } InitializeCollider(); }
private OldPortalTeleporter CreatePortalTeleporter(OldPortalSettings receiver) { GameObject newTeleporterObj = new GameObject("PortalTeleporterTrigger"); newTeleporterObj.transform.SetParent(receiver.transform, false); OldPortalTeleporter newTeleporter = newTeleporterObj.AddComponent <OldPortalTeleporter>(); if (!receiver.useCameraEdgeDetectionColor) { newTeleporter.teleporter.OnTeleport += SwapEdgeDetectionColorAfterTeleport; } newTeleporter.transformationsBeforeTeleport = receiver.objectsToTransformOnTeleport; return(newTeleporter); }
// Use this for initialization IEnumerator Start() { playerCamera = EpitaphScreen.instance.playerCamera; source = portalBeingRendered.settings.transform; destination = portalBeingRendered.otherPortal.settings.transform; sourceCollider = portalBeingRendered.teleporter.GetComponent <Collider>(); portalCamera = GetComponent <Camera>(); originalProjectionMatrix = portalCamera.projectionMatrix; teleporterForPortalBeingRendered = portalBeingRendered.teleporter; teleporterForOtherPortal = portalBeingRendered.otherPortal.teleporter; while (sourceCollider == null) { sourceCollider = portalBeingRendered.teleporter.GetComponent <Collider>(); yield return(null); } }