Implement API additions

This commit is contained in:
Blue (Lukas Rieger) 2021-05-24 14:48:31 +02:00
parent 4a54cf7b79
commit 633021d6e8
No known key found for this signature in database
GPG Key ID: 904C4995F9E1F800
5 changed files with 110 additions and 15 deletions

@ -1 +1 @@
Subproject commit 7774935fb3be51ea32b144261d1e5a02294f9d49
Subproject commit b8abf79957681f908ab6834aae1e6144e274efb9

View File

@ -59,7 +59,7 @@ public class BlueMapAPIImpl extends BlueMapAPI {
public BlueMapAPIImpl(Plugin plugin) {
this.plugin = plugin;
this.renderer = new RenderAPIImpl(this, plugin.getRenderManager());
this.renderer = new RenderAPIImpl(this, plugin);
worlds = new HashMap<>();
for (World world : plugin.getWorlds()) {

View File

@ -25,10 +25,13 @@
package de.bluecolored.bluemap.common.api;
import com.flowpowered.math.vector.Vector2i;
import de.bluecolored.bluemap.api.BlueMapMap;
import de.bluecolored.bluemap.common.rendermanager.MapUpdateTask;
import de.bluecolored.bluemap.common.rendermanager.WorldRegionRenderTask;
import de.bluecolored.bluemap.core.map.BmMap;
import java.util.function.Predicate;
public class BlueMapMapImpl implements BlueMapMap {
private BlueMapAPIImpl api;
@ -64,6 +67,47 @@ public Vector2i getTileOffset() {
return delegate.getHiresModelManager().getTileGrid().getOffset();
}
@Override
public void setTileFilter(Predicate<Vector2i> filter) {
delegate.setTileFilter(filter);
}
@Override
public Predicate<Vector2i> getTileFilter() {
return delegate.getTileFilter();
}
@Override
public boolean isFrozen() {
return !api.plugin.getPluginState().getMapState(delegate).isUpdateEnabled();
}
@Override
public synchronized void setFrozen(boolean frozen) {
if (isFrozen()) unfreeze();
else freeze();
}
private synchronized void unfreeze() {
api.plugin.startWatchingMap(delegate);
api.plugin.getPluginState().getMapState(delegate).setUpdateEnabled(true);
api.plugin.getRenderManager().scheduleRenderTask(new MapUpdateTask(delegate));
}
private synchronized void freeze() {
api.plugin.stopWatchingMap(delegate);
api.plugin.getPluginState().getMapState(delegate).setUpdateEnabled(false);
api.plugin.getRenderManager().removeRenderTasksIf(task -> {
if (task instanceof MapUpdateTask)
return ((MapUpdateTask) task).getMap().equals(delegate);
if (task instanceof WorldRegionRenderTask)
return ((WorldRegionRenderTask) task).getMap().equals(delegate);
return false;
});
}
public BmMap getMapType() {
return delegate;
}

View File

@ -30,20 +30,28 @@
import de.bluecolored.bluemap.api.renderer.RenderAPI;
import de.bluecolored.bluemap.common.api.BlueMapAPIImpl;
import de.bluecolored.bluemap.common.api.BlueMapMapImpl;
import de.bluecolored.bluemap.common.plugin.Plugin;
import de.bluecolored.bluemap.common.rendermanager.MapPurgeTask;
import de.bluecolored.bluemap.common.rendermanager.MapUpdateTask;
import de.bluecolored.bluemap.common.rendermanager.RenderManager;
import de.bluecolored.bluemap.common.rendermanager.WorldRegionRenderTask;
import de.bluecolored.bluemap.core.map.BmMap;
import de.bluecolored.bluemap.core.world.Grid;
import java.io.IOException;
import java.util.Collection;
import java.util.UUID;
public class RenderAPIImpl implements RenderAPI {
private BlueMapAPIImpl api;
private RenderManager renderManager;
private final BlueMapAPIImpl api;
private final Plugin plugin;
private final RenderManager renderManager;
public RenderAPIImpl(BlueMapAPIImpl api, RenderManager renderManager) {
public RenderAPIImpl(BlueMapAPIImpl api, Plugin plugin) {
this.api = api;
this.renderManager = renderManager;
this.plugin = plugin;
this.renderManager = plugin.getRenderManager();
}
@Override
@ -63,12 +71,7 @@ public void render(String mapId, Vector2i tile) {
@Override
public void render(BlueMapMap map, Vector2i tile) {
BlueMapMapImpl cmap;
if (map instanceof BlueMapMapImpl) {
cmap = (BlueMapMapImpl) map;
} else {
cmap = api.getMapForId(map.getId());
}
BlueMapMapImpl cmap = castMap(map);
Grid regionGrid = cmap.getWorld().getWorld().getRegionGrid();
Grid tileGrid = cmap.getMapType().getHiresModelManager().getTileGrid();
@ -78,6 +81,24 @@ public void render(BlueMapMap map, Vector2i tile) {
}
}
@Override
public boolean scheduleMapUpdateTask(BlueMapMap map, boolean force) {
BlueMapMapImpl cmap = castMap(map);
return renderManager.scheduleRenderTask(new MapUpdateTask(cmap.getMapType(), force));
}
@Override
public boolean scheduleMapUpdateTask(BlueMapMap map, Collection<Vector2i> regions, boolean force) {
BlueMapMapImpl cmap = castMap(map);
return renderManager.scheduleRenderTask(new MapUpdateTask(cmap.getMapType(), regions, force));
}
@Override
public boolean scheduleMapPurgeTask(BlueMapMap map) throws IOException {
BlueMapMapImpl cmap = castMap(map);
return renderManager.scheduleRenderTask(new MapPurgeTask(cmap.getMapType()));
}
@Override
public int renderQueueSize() {
return renderManager.getScheduledRenderTasks().size();
@ -95,12 +116,27 @@ public boolean isRunning() {
@Override
public void start() {
if (!isRunning()) renderManager.start(api.plugin.getCoreConfig().getRenderThreadCount());
if (!isRunning()){
renderManager.start(api.plugin.getCoreConfig().getRenderThreadCount());
}
plugin.getPluginState().setRenderThreadsEnabled(true);
}
@Override
public void pause() {
renderManager.stop();
plugin.getPluginState().setRenderThreadsEnabled(false);
}
private BlueMapMapImpl castMap(BlueMapMap map) {
BlueMapMapImpl cmap;
if (map instanceof BlueMapMapImpl) {
cmap = (BlueMapMapImpl) map;
} else {
cmap = api.getMapForId(map.getId());
}
return cmap;
}
}

View File

@ -37,6 +37,7 @@
import java.io.IOException;
import java.nio.file.Path;
import java.util.Objects;
import java.util.function.Predicate;
public class BmMap {
@ -50,6 +51,8 @@ public class BmMap {
private final HiresModelManager hiresModelManager;
private final LowresModelManager lowresModelManager;
private Predicate<Vector2i> tileFilter;
public BmMap(String id, String name, World world, Path fileRoot, ResourcePack resourcePack, MapSettings settings) throws IOException {
this.id = Objects.requireNonNull(id);
this.name = Objects.requireNonNull(name);
@ -79,9 +82,13 @@ public BmMap(String id, String name, World world, Path fileRoot, ResourcePack re
new Vector2i(settings.getLowresPointsPerHiresTile(), settings.getLowresPointsPerHiresTile()),
settings.useGzipCompression()
);
this.tileFilter = t -> true;
}
public void renderTile(Vector2i tile) {
if (!tileFilter.test(tile)) return;
HiresModel hiresModel = hiresModelManager.render(world, tile);
lowresModelManager.render(hiresModel);
}
@ -127,7 +134,15 @@ public HiresModelManager getHiresModelManager() {
public LowresModelManager getLowresModelManager() {
return lowresModelManager;
}
public Predicate<Vector2i> getTileFilter() {
return tileFilter;
}
public void setTileFilter(Predicate<Vector2i> tileFilter) {
this.tileFilter = tileFilter;
}
@Override
public int hashCode() {
return id.hashCode();