This commit is contained in:
Daniel Mills
2020-11-15 23:36:33 -05:00
parent 116ab72f4e
commit 6d08faa30f
33 changed files with 576 additions and 265 deletions

View File

@@ -1,15 +1,14 @@
package com.volmit.iris.scaffold.engine;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.manager.gui.Renderer;
import com.volmit.iris.object.*;
import com.volmit.iris.scaffold.cache.Cache;
import com.volmit.iris.scaffold.data.DataProvider;
import com.volmit.iris.scaffold.hunk.Hunk;
import com.volmit.iris.scaffold.parallax.ParallaxAccess;
import com.volmit.iris.scaffold.parallel.MultiBurst;
import com.volmit.iris.util.B;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.RNG;
import com.volmit.iris.util.*;
import org.bukkit.Chunk;
import org.bukkit.Material;
import org.bukkit.World;
@@ -20,9 +19,10 @@ import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack;
import java.awt.*;
import java.util.Arrays;
public interface Engine extends DataProvider, Fallible, GeneratorAccess, LootProvider, BlockUpdater {
public interface Engine extends DataProvider, Fallible, GeneratorAccess, LootProvider, BlockUpdater, Renderer, Hotloadable {
public void close();
public boolean isClosed();
@@ -49,6 +49,8 @@ public interface Engine extends DataProvider, Fallible, GeneratorAccess, LootPro
public void generate(int x, int z, Hunk<BlockData> blocks, Hunk<Biome> biomes);
public EngineMetrics getMetrics();
default void save()
{
getParallax().saveAll();
@@ -89,6 +91,21 @@ public interface Engine extends DataProvider, Fallible, GeneratorAccess, LootPro
return getTarget().getParallaxWorld();
}
public default Color draw(double x, double z)
{
IrisRegion region = getRegion((int)x, (int)z);
IrisBiome biome = getSurfaceBiome((int)x, (int)z);
int height = getHeight((int) x, (int) z);
double heightFactor = M.lerpInverse(0, getHeight(), height);
IrisColor irc = region.getColor();
IrisColor ibc = biome.getColor();
Color rc = irc != null ? irc.getColor() : Color.GREEN.darker();
Color bc = ibc != null ? ibc.getColor() : biome.isAquatic() ? Color.BLUE : Color.YELLOW;
Color f = IrisColor.blend(rc, bc, bc, Color.getHSBColor(0, 0, (float)heightFactor));
return f;
}
@Override
public default IrisRegion getRegion(int x, int z) {
return getFramework().getComplex().getRegionStream().get(x, z);
@@ -136,6 +153,7 @@ public interface Engine extends DataProvider, Fallible, GeneratorAccess, LootPro
@Override
public default void updateChunk(Chunk c)
{
PrecisionStopwatch p = PrecisionStopwatch.start();
if(getParallax().getMetaR(c.getX(), c.getZ()).isUpdates())
{
Hunk<Boolean> b = getParallax().getUpdatesR(c.getX(), c.getZ());
@@ -155,6 +173,8 @@ public interface Engine extends DataProvider, Fallible, GeneratorAccess, LootPro
}
});
}
getMetrics().getUpdates().put(p.getMilliseconds());
}
public default void updateLighting(int x, int y, int z, Chunk c)

View File

@@ -12,6 +12,7 @@ import com.volmit.iris.util.*;
import org.bukkit.*;
import org.bukkit.block.Biome;
import org.bukkit.block.data.BlockData;
import org.bukkit.command.CommandSender;
import org.bukkit.generator.BlockPopulator;
import org.bukkit.generator.ChunkGenerator;
import org.bukkit.material.MaterialData;
@@ -250,6 +251,11 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
return generated;
}
@Override
public void printMetrics(CommandSender sender) {
getComposite().printMetrics(sender);
}
@Override
public IrisBiome getBiome(int x, int y, int z) {
// TODO: REMOVE GET ABS BIOME OR THIS ONE

View File

@@ -2,17 +2,17 @@ package com.volmit.iris.scaffold.engine;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.object.IrisDimension;
import com.volmit.iris.scaffold.hunk.Hunk;
import com.volmit.iris.scaffold.parallel.MultiBurst;
import com.volmit.iris.util.KList;
import org.bukkit.World;
import org.bukkit.block.Biome;
import org.bukkit.block.data.BlockData;
import org.bukkit.command.CommandSender;
import org.bukkit.event.Listener;
import com.volmit.iris.scaffold.hunk.Hunk;
import com.volmit.iris.scaffold.parallel.MultiBurst;
import org.bukkit.generator.BlockPopulator;
public interface EngineCompound extends Listener
public interface EngineCompound extends Listener, Hotloadable
{
public IrisDimension getRootDimension();
@@ -20,6 +20,8 @@ public interface EngineCompound extends Listener
public World getWorld();
public void printMetrics(CommandSender sender);
public int getSize();
public Engine getEngine(int index);

View File

@@ -0,0 +1,51 @@
package com.volmit.iris.scaffold.engine;
import com.volmit.iris.util.AtomicRollingSequence;
import com.volmit.iris.util.KMap;
import lombok.Data;
@Data
public class EngineMetrics {
private final AtomicRollingSequence total;
private final AtomicRollingSequence updates;
private final AtomicRollingSequence terrain;
private final AtomicRollingSequence biome;
private final AtomicRollingSequence parallax;
private final AtomicRollingSequence parallaxInsert;
private final AtomicRollingSequence post;
private final AtomicRollingSequence decoration;
private final AtomicRollingSequence cave;
private final AtomicRollingSequence ravine;
private final AtomicRollingSequence deposit;
public EngineMetrics(int mem)
{
this.total = new AtomicRollingSequence(mem);
this.terrain = new AtomicRollingSequence(mem);
this.biome = new AtomicRollingSequence(mem);
this.parallax = new AtomicRollingSequence(mem);
this.parallaxInsert = new AtomicRollingSequence(mem);
this.post = new AtomicRollingSequence(mem);
this.decoration = new AtomicRollingSequence(mem);
this.updates = new AtomicRollingSequence(mem);
this.cave = new AtomicRollingSequence(mem);
this.ravine = new AtomicRollingSequence(mem);
this.deposit = new AtomicRollingSequence(mem);
}
public KMap<String, Double> pull() {
KMap<String, Double> v = new KMap<>();
v.put("terrain", terrain.getAverage());
v.put("biome", biome.getAverage());
v.put("parallax", parallax.getAverage());
v.put("parallax.insert", parallaxInsert.getAverage());
v.put("post", post.getAverage());
v.put("decoration", decoration.getAverage());
v.put("updates", updates.getAverage());
v.put("cave", cave.getAverage());
v.put("ravine", ravine.getAverage());
v.put("deposit", deposit.getAverage());
return v;
}
}

View File

@@ -73,9 +73,11 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer
default void insertParallax(int x, int z, Hunk<BlockData> data)
{
PrecisionStopwatch p = PrecisionStopwatch.start();
ParallaxChunkMeta meta = getParallaxAccess().getMetaR(x>>4, z>>4);
if(!meta.isObjects()) {
getEngine().getMetrics().getParallaxInsert().put(p.getMilliseconds());
return;
}
@@ -94,10 +96,13 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer
}
}
}
getEngine().getMetrics().getParallaxInsert().put(p.getMilliseconds());
}
default void generateParallaxArea(int x, int z)
{
PrecisionStopwatch p = PrecisionStopwatch.start();
int s = (int) Math.ceil(getParallaxSize() / 2D);
int j;
BurstExecutor e = MultiBurst.burst.burst(getParallaxSize() * getParallaxSize());
@@ -114,8 +119,9 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer
}
e.complete();
getParallaxAccess().setChunkGenerated(x>>4, z>>4);
p.end();
getEngine().getMetrics().getParallax().put(p.getMilliseconds());
}
default void generateParallaxLayer(int x, int z)

View File

@@ -1,13 +1,14 @@
package com.volmit.iris.scaffold.engine;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.manager.gui.Renderer;
import com.volmit.iris.object.IrisBiome;
import com.volmit.iris.object.IrisObjectPlacement;
import com.volmit.iris.object.IrisRegion;
import com.volmit.iris.scaffold.data.DataProvider;
import com.volmit.iris.scaffold.parallax.ParallaxAccess;
public interface GeneratorAccess extends DataProvider
public interface GeneratorAccess extends DataProvider, Renderer
{
public IrisRegion getRegion(int x, int z);
@@ -64,4 +65,6 @@ public interface GeneratorAccess extends DataProvider
return new PlacedObject(null, getData().getObjectLoader().load(object), id, x, z);
}
public int getCacheID();
}

View File

@@ -5,6 +5,7 @@ import com.volmit.iris.object.*;
import com.volmit.iris.scaffold.data.DataProvider;
import com.volmit.iris.util.*;
import org.bukkit.Location;
import org.bukkit.command.CommandSender;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
@@ -15,6 +16,8 @@ public interface IrisAccess extends Hotloadable, DataProvider {
public int getGenerated();
public void printMetrics(CommandSender sender);
public IrisBiome getBiome(int x, int y, int z);
public IrisBiome getCaveBiome(int x, int y, int z);