package World; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import org.lwjgl.util.vector.Vector3f; import Collision.CollisionBox; import Graphics.DebugGraphicsComponent; import Graphics.GraphicsComponent; import Graphics.Light; import Graphics.RenderMaster; import Sound.SoundEmitter; import Sound.SoundMaster; public class World { private static final float checkpointThresholdSquared = 62500; private RenderMaster renderMaster; private SoundMaster soundMaster; // protected List<Kart> donutKarts; protected List<Entity> entities; protected List<Player> players; protected List<ItemCrate> items; protected List<Checkpoint> checkpoints; protected List<CollisionBox> walls,pits; private HashMap<String, GraphicsComponent> otherGraphics; public int missleNum; private int elec360power; public World(RenderMaster renderMaster,List<Player> playerList, SoundMaster soundMaster) { this.renderMaster = renderMaster; this.players = playerList; this.soundMaster = soundMaster; missleNum = 0; elec360power = 0; // donutKarts = new ArrayList<Kart>(); entities = new ArrayList<Entity>(); items = new ArrayList<ItemCrate>(); checkpoints = new ArrayList<Checkpoint>(); walls = new ArrayList<CollisionBox>(); pits = new ArrayList<CollisionBox>(); otherGraphics = new HashMap<String, GraphicsComponent>(); //add Terrain addTerrain(); //add wall addCollisions(); // SUBTRACT Donut Karts /*for(int i = 0; i < 16; i++) { if(i == 10) i++; Kart k = new Kart(this.renderMaster, null); k.killmeVec = new Vector3f(-300f + (i/4) * 150.0f, 0.0f, -300f + (i%4) * 150.0f); donutKarts.add(k); k.killme = i*1234f; }*/ // No more Triforce /*DebugGraphicsComponent triforce = (DebugGraphicsComponent)renderMaster.addModel("rocket"); triforce.setPosition(new Vector3f(0,0.4f,0)); otherGraphics.put("Triforce", triforce); */ // Add Awesome Kart Text GraphicsComponent text = renderMaster.addModel("aktext"); text.setPosition(new Vector3f(-200, 40, 100)); otherGraphics.put("AKText", text); GraphicsComponent goop = renderMaster.addModel("goop"); goop.setPosition(new Vector3f(500f,-150.0f, -600f)); otherGraphics.put("goop", goop); // Add Item Crates in places addItemCrates(); // Add Lights addLights(); //Add the list of chekpoints createAllCheckpoints(); //Set the last checkpoint in the list to be the finish checkpoint. if(checkpoints.size()!=0){ checkpoints.get(checkpoints.size()-1).setFinishCheckpoint(); System.out.println("setting as finish " + checkpoints.get(checkpoints.size()-1).pointNum);//it's a fucking id. for(int i =0; i< playerList.size();i++){ playerList.get(i).currCheckPoint = checkpoints.get(checkpoints.size()-1); playerList.get(i).nextCheckPoint = checkpoints.get(0); } } } public void update() { List<Entity> toRemove = new ArrayList<Entity>(); // DON'T the donut karts /* for(Kart k : donutKarts) { k.killmenow(elec360power); } */ elec360power++; //no more tracking rocket /*otherGraphics.get("Triforce").setRotation(new Vector3f(3.14f * (elec360power/100f),-3.14f * (elec360power/100f), 3.14f * (elec360power/100f))); Vector3f tempRocket = otherGraphics.get("Triforce").getTransformedVector(0, 0, 0, true); tempRocket.x = (float) (tempRocket.x * 0.97 + 0.03 * players.get(0).getKart().position.x); tempRocket.y = (float) (tempRocket.y * 0.97 + 0.03 * (players.get(0).getKart().position.y + 10)); tempRocket.z = (float) (tempRocket.z * 0.97 + 0.03 * players.get(0).getKart().position.z); otherGraphics.get("Triforce").setPosition(tempRocket); */ for(Entity r : entities) { r.update(); } for(Rocket r : Rocket.deadRockets) { r.destroySoundEmitters(); entities.remove(r); renderMaster.removeModel(r.graphicsComponent); renderMaster.removeLight(r.light); } for(Mine m : Mine.deadMines){ entities.remove(m); renderMaster.removeModel(m.getGraphicsComponent()); renderMaster.removeLight(m.getLight()); } for(Player player : players){ for(ItemCrate ic : items){ ic.update(); if(ic.collisionBox.bIntersects(player.getKart().collisionBox)){ player.updateItem(ic.generateItem()); ic.disappear(); } } } // Remove Rockets for(Entity entity : toRemove){ entity.getGraphicsComponent().setPosition(new Vector3f(0,2000,0)); entity.getLight().setPosition(new Vector3f(0,2000,0)); } entities.removeAll(toRemove); // Rotating Text otherGraphics.get("AKText").setRotation(new Vector3f(0,elec360power/1500f, 0)); otherGraphics.get("goop").setRotation(new Vector3f(0, elec360power * 0.001f, 0)); } public void addRocket(Vector3f position, Vector3f rotation, Player player) { missleNum++; SoundEmitter missleLaunchSound = this.soundMaster.getSoundComponent("assets/sound/Missle_Launch_Mono.wav", false); Rocket r = new Rocket(position, rotation, renderMaster, this, player, missleLaunchSound); this.entities.add(r); } public void addMine(Vector3f position, Vector3f rotation, Player player){ Mine m = new Mine(position, rotation, renderMaster, this, player); this.entities.add(m); } private void addLights() { Light le; le = renderMaster.addLight(); le.setRad(250.0f); le.setPosition(new Vector3f(50,10,0)); le.setColor(new Vector3f(1.0f, 0.0f, 0.0f)); le = renderMaster.addLight(); le.setRad(250.0f); le.setPosition(new Vector3f(-30,10,0)); le.setColor(new Vector3f(0.0f, 0.0f, 1.0f)); //three big corner lights le = renderMaster.addLight(); le.setRad(3000f); le.setPosition(new Vector3f(-1000, 100, -320)); le.setColor(new Vector3f(1,0,0)); le = renderMaster.addLight(); le.setRad(3000f); le.setPosition(new Vector3f(840, 100, 1000)); le.setColor(new Vector3f(0,1,0)); le = renderMaster.addLight(); le.setRad(3000f); le.setPosition(new Vector3f(-1000, 100, 1000)); le.setColor(new Vector3f(0,0,1)); //green pit lights le = renderMaster.addLight(); le.setRad(600f); le.setPosition(new Vector3f(40, 100, -120)); le.setColor(new Vector3f(0,1,0)); le = renderMaster.addLight(); le.setRad(600f); le.setPosition(new Vector3f(800, 100, -916)); le.setColor(new Vector3f(0,1,0)); le = renderMaster.addLight(); le.setRad(600f); le.setPosition(new Vector3f(440, 100, -360)); le.setColor(new Vector3f(0,1,0)); le = renderMaster.addLight(); le.setRad(600f); le.setPosition(new Vector3f(800, 100, -240)); le.setColor(new Vector3f(0,1,0)); le = renderMaster.addLight(); le.setRad(600f); le.setPosition(new Vector3f(880, 100, -880)); le.setColor(new Vector3f(0,1,0)); le = renderMaster.addLight(); le.setRad(600f); le.setPosition(new Vector3f(220, 100, -920)); le.setColor(new Vector3f(0,1,0)); } private void addItemCrates(){ items.add(new ItemCrate(renderMaster, this, new Vector3f(81.3f * 7.5f, 0, 81.3f * -5f))); items.add(new ItemCrate(renderMaster, this, new Vector3f(81.3f * 8.5f, 0, 81.3f * -5f))); items.add(new ItemCrate(renderMaster, this, new Vector3f(81.3f * 9.5f, 0, 81.3f * -5f))); items.add(new ItemCrate(renderMaster, this, new Vector3f(81.3f * 7.5f, 0, 81.3f * 7f))); items.add(new ItemCrate(renderMaster, this, new Vector3f(81.3f * 8.5f, 0, 81.3f * 7f))); items.add(new ItemCrate(renderMaster, this, new Vector3f(81.3f * 9.5f, 0, 81.3f * 7f))); items.add(new ItemCrate(renderMaster, this, new Vector3f(81.3f * 4f, 0, 81.3f * 10f))); items.add(new ItemCrate(renderMaster, this, new Vector3f(81.3f * 4f, 0, 81.3f * 11f))); items.add(new ItemCrate(renderMaster, this, new Vector3f(81.3f * 4f, 0, 81.3f * 12f))); items.add(new ItemCrate(renderMaster, this, new Vector3f(81.3f * -7f, 0, 81.3f * 10f))); items.add(new ItemCrate(renderMaster, this, new Vector3f(81.3f * -7f, 0, 81.3f * 11f))); items.add(new ItemCrate(renderMaster, this, new Vector3f(81.3f * -7f, 0, 81.3f * 12f))); items.add(new ItemCrate(renderMaster, this, new Vector3f(81.3f * -11f, 0, 81.3f * 4f))); items.add(new ItemCrate(renderMaster, this, new Vector3f(81.3f * -12f, 0, 81.3f * 4f))); } private void addTerrain(){ renderMaster.addModel("nightFactory"); } private void addCollisions() { //fucking nummers this.walls.add(new CollisionBox(new Vector3f(-18.66f + 916.66f,0f,933.33f+8f), new Vector3f(166.66f,9000f,2200f))); this.walls.add(new CollisionBox(new Vector3f(-125.00f - 8.5f,0,458.33f + 18f), new Vector3f(1416.66f + 17f,9000f,583.33f + 12f))); this.walls.add(new CollisionBox(new Vector3f(-625f -12,0f,41.66f + 26), new Vector3f(416.66f + 16f,9000f,250f + 40f))); this.walls.add(new CollisionBox(new Vector3f(458.33f - 12f,0f,208.33f + 12f), new Vector3f(250f + 16f,9000f,750f))); this.walls.add(new CollisionBox(new Vector3f(-583.33f,0f,-666.66f + 32f), new Vector3f(833.33f + 60f,9000f,666.66f))); this.walls.add(new CollisionBox(new Vector3f(-83.33f -12f,0f,-541.66f + 32f), new Vector3f(166.66f + 16f,9000f,916.66f))); this.walls.add(new CollisionBox(new Vector3f(-1083.33f - 2f,0f,0f), new Vector3f(166.66f,9000f,2200f))); this.walls.add(new CollisionBox(new Vector3f(0f,0f,1083.33f + 8.0f), new Vector3f(2200f,9000f,166.66f))); this.walls.add(new CollisionBox(new Vector3f(0f,0f,-1083.33f+32f), new Vector3f(2200f,9000f,166.66f))); this.walls.add(new CollisionBox(new Vector3f(1083.33f,0f,0f), new Vector3f(200.0f,9000f,2200f))); //pit walls this.walls.add(new CollisionBox(new Vector3f(2.5f *83.33f - 12.0f,-500.0f,-5.0f * 83.33f), new Vector3f(12f + 3.0f* 83.33f,980f,833.33f))); this.walls.add(new CollisionBox(new Vector3f(5.5f *83.33f - 0.0f,-500.0f,20f + -8.5f * 83.33f), new Vector3f(0f + 9.0f* 83.33f,980f,12.0f +3.0f * 83.33f))); this.walls.add(new CollisionBox(new Vector3f(8.5f *83.33f - 12.0f,-500.0f,-6.0f * 83.33f), new Vector3f(12f + 3.0f* 83.33f,980f,0.0f +8.0f * 83.33f))); this.walls.add(new CollisionBox(new Vector3f(0.0f,-500.0f,0.0f), new Vector3f(2.0f* 83.33f,980f,0.0f +2.0f * 83.33f))); //pits this.pits.add(new CollisionBox(new Vector3f(-12f + 5.5f * 83.33f,0f,20f + -4.5f * 83.33f), new Vector3f( 3f * 83.33f,9000f,5f * 83.33f))); this.pits.add(new CollisionBox(new Vector3f(6f * 83.33f,0f,16f + -11f * 83.33f), new Vector3f(12f * 83.33f,9000f,2f * 83.33f))); this.pits.add(new CollisionBox(new Vector3f(-8f + 11f * 83.33f,0f,-6f * 83.33f), new Vector3f(2f * 83.33f,9000f,10f * 83.33f))); this.pits.add(new CollisionBox(new Vector3f(-16f + 0.5f * 83.33f,0f,16 + -5.5f * 83.33f), new Vector3f(1f * 83.33f,9000f,9f * 83.33f))); } private void createAllCheckpoints(){ float squareLength = 2000/24; int i = 0; float x =0; float z = 0; x = 8.5f*squareLength; z = 10.5f*squareLength; checkpoints.add(new Checkpoint(new Vector3f(x, 0f, z), i++,-1.571f)); x = 0f*squareLength; z = 10.5f*squareLength; checkpoints.add(new Checkpoint(new Vector3f(x, 0f, z), i++,-1.571f)); x = -10.5f*squareLength; z = 10.5f*squareLength; checkpoints.add(new Checkpoint(new Vector3f(x, 0f, z), i++,-3.142f)); x = -10.5f*squareLength; z = -2.5f*squareLength; checkpoints.add(new Checkpoint(new Vector3f(x, 0f, z), i++,1.571f)); x = -3.5f*squareLength; z = -2.5f*squareLength; checkpoints.add(new Checkpoint(new Vector3f(x, 0f, z), i++,0f)); x = -3.5f*squareLength; z = 0.5f*squareLength; checkpoints.add(new Checkpoint(new Vector3f(x, 0f, z), i++,1.571f)); x = 2.5f*squareLength; z = 0.5f*squareLength; checkpoints.add(new Checkpoint(new Vector3f(x, 0f, z), i++,-3.142f)); x = 2.5f*squareLength; z = -8.5f*squareLength; checkpoints.add(new Checkpoint(new Vector3f(x, 0f, z), i++,1.571f)); x = 8.5f*squareLength; z = -8.5f*squareLength; checkpoints.add(new Checkpoint(new Vector3f(x, 0f, z), i++,0f)); x = 8.5f*squareLength; z = 0f*squareLength; checkpoints.add(new Checkpoint(new Vector3f(x, 0f, z), i++, 0f)); } /** * Gets the next checkpoint in the list of checkpoints * * @param curCkPt * @return the next checkpoint, or the first in the case curCkPt is Null or it is the finish checkpoint */ protected Checkpoint getNextChekpoint(Checkpoint curCkPt){ int retIndex; //If the current checkpt is the last checkpoint in the list, ie the finish line, get the first checkpoint. if( curCkPt.isFinishLine) { retIndex = 0; } else { retIndex = checkpoints.lastIndexOf(curCkPt)+1; } return checkpoints.get(retIndex); } protected boolean reachedCheckpoint(Checkpoint nextCkPt, Vector3f position) { boolean retBool = false; Vector3f dist = new Vector3f(); Vector3f.sub(position, nextCkPt.post, dist); if((dist.lengthSquared()) < checkpointThresholdSquared) { retBool = true; } return retBool; } }