Esempio n. 1
0
    public void OnTriggerExit(Collider other)
    {
        PortalTraveler portalTraveler = other.GetComponent <PortalTraveler>();

        if (portalTraveler != null)
        {
            if (other.CompareTag("Player"))
            {
                playerTraveler = null;
                var originalPosition = new Vector3(0, portalDisplay.transform.localPosition.y, 0);

                PortalAdjustment(originalPosition, originalPortalScale);
                target.PortalAdjustment(originalPosition, originalPortalScale);
            }
            else
            {
                Sliceable sliceable = portalTraveler.GetComponent <Sliceable>();
                sliceable.IsSliceable = false;
                sliceable.UpdateMaterialSlice();
                TransformToTarget(portalTraveler.transform);
                lstPortalTravelers.Remove(portalTraveler);
                DestroyTravelerCopy(portalTraveler);
                travelerCopies.Remove(portalTraveler);
            }
        }
    }
Esempio n. 2
0
    public void OnTriggerEnter(Collider other)
    {
        PortalTraveler portalTraveler = other.GetComponent <PortalTraveler>();

        if (portalTraveler != null && portalTraveler.enabled)
        {
            var playerVecFromPortal = other.transform.position - transform.position;
            enteredFromBack = Vector3.Dot(playerVecFromPortal, transform.forward) < 0;
            if (other.CompareTag("Player"))
            {
                playerTraveler = portalTraveler;
                var localPosition    = portalDisplay.transform.localPosition;
                var portalAdjustment = (enteredFromBack ? 1 : -1) * (portalDisplayExpandFactor * 0.1f / 2f);

                var portalScale    = new Vector3(portalDisplayExpandFactor, originalPortalScale.y, originalPortalScale.z);
                var portalPosition = new Vector3(localPosition.x, localPosition.y, portalAdjustment);

                PortalAdjustment(portalPosition, portalScale);
            }
            else
            {
                CreateTravelerClone(portalTraveler, enteredFromBack);
            }
        }
    }
Esempio n. 3
0
    private void CreateTravelerClone(PortalTraveler portalTraveler, bool enteredFromBack)
    {
        lstPortalTravelers.Add(portalTraveler);
        TransformToTarget(portalTraveler.transform, out Vector3 newPos, out Quaternion newRot);
        PortalTraveler travelerCopy = Instantiate(portalTraveler, newPos, newRot);

        travelerCopy.enabled = false;

        SimpleMove simpleMoveComponent = travelerCopy.GetComponent <SimpleMove>();

        if (simpleMoveComponent)
        {
            simpleMoveComponent.enabled = false;
        }

        Sliceable sliceable = portalTraveler.GetComponent <Sliceable>();

        sliceable.SlicePosition = transform.position;
        sliceable.SliceNormal   = transform.forward;
        sliceable.IsSliceable   = true;
        sliceable.Flip          = !enteredFromBack;
        sliceable.UpdateMaterialSlice();

        if (target)
        {
            sliceable = travelerCopy.GetComponent <Sliceable>();
            sliceable.SlicePosition = target.transform.position;
            sliceable.SliceNormal   = target.transform.forward;
            sliceable.IsSliceable   = true;
            sliceable.Flip          = enteredFromBack;
            sliceable.UpdateMaterialSlice();
        }

        travelerCopies.Add(portalTraveler, travelerCopy.gameObject);
    }
Esempio n. 4
0
    private bool CheckTravelerPassPortal(PortalTraveler traveler)
    {
        Vector3 forward      = transform.forward;
        Vector3 previousVec  = traveler.LastFramePosition - transform.position;
        Vector3 currentVec   = traveler.transform.position - transform.position;
        float   previousSign = Mathf.Sign(Vector3.Dot(previousVec, forward));
        float   currentSign  = Mathf.Sign(Vector3.Dot(currentVec, forward));

        return(previousSign + currentSign == 0);
    }
Esempio n. 5
0
 private void DestroyTravelerCopy(PortalTraveler traveler)
 {
     if (travelerCopies != null && travelerCopies.ContainsKey(traveler))
     {
         GameObject clone = travelerCopies[traveler];
         if (clone != null)
         {
             Destroy(clone);
         }
     }
 }
Esempio n. 6
0
    void OnTravelerEnterPortal(PortalTraveler traveler)
    {
        // Check if traveler is already being tracked
        if (!trackedTravelers.Contains(traveler))
        {
            traveler.EnterPortalThreshold();
            // if traveler is viewer use camera transform
            if (traveler.isViewer)
            {
                traveler.previousOffsetFromPortal = playerCam.transform.position - transform.position;
            }
            else
            {
                traveler.previousOffsetFromPortal = traveler.transform.position - transform.position;
            }
            trackedTravelers.Add(traveler);

            //Debug.Break();
            //Debug.Log("Travel added to portal list");
        }
    }
Esempio n. 7
0
    void HandleTravellers()
    {
        for (int i = 0; i < trackedTravelers.Count; i++)
        {
            PortalTraveler traveler  = trackedTravelers[i];
            Transform      travelerT = traveler.transform;

            // if traveler is viewer use camera transform
            Transform offsetTransform = (traveler.isViewer) ? playerCam.transform : traveler.transform;

            var m = linkedPortal.transform.localToWorldMatrix * transform.worldToLocalMatrix * travelerT.localToWorldMatrix;

            Vector3 offsetFromPortal = offsetTransform.position - transform.position;
            int     portalSide       = System.Math.Sign(Vector3.Dot(offsetFromPortal, transform.forward));
            int     portalSideOld    = System.Math.Sign(Vector3.Dot(traveler.previousOffsetFromPortal, transform.forward));

            // Teleport traveler if crossed from one side of portal to other
            if (portalSide != portalSideOld)
            {
                var positionOld = travelerT.position;
                var rotOld      = travelerT.rotation;

                traveler.Teleport(transform, linkedPortal.transform, m.GetColumn(3), m.rotation);
                traveler.graphicsClone.transform.SetPositionAndRotation(positionOld, rotOld);

                //Debug.Log("Travel teleports");
                //Debug.Break();

                linkedPortal.OnTravelerEnterPortal(traveler);
                trackedTravelers.RemoveAt(i);
                i--;
            }
            else
            {
                traveler.graphicsClone.transform.SetPositionAndRotation(m.GetColumn(3), m.rotation);
                traveler.previousOffsetFromPortal = offsetFromPortal;
            }
        }
    }