From d33a02f6cd3766b545e88f6ffa4646a2eded9cdc Mon Sep 17 00:00:00 2001 From: Daniel Mills Date: Tue, 13 Jul 2021 18:14:27 -0400 Subject: [PATCH] Revert "Flush " This reverts commit 8f6c511598ae4f91475ffc8dceb5363e34687b00. --- .../volmit/iris/manager/gui/IrisVision.java | 250 ++++++++---------- 1 file changed, 103 insertions(+), 147 deletions(-) diff --git a/src/main/java/com/volmit/iris/manager/gui/IrisVision.java b/src/main/java/com/volmit/iris/manager/gui/IrisVision.java index 87759bfe4..7c409bf50 100644 --- a/src/main/java/com/volmit/iris/manager/gui/IrisVision.java +++ b/src/main/java/com/volmit/iris/manager/gui/IrisVision.java @@ -3,17 +3,14 @@ package com.volmit.iris.manager.gui; import com.volmit.iris.Iris; import com.volmit.iris.scaffold.engine.IrisAccess; import com.volmit.iris.util.*; -import io.lumine.xikage.mythicmobs.utils.cooldown.Cooldown; -import org.bukkit.World; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerMoveEvent; import javax.imageio.ImageIO; import javax.swing.*; import java.awt.*; -import java.awt.event.*; +import java.awt.event.MouseEvent; +import java.awt.event.MouseMotionListener; +import java.awt.event.MouseWheelEvent; +import java.awt.event.MouseWheelListener; import java.awt.image.BufferedImage; import java.awt.image.ImageObserver; import java.io.File; @@ -22,13 +19,9 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ThreadFactory; -public class IrisVision extends JPanel implements MouseWheelListener, Listener +public class IrisVision extends JPanel implements MouseWheelListener { private static final long serialVersionUID = 2094606939770332040L; - private static final int[] qualitySteps = new int[]{ - 25, 7, 1 - }; - private int tc = 8; private IrisRenderer renderer; private int posX = 0; private int posZ = 0; @@ -36,7 +29,6 @@ public class IrisVision extends JPanel implements MouseWheelListener, Listener private double mscale = 1D; private int w = 0; private int h = 0; - private World world; private double lx = Double.MAX_VALUE; private double lz = Double.MAX_VALUE; private double ox = 0; @@ -47,21 +39,46 @@ public class IrisVision extends JPanel implements MouseWheelListener, Listener private RollingSequence rs = new RollingSequence(512); private O m = new O<>(); private int tid = 0; - private KSet cooldown = new KSet<>(); - private KMap positions = new KMap<>(); + private KMap positions = new KMap<>(); + private KMap fastpositions = new KMap<>(); private KSet working = new KSet<>(); - private final ExecutorService e = Executors.newFixedThreadPool(tc, r -> { - tid++; - Thread t = new Thread(r); - t.setName("Iris HD Renderer " + tid); - t.setPriority(Thread.MIN_PRIORITY); - t.setUncaughtExceptionHandler((et, e) -> + private KSet workingfast = new KSet<>(); + private final ExecutorService e = Executors.newFixedThreadPool(8, new ThreadFactory() + { + @Override + public Thread newThread(Runnable r) { - Iris.info("Exception encountered in " + et.getName()); - e.printStackTrace(); - }); + tid++; + Thread t = new Thread(r); + t.setName("Iris HD Renderer " + tid); + t.setPriority(Thread.MIN_PRIORITY); + t.setUncaughtExceptionHandler((et, e) -> + { + Iris.info("Exception encountered in " + et.getName()); + e.printStackTrace(); + }); - return t; + return t; + } + }); + + private final ExecutorService eh = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors(), new ThreadFactory() + { + @Override + public Thread newThread(Runnable r) + { + tid++; + Thread t = new Thread(r); + t.setName("Iris Renderer " + tid); + t.setPriority(Thread.NORM_PRIORITY); + t.setUncaughtExceptionHandler((et, e) -> + { + Iris.info("Exception encountered in " + et.getName()); + e.printStackTrace(); + }); + + return t; + } }); public IrisVision() @@ -69,33 +86,7 @@ public class IrisVision extends JPanel implements MouseWheelListener, Listener m.set(8); renderer = new IrisRenderer(null); rs.put(1); - addMouseListener(new MouseListener() { - @Override - public void mouseClicked(MouseEvent e) { - renderer.set(getWorldX(lx), getWorldZ(lz)); - } - - @Override - public void mousePressed(MouseEvent e) { - - } - - @Override - public void mouseReleased(MouseEvent e) { - - } - - @Override - public void mouseEntered(MouseEvent e) { - - } - - @Override - public void mouseExited(MouseEvent e) { - - } - }); - addMouseWheelListener(this); + addMouseWheelListener((MouseWheelListener) this); addMouseMotionListener(new MouseMotionListener() { @Override @@ -118,83 +109,71 @@ public class IrisVision extends JPanel implements MouseWheelListener, Listener }); } - private double getWorldX(double screenX) - { - return (screenX + oxp) * mscale; - } - - private double getWorldZ(double screenZ) - { - return (screenZ + ozp) * mscale; - } - - private double getScreenX(double x) - { - return (x / mscale) - oxp; - } - - private double getScreenZ(double z) - { - return (z / mscale) - ozp; - } - - private int getTileQuality(TileRender r, int div) - { - if(r == null) - { - return div / qualitySteps[0]; - } - - for(int i : qualitySteps) - { - if(r.getQuality() < div / i) - { - return div / i; - } - } - - return r.getQuality(); - } - public BufferedImage getTile(KSet fg, int div, int x, int z, O m) { BlockPosition key = new BlockPosition((int) mscale, Math.floorDiv(x, div), Math.floorDiv(z, div)); fg.add(key); - TileRender render = positions.get(key); - if(render != null && getTileQuality(render, div) <= render.getQuality()) + if(positions.containsKey(key)) { - return render.getImage(); + return positions.get(key); } - if(!cooldown.contains(key) && !working.contains(key) && working.size() < tc) + if(fastpositions.containsKey(key)) { - working.add(key); + if(!working.contains(key) && working.size() < 9) + { + m.set(m.get() - 1); + + if(m.get() >= 0) + { + working.add(key); + double mk = mscale; + double mkd = scale; + e.submit(() -> + { + PrecisionStopwatch ps = PrecisionStopwatch.start(); + BufferedImage b = renderer.render(x * mscale, z * mscale, div * mscale, div); + rs.put(ps.getMilliseconds()); + working.remove(key); + + if(mk == mscale && mkd == scale) + { + positions.put(key, b); + } + }); + } + } + + return fastpositions.get(key); + } + + if(workingfast.contains(key)) + { + return null; + } + + m.set(m.get() - 1); + + if(m.get() >= 0) + { + workingfast.add(key); double mk = mscale; double mkd = scale; - - e.submit(() -> + eh.submit(() -> { PrecisionStopwatch ps = PrecisionStopwatch.start(); - int q = getTileQuality(render, div); - BufferedImage b = renderer.render(x * mscale, z * mscale, div * mscale, q); + BufferedImage b = renderer.render(x * mscale, z * mscale, div * mscale, div / 12); rs.put(ps.getMilliseconds()); - working.remove(key); + workingfast.remove(key); if(mk == mscale && mkd == scale) { - TileRender r = render != null ? render : TileRender.builder() - .image(b).quality(q) - .build(); - r.setImage(b); - r.setQuality(q); - positions.put(key, r); - cooldown.add(key); + fastpositions.put(key, b); } }); } - - return render != null ? render.getImage() : null; + return null; } @Override @@ -225,7 +204,7 @@ public class IrisVision extends JPanel implements MouseWheelListener, Listener w = getWidth(); h = getHeight(); double vscale = scale; - scale = w / 16D; + scale = w / 32D; if(scale != vscale) { @@ -239,46 +218,35 @@ public class IrisVision extends JPanel implements MouseWheelListener, Listener posX = (int) oxp; posZ = (int) ozp; m.set(3); - boolean hasNull = false; for(int r = 0; r < Math.max(w, h); r += iscale) { - for(int i = -iscale*4; i < w + (iscale*4); i += iscale) + for(int i = -iscale; i < w + iscale; i += iscale) { - for(int j = -iscale*4; j < h + (iscale*4); j += iscale) + for(int j = -iscale; j < h + iscale; j += iscale) { int a = i - (w / 2); int b = j - (h / 2); if(a * a + b * b <= r * r) { - BufferedImage t = getTile(gg, iscale, Math - .floorDiv((posX / iscale) + i, iscale) * iscale, Math - .floorDiv((posZ / iscale) + j, iscale) * iscale, m); + BufferedImage t = getTile(gg, iscale, Math.floorDiv((posX / iscale) + i, iscale) * iscale, Math.floorDiv((posZ / iscale) + j, iscale) * iscale, m); if(t != null) { - g.drawImage(t, - i - ((posX / iscale) % (iscale)), - j - ((posZ / iscale) % (iscale)), - iscale, - iscale, - (img, infoflags, x, y, width, height) -> true); - } - - else - { - hasNull = true; + g.drawImage(t, i - ((posX / iscale) % (iscale)), j - ((posZ / iscale) % (iscale)), (int) (iscale), (int) (iscale), new ImageObserver() + { + @Override + public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) + { + return true; + } + }); } } } } } - if(!hasNull) - { - cooldown.clear(); - } - p.end(); for(BlockPosition i : positions.k()) @@ -289,17 +257,6 @@ public class IrisVision extends JPanel implements MouseWheelListener, Listener } } - g.setColor(Color.red); - g.drawRect((int)lx, (int)lz, 3,3); - - for(Player i : world.getPlayers()) - { - g.drawRect((int)getScreenX(i.getLocation().getX()), (int)getScreenZ(i.getLocation().getZ()), 3,3); - } - - g.drawString("X: " + posX, 20, 20); - g.drawString("Z: " + posZ, 20, 25 + g.getFont().getSize()); - if(!isVisible()) { return; @@ -322,12 +279,11 @@ public class IrisVision extends JPanel implements MouseWheelListener, Listener }); } - private static void createAndShowGUI(Renderer r, World world, int s) + private static void createAndShowGUI(Renderer r, int s) { JFrame frame = new JFrame("Vision"); IrisVision nv = new IrisVision(); nv.renderer = new IrisRenderer(r); - nv.world = world; frame.add(nv); frame.setSize(1440, 820); frame.setVisible(true); @@ -350,7 +306,7 @@ public class IrisVision extends JPanel implements MouseWheelListener, Listener public static void launch(IrisAccess g, int i) { J.a(() -> { - createAndShowGUI((x, z) -> g.getEngineAccess(i).draw(x, z), g.getTarget().getWorld(), i); + createAndShowGUI((x, z) -> g.getEngineAccess(i).draw(x, z), i); }); } @@ -364,7 +320,7 @@ public class IrisVision extends JPanel implements MouseWheelListener, Listener Iris.info("Blocks/Pixel: " + (mscale) + ", Blocks Wide: " + (w * mscale)); positions.clear(); - cooldown.clear(); + fastpositions.clear(); mscale = mscale + ((0.044 * mscale) * notches); mscale = mscale < 0.00001 ? 0.00001 : mscale; }