package com.bioxx.jmapgen.graph; import com.bioxx.jmapgen.IslandMap; import com.bioxx.jmapgen.Point; import com.bioxx.jmapgen.graph.Center.Marker; import net.minecraft.nbt.NBTTagCompound; public class Edge { public int index = 0; public Center dCenter0, dCenter1; // Delaunay edge public Corner vCorner0, vCorner1; // Voronoi edge public Point midpoint; // halfway between v0,v1 public Edge() { } public Edge(int i) { index = i; } public void setVoronoiEdge(Corner c0, Corner c1) { vCorner0 = c0; vCorner1 = c1; if(/*v0 != null && */ !vCorner0.adjacent.contains(vCorner1) && vCorner0.index != vCorner1.index) { vCorner0.adjacent.add(vCorner1); } if(/*v1 != null && */ !vCorner1.adjacent.contains(vCorner0) && vCorner1.index != vCorner0.index) { vCorner1.adjacent.add(vCorner0); } } /** * * @param c The Corner that you already have * @return The opposite corner of the edge. Returns null if you feed it a corner that is not a part of this edge. */ public Corner otherCorner(Corner c) { if(c == vCorner0) return vCorner1; else if(c == vCorner1) return vCorner0; else return null; } /** * * @param c The Center that you already have * @return The opposite center of the edge. Returns null if you feed it a center that is not a part of this edge. */ public Center otherCenter(Center c) { if(c == dCenter0) return dCenter1; else if(c == dCenter1) return dCenter0; else return null; } public boolean isShoreline() { if((dCenter0.hasMarker(Marker.Water) && !dCenter1.hasMarker(Marker.Water)) || (!dCenter0.hasMarker(Marker.Water) && dCenter1.hasMarker(Marker.Water))) return true; return false; } public void writeToNBT(NBTTagCompound nbt) { nbt.setInteger("index", index); nbt.setDouble("midX", midpoint.x); nbt.setDouble("midY", midpoint.y); nbt.setInteger("dcenter0", dCenter0.index); nbt.setInteger("dcenter1", dCenter1.index); nbt.setInteger("vCorner0", vCorner0.index); nbt.setInteger("vCorner1", vCorner1.index); } public void readFromNBT(NBTTagCompound nbt, IslandMap m) { this.midpoint = new Point(nbt.getDouble("midX"), nbt.getDouble("midY")); dCenter0 = m.centers.get(nbt.getInteger("dcenter0")); dCenter1 = m.centers.get(nbt.getInteger("dcenter1")); vCorner0 = m.corners.get(nbt.getInteger("vCorner0")); vCorner1 = m.corners.get(nbt.getInteger("vCorner1")); } }