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; }
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); } }