コード例 #1
0
 void OnTriggerExit(Collider c)
 {
     if (c.gameObject.tag == "HorizontalRail")
     {
         _currentHorRail = null;
     }
     if (c.gameObject.tag == "VerticalRail")
     {
         _currentVerRail = null;
     }
 }
コード例 #2
0
    // Methods

    // Initialization
    void Start()
    {
        // Cart for information
        player       = GameObject.FindGameObjectWithTag("Player");
        top          = GameObject.FindGameObjectWithTag("Cart_Top");
        playerScript = player.GetComponent <PlayerMovement>();

        // Set up empty queues
        currentRails  = new Queue <RailInfo>();
        unused        = new Queue <RailInfo>();
        unusedTurns   = new Queue <RailInfo>();
        upcomingTurns = new Queue <RailInfo>();


        // Change later to add more turns
        GameObject[] initialTurns = GameObject.FindGameObjectsWithTag("Turn");
        for (int i = 0; i < initialTurns.Length; i++)
        {
            unusedTurns.Enqueue(initialTurns[i].GetComponent <RailInfo>());
        }


        // Takes in initial rails
        GameObject[] objects = GameObject.FindGameObjectsWithTag("Rail");
        int          leng    = objects.Length;

        initialRails = new RailInfo[leng];
        for (int i = 0; i < leng; i++)
        {
            RailInfo temp = objects[i].GetComponent <RailInfo>();
            initialRails[temp.initialPosition] = temp;
        }

        // Then puts them in the starting queue
        for (int i = 0; i < leng; i++)
        {
            currentRails.Enqueue(initialRails[i]);

            if (i == leng - 1)
            {
                newestRail       = initialRails[i];
                currentDirection = newestRail.direction;
                futureDirection  = newestRail.direction;
            }
        }

        // Set default ints
        totalRailsPassed      = 0;
        straightsSpawnedInRow = 18;
    }
コード例 #3
0
    void OnTriggerEnter(Collider c)
    {
        if (c.gameObject.tag == "PowerPellet")
        {
            if (!_munchSource.isPlaying)
            {
                _munchSource.Play();
            }
            _munchElapseTime = 0.0f;

            Destroy(c.gameObject);
            GameManager.instance.AddScore(50);
            StartCoroutine(ChaseMode());
        }
        else if (c.gameObject.tag == "Pellet")
        {
            if (!_munchSource.isPlaying)
            {
                _munchSource.Play();
            }
            _munchElapseTime = 0.0f;

            Destroy(c.gameObject);
            GameManager.instance.AddScore(10);
        }

        if (c.gameObject.tag == "HorizontalRail")
        {
            _currentHorRail = c.gameObject.GetComponent<RailInfo>();
        }
        if (c.gameObject.tag == "VerticalRail")
        {
            _currentVerRail = c.gameObject.GetComponent<RailInfo>();
        }

        if (c.gameObject.tag == "Portal")
        {
            Debug.Log("Hit");
            PortalTeleport portal = c.gameObject.GetComponent<PortalTeleport>();
            GetComponent<Collider>().enabled = false;
            StartCoroutine("TimeToTele");
            Vector3 newPos = transform.position;
            newPos.x = portal.teleDestination.x;
            newPos.z = portal.teleDestination.z;
            transform.position = newPos;
        }
    }
コード例 #4
0
    void LabelAndPlaceContainer(GameObject container, RailStruct railData, Transform startSnap, Transform endSnap, Transform meshPiece)
    {
        if (railData.length > 0)
        {
            container.transform.name = "Strait " + (railData.length * 100) + "mm" + "            MyPiece";
        }
        else
        {
            container.transform.name = "Radius " + (railData.radius * 100) + "mm, " + railData.angle + "º" + "            MyPiece";
        }

        RailInfo ri = container.AddComponent <RailInfo>();

        ri.RailInfoInit(railData, startSnap, endSnap, meshPiece);

        container.transform.position = railData.position;
        container.transform.rotation = railData.rotation;
    }
コード例 #5
0
    void CleanUp()
    {
        bool tracksToCheck = true;

        do
        {
            // Direction check of cart
            Direction direction = currentDirection;

            bool bigEnoughZ   = player.transform.position.z > currentRails.Peek().Position.z + 7.8 && direction == Direction.ZUp;
            bool smallEnoughZ = player.transform.position.z < currentRails.Peek().Position.z - 7.8 && direction == Direction.ZDown;
            bool bigEnoughX   = player.transform.position.x > currentRails.Peek().Position.x + 7.8 && direction == Direction.XUp;
            bool smallEnoughX = player.transform.position.x < currentRails.Peek().Position.x - 7.8 && direction == Direction.XDown;



            // Take out the farthest rail
            if (bigEnoughZ || smallEnoughZ || bigEnoughX || smallEnoughX)
            {
                if (currentRails.Peek().turn)
                {
                    RailInfo dequeued = currentRails.Dequeue();
                    dequeued.NewPosition(new Vector3(0, 100, 0));
                    unusedTurns.Enqueue(dequeued);
                }
                else
                {
                    RailInfo dequeued = currentRails.Dequeue();
                    dequeued.NewPosition(new Vector3(0, 100, 0));
                    unused.Enqueue(dequeued);
                }

                totalRailsPassed++;

                AddTrack();

                tracksToCheck = true;
            }
            else
            {
                tracksToCheck = false;
            }
        } while (tracksToCheck);
    }
コード例 #6
0
    void NewTurn()
    {
        // Starting direction of turn
        Direction direction = futureDirection;

        Vector3 position = newestRail.Position;

        bool zUp   = direction == Direction.ZUp;
        bool zDown = direction == Direction.ZDown;
        bool xUp   = direction == Direction.XUp;
        bool xDown = direction == Direction.XDown;


        RailInfo temp = newestRail;

        newestRail = unusedTurns.Dequeue();


        // Setting turn type
        // Edit this
        newestRail.direction = futureDirection;

        bool leftOrRight = (1 == Random.Range(0, 2));

        if (leftOrRight)
        {
            newestRail.turnDirection = (Direction)((int)futureDirection * 2);
        }
        else
        {
            newestRail.turnDirection = (Direction)((int)futureDirection / 2);
        }

        if ((int)newestRail.turnDirection > 8)
        {
            newestRail.turnDirection = (Direction)1;
        }
        if ((int)newestRail.turnDirection < 1)
        {
            newestRail.turnDirection = (Direction)8;
        }



        // Set position based on previous track
        if (zUp)
        {
            position.z += 2.95f;
            position.x -= 1.11f * newestRail.Lean * -1;
        }
        else if (zDown)
        {
            position.z -= 2.95f;
            position.x += 1.11f * newestRail.Lean * -1;
        }
        else if (xUp)
        {
            position.x += 2.95f;
            position.z += 1.11f * newestRail.Lean * -1;
        }
        else if (xDown)
        {
            position.x -= 2.95f;
            position.z -= 1.11f * newestRail.Lean * -1;
        }


        // Create rail and add it
        newestRail.NewPosition(position);

        upcomingTurns.Enqueue(newestRail);
        futureDirection   = newestRail.turnDirection;
        temp.nextPosition = position;

        currentRails.Enqueue(newestRail);
    }
コード例 #7
0
    void NewStraight()
    {
        Vector3 position = newestRail.Position;

        Direction direction = futureDirection;

        bool zUp   = direction == Direction.ZUp;
        bool zDown = direction == Direction.ZDown;
        bool xUp   = direction == Direction.XUp;
        bool xDown = direction == Direction.XDown;

        if (newestRail.turn)
        {
            if (zUp)
            {
                position.z += 2.938f;
                position.x -= 1.105f * newestRail.Lean;
            }
            else if (zDown)
            {
                position.z -= 2.938f;
                position.x += 1.105f * newestRail.Lean;
            }
            else if (xUp)
            {
                position.x += 2.938f;
                position.z += 1.105f * newestRail.Lean;
            }
            else if (xDown)
            {
                position.x -= 2.938f;
                position.z -= 1.105f * newestRail.Lean;
            }
        }
        else
        {
            // Set position based on previous track
            if (zUp)
            {
                position.z += 2.6f;
            }
            else if (zDown)
            {
                position.z -= 2.6f;
            }
            else if (xUp)
            {
                position.x += 2.6f;
            }
            else if (xDown)
            {
                position.x -= 2.6f;
            }
        }

        newestRail.nextPosition = position;

        // Set new track and add it
        newestRail               = unused.Dequeue();
        newestRail.direction     = futureDirection;
        newestRail.turnDirection = futureDirection;
        newestRail.NewPosition(position);
        currentRails.Enqueue(newestRail);
    }
コード例 #8
0
    // Method to see if a turn is needed
    void TurnNeeded()
    {
        // Checks for turning
        if (upcomingTurns.Count > 0)
        {
            // Check if the middle of the turn has passed

            RailInfo nextTurn = upcomingTurns.Peek();
            nextTurnX = nextTurn.Position.x;
            nextTurnZ = nextTurn.Position.z;
            bool bigEnoughZ   = player.transform.position.z > nextTurnZ && nextTurn.direction == Direction.ZUp;
            bool smallEnoughZ = player.transform.position.z < nextTurnZ && nextTurn.direction == Direction.ZDown;
            bool bigEnoughX   = player.transform.position.x > nextTurnX && nextTurn.direction == Direction.XUp;
            bool smallEnoughX = player.transform.position.x < nextTurnX && nextTurn.direction == Direction.XDown;



            if (bigEnoughZ || smallEnoughZ || bigEnoughX || smallEnoughX)
            {
                //If the turn is passed take it out of the turning queue so that it isn't checked against
                RailInfo turnTaken = upcomingTurns.Dequeue();

                // Check if cart turned
                if (TurnSucceeded(turnTaken))
                {
                    //Succeeded the turn

                    currentDirection = nextTurn.turnDirection;

                    //Puts the player on next track

                    if (currentDirection == Direction.XUp)
                    {
                        player.transform.rotation = Quaternion.Euler(new Vector3(0, 90, 0));
                    }

                    else if (currentDirection == Direction.XDown)
                    {
                        player.transform.rotation = Quaternion.Euler(new Vector3(0, -90, 0));
                    }

                    else if (currentDirection == Direction.ZDown)
                    {
                        player.transform.rotation = Quaternion.Euler(new Vector3(0, 180, 0));
                    }

                    else
                    {
                        player.transform.rotation = Quaternion.Euler(new Vector3(0, 0, 0));
                    }

                    // Set the position to align with the track
                    if (currentDirection == Direction.ZDown || currentDirection == Direction.ZUp)
                    {
                        player.transform.position = new Vector3(turnTaken.nextPosition.x, player.transform.position.y, player.transform.position.z);
                    }
                    else
                    {
                        player.transform.position = new Vector3(player.transform.position.x, player.transform.position.y, turnTaken.nextPosition.z);
                    }
                }
                else
                {
                    // Game Over condition
                    GameManager.instance.GameOver();
                }
            }
        }
    }
コード例 #9
0
 // Method for easy access to turn condition
 bool TurnSucceeded(RailInfo turnTaken)
 {
     // Edit this
     return(GameManager.instance.speed < 1.1f && (turnTaken.Lean == 0) ||
            turnTaken.Lean == playerScript.leanState);
 }
コード例 #10
0
ファイル: RailStamp.cs プロジェクト: SaRobban/Yrgo-GP20
 private void SetStamp(RailStruct railStruct)
 {
     stamp         = WorkBench.railPieceGenerator.GenerateAPiece(railStruct);
     stampRailInfo = stamp.GetComponent <RailInfo>();
     stamp.GetComponentInChildren <MeshRenderer>().material = material;
 }