diff -r ed1d52c5aa94 -r 763d3961400b project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/Datastructures/MapRecipe.java --- a/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/Datastructures/MapRecipe.java Sat Aug 18 00:22:33 2012 +0200 +++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/Datastructures/MapRecipe.java Sat Aug 18 00:47:51 2012 +0200 @@ -18,6 +18,9 @@ package org.hedgewars.hedgeroid.Datastructures; +import java.util.Arrays; +import java.util.UUID; + import org.hedgewars.hedgeroid.R; import org.hedgewars.hedgeroid.frontlib.Frontlib; @@ -65,6 +68,34 @@ return drawData==null ? null : drawData.clone(); } + public MapRecipe withMapgen(int mapgen) { + return new MapRecipe(mapgen, templateFilter, mazeSize, name, seed, theme, drawData); + } + + public MapRecipe withTemplateFilter(int templateFilter) { + return new MapRecipe(mapgen, templateFilter, mazeSize, name, seed, theme, drawData); + } + + public MapRecipe withMazeSize(int mazeSize) { + return new MapRecipe(mapgen, templateFilter, mazeSize, name, seed, theme, drawData); + } + + public MapRecipe withName(String name) { + return new MapRecipe(mapgen, templateFilter, mazeSize, name, seed, theme, drawData); + } + + public MapRecipe withSeed(String seed) { + return new MapRecipe(mapgen, templateFilter, mazeSize, name, seed, theme, drawData); + } + + public MapRecipe withTheme(String theme) { + return new MapRecipe(mapgen, templateFilter, mazeSize, name, seed, theme, drawData); + } + + public MapRecipe withDrawData(byte[] drawData) { + return new MapRecipe(mapgen, templateFilter, mazeSize, name, seed, theme, drawData); + } + public static String formatMapName(Resources res, String map) { if(map.charAt(0)=='+') { if(map.equals(MAPNAME_REGULAR)) { @@ -77,4 +108,95 @@ } return map; } + + /** + * Returns the mapname corresponding to the map generator (e.g. "+rnd+" for regular maps) + * If the mapgen does not have a unique name (MAPGEN_NAMED) or is not known, the def + * value is returned. + */ + public static String mapnameForGenerator(int mapgen, String def) { + switch(mapgen) { + case Frontlib.MAPGEN_REGULAR: return MAPNAME_REGULAR; + case Frontlib.MAPGEN_MAZE: return MAPNAME_MAZE; + case Frontlib.MAPGEN_DRAWN: return MAPNAME_DRAWN; + default: return def; + } + } + + /** + * In a sense this is the inverse of mapnameForGenerator. Returns the mapgen that uses + * mapName as special identifier, or MAPGEN_NAMED if there is none. + */ + public static int generatorForMapname(String mapName) { + if(MapRecipe.MAPNAME_REGULAR.equals(mapName)) { + return Frontlib.MAPGEN_REGULAR; + } else if(MapRecipe.MAPNAME_MAZE.equals(mapName)) { + return Frontlib.MAPGEN_MAZE; + } else if(MapRecipe.MAPNAME_DRAWN.equals(mapName)) { + return Frontlib.MAPGEN_DRAWN; + } else { + return Frontlib.MAPGEN_NAMED; + } + } + + @Override + public String toString() { + return "MapRecipe [mapgen=" + mapgen + ", templateFilter=" + + templateFilter + ", mazeSize=" + mazeSize + ", name=" + name + + ", seed=" + seed + ", theme=" + theme + ", drawData=" + + Arrays.toString(drawData) + "]"; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + Arrays.hashCode(drawData); + result = prime * result + mapgen; + result = prime * result + mazeSize; + result = prime * result + ((name == null) ? 0 : name.hashCode()); + result = prime * result + ((seed == null) ? 0 : seed.hashCode()); + result = prime * result + templateFilter; + result = prime * result + ((theme == null) ? 0 : theme.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + MapRecipe other = (MapRecipe) obj; + if (!Arrays.equals(drawData, other.drawData)) + return false; + if (mapgen != other.mapgen) + return false; + if (mazeSize != other.mazeSize) + return false; + if (name == null) { + if (other.name != null) + return false; + } else if (!name.equals(other.name)) + return false; + if (seed == null) { + if (other.seed != null) + return false; + } else if (!seed.equals(other.seed)) + return false; + if (templateFilter != other.templateFilter) + return false; + if (theme == null) { + if (other.theme != null) + return false; + } else if (!theme.equals(other.theme)) + return false; + return true; + } + + public static String makeRandomSeed() { + return "{"+UUID.randomUUID().toString()+"}"; + } }