/******************************************************************************* * Copyright (c) 2013 Philip Collin. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html * * Contributors: * Philip Collin - initial API and implementation ******************************************************************************/ package com.lyeeedar.Roguelike3D.Game.Level; import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.Random; import com.lyeeedar.Graphics.ParticleEffects.ParticleEmitter; import com.lyeeedar.Roguelike3D.Game.GameData; import com.lyeeedar.Roguelike3D.Game.Level.XML.BiomeReader; import com.lyeeedar.Roguelike3D.Game.Level.XML.MonsterEvolver; import com.lyeeedar.Roguelike3D.Game.Level.XML.RoomReader; import com.lyeeedar.Roguelike3D.Graphics.Lights.LightManager; public class LevelContainer implements Serializable { /** * */ private static final long serialVersionUID = 1485045667222532500L; public final Random ran = new Random(); public final String UID; public final String name; public Level level = null; public LightManager lightManager = null; public final String biome; public final int depth; public final String[] up_levels; public final String[] down_levels; public HashMap<String, ArrayList<MonsterEvolver>> monsters = new HashMap<String, ArrayList<MonsterEvolver>>(); public String skybox; public LevelContainer(String name, String biome, int depth, String[] up, String[] down) { this.biome = biome; this.depth = depth; this.name = name; this.up_levels = up; this.down_levels = down; this.UID = depth+biome+this.toString()+this.hashCode()+System.currentTimeMillis()+System.nanoTime(); } public LightManager getLightManager() { if (lightManager == null) { lightManager = new LightManager(1, GameData.lightQuality); } return lightManager; } int loadingStage = 0; public Level getLevel(BiomeReader biome, RoomReader rReader) { if (loadingStage == 0) { skybox = biome.getSkybox(); level = new Level(biome.getWidth(), biome.getHeight(), biome.getGenerator(), biome, (skybox == null), depth, up_levels.length, down_levels.length); loadingStage++; } else if (loadingStage == 1) { boolean done = level.fillRoom(rReader, this); if (done) loadingStage++; } else if (loadingStage == 2) { return level; } return null; } public MonsterEvolver getMonsterEvolver(String type, String UID) { ArrayList<MonsterEvolver> m = monsters.get(type); for (MonsterEvolver me : m) { if (me.UID.equals(UID)) return me; } return null; } public MonsterEvolver getMonsterEvolver(String type) { if (!monsters.containsKey(type)) { ArrayList<MonsterEvolver> monsterType = new ArrayList<MonsterEvolver>(); MonsterEvolver evolver = new MonsterEvolver(type, depth); evolver.createMap(); evolver.Evolve_Creature(); monsterType.add(evolver); monsters.put(type, monsterType); return evolver; } ArrayList<MonsterEvolver> monsterType = monsters.get(type); int pos = ran.nextInt(monsterType.size()+1); if (pos < monsterType.size()) { return monsterType.get(pos); } else { MonsterEvolver evolver = new MonsterEvolver(type, depth); evolver.createMap(); evolver.Evolve_Creature(); monsterType.add(evolver); return evolver; } } int upIndex = 0; public String getUpLevel() { if (upIndex == up_levels.length) return null; String rs = up_levels[upIndex]; upIndex++; return rs; } int downIndex = 0; public String getDownLevel() { if (downIndex == down_levels.length) return null; String rs = down_levels[downIndex]; downIndex++; return rs; } }