dd9b1f0c65
Created NewLinkData and replaced references to the original LinkData. Moved it to the mod_pocketDim.core package. Added Point4D, an immutable point type for 3D integer coordinates with an added dimension ID.
85 lines
No EOL
2.4 KiB
Java
85 lines
No EOL
2.4 KiB
Java
package StevenDimDoors.mod_pocketDim;
|
|
|
|
import java.io.File;
|
|
import java.io.Serializable;
|
|
import java.util.ArrayList;
|
|
import java.util.HashMap;
|
|
|
|
import StevenDimDoors.mod_pocketDim.core.NewLinkData;
|
|
import StevenDimDoors.mod_pocketDim.dungeon.pack.DungeonPack;
|
|
import StevenDimDoors.mod_pocketDim.dungeon.pack.DungeonType;
|
|
import StevenDimDoors.mod_pocketDim.helpers.DungeonHelper;
|
|
|
|
public class DungeonGenerator implements Serializable
|
|
{
|
|
//This static field is hax so that I don't have to add an instance field to DungeonGenerator to support DungeonType.
|
|
//Otherwise it would have to be serializable and all sorts of problems would arise.
|
|
private static final HashMap<DungeonGenerator, DungeonType> dungeonTypes = new HashMap<DungeonGenerator, DungeonType>();
|
|
|
|
public int weight;
|
|
public String schematicPath;
|
|
public ArrayList<HashMap> sideRifts = new ArrayList<HashMap>();
|
|
public NewLinkData exitLink;
|
|
public boolean isOpen;
|
|
|
|
public int sideDoorsSoFar=0;
|
|
public int exitDoorsSoFar=0;
|
|
public int deadEndsSoFar=0;
|
|
|
|
public DungeonGenerator(int weight, String schematicPath, boolean isOpen, DungeonType dungeonType)
|
|
{
|
|
this.weight = weight;
|
|
this.schematicPath = schematicPath;
|
|
this.isOpen = isOpen;
|
|
|
|
dungeonTypes.put(this, dungeonType); //Hax...
|
|
}
|
|
|
|
public DungeonType getDungeonType()
|
|
{
|
|
DungeonType type = dungeonTypes.get(this);
|
|
if (type == null)
|
|
{
|
|
//Infer the dungeon's type from its file name
|
|
//There is minimal risk of us applying this to untagged dungeons and this'll be phased out
|
|
//when we get the new save format.
|
|
try
|
|
{
|
|
File file = new File(schematicPath);
|
|
String typeName = file.getName().split("_")[0];
|
|
String packName = file.getParentFile().getName();
|
|
DungeonPack pack = DungeonHelper.instance().getDungeonPack(packName);
|
|
if (pack == null)
|
|
{
|
|
pack = DungeonHelper.instance().getDungeonPack("ruins");
|
|
}
|
|
type = pack.getType(typeName);
|
|
}
|
|
catch (Exception e) { }
|
|
if (type == null)
|
|
{
|
|
type = DungeonType.UNKNOWN_TYPE;
|
|
}
|
|
dungeonTypes.put(this, type);
|
|
}
|
|
return type;
|
|
}
|
|
|
|
@Override
|
|
public int hashCode()
|
|
{
|
|
return (schematicPath != null) ? schematicPath.hashCode() : 0;
|
|
}
|
|
|
|
@Override
|
|
public boolean equals(Object other)
|
|
{
|
|
return equals((DungeonGenerator) other);
|
|
}
|
|
|
|
public boolean equals(DungeonGenerator other)
|
|
{
|
|
return ((this.schematicPath != null && this.schematicPath.equals(other.schematicPath)) ||
|
|
(this.schematicPath == other.schematicPath));
|
|
}
|
|
} |