Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -48,5 +48,40 @@ public int getZ() {
protected void setZ(int z) {
this.z = z;
}

@Override
public String toString() {
return "Point [x=" + x + ", y=" + y + ", z=" + z + "]";
}

@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + x;
result = prime * result + y;
result = prime * result + z;
return result;
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Point other = (Point) obj;
if (x != other.x)
return false;
if (y != other.y)
return false;
if (z != other.z)
return false;
return true;
}



}
Original file line number Diff line number Diff line change
Expand Up @@ -15,45 +15,26 @@
import codemetropolis.toolchain.commons.util.Resources;
import codemetropolis.toolchain.rendering.control.WorldBuilder;
import codemetropolis.toolchain.rendering.events.ProgressEventListener;
import codemetropolis.toolchain.rendering.exceptions.BuildingTypeMismatchException;
import codemetropolis.toolchain.rendering.exceptions.RenderingException;
import codemetropolis.toolchain.rendering.exceptions.TooLongRenderDurationException;

public class RenderingExecutor extends AbstractExecutor {

protected File worldDir;
protected File tempDir;

@Override
public boolean execute(ExecutorArgs args) {
RenderingExecutorArgs renderingArgs = (RenderingExecutorArgs)args;
File worldDir = new File(renderingArgs.getWorldPath());
File tempDir = new File(worldDir, "TEMP");
RenderingExecutorArgs renderingArgs = (RenderingExecutorArgs) args;

worldDir = new File(renderingArgs.getWorldPath());
tempDir = new File(worldDir, "TEMP");
tempDir.deleteOnExit();
boolean overwrite = renderingArgs.isSilentOverwriteEnabled();

if(worldDir.exists() && worldDir.isDirectory()) {
if(!overwrite) {
print(false, Resources.get("world_already_exists"), tempDir.getAbsolutePath());
Scanner in = new Scanner(System.in);
String input = "";
while(!input.equalsIgnoreCase("Y") && !input.equalsIgnoreCase("N")) {
input = in.next();
}
in.close();
if(input.equalsIgnoreCase("Y")) {
overwrite = true;
} else {
print(Resources.get("render_interrupted"));
return false;
}
}
if(overwrite) {
FileUtils.deleteDirectory(worldDir);
}
}


generateWorldDir(renderingArgs.isSilentOverwriteEnabled());

try {
boolean isValid = CmxmlValidator.validate(renderingArgs.getInputFile());
if(!isValid) {
if (!isValid) {
throw new CmxmlValidationFailedException();
}
} catch (IOException e) {
Expand All @@ -63,22 +44,22 @@ public boolean execute(ExecutorArgs args) {
printError(e, Resources.get("invalid_input_xml_error"));
return false;
}

WorldBuilder worldBuilder = new WorldBuilder(renderingArgs.getWorldPath());
for(EventListener listener : listeners) {
for (EventListener listener : listeners) {
worldBuilder.addEventListener((ProgressEventListener) listener);
}

print(Resources.get("rendering_reading_input"));
try {
worldBuilder.createBuildings(renderingArgs.getInputFile());
} catch (BuildingTypeMismatchException e) {
} catch (Exception e) {
printError(e, Resources.get("building_creation_failed_error"));
return false;
}
print(Resources.get("rendering_reading_input_done"));
print(Resources.get("buildables_found"), worldBuilder.getNumberOfBuildings());

print(Resources.get("creating_blocks"));
try {
worldBuilder.createBlocks(tempDir, renderingArgs.getMaxTime());
Expand All @@ -88,10 +69,10 @@ public boolean execute(ExecutorArgs args) {
}
long elapsed = worldBuilder.getTimeElapsedDuringLastPhase();
int hours = (int) (elapsed / (1000 * 60 * 60));
int minutes = (int) (elapsed % (1000 * 60 * 60) / (1000 * 60));
print(Resources.get("creating_blocks_done"), worldBuilder.getNumberOfBlocks(), hours, minutes);
print(Resources.get("placing_blocks"));
int minutes = (int) (elapsed % (1000 * 60 * 60) / (1000 * 60));
print(Resources.get("creating_blocks_done"), worldBuilder.getNumberOfBlocks(), hours, minutes);

print(Resources.get("placing_blocks"));
try {
worldBuilder.build(tempDir);
} catch (RenderingException e) {
Expand All @@ -100,22 +81,59 @@ public boolean execute(ExecutorArgs args) {
}
elapsed = worldBuilder.getTimeElapsedDuringLastPhase();
hours = (int) (elapsed / (1000 * 60 * 60));
minutes = (int) (elapsed % (1000 * 60 * 60) / (1000 * 60));
print(Resources.get("placing_blocks_done"), hours, minutes);

return true;
minutes = (int) (elapsed % (1000 * 60 * 60) / (1000 * 60));
print(Resources.get("placing_blocks_done"), hours, minutes);

return true;
}

protected boolean generateWorldDir(boolean overwrite) {
if (worldDir.exists() && worldDir.isDirectory()) {
if (!overwrite) {
print(false, Resources.get("world_already_exists"), tempDir.getAbsolutePath());
if (overridePermission()) {
FileUtils.deleteDirectory(worldDir);
} else {
print(Resources.get("render_interrupted"));
return false;
}
}
if (overwrite) {
FileUtils.deleteDirectory(worldDir);
}
}
return true;
}

//region PROGRESS EVENT

public boolean overridePermission() {

Scanner in = new Scanner(System.in);
String input = "";
while (!input.equalsIgnoreCase("Y") && !input.equalsIgnoreCase("N")) {
input = in.next();
}
in.close();
if (input.equalsIgnoreCase("Y")) {
return true;
} else {
return false;
}
}

// region PROGRESS EVENT
private List<EventListener> listeners = new ArrayList<EventListener>();

public synchronized void addEventListener(ProgressEventListener listener) {

public int getListenerCount() {
return listeners.size();
}

public synchronized void addEventListener(ProgressEventListener listener) {
listeners.add(listener);
}
public synchronized void removeEventListener(ProgressEventListener listener) {

public synchronized void removeEventListener(ProgressEventListener listener) {
listeners.remove(listener);
}
//endregion
// endregion

}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ public RenderingExecutorArgs(String inputFile, String worldPath) {
}

public RenderingExecutorArgs(String inputFile, String worldPath, boolean overwriteSilently) {

this(inputFile, worldPath, overwriteSilently, Integer.MAX_VALUE);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public WorldBuilder(String worldPath) {
world = new World(worldPath, GROUND_LEVEL);
}

public void createBuildings(String inputPath) throws BuildingTypeMismatchException{
public void createBuildings(String inputPath) throws Exception{
BuildableTree buildables = new BuildableTree();
try {
buildables.loadFromFile(inputPath);
Expand Down
Loading