Permalink
Browse files

Level können nun auch aus den Zip-Archiven mit dem Levelloader gelade…

…n werden

git-svn-id: https://jumpnevolve.googlecode.com/svn/trunk/jumpnevolve@337 42192f38-024e-0d60-f621-68f43529c6e9
  • Loading branch information...
1 parent bd0b277 commit 70313502b27079f0e125142f15822bf27cd19a42 erik.wagner1994 committed Dec 1, 2011
@@ -8,14 +8,12 @@
import java.io.ObjectInputStream;
import java.util.ArrayList;
import java.util.HashMap;
-import java.util.jar.JarFile;
+import java.util.zip.ZipFile;
import org.newdawn.slick.util.DefaultLogSystem;
import org.newdawn.slick.util.Log;
import com.googlecode.jumpnevolve.game.objects.ActivatingObject;
-import com.googlecode.jumpnevolve.game.objects.Button;
-import com.googlecode.jumpnevolve.game.objects.Door;
import com.googlecode.jumpnevolve.graphics.world.AbstractObject;
import com.googlecode.jumpnevolve.graphics.world.Activable;
import com.googlecode.jumpnevolve.math.Vector;
@@ -47,15 +45,28 @@ private void loadLevel() {
try {
// Datei als InputStream vorbereiten
if (JarHandler.existJar()
- && !source.startsWith(Parameter.PROGRAMM_DIRECTORY_LEVELS)) {
- levelFile = this.getClass().getResourceAsStream(source);
+ && !this.source
+ .startsWith(Parameter.PROGRAMM_DIRECTORY_LEVELS)) {
+ // Aus Jar-Archiv laden
+ levelFile = this.getClass().getResourceAsStream(this.source);
} else {
- levelFile = new FileInputStream(source);
+ if (this.source.contains("!")
+ && this.source
+ .startsWith(Parameter.PROGRAMM_DIRECTORY_CAMPAIGNS)) {
+ // Aus Zip-Archiv einer Kampagne laden
+ ZipFile zip = new ZipFile(this.source.substring(0,
+ this.source.indexOf("!")));
+ levelFile = zip.getInputStream(zip.getEntry(this.source
+ .substring(this.source.indexOf("!") + 1)));
+ } else {
+ // Nach dem direkten Pfad laden
+ levelFile = new FileInputStream(this.source);
+ }
}
// Einordnen, was für eine Datei geladen wird
if (this.source.toLowerCase().endsWith(".txt")) {
- Log.info("Lade .txt-Level aus " + source);
+ Log.info("Lade .txt-Level aus " + this.source);
// BufferedReader zum Laden der Datei erstellen
BufferedReader levelFileReader = new BufferedReader(
@@ -65,7 +76,7 @@ private void loadLevel() {
this.loadTxtLevel(levelFileReader);
} else if (this.source.toLowerCase().endsWith(".lvl")) {
- Log.info("Lade .lvl-Level aus " + source);
+ Log.info("Lade .lvl-Level aus " + this.source);
// BufferedReader zum Laden der Datei erstellen
BufferedReader levelFileReader = new BufferedReader(
@@ -75,7 +86,7 @@ private void loadLevel() {
this.loadLvlLevel(levelFileReader);
} else if (this.source.toLowerCase().endsWith(".dat")) {
- Log.info("Lade Speicherstand aus " + source);
+ Log.info("Lade Speicherstand aus " + this.source);
// Speicherung laden --> Level-Objekt
ObjectInputStream objectLevelFile = new ObjectInputStream(
@@ -93,7 +104,7 @@ private void loadLevel() {
} else {
// Fehler beim Erkennen der Dateiart
throw new IOException("Nicht-verarbeitbare Dateiendung: "
- + source);
+ + this.source);
}
} catch (IOException e) {
// Allgemeinen Fehler ausgeben
@@ -1,7 +1,9 @@
package com.googlecode.jumpnevolve.game.campaign;
+import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
+import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
@@ -37,8 +39,44 @@ private void loadCampaign() {
HashMap<String, ZipEntry> entryList = new HashMap<String, ZipEntry>();
while (entries.hasMoreElements()) {
ZipEntry zipEntry = (ZipEntry) entries.nextElement();
- entryList.put(zipEntry.getName(), zipEntry);
+ entryList.put(toKeyEntry(zipEntry.getName()), zipEntry);
}
+
+ // Main-Datei verarbeiten
+ BufferedReader reader = new BufferedReader(new InputStreamReader(
+ zip.getInputStream(entryList.get("main"))));
+ String current = reader.readLine();
+ while (current != null) {
+ // TODO: Informationen verarbeiten
+ current = reader.readLine();
+ }
+
+ reader.close();
+ // Map erstellen
+ reader = new BufferedReader(new InputStreamReader(
+ zip.getInputStream(entryList.get("main"))));
+ current = reader.readLine();
+ String[] split = current.split("_");
+ if (!(split.length == 4)) {
+ throw new IOException(
+ "Erste Map-Zeile hat nicht das korrekte Format: "
+ + current);
+ }
+ // Map mit der ersten Zeile erstellen
+ CampaignMap map = new CampaignMap(Integer.parseInt(split[1]),
+ Integer.parseInt(split[2]), transformSource(this.source)
+ + "!images/" + split[3]);
+ current = reader.readLine();
+ while (current != null) {
+ split = current.split("_");
+ if (split[0].equals("Level")) {
+
+ }
+ // TODO: Informationen verarbeiten
+ current = reader.readLine();
+ }
+ this.campaign.setMap(map);
+
} catch (IOException e) {
Log.error("Kampagne konnte nicht geladen werden: " + source
+ " Fehlermeldung: " + e);
@@ -55,6 +93,22 @@ private void loadCampaign() {
}
}
+ private static String toKeyEntry(String name) {
+ if (name.endsWith(".info")) {
+ if (name.substring(name.lastIndexOf("/")).toLowerCase()
+ .startsWith("map")) {
+ return "map";
+ } else if (name.substring(name.lastIndexOf("/")).toLowerCase()
+ .startsWith("campaign")) {
+ return "main";
+ }
+ }
+ if (name.endsWith(".lvl")) {
+ return "level_" + name.substring(name.lastIndexOf("/"));
+ }
+ return name;
+ }
+
private static String transformSource(String source) {
if (!source.startsWith(Parameter.PROGRAMM_DIRECTORY_CAMPAIGNS)) {
source = Parameter.PROGRAMM_DIRECTORY_CAMPAIGNS + source;

0 comments on commit 7031350

Please sign in to comment.