Example #1
0
    void GenerateLevel()
    {
        int travelDirection;
        int currentPositionX;
        int currentPositionY;
        int previousPositionX;
        int previousPositionY;

        int treasureCount = 0;
        int enemyCount    = 0;


        //startPositionX = randomGenerator.GenerateRandomInt(1, levelSizeX-1);
        //startPositionY = randomGenerator.GenerateRandomInt(1, levelSizeY-1);

        startPositionX = randomGenerator.GenerateRandomInt(levelSizeX / 4, levelSizeX * 3 / 4);
        startPositionY = randomGenerator.GenerateRandomInt(levelSizeY / 4, levelSizeY * 3 / 4);

        background.transform.position   = new Vector3(levelSizeX / 2 * spacingInterval, levelSizeY / 2 * spacingInterval, 0);
        background.transform.localScale = new Vector3(levelSizeX * spacingInterval / 108f, levelSizeX * spacingInterval / 108f, 1);


        currentPositionX = startPositionX;
        currentPositionY = startPositionY;

        previousPositionX = currentPositionX;
        previousPositionY = currentPositionY;

        travelDirection = randomGenerator.GenerateRandomInt(0, 3);

        levelLayout[startPositionX, startPositionY] = true;

        for (int x = 0; x < levelSteps; x++)
        {
            //Debug.Log("x, y" + currentPositionX + currentPositionY);


            //0 -> North
            //1 -> South
            //2 -> East
            //3 -> West

            if (currentSteps > consecutiveSteps)
            {
                travelDirection = randomGenerator.GenerateRandomInt(0, 3);
                currentSteps    = 0;
            }

            if (randomGenerator.GenerateRandomPercentage() > multiStepChance)
            {
                travelDirection = randomGenerator.GenerateRandomInt(0, 3);
            }

            currentSteps++;

            switch (travelDirection)
            {
            case 0:
                currentPositionY++;
                break;

            case 1:
                currentPositionY--;
                break;

            case 2:
                currentPositionX++;
                break;

            case 3:
                currentPositionX--;
                break;
            }

            if (currentPositionX < 1 || currentPositionX >= levelSizeX)
            {
                currentPositionX = previousPositionX;
                if (x > 0)
                {
                    x--;
                    continue;
                }
            }

            if (currentPositionY < 1 || currentPositionY >= levelSizeY)
            {
                currentPositionY = previousPositionY;
                if (x > 0)
                {
                    x--;
                    continue;
                }
            }

            levelLayout[currentPositionX, currentPositionY] = true;



            treasureChanceAdder = x / levelSteps * treasureAdderMultiplier;

            if (randomGenerator.GenerateRandomPercentage() < (treasureChance + treasureChanceAdder) && treasureCount <= numberOfTreasures)
            {
                theDungeon[currentPositionX, currentPositionY].treasure     = true;
                theDungeon[currentPositionX, currentPositionY].treasureType = randomGenerator.GenerateRandomInt(0, 5);
                treasureCount++;
            }

            enemyChanceAdder = x / levelSteps * enemyAdderMultiplier;

            if (randomGenerator.GenerateRandomPercentage() < (enemyChance + enemyChanceAdder) && enemyCount <= numberOfEnemies)
            {
                theDungeon[currentPositionX, currentPositionY].enemy     = true;
                theDungeon[currentPositionX, currentPositionY].enemyType = randomGenerator.GenerateRandomInt(0, 5);
                enemyCount++;
            }

            previousPositionX = currentPositionX;
            previousPositionY = currentPositionY;
        }

        endPositionX = currentPositionX;
        endPositionY = currentPositionY;
    }
Example #2
0
    void MoveTowardPlayer()
    {
        direction moveDirection;

        int randomDirection;

        moveDirection = DeterminePlayerDirection();

        if (IsValidMove(moveDirection) && !isMoving)
        {
            switch (moveDirection)
            {
            case direction.north:
                targetPosition = new Vector2(transform.position.x, transform.position.y + moveIncrement);
                isMoving       = true;
                dragonAnimator.SetFloat("DirX", 0f);
                dragonAnimator.SetFloat("DirY", 1f);

                break;

            case direction.south:
                targetPosition = new Vector2(transform.position.x, transform.position.y - moveIncrement);
                isMoving       = true;
                dragonAnimator.SetFloat("DirX", 0f);
                dragonAnimator.SetFloat("DirY", -1f);
                break;

            case direction.east:
                targetPosition = new Vector2(transform.position.x + moveIncrement, transform.position.y);
                isMoving       = true;
                dragonAnimator.SetFloat("DirX", 1f);
                dragonAnimator.SetFloat("DirY", 0f);
                transform.localScale = new Vector3(transform.localScale.x, transform.localScale.y, transform.localScale.z);
                break;

            case direction.west:
                targetPosition = new Vector2(transform.position.x - moveIncrement, transform.position.y);
                isMoving       = true;
                dragonAnimator.SetFloat("DirX", -1f);
                dragonAnimator.SetFloat("DirY", 0f);
                transform.localScale = new Vector3(transform.localScale.x * -1, transform.localScale.y, transform.localScale.z);
                break;

            default:
                targetPosition = transform.position;
                isMoving       = false;
                break;
            }
        }

        if (!IsValidMove(moveDirection))
        {
            numberOfInvalidMoves++;
        }

        if (!isMoving && numberOfInvalidMoves > maxInvalidMoves)
        {
            randomDirection = randGen.GenerateRandomInt(1, 4);

            switch (randomDirection)
            {
            case 1:     //north
                if (IsValidMove(direction.north))
                {
                    targetPosition = new Vector2(transform.position.x, transform.position.y + moveIncrement);
                    isMoving       = true;
                }
                break;

            case 2:     //south
                if (IsValidMove(direction.south))
                {
                    targetPosition = new Vector2(transform.position.x, transform.position.y - moveIncrement);
                    isMoving       = true;
                }
                break;

            case 3:     //east
                if (IsValidMove(direction.east))
                {
                    targetPosition = new Vector2(transform.position.x + moveIncrement, transform.position.y);
                    isMoving       = true;
                }
                break;

            case 4:     //west
                if (IsValidMove(direction.west))
                {
                    targetPosition = new Vector2(transform.position.x - moveIncrement, transform.position.y);
                    isMoving       = true;
                }
                break;

            default:
                targetPosition = transform.position;
                isMoving       = false;
                break;
            }

            numberOfInvalidMoves = 0;
        }

        if (transform.position == targetPosition)
        {
            isMoving = false;
        }



        if (isMoving)
        {
            MoveToPoint(targetPosition);
            //dragonAnimator.SetBool("isMovingRight", false);
            //dragonAnimator.SetBool("isMovingUp", false);
            //dragonAnimator.SetBool("isMovingDown", false);
            //dragonAnimator.SetBool("isMovingLeft", false);
        }
    }