export many layers

- remark : wrong merge code ( dverged on two latptops .. ) possible loss
This commit is contained in:
philippe lhardy
2020-12-19 16:55:10 +01:00
parent b8cb7394cd
commit a70ead877a
6 changed files with 503 additions and 448 deletions

View File

@@ -9,13 +9,20 @@ import java.io.*;
import static org.artisanlogiciel.games.minetest.Material.GRASS_MATERIAL;
/**
* export maze layers as a WorldEdit file
*
* export only one layer... ( LabyModel ... )
* import many layers ( LabyLayers )
*/
public class MazePersistWorldEdit {
private LabyModel model;
private LabyLayers mLayers;
private WorlEditGenerator generator;
public MazePersistWorldEdit(LabyModel model) {
this.model = model;
public MazePersistWorldEdit(LabyLayers pLayer) {
this.mLayers = pLayer;
}
public MazePersistWorldEdit() {
@@ -30,13 +37,13 @@ public class MazePersistWorldEdit {
}
}
private Node newNode(int x, int y, String material)
private Node newNode(int x, int y, int layer, String material)
{
// x,y,z => x,z,y in minetest
return new Node(x,0, y, Material.getMaterialByName(material));
return new Node(x,layer, y, Material.getMaterialByName(material));
}
void addWalls(int pX, int pY) {
void addWalls(int pX, int pY, int pLayer, LabyModel model) {
short walls = model.getWalls(pX, pY);
short wdrawn = 0;
// todo
@@ -46,6 +53,7 @@ public class MazePersistWorldEdit {
int oy = 0;
int z = 0;
// HARDCODED !
String material = GRASS_MATERIAL;
int x = ox + (pX * w);
@@ -55,7 +63,7 @@ public class MazePersistWorldEdit {
//if ((pY == 0) && LabyModel.isFlagSet(walls, Brick.UP)) {
if (LabyModel.isFlagSet(walls, Brick.UP)) {
for ( int dx = 0; dx < w; dx++) {
addNode(newNode(x + dx, y,material));
addNode(newNode(x + dx, y, pLayer, material));
}
wdrawn |= Brick.UP;
}
@@ -78,7 +86,7 @@ public class MazePersistWorldEdit {
//if ((pX == 0) && LabyModel.isFlagSet(walls, Brick.LEFT)) {
if (LabyModel.isFlagSet(walls, Brick.LEFT)) {
for (int dy = 0; dy < h; dy ++) {
addNode(newNode(x, y + dy, material));
addNode(newNode(x, y + dy, pLayer, material));
}
wdrawn |= Brick.LEFT;
}
@@ -96,16 +104,22 @@ public class MazePersistWorldEdit {
// first raw format, not smart.
DataOutputStream dataOut = new DataOutputStream(pOut);
dataOut.flush();
for (int y = 0; y < model.getHeight(); y++) {
for (int x = 0; x < model.getWidth(); x++) {
addWalls(x,y);
for (int layer = mLayers.getMin(); layer <= mLayers.getMax(); layer ++) {
LabyModel model = mLayers.getLayer(layer);
if ( model != null )
{
for (int y = 0; y < model.getHeight(); y++) {
for (int x = 0; x < model.getWidth(); x++) {
addWalls(x, y, layer, model);
}
}
}
}
generator.writeEnd();
dataOut.write(builder.toString().getBytes());
dataOut.flush();
} else {
throw new IOException("Format " + pFormat + " Not yet implemented.");
throw new IOException("Format " + pFormat + " Not supported or Not yet implemented.");
}
}
@@ -127,7 +141,7 @@ public class MazePersistWorldEdit {
for (int level = world.getMin(); level <= world.getMax(); level++) {
Slice ground = world.getSlice(level);
if (ground != null) {
model = getModelFromSlice(ground);
LabyModel model = getModelFromSlice(ground);
model.setOnewaywall(true);
layers.addLabyModel(level, model);
System.out.println(model);
@@ -176,7 +190,7 @@ public class MazePersistWorldEdit {
}
}
}
model = new LabyModel(width,height, t);
LabyModel model = new LabyModel(width,height, t);
return model;
}
else