106 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			106 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package net.minecraft.client.gui.components.debugchart;
 | |
| 
 | |
| import net.fabricmc.api.EnvType;
 | |
| import net.fabricmc.api.Environment;
 | |
| import net.minecraft.client.gui.Font;
 | |
| import net.minecraft.client.gui.GuiGraphics;
 | |
| import net.minecraft.util.ARGB;
 | |
| import net.minecraft.util.Mth;
 | |
| import net.minecraft.util.debugchart.SampleStorage;
 | |
| 
 | |
| @Environment(EnvType.CLIENT)
 | |
| public abstract class AbstractDebugChart {
 | |
| 	protected static final int COLOR_GREY = -2039584;
 | |
| 	protected static final int CHART_HEIGHT = 60;
 | |
| 	protected static final int LINE_WIDTH = 1;
 | |
| 	protected final Font font;
 | |
| 	protected final SampleStorage sampleStorage;
 | |
| 
 | |
| 	protected AbstractDebugChart(Font font, SampleStorage sampleStorage) {
 | |
| 		this.font = font;
 | |
| 		this.sampleStorage = sampleStorage;
 | |
| 	}
 | |
| 
 | |
| 	public int getWidth(int maxWidth) {
 | |
| 		return Math.min(this.sampleStorage.capacity() + 2, maxWidth);
 | |
| 	}
 | |
| 
 | |
| 	public int getFullHeight() {
 | |
| 		return 60 + 9;
 | |
| 	}
 | |
| 
 | |
| 	public void drawChart(GuiGraphics guiGraphics, int x, int width) {
 | |
| 		int i = guiGraphics.guiHeight();
 | |
| 		guiGraphics.fill(x, i - 60, x + width, i, -1873784752);
 | |
| 		long l = 0L;
 | |
| 		long m = 2147483647L;
 | |
| 		long n = -2147483648L;
 | |
| 		int j = Math.max(0, this.sampleStorage.capacity() - (width - 2));
 | |
| 		int k = this.sampleStorage.size() - j;
 | |
| 
 | |
| 		for (int o = 0; o < k; o++) {
 | |
| 			int p = x + o + 1;
 | |
| 			int q = j + o;
 | |
| 			long r = this.getValueForAggregation(q);
 | |
| 			m = Math.min(m, r);
 | |
| 			n = Math.max(n, r);
 | |
| 			l += r;
 | |
| 			this.drawDimensions(guiGraphics, i, p, q);
 | |
| 		}
 | |
| 
 | |
| 		guiGraphics.hLine(x, x + width - 1, i - 60, -1);
 | |
| 		guiGraphics.hLine(x, x + width - 1, i - 1, -1);
 | |
| 		guiGraphics.vLine(x, i - 60, i, -1);
 | |
| 		guiGraphics.vLine(x + width - 1, i - 60, i, -1);
 | |
| 		if (k > 0) {
 | |
| 			String string = this.toDisplayString(m) + " min";
 | |
| 			String string2 = this.toDisplayString((double)l / k) + " avg";
 | |
| 			String string3 = this.toDisplayString(n) + " max";
 | |
| 			guiGraphics.drawString(this.font, string, x + 2, i - 60 - 9, -2039584);
 | |
| 			guiGraphics.drawCenteredString(this.font, string2, x + width / 2, i - 60 - 9, -2039584);
 | |
| 			guiGraphics.drawString(this.font, string3, x + width - this.font.width(string3) - 2, i - 60 - 9, -2039584);
 | |
| 		}
 | |
| 
 | |
| 		this.renderAdditionalLinesAndLabels(guiGraphics, x, width, i);
 | |
| 	}
 | |
| 
 | |
| 	protected void drawDimensions(GuiGraphics guiGraphics, int height, int x, int index) {
 | |
| 		this.drawMainDimension(guiGraphics, height, x, index);
 | |
| 		this.drawAdditionalDimensions(guiGraphics, height, x, index);
 | |
| 	}
 | |
| 
 | |
| 	protected void drawMainDimension(GuiGraphics guiGraphics, int height, int x, int index) {
 | |
| 		long l = this.sampleStorage.get(index);
 | |
| 		int i = this.getSampleHeight(l);
 | |
| 		int j = this.getSampleColor(l);
 | |
| 		guiGraphics.fill(x, height - i, x + 1, height, j);
 | |
| 	}
 | |
| 
 | |
| 	protected void drawAdditionalDimensions(GuiGraphics guiGraphics, int height, int x, int index) {
 | |
| 	}
 | |
| 
 | |
| 	protected long getValueForAggregation(int index) {
 | |
| 		return this.sampleStorage.get(index);
 | |
| 	}
 | |
| 
 | |
| 	protected void renderAdditionalLinesAndLabels(GuiGraphics guiGraphics, int x, int width, int height) {
 | |
| 	}
 | |
| 
 | |
| 	protected void drawStringWithShade(GuiGraphics guiGraphics, String text, int x, int y) {
 | |
| 		guiGraphics.fill(x, y, x + this.font.width(text) + 1, y + 9, -1873784752);
 | |
| 		guiGraphics.drawString(this.font, text, x + 1, y + 1, -2039584, false);
 | |
| 	}
 | |
| 
 | |
| 	protected abstract String toDisplayString(double value);
 | |
| 
 | |
| 	protected abstract int getSampleHeight(double value);
 | |
| 
 | |
| 	protected abstract int getSampleColor(long value);
 | |
| 
 | |
| 	protected int getSampleColor(double value, double minPosition, int minColor, double midPosition, int midColor, double maxPosition, int guiGraphics) {
 | |
| 		value = Mth.clamp(value, minPosition, maxPosition);
 | |
| 		return value < midPosition
 | |
| 			? ARGB.lerp((float)((value - minPosition) / (midPosition - minPosition)), minColor, midColor)
 | |
| 			: ARGB.lerp((float)((value - midPosition) / (maxPosition - midPosition)), midColor, guiGraphics);
 | |
| 	}
 | |
| }
 |