コード例 #1
0
    LevelChunkData PickNextChunk()
    {
        List <LevelChunkData> allowedChunkList = new List <LevelChunkData>();
        LevelChunkData        nextChunk        = null;

        LevelChunkData.Direction nextRequiredDirection = LevelChunkData.Direction.North;

        switch (previousChunk.exitDirection)
        {
        case LevelChunkData.Direction.North:
            nextRequiredDirection = LevelChunkData.Direction.South;
            spawnPosition         = spawnPosition + new Vector3(0f, 0, previousChunk.chunkSize.y);
            break;

        case LevelChunkData.Direction.East:
            nextRequiredDirection = LevelChunkData.Direction.West;
            spawnPosition         = spawnPosition + new Vector3(previousChunk.chunkSize.x, 0, 0);
            break;

        case LevelChunkData.Direction.South:
            nextRequiredDirection = LevelChunkData.Direction.North;
            spawnPosition         = spawnPosition + new Vector3(0, 0, -previousChunk.chunkSize.y);
            break;

        case LevelChunkData.Direction.West:
            nextRequiredDirection = LevelChunkData.Direction.East;
            spawnPosition         = spawnPosition + new Vector3(-previousChunk.chunkSize.x, 0, 0);
            break;

        default:
            break;
        }

        for (int i = 0; i < levelChunkData.Length; i++)
        {
            if (levelChunkData[i].entryDirection == nextRequiredDirection)
            {
                allowedChunkList.Add(levelChunkData[i]);
            }
        }
        if (firstChunkCreated == false)
        {
            firstChunkCreated = true;
            nextChunk         = allowedChunkList[1];
            return(nextChunk);
        }
        else
        {
            nextChunk = allowedChunkList[Random.Range(0, allowedChunkList.Count)];
            return(nextChunk);
        }
    }
コード例 #2
0
    LevelChunkData PickNextChunk()
    {
        List <LevelChunkData> allowedChunkList = new List <LevelChunkData>();
        LevelChunkData        nextChunk        = null;

        LevelChunkData.Direction nextRequiredDirection = LevelChunkData.Direction.North;

        //Determine next chunk based on the exit direction of previous chunk and the entry direction of the next
        switch (previousChunk.exitDirection)
        {
        case LevelChunkData.Direction.North:
            nextRequiredDirection = LevelChunkData.Direction.South;
            spawnPosition         = spawnPosition + new Vector3(0, 0, previousChunk.chunkSize.y);

            break;

        case LevelChunkData.Direction.East:
            nextRequiredDirection = LevelChunkData.Direction.West;
            spawnPosition         = spawnPosition + new Vector3(previousChunk.chunkSize.x, 0, 0);

            break;

        case LevelChunkData.Direction.South:
            nextRequiredDirection = LevelChunkData.Direction.North;
            spawnPosition         = spawnPosition + new Vector3(0, 0, -previousChunk.chunkSize.y);

            break;

        case LevelChunkData.Direction.West:
            nextRequiredDirection = LevelChunkData.Direction.East;
            spawnPosition         = spawnPosition + new Vector3(-previousChunk.chunkSize.x, 0, 0);

            break;
        }

        //Take all chunks with determined entry point and add them to allowed list
        for (int i = 0; i < levelChunkData.Length; i++)
        {
            if (levelChunkData[i].entryDirection == nextRequiredDirection)
            {
                allowedChunkList.Add(levelChunkData[i]);
            }
        }

        nextChunk = allowedChunkList[Random.Range(0, allowedChunkList.Count)];

        return(nextChunk);
    }
コード例 #3
0
        LevelChunkData PickNextChunk()
        {
            List <LevelChunkData> allowedChunkList = new List <LevelChunkData>();
            LevelChunkData        nextChunk        = null;

            LevelChunkData.Direction nextRequiredDirection = LevelChunkData.Direction.North;

            switch (_previousChunk.exitDirection)
            {
            case LevelChunkData.Direction.North:
                nextRequiredDirection = LevelChunkData.Direction.South;
                _spawnPosition        = _spawnPosition + new Vector3(0f, 0, _previousChunk.chunkSize.y);

                break;

            case LevelChunkData.Direction.East:
                nextRequiredDirection = LevelChunkData.Direction.East;
                _spawnPosition        = _spawnPosition + new Vector3(0f, 0, _previousChunk.chunkSize.y);
                break;

            case LevelChunkData.Direction.South:
                nextRequiredDirection = LevelChunkData.Direction.South;
                _spawnPosition        = _spawnPosition + new Vector3(0, 0, -_previousChunk.chunkSize.y);
                break;

            case LevelChunkData.Direction.West:
                nextRequiredDirection = LevelChunkData.Direction.West;
                _spawnPosition        = _spawnPosition + new Vector3(0f, 0, _previousChunk.chunkSize.y);

                break;

            default:
                break;
            }

            foreach (var t in levelChunkData)
            {
                if (t.entryDirection == nextRequiredDirection)
                {
                    allowedChunkList.Add(t);
                }
            }

            nextChunk = allowedChunkList[Random.Range(0, allowedChunkList.Count)];

            return(nextChunk);
        }
コード例 #4
0
    private void UpdateSpawnPoint()
    {
        switch (previousChunk.exitDirection)
        {
        case LevelChunkData.Direction.North:
            nextRequiredDirection = LevelChunkData.Direction.South;
            spawnPosition         = spawnPosition + new Vector3(previousChunk.chunkSize.x, 0, previousChunk.chunkSize.y);

            break;

        case LevelChunkData.Direction.West:
            nextRequiredDirection = LevelChunkData.Direction.West;
            spawnPosition         = spawnPosition + new Vector3(previousChunk.chunkSize.x, 0, previousChunk.chunkSize.y);
            break;

        case LevelChunkData.Direction.South:
            nextRequiredDirection = LevelChunkData.Direction.North;
            spawnPosition         = spawnPosition + new Vector3(0, 0, previousChunk.chunkSize.y);
            break;

        case LevelChunkData.Direction.East:
            nextRequiredDirection = LevelChunkData.Direction.East;
            spawnPosition         = spawnPosition + new Vector3(previousChunk.chunkSize.x, 0, previousChunk.chunkSize.y);

            break;

        case LevelChunkData.Direction.EastNorth:
            nextRequiredDirection = LevelChunkData.Direction.South;
            spawnPosition         = spawnPosition + new Vector3(previousChunk.chunkSize.x, 0, previousChunk.chunkSize.y);

            break;

        case LevelChunkData.Direction.WestNorth:
            nextRequiredDirection = LevelChunkData.Direction.South;
            spawnPosition         = spawnPosition + new Vector3(previousChunk.chunkSize.x, 0, previousChunk.chunkSize.y);

            break;

        default:
            break;
        }
    }
コード例 #5
0
    LevelChunkData PickNextChunk_nopos()                            // Function to determine which trackpiece to used based on entry direction
    {
        List <LevelChunkData> allowedChunkList = new List <LevelChunkData>();
        LevelChunkData        nextChunk        = null;

        LevelChunkData.Direction nextRequiredDirection = LevelChunkData.Direction.North;

        switch (previousChunk.exitDirection)
        {
        case LevelChunkData.Direction.North:
            nextRequiredDirection = LevelChunkData.Direction.South;
            break;

        case LevelChunkData.Direction.East:
            nextRequiredDirection = LevelChunkData.Direction.West;
            break;

        case LevelChunkData.Direction.South:
            nextRequiredDirection = LevelChunkData.Direction.North;
            break;

        case LevelChunkData.Direction.West:
            nextRequiredDirection = LevelChunkData.Direction.East;
            break;

        default:
            break;
        }

        for (int i = 0; i < levelChunkData.Length; i++)
        {
            if (levelChunkData[i].entryDirection == nextRequiredDirection)
            {
                allowedChunkList.Add(levelChunkData[i]);
            }
        }

        nextChunk = allowedChunkList[Random.Range(0, allowedChunkList.Count)];

        return(nextChunk);
    }
コード例 #6
0
    LevelChunkDataVariable PickNextChunk()
    {
        List <LevelChunkDataVariable> allowedChunkList = new List <LevelChunkDataVariable>();
        LevelChunkDataVariable        nextChunk        = null;

        // Pick Next Chunk by looking at the previous chunks allowed directions
        LevelChunkData.Direction nextRequiredEntryDirection = LevelChunkData.Direction.North;


        // if previous chunk is a U road, we want to adjust spawn position
        if (previousChunk.Value.entryDirection == previousChunk.Value.exitDirection)
        {
            spawnPosition += new Vector3(0f, 0f, previousChunk.Value.chunkSize.y / 2f);
        }


        switch (previousChunk.Value.exitDirection)
        {
        case LevelChunkData.Direction.North:
            nextRequiredEntryDirection = LevelChunkData.Direction.South;
            spawnPosition += new Vector3(0f, 0f, previousChunk.Value.chunkSize.y);
            break;

        case LevelChunkData.Direction.East:
            nextRequiredEntryDirection = LevelChunkData.Direction.West;
            spawnPosition += new Vector3(previousChunk.Value.chunkSize.x, 0f, 0f);
            break;

        case LevelChunkData.Direction.South:
            nextRequiredEntryDirection = LevelChunkData.Direction.North;
            spawnPosition += new Vector3(0f, 0f, -previousChunk.Value.chunkSize.y);
            break;

        case LevelChunkData.Direction.West:
            nextRequiredEntryDirection = LevelChunkData.Direction.East;
            spawnPosition += new Vector3(-previousChunk.Value.chunkSize.x, 0f, 0f);
            break;

        default:
            break;
        }

        // if previous chunk is a corner chunk then we want straight road next time
        LevelChunkData.Direction nextRequiredExitDirection;
        if (previousChunk.Value.turningDirection != 0)
        {
            nextRequiredExitDirection = LevelChunkData.GetOppositeDirection(nextRequiredEntryDirection);

            foreach (var item in levelChunkDatas)
            {
                if (item.Value.entryDirection == nextRequiredEntryDirection && item.Value.exitDirection == nextRequiredExitDirection)
                {
                    allowedChunkList.Add(item);
                }
            }
        }
        else
        {
            foreach (var item in levelChunkDatas)
            {
                if (item.Value.entryDirection == nextRequiredEntryDirection)
                {
                    allowedChunkList.Add(item);
                }
            }
        }


        nextChunk = allowedChunkList[Random.Range(0, allowedChunkList.Count)];

        return(nextChunk);
    }