Parallax engine impl

This commit is contained in:
Daniel Mills 2020-10-31 08:30:37 -04:00
parent c7c1b2b8c1
commit 1173c3d053
4 changed files with 54 additions and 3 deletions

View File

@ -33,6 +33,7 @@ public class IrisEngine implements Engine
@Override @Override
public void generate(int x, int z, Hunk<BlockData> blocks, Hunk<Biome> biomes) { public void generate(int x, int z, Hunk<BlockData> blocks, Hunk<Biome> biomes) {
MultiBurst.burst.burst( MultiBurst.burst.burst(
() -> getFramework().getEngineParallax().generateParallaxArea(x, z),
() -> blocks.compute2D(getParallelism(), (xx,yy,zz, b) -> { () -> blocks.compute2D(getParallelism(), (xx,yy,zz, b) -> {
getFramework().getTerrainActuator().actuate(x+xx, z+zz, b); getFramework().getTerrainActuator().actuate(x+xx, z+zz, b);
getFramework().getDecorantActuator().actuate(x+xx, z+zz, b); getFramework().getDecorantActuator().actuate(x+xx, z+zz, b);
@ -41,5 +42,9 @@ public class IrisEngine implements Engine
getFramework().getBiomeActuator().actuate(x+xx, z+zz, b); getFramework().getBiomeActuator().actuate(x+xx, z+zz, b);
}) })
); );
getFramework().getEngineParallax().insertParallax(x, z, blocks);
System.out.println("Regions: " + getParallax().getRegionCount() + ", Chunks: " + getParallax().getChunkCount());
getParallax().cleanup();
} }
} }

View File

@ -18,6 +18,8 @@ import org.bukkit.World;
import org.bukkit.block.Biome; import org.bukkit.block.Biome;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
import org.bukkit.craftbukkit.v1_16_R2.generator.CraftChunkData; import org.bukkit.craftbukkit.v1_16_R2.generator.CraftChunkData;
import org.bukkit.event.EventHandler;
import org.bukkit.event.world.WorldSaveEvent;
import java.io.File; import java.io.File;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
@ -72,6 +74,17 @@ public class IrisEngineCompound implements EngineCompound {
engines[i] = new IrisEngine(new EngineTarget(world, dimension, data.copy().preferFolder(rootDimension.getLoadKey()), (int)Math.floor(256D * (index.getWeight() / totalWeight)), index.isInverted(), threadDist)); engines[i] = new IrisEngine(new EngineTarget(world, dimension, data.copy().preferFolder(rootDimension.getLoadKey()), (int)Math.floor(256D * (index.getWeight() / totalWeight)), index.isInverted(), threadDist));
} }
} }
Iris.instance.registerListener(this);
}
@EventHandler
public void on(WorldSaveEvent e)
{
if(world != null &&e.getWorld().equals(world))
{
save();
}
} }
private File getEngineMetadataFile() { private File getEngineMetadataFile() {

View File

@ -1,22 +1,34 @@
package com.volmit.iris.v2.generator; package com.volmit.iris.v2.generator;
import com.volmit.iris.Iris;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.object.IrisBiome;
import com.volmit.iris.object.IrisObjectPlacement;
import com.volmit.iris.util.B;
import com.volmit.iris.util.IObjectPlacer;
import com.volmit.iris.util.RNG;
import com.volmit.iris.v2.generator.actuator.IrisBiomeActuator; import com.volmit.iris.v2.generator.actuator.IrisBiomeActuator;
import com.volmit.iris.v2.generator.actuator.IrisDecorantActuator; import com.volmit.iris.v2.generator.actuator.IrisDecorantActuator;
import com.volmit.iris.v2.generator.actuator.IrisTerrainActuator; import com.volmit.iris.v2.generator.actuator.IrisTerrainActuator;
import com.volmit.iris.v2.scaffold.engine.Engine; import com.volmit.iris.v2.scaffold.engine.Engine;
import com.volmit.iris.v2.scaffold.engine.EngineActuator; import com.volmit.iris.v2.scaffold.engine.EngineActuator;
import com.volmit.iris.v2.scaffold.engine.EngineFramework; import com.volmit.iris.v2.scaffold.engine.EngineFramework;
import com.volmit.iris.v2.scaffold.engine.EngineParallax;
import lombok.Getter; import lombok.Getter;
import org.bukkit.block.Biome; import org.bukkit.block.Biome;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
public class IrisEngineFramework implements EngineFramework { public class IrisEngineFramework implements EngineFramework {
@Getter @Getter
private final Engine engine; private final Engine engine;
@Getter @Getter
private final IrisComplex complex; private final IrisComplex complex;
@Getter
final EngineParallax engineParallax;
@Getter @Getter
private final EngineActuator<BlockData> terrainActuator; private final EngineActuator<BlockData> terrainActuator;
@ -30,8 +42,9 @@ public class IrisEngineFramework implements EngineFramework {
{ {
this.engine = engine; this.engine = engine;
this.complex = new IrisComplex(getEngine()); this.complex = new IrisComplex(getEngine());
terrainActuator = new IrisTerrainActuator(getEngine()); this.engineParallax = new IrisEngineParallax(getEngine());
decorantActuator = new IrisDecorantActuator(getEngine()); this.terrainActuator = new IrisTerrainActuator(getEngine());
biomeActuator = new IrisBiomeActuator(getEngine()); this.decorantActuator = new IrisDecorantActuator(getEngine());
this.biomeActuator = new IrisBiomeActuator(getEngine());
} }
} }

View File

@ -0,0 +1,20 @@
package com.volmit.iris.v2.generator;
import com.volmit.iris.v2.scaffold.engine.Engine;
import com.volmit.iris.v2.scaffold.engine.EngineFramework;
import com.volmit.iris.v2.scaffold.engine.EngineParallax;
import lombok.Getter;
public class IrisEngineParallax implements EngineParallax {
@Getter
private final Engine engine;
@Getter
private final int parallaxSize;
public IrisEngineParallax(Engine engine)
{
this.engine = engine;
parallaxSize = computeParallaxSize();
}
}