1
0
Fork 0
mirror of https://github.com/Miasmusa/Shadow.git synced 2025-04-12 04:04:23 -04:00

halal tabgui

This commit is contained in:
Saturn5Vfive 2022-03-11 18:57:51 -06:00
parent f09bb01f2f
commit 11093a866a
2 changed files with 115 additions and 180 deletions
src/main/java/net/shadow/client/feature/module/impl/render

View file

@ -41,6 +41,7 @@ import com.mojang.blaze3d.systems.RenderSystem;
public class Hud extends Module {
public static double currentTps = 0;
public static double real = 0;
static ClientFontRenderer titleFr;
final Identifier LOGO = new Texture("logo.png");
public final BooleanSetting speed = this.config.create(new BooleanSetting.Builder(true).name("Speed").description("Show your current velocity").get());
@ -198,6 +199,7 @@ public class Hud extends Module {
Renderer.R2D.renderRoundedQuad(ms, Renderer.Util.modify(ThemeManager.getMainTheme().getModule(), -1, -1, -1, 200), rootX - 5, -5, rootX + width + 5, rootY + height + i + 3 + 5, 7, 14);
Renderer.R2D.renderRoundedQuad(ms, ThemeManager.getMainTheme().getInactive(), rootX + 1, rootY + i + 3, rootX + width, rootY + height + i + 3, 5, 11);
RenderSystem.defaultBlendFunc();
real = height + i + 3 + 5;
RenderSystem.enableBlend();
RenderSystem.setShaderTexture(0, LOGO);
Renderer.R2D.renderTexture(ms,((rootX + width + 5) / 2) - (j / 2) + 15,5,j,i,0,0,j,i,j,i);

View file

@ -21,19 +21,27 @@ import org.lwjgl.glfw.GLFW;
import java.awt.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.function.BooleanSupplier;
public class TabGui extends Module {
final Timer updater = new Timer();
int scrollerIndex = 0;
double scrollerRenderY = 0;
double scrollerY = 0;
List<GuiEntry> entries = new ArrayList<>();
List<GuiEntry> root = new ArrayList<>();
double scroll = 0;
double smoothScroll = 0;
final double mheight = 12;
final double x = 5;
final HashMap<Module, Double> anims = new HashMap<>();
final HashMap<ModuleType, Double> animz = new HashMap<>();
double y = 5;
boolean expanded = false;
int selectedModule = 0;
double trackedSelectedModule = 0;
int fixedSelected = 0;
double aprog = 0;
double anim = 0;
double mwidth = 60;
int selected = 0;
double trackedSelected = 0;
public TabGui() {
super("TabGui", "Renders a small module manager top left", ModuleType.RENDER);
@ -42,32 +50,46 @@ public class TabGui extends Module {
return;
}
KeyboardEvent ke = (KeyboardEvent) event;
if (ke.getType() == 0) {
return;
int key = ke.getKeycode();
int action = ke.getType();
if (action != 1) return;
if (!expanded) {
if (key == GLFW.GLFW_KEY_DOWN) {
selected++;
} else if (key == GLFW.GLFW_KEY_UP) {
selected--;
} else if (key == GLFW.GLFW_KEY_RIGHT && aprog == 0) {
fixedSelected = selected;
expanded = true;
}
} else {
if (key == GLFW.GLFW_KEY_DOWN) {
selectedModule++;
} else if (key == GLFW.GLFW_KEY_UP) {
selectedModule--;
} else if (key == GLFW.GLFW_KEY_LEFT) {
expanded = false;
} else if (key == GLFW.GLFW_KEY_RIGHT || key == GLFW.GLFW_KEY_ENTER) {
ModuleType t = getModulesForDisplay()[fixedSelected];
List<Module> v = new ArrayList<>();
for (Module module : ModuleRegistry.getModules()) {
if (module.getModuleType() == t) v.add(module);
}
v.sort(Comparator.comparingDouble(value -> -FontRenderers.getRenderer().getStringWidth(value.getName())));
v.get(selectedModule).toggle();
}
}
switch (ke.getKeycode()) {
case GLFW.GLFW_KEY_DOWN -> scrollerIndex++;
case GLFW.GLFW_KEY_UP -> scrollerIndex--;
case GLFW.GLFW_KEY_RIGHT -> {
scrollerIndex = makeSureInBounds(scrollerIndex);
entries.get(scrollerIndex).activated();
}
case GLFW.GLFW_KEY_LEFT -> {
scrollerIndex = makeSureInBounds(scrollerIndex);
entries.get(scrollerIndex).back();
selected = clampRevert(selected, getModulesForDisplay().length);
if (expanded) {
int mcCurrentCategory = 0;
for (Module module : ModuleRegistry.getModules()) {
if (module.getModuleType() == getModulesForDisplay()[selected]) mcCurrentCategory++;
}
selectedModule = clampRevert(selectedModule, mcCurrentCategory);
}
});
}
int makeSureInBounds(int index) {
index %= entries.size();
if (index < 0) {
index = entries.size() + index;
}
return index;
}
@Override
public void tick() {
@ -75,7 +97,13 @@ public class TabGui extends Module {
@Override
public void enable() {
entries.clear();
anims.clear();
for (Module m : ModuleRegistry.getModules()) {
anims.put(m, 2D);
}
for (ModuleType t : getModulesForDisplay()) {
animz.put(t, 2D);
}
}
@Override
@ -95,168 +123,73 @@ public class TabGui extends Module {
@Override
public void onHudRender() {
double texHeight = 48/1.5d;
double innerPad = 5;
double heightOffsetLeft = 6 +texHeight+3;
Hud h = ModuleRegistry.getByClass(Hud.class);
if (h.coords.getValue() || h.fps.getValue() || h.ping.getValue() || h.tps.getValue()) heightOffsetLeft += 5+FontRenderers.getRenderer().getMarginHeight()+2;
if (ShadowMain.client.options.debugEnabled) {
double heightAccordingToMc = 9;
List<String> lt = ((IDebugHudAccessor) ((IInGameHudAccessor) ShadowMain.client.inGameHud).getDebugHud()).callGetLeftText();
heightOffsetLeft += 2 + heightAccordingToMc * (lt.size() + 3);
}
MatrixStack ms = Renderer.R3D.getEmptyMatrixStack();
ms.push();
ms.translate(innerPad, heightOffsetLeft, 0);
drawInternal(ms);
ms.pop();
}
y = Hud.real + 9;
trackedSelected = Transitions.transition(trackedSelected, selected, 5, 0.0001);
trackedSelectedModule = Transitions.transition(trackedSelectedModule, selectedModule, 5, 0.0001);
aprog = Transitions.transition(aprog, anim, 2, 0.0001);
void drawInternal(MatrixStack stack) {
double innerPadding = 2;
double scrollerWidth = 1.5;
double width = ModuleRegistry.getModules().stream().map(value -> FontRenderers.getRenderer().getStringWidth(value.getName())).max(Comparator.comparingDouble(value -> value))
.orElse(60f) + scrollerWidth * 6 + innerPadding * 2;
double cellHeight = FontRenderers.getRenderer().getMarginHeight() + 1;
double maxHeight = cellHeight * 16;
if (entries.isEmpty()) {
for (ModuleType value : ModuleType.values()) {
entries.add(new GuiEntry(() -> {
entries.clear();
for (Module module : ModuleRegistry.getModules()) {
if (module.getModuleType() == value) {
GuiEntry ge = new GuiEntry(() -> module.setEnabled(!module.isEnabled()), () -> entries = new ArrayList<>(root), module::isEnabled, module.getName(), cellHeight, width - scrollerWidth * 6);
entries.add(ge);
}
}
}, () -> {
}, () -> false, value.getName(), cellHeight, width - scrollerWidth * 6));
}
root = new ArrayList<>(entries);
}
double contentHeight = entries.size() * cellHeight;
double viewerHeight = Math.min(maxHeight, contentHeight) + innerPadding * 2;
Renderer.R2D.renderRoundedQuad(stack, new Color(20, 20, 20), 0, 0, width, viewerHeight, 3, 20);
scrollerIndex = makeSureInBounds(scrollerIndex);
scrollerY = scrollerIndex * cellHeight;
double sc = (double) scrollerIndex / (entries.size() - 1);
scroll = sc * (contentHeight + innerPadding * 2d - viewerHeight);
stack.push();
ClipStack.globalInstance.addWindow(stack, new Rectangle(scrollerWidth * 3, 0, width - innerPadding, viewerHeight - innerPadding));
//Renderer.R2D.beginScissor(stack, scrollerWidth * 3, 0, width - innerPadding, viewerHeight - innerPadding);
stack.translate(0, -smoothScroll, 0);
double lastEnabledStackHeight = 0;
double lastEnabledStackY = 0;
double yOff = innerPadding;
List<Runnable> renderCalls = new ArrayList<>();
for (GuiEntry ge : entries) {
if (ge.isEnabled()) {
if (lastEnabledStackHeight == 0) {
lastEnabledStackY = yOff;
}
lastEnabledStackHeight += cellHeight;
Color bg = new Color(52, 52, 52, 200);
Color active = new Color(95, 95, 95, 200);
mwidth = 13 + FontRenderers.getRenderer().getStringWidth(getModulesForDisplay()[0].getName());
MatrixStack stack = new MatrixStack();
double yOffset = 0;
double selectedOffset = mheight * trackedSelected;
int index = 0;
Renderer.R2D.renderRoundedQuad(stack, new Color(200, 200, 200, 255), x, y + selectedOffset, x + mwidth, y + selectedOffset + mheight, 5, 10);
ModuleType t = getModulesForDisplay()[selected];
Renderer.R2D.renderRoundedQuad(stack, bg, x, y + yOffset, x + mwidth, y + yOffset + (mheight * getModulesForDisplay().length), 5, 10);
for (ModuleType value : getModulesForDisplay()) {
int c = 0xFFFFFF;
if (t == value) {
animz.put(value, Transitions.transition(animz.get(value), 10, 25D));
} else {
if (lastEnabledStackHeight != 0) {
double finalLastEnabledStackY = lastEnabledStackY;
double finalLastEnabledStackHeight = lastEnabledStackHeight;
renderCalls.add(() -> Renderer.R2D.renderRoundedQuad(stack, new Color(40, 40, 40), scrollerWidth * 3, finalLastEnabledStackY, width - scrollerWidth * 3, finalLastEnabledStackY + finalLastEnabledStackHeight, 3, 20));
}
lastEnabledStackHeight = 0;
lastEnabledStackY = 0;
animz.put(value, Transitions.transition(animz.get(value), 2, 25D));
}
yOff += cellHeight;
FontRenderers.getRenderer().drawString(stack, value.getName(), x + animz.get(value), y + yOffset + (mheight - 9) / 2f + 0.5f, c);
yOffset += mheight;
index++;
}
double finalLastEnabledStackY = lastEnabledStackY;
double finalLastEnabledStackHeight = lastEnabledStackHeight;
if (lastEnabledStackY != 0) {
renderCalls.add(() -> Renderer.R2D.renderRoundedQuad(stack, new Color(40, 40, 40), scrollerWidth * 3, finalLastEnabledStackY, width - scrollerWidth * 3, finalLastEnabledStackY + finalLastEnabledStackHeight, 3, 20));
if (expanded) {
anim = 1;
} else anim = 0;
List<Module> a = new ArrayList<>();
for (Module module : ModuleRegistry.getModules()) {
if (module.getModuleType() == t) a.add(module);
}
for (Runnable renderCall : renderCalls) {
renderCall.run();
}
stack.push();
stack.translate(scrollerWidth * 3, innerPadding, 0);
for (int i = 0; i < entries.size(); i++) {
GuiEntry ge = entries.get(i);
boolean selected = i == scrollerIndex;
a.sort(Comparator.comparingDouble(value -> -FontRenderers.getRenderer().getStringWidth(value.getName())));
double rx = x + mwidth + 5;
double ry = y;
int yoff = 0;
double w = FontRenderers.getRenderer().getStringWidth(a.get(0).getName()) + 4;
if (expanded) {
double selectedOffset1 = mheight * trackedSelectedModule;
Renderer.R2D.renderRoundedQuad(stack, new Color(200, 200, 200, 255), rx, ry + selectedOffset1, rx + w + 9, ry + selectedOffset1 + mheight, 4, 10);
Renderer.R2D.renderRoundedQuad(stack, bg, rx, ry + yoff, rx + w + 9, ry + yoff + (mheight * a.size()), 4, 10);
for (Module module : a) {
if (module.isEnabled()) {
Renderer.R2D.renderRoundedQuad(stack, active, rx, ry + yoff, rx + w + 9, ry + yoff + mheight, 4, 10);
}
if (a.get(selectedModule) == module) {
anims.put(module, Transitions.transition(anims.get(module), 11, 15D));
} else {
anims.put(module, Transitions.transition(anims.get(module), 2, 15D));
}
FontRenderers.getRenderer().drawString(stack, module.getName(), rx + anims.get(module), ry + yoff + (mheight - 9) / 2f + 0.5f, 0xFFFFFF);
ge.animate(selected ? 1 : 0);
ge.render(stack);
stack.translate(0, cellHeight, 0);
}
stack.pop();
ClipStack.globalInstance.popWindow();
//Renderer.R2D.endScissor();
Renderer.R2D.renderRoundedQuad(stack, Color.WHITE, 2, innerPadding + scrollerRenderY + .5, 2 + scrollerWidth, innerPadding + scrollerRenderY + cellHeight - .5, scrollerWidth / 2d, 20);
stack.pop();
}
@Override
public void onFastTick() {
scrollerRenderY = Transitions.transition(scrollerRenderY, scrollerY, 7, 0.00001);
smoothScroll = Transitions.transition(smoothScroll, scroll, 7, 0.00001);
if (updater.hasExpired(3000)) {
updater.reset();
}
for (GuiEntry entry : entries) {
entry.fastTick();
yoff += mheight;
}
}
}
static class GuiEntry {
final Runnable r;
final Runnable back;
final BooleanSupplier bs;
final String name;
final double h;
final double w;
double animation = 0;
double animationGoal = 0;
public GuiEntry(Runnable r, Runnable back, BooleanSupplier isEnabled, String name, double height, double width) {
this.r = r;
this.bs = isEnabled;
this.back = back;
this.name = name;
this.h = height;
this.w = width;
}
ModuleType[] getModulesForDisplay() {
return Arrays.stream(ModuleType.values()).sorted(Comparator.comparingDouble(value -> -FontRenderers.getRenderer().getStringWidth(value.getName()))).toArray(ModuleType[]::new);
}
boolean isEnabled() {
return bs.getAsBoolean();
}
void fastTick() {
this.animation = Transitions.transition(animation, animationGoal, 7, 0.00001);
}
void animate(double d) {
this.animationGoal = d;
}
void render(MatrixStack stack) {
// Renderer.R2D.renderQuad(stack,Color.BLUE,0,0,w,h);
FontRenderers.getRenderer().drawString(stack, name, MathHelper.lerp(animation, 2, w / 2d - FontRenderers.getRenderer().getStringWidth(name) / 2d), (h - FontRenderers.getRenderer()
.getMarginHeight()) / 2d, 0xFFFFFF);
}
void activated() {
r.run();
}
void back() {
back.run();
}
int clampRevert(int n, int max) {
if (n < 0) n = max - 1;
else if (n >= max) n = 0;
return n;
}
}