예제 #1
0
        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();
        }
예제 #3
0
        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();
        }
예제 #5
0
        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);
            }
        }