Example #1
0
 //void OnMouseDown() {
 public void ClickedOnPortal()
 {
     if (pc == null)
     {
         return;
     }
     if (linkedPortal != null)
     {
         //TODO: CHECK DISTANCE BETWEEN PLAYER AND PORTAL
         float dist = Vector3.Distance(pc.transform.position, transform.position);
         if (pc.canReach(transform.position) && dist <= 2f)
         {
             pc.Teleport(linkedPortal.getTeleportPosition(), true);
         }
         else
         {
             if (pc.canReach(transform.position))
             {
                 pc.Walk(transform.position);
                 walkToLinked = this;
             }
         }
     }
     else
     {
         Debug.LogError("Portal is missing its destination");
     }
 }
Example #2
0
 public bool linkPortal(PortalPortals leadTo)
 {
     if (linkedPortal != null)
     {
         return(false);
     }
     linkedPortal = leadTo;
     return(true);
 }
Example #3
0
    void Update()
    {
        if (pc == null)
        {
            foreach (NavMeshAgent ag in GameObject.FindObjectsOfType <NavMeshAgent>())
            {
                if (ag.enabled)
                {
                    pc = ag.GetComponent <PlayerController>();
                }
            }
            return;
        }

        if (linkedPortal != null)
        {
            if (ps.isStopped)
            {
                ps.Play();
            }
        }
        else
        {
            if (!ps.isStopped)
            {
                ps.Stop();
            }
        }

        if (walkToLinked != null)
        {
            float destDist = Vector3.Distance(pc.getDestination(), walkToLinked.transform.position);
            if (destDist <= 1f)
            {
                float dist = Vector3.Distance(pc.transform.position, walkToLinked.transform.position);
                if (dist <= 2f)
                {
                    pc.Teleport(linkedPortal.getTeleportPosition(), true);
                    walkToLinked = null;
                }
            }
            else
            {
                walkToLinked = null;
            }
        }
    }
Example #4
0
    private void LinkCorrectPath()
    {
        List <PortalPortals[]> rooms = new List <PortalPortals[]>();

        rooms.Add(outside);
        rooms.Add(nw);
        rooms.Add(ne);
        rooms.Add(mw);
        //rooms.Add(mm); //We don't want to go to the center by accident
        rooms.Add(me);
        rooms.Add(sw);
        rooms.Add(sm);
        rooms.Add(se);

        //Just a copy for later
        List <PortalPortals[]> rooms_COPY = rooms;

        //Generate Correct Route
        int           startPortal = rand.Next(1, 4);
        PortalPortals start       = getRoomFromNumber(0)[startPortal];

        int           firstRoom  = rand.Next(1, rooms.Count);
        int           firstDoor  = rand.Next(0, 4);
        PortalPortals first      = rooms[firstRoom][firstDoor];
        PortalPortals first_opps = rooms[firstRoom][getOpposite(firstDoor)];

        rooms.RemoveAt(firstRoom);

        int           secondRoom  = rand.Next(1, rooms.Count);
        int           secondDoor  = rand.Next(0, 4);
        PortalPortals second      = rooms[secondRoom][secondDoor];
        PortalPortals second_opps = rooms[secondRoom][getOpposite(secondDoor)];

        rooms.RemoveAt(secondRoom);

        int           thirdDoor = rand.Next(0, 4);
        PortalPortals third     = getRoomFromNumber(4)[thirdDoor];

        start.forceLinkPortal(first);
        first.forceLinkPortal(start);
        first_opps.forceLinkPortal(second);
        second.forceLinkPortal(first_opps);
        second_opps.forceLinkPortal(third);

        //Second doable
        int startTwoPortal = 0;

        if (startPortal == 1)
        {
            startTwoPortal = rand.Next(2, 4);
        }
        if (startPortal == 3)
        {
            startTwoPortal = rand.Next(1, 4);
        }
        if (startPortal == 2)
        {
            startTwoPortal = rand.Next(1, 3) == 2 ? 3 : 1;
        }
        PortalPortals startTwo = getRoomFromNumber(0)[startTwoPortal];

        int           firstRoom_TWO  = rand.Next(1, rooms.Count);
        int           firstDoor_TWO  = rand.Next(0, 4);
        PortalPortals first_TWO      = rooms[firstRoom_TWO][firstDoor_TWO];
        PortalPortals first_opps_TWO = rooms[firstRoom_TWO][getOpposite(firstDoor_TWO)];

        rooms.RemoveAt(firstRoom_TWO);

        int           secondRoom_TWO  = rand.Next(1, rooms.Count);
        int           secondDoor_TWO  = rand.Next(0, 4);
        PortalPortals second_TWO      = rooms[secondRoom_TWO][secondDoor_TWO];
        PortalPortals second_opps_TWO = rooms[secondRoom_TWO][getOpposite(secondDoor_TWO)];

        rooms.RemoveAt(secondRoom_TWO);

        int           thirdRoom_TWO  = rand.Next(1, rooms.Count);
        int           thirdDoor_TWO  = rand.Next(0, 4);
        PortalPortals third_TWO      = rooms[thirdRoom_TWO][thirdDoor_TWO];
        PortalPortals third_opps_TWO = rooms[thirdRoom_TWO][getOpposite(thirdDoor_TWO)];

        rooms.RemoveAt(thirdRoom_TWO);

        // THERE IS A BUG IN THIS CODE SOMEWHERE!
        int fourthDoor = 0;

        if (thirdDoor == 0)
        {
            fourthDoor = rand.Next(1, 4);
        }
        if (thirdDoor == 1)
        {
            fourthDoor = rand.Next(2, 5);
            if (fourthDoor == 4)
            {
                fourthDoor = 0;
            }
        }
        if (thirdDoor == 2)
        {
            fourthDoor = rand.Next(3, 6);
            if (fourthDoor == 4)
            {
                fourthDoor = 0;
            }
            if (fourthDoor == 5)
            {
                fourthDoor = 1;
            }
        }
        if (thirdDoor == 3)
        {
            fourthDoor = rand.Next(0, 3);
        }
        PortalPortals fourth = getRoomFromNumber(4)[fourthDoor];

        startTwo.forceLinkPortal(first_TWO);
        first_TWO.forceLinkPortal(startTwo);
        first_opps_TWO.forceLinkPortal(second_TWO);
        second_TWO.forceLinkPortal(first_opps_TWO);
        second_opps_TWO.forceLinkPortal(third_TWO);
        third_TWO.forceLinkPortal(second_opps_TWO);
        third_opps_TWO.forceLinkPortal(fourth);

        PortalPortals last = outside[1];

        foreach (PortalPortals outs in outside)
        {
            if (outs == null)
            {
                continue;
            }
            if (!outs.isLinked())
            {
                last = outs;
            }
        }
        int           firstRoom_THREE  = rand.Next(1, rooms.Count);
        int           firstDoor_THREE  = rand.Next(0, 4);
        PortalPortals first_THREE      = rooms[firstRoom_THREE][firstDoor_THREE];
        PortalPortals first_opps_THREE = rooms[firstRoom_THREE][getOpposite(firstDoor_THREE)];

        rooms.RemoveAt(firstRoom_THREE);

        int           secondRoom_THREE  = rand.Next(1, rooms.Count);
        int           secondDoor_THREE  = rand.Next(0, 4);
        PortalPortals second_THREE      = rooms[secondRoom_THREE][secondDoor_THREE];
        PortalPortals second_opps_THREE = rooms[secondRoom_THREE][getOpposite(secondDoor_THREE)];

        rooms.RemoveAt(secondRoom_THREE);

        last.forceLinkPortal(first_THREE);
        first_THREE.forceLinkPortal(last);

        first_opps_THREE.forceLinkPortal(second_THREE);
        second_THREE.forceLinkPortal(first_opps_THREE);

        second_opps_THREE.forceLinkPortal(outside[rand.Next(1, 4)]);

        foreach (PortalPortals port in transform.GetComponentsInChildren <PortalPortals>())
        {
            if (port != null)
            {
                if (!port.isLinked())
                {
                    port.linkPortal(outside[rand.Next(1, 4)]);
                }
            }
        }
    }
Example #5
0
 public void forceLinkPortal(PortalPortals leadTo)
 {
     linkedPortal = leadTo;
 }