package com.digitalwolf.gamedata; import java.util.Random; import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.Array; import com.digitalwolf.drona.sprites.BlackDragon; import com.digitalwolf.drona.sprites.Conspirator; import com.digitalwolf.drona.sprites.MagicalPower; import com.digitalwolf.drona.sprites.Pawn; import com.digitalwolf.drona.sprites.PowerUp; import com.digitalwolf.drona.world.World; import com.moribitotech.mtx.settings.AppSettings; public class LevelGenerator { private final Random rand = new Random(); private World world; private Array<Vector2> path; public LevelGenerator(World theWorld){ world = theWorld; path = new Array<Vector2>(); } public void generateLevel(int levelID){ // Generate the Creatures and position them float x = 3*AppSettings.SCREEN_W/2; float y = Pawn.height + rand.nextFloat() *(AppSettings.SCREEN_H - 2*Pawn.height); //Generate Pawns if (rand.nextFloat() >= 0.5f) { float value = rand.nextFloat(); int type =0; if(value <=0.1f){ type = Pawn.RED; } if(value>= 0.2f && value <=0.6f){ type = Pawn.ORANGE; } if(value>= 0.7f && value <=1.0f){ type = Pawn.BLUE; } Pawn pawn = new Pawn(x,y,type); World.numTotalPawns++; world.pawns.add(pawn); } //Generate 1 UP/ Health if (rand.nextFloat() >= 0.9f && (world.powerUp.size() < 1)) { float tempX = AppSettings.SCREEN_W + PowerUp.width; float tempY = (AppSettings.SCREEN_H/6) + rand.nextFloat() *(2*AppSettings.SCREEN_H/3); PowerUp powerup = new PowerUp(tempX, tempY); world.powerUp.add(powerup); World.numTotalPowerUps++; } //Generate Magical Power if (rand.nextFloat() > 0.9f && (world.magicalPowers.size() <1)) { float tempX = AppSettings.SCREEN_W + MagicalPower.width; float tempY = (AppSettings.SCREEN_H/6) + rand.nextFloat() *(2*AppSettings.SCREEN_H/3); MagicalPower magicalPower = new MagicalPower(tempX, tempY); world.magicalPowers.add(magicalPower); } // Generate EVIL DEMON if (rand.nextFloat() >= 0.8f && (world.blackDragons.size() <1)) { y = (AppSettings.SCREEN_H/5) + rand.nextFloat() *(AppSettings.SCREEN_H/2); if(isSpaceEmpty(x, y, BlackDragon.width, BlackDragon.height)){ BlackDragon ed = new BlackDragon(x,y); World.numTotalBlackDragons++; world.blackDragons.add(ed); } } } public void generateConspirators(float targetY){ // Generate Conspirators after the first Level is Completed if (rand.nextFloat() >= 0.9f && (world.conspirators.size() <2)) { float tempX = AppSettings.SCREEN_W + Conspirator.width; float y = Conspirator.height+rand.nextFloat() *(AppSettings.SCREEN_H - 2*Conspirator.height); path.add(new Vector2(-2*Conspirator.width, targetY)); if(isSpaceEmpty(tempX, y, Conspirator.width, Conspirator.height)){ Conspirator c1 = new Conspirator(path, tempX ,y); Conspirator c2 = new Conspirator(path, tempX+1.5f*Conspirator.width ,y); World.numTotalConspirators++; world.conspirators.add(c1); world.conspirators.add(c2); } } } private boolean isSpaceEmpty(float x, float y, float width, float height) { // Would you like two enemies appearing together..? so check whether the space the empty and then generate enemies boolean isSpaceEmpty = true; Rectangle thisBound = new Rectangle(x ,y ,width, height); if(world.pawns.size() >0){ for(int i=0;i<world.pawns.size();i++){ Pawn p = (Pawn)world.pawns.get(i); Rectangle pawnBounds = new Rectangle(p.position.x, p.position.y,Pawn.width, Pawn.height); if(pawnBounds.overlaps(thisBound)){ isSpaceEmpty = false; } } } if(world.blackDragons.size() >0){ for(int i=0;i<world.blackDragons.size();i++){ BlackDragon d = (BlackDragon)world.blackDragons.get(i); Rectangle dragonBounds = new Rectangle(d.position.x,d.position.y,BlackDragon.width, BlackDragon.height); if(dragonBounds.overlaps(thisBound)){ isSpaceEmpty = false; } } } if(world.conspirators.size() >0){ for(int i=0;i<world.conspirators.size();i++){ Conspirator c = (Conspirator)world.conspirators.get(i); Rectangle conspiratorsBounds = new Rectangle(c.getX(),c.getY(),Conspirator.width, Conspirator.height); if(conspiratorsBounds.overlaps(thisBound)){ isSpaceEmpty = false; } } } if(world.magicalPowers.size() >0){ for(int i=0;i<world.magicalPowers.size();i++){ MagicalPower c = (MagicalPower)world.magicalPowers.get(i); Rectangle bounds = new Rectangle(c.position.x,c.position.y,MagicalPower.width, MagicalPower.height); if(bounds.overlaps(thisBound)){ isSpaceEmpty = false; } } } return isSpaceEmpty; } }