Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions src/main/java/gregtech/api/gui/Widget.java
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ protected void onSizeUpdate() {
}

public boolean isMouseOverElement(int mouseX, int mouseY, boolean correctPositionOnMouseWheelMoveEvent) {
mouseX = correctPositionOnMouseWheelMoveEvent ? mouseX + this.gui.getGuiLeft(): mouseX;
mouseX = correctPositionOnMouseWheelMoveEvent ? mouseX + this.gui.getGuiLeft() : mouseX;
return isMouseOverElement(mouseX, mouseY);
}

Expand Down Expand Up @@ -474,7 +474,7 @@ public static void drawSector(float x, float y, float r, int color, int segments
}
tessellator.draw();
GlStateManager.enableTexture2D();
GlStateManager.color(1,1,1,1);
GlStateManager.color(1, 1, 1, 1);
}

public static void drawTorus(float x, float y, float outer, float inner, int color, int segments, int from, int to) {
Expand All @@ -486,13 +486,13 @@ public static void drawTorus(float x, float y, float outer, float inner, int col
setColor(color);
bufferbuilder.begin(GL11.GL_QUAD_STRIP, DefaultVertexFormats.POSITION);
for (int i = from; i <= to; i++) {
float angle = ( i / (float)segments ) * 3.14159f * 2.0f;
bufferbuilder.pos( x + inner * Math.cos(-angle), y + inner * Math.sin(-angle), 0).endVertex();
bufferbuilder.pos( x + outer * Math.cos(-angle), y + outer * Math.sin(-angle), 0).endVertex();
float angle = (i / (float) segments) * 3.14159f * 2.0f;
bufferbuilder.pos(x + inner * Math.cos(-angle), y + inner * Math.sin(-angle), 0).endVertex();
bufferbuilder.pos(x + outer * Math.cos(-angle), y + outer * Math.sin(-angle), 0).endVertex();
}
tessellator.draw();
GlStateManager.enableTexture2D();
GlStateManager.color(1,1,1,1);
GlStateManager.color(1, 1, 1, 1);
}

@SideOnly(Side.CLIENT)
Expand Down Expand Up @@ -559,7 +559,7 @@ public static List<Vec2f> genBezierPoints(Vec2f from, Vec2f to, boolean horizont
c1 = new Vec2f(from.x, (from.y + to.y) / 2);
c2 = new Vec2f(to.x, (from.y + to.y) / 2);
}
Vec2f[] controlPoint = new Vec2f[]{from,c1,c2,to};
Vec2f[] controlPoint = new Vec2f[]{from, c1, c2, to};
int n = controlPoint.length - 1;
int i, r;
List<Vec2f> bezierPoints = new ArrayList<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ public void drawInBackground(int mouseX, int mouseY, IRenderContext context) {
int height = fontRenderer.FONT_HEIGHT * texts.size();
for (int i = 0; i < texts.size(); i++) {
String resultText = texts.get(i);
int width = fontRenderer.getStringWidth(resultText);;
int width = fontRenderer.getStringWidth(resultText);
float x = pos.x - (isCentered ? width / 2f : 0);
float y = pos.y - (isCentered ? height / 2f : 0) + i * fontRenderer.FONT_HEIGHT;
fontRenderer.drawString(resultText, x, y, color, false);
Expand Down
14 changes: 14 additions & 0 deletions src/main/java/gregtech/api/terminal/TerminalRegistry.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@
import gregtech.common.ConfigHolder;
import gregtech.common.items.MetaItems;
import gregtech.common.terminal.app.ThemeSettingApp;
import gregtech.common.terminal.app.game.maze.MazeApp;
import gregtech.common.terminal.app.game.minesweeper.MinesweeperApp;
import gregtech.common.terminal.app.game.pong.PongApp;
import gregtech.common.terminal.app.appstore.AppStoreApp;
import gregtech.common.terminal.app.multiblockhelper.MultiBlockPreviewARApp;
import gregtech.common.terminal.app.batterymanager.BatteryManagerApp;
Expand Down Expand Up @@ -66,6 +69,17 @@ public static void init() {
AppRegistryBuilder.create(new TutorialGuideApp()).defaultApp().build();
AppRegistryBuilder.create(new GuideEditorApp()).defaultApp().build();
AppRegistryBuilder.create(new ThemeSettingApp()).defaultApp().build();

AppRegistryBuilder.create(new PongApp())
.battery(GTValues.LV, 75)
.build();
AppRegistryBuilder.create(new MazeApp())
.battery(GTValues.LV, 150)
.build();
AppRegistryBuilder.create(new MinesweeperApp())
.battery(GTValues.LV, 150)
.build();

AppRegistryBuilder.create(new OreProspectorApp())
.battery(GTValues.MV, 1000)
.upgrade(MetaItems.COIN_DOGE.getStackForm(10))
Expand Down
83 changes: 83 additions & 0 deletions src/main/java/gregtech/api/util/TwoDimensionalRayTracer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package gregtech.api.util;

import org.lwjgl.util.vector.Vector2f;

import java.awt.*;
import java.util.List;

import static net.minecraft.util.math.MathHelper.clamp;

// Huge thanks to https://noonat.github.io/intersect!
public class TwoDimensionalRayTracer {
public static class TwoDimensionalRayTraceResult {
public Vector2f pos = new Vector2f();
public Vector2f delta = new Vector2f();
public Vector2f normal = new Vector2f();
public float time = -1;
public Rectangle collidedWith = new Rectangle();
}

/**
* Detects the intersection between a segment and a box, if there is any.
*
* @param pos The original position of the point.
* @param delta The proposed new position of the point.
* @param boxSize The half-width and half-height of the box
* @return
*/
public static TwoDimensionalRayTraceResult intersectBoxSegment(Vector2f pos, Vector2f delta, Vector2f boxCenter, Vector2f boxSize) {
float scaleX = (float) (1.0 / delta.x);
float scaleY = (float) (1.0 / delta.y);
float signX = Math.signum(scaleX);
float signY = Math.signum(scaleY);
float nearTimeX = (boxCenter.x - signX * (boxSize.x) - pos.x) * scaleX;
float nearTimeY = (boxCenter.y - signY * (boxSize.y) - pos.y) * scaleY;
float farTimeX = (boxCenter.x + signX * (boxSize.x) - pos.x) * scaleX;
float farTimeY = (boxCenter.y + signY * (boxSize.y) - pos.y) * scaleY;

if (nearTimeX > farTimeY || nearTimeY > farTimeX) {
return null;
}

double nearTime = Math.max(nearTimeX, nearTimeY);
double farTime = Math.min(farTimeX, farTimeY);

if (nearTime >= 1 || farTime <= 0) {
return null;
}

TwoDimensionalRayTraceResult result = new TwoDimensionalRayTraceResult();

result.time = (float) clamp(nearTime, 0, 1);
if (nearTimeX > nearTimeY) {
result.normal.x = -signX;
result.normal.y = 0;
} else {
result.normal.x = 0;
result.normal.y = -signY;
}
result.delta.x = (float) ((1.0 - result.time) * -delta.x);
result.delta.y = (float) ((1.0 - result.time) * -delta.y);
result.pos.x = pos.x + delta.x * result.time;
result.pos.y = pos.y + delta.y * result.time;
return result;
}

public static TwoDimensionalRayTraceResult nearestBoxSegmentCollision(Vector2f pos, Vector2f delta, List<Rectangle> boxes, Vector2f padding) {
TwoDimensionalRayTraceResult result = new TwoDimensionalRayTraceResult();
result.time = 1;
result.pos.x = pos.x + delta.x;
result.pos.y = pos.y + delta.y;
for (Rectangle box : boxes) {
TwoDimensionalRayTraceResult sweep = intersectBoxSegment(pos, delta,
new Vector2f((float) box.getCenterX(), (float) box.getCenterY()),
new Vector2f((float) box.getWidth() / 2 + padding.x, (float) box.getHeight() / 2 + padding.y));
if (sweep != null && sweep.time < result.time) {
result = sweep;
result.collidedWith = box;
}
}
return result;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package gregtech.api.util.interpolate;

import gregtech.api.util.function.TriConsumer;
import net.minecraft.util.ITickable;

public class RGBInterpolator implements ITickable {
private final int speed;
private float r = 255;
private float g = 0;
private float b = 0;
private final TriConsumer<Number, Number, Number> interpolate;
private final TriConsumer<Number, Number, Number> callback;
private boolean isOn = false;

public RGBInterpolator(int speed, TriConsumer<Number, Number, Number> interpolate, TriConsumer<Number, Number, Number> callback) {
this.speed = speed;
this.interpolate = interpolate;
this.callback = callback;
}

@Override
public void update() {
if (isOn) {
if (r == 255 && g < 255) {
b -= Math.min(speed, b);
g += Math.min(speed, 255 - g);
} else if (g == 255 && b < 255) {
r -= Math.min(speed, r);
b += Math.min(speed, 255 - b);
} else if (b == 255 && r < 255) {
g -= Math.min(speed, g);
r += Math.min(speed, 255 - r);
}
interpolate.accept(r / 255, g / 255, b / 255);
}
}

public void stop() {
callback.accept(r, g, b);
isOn = false;
}

public void start() {
isOn = true;
}

public boolean isActivated() {
return isOn;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -62,23 +62,23 @@ public ModularUI createMTEUI(PlayerInventoryHolder holder, EntityPlayer entityPl
ModularUI.Builder builder = ModularUI.builder(GuiTextures.BACKGROUND, 170, 238);

builder.image(18, 8, 130, 14, GuiTextures.CLIPBOARD_TEXT_BOX);
builder.widget(new SimpleTextWidget(20, 10, "", 0xFFFFFF, () -> getTitle(holder)).setCenter(false));
builder.widget(new SimpleTextWidget(20, 10, "", 0xFFFFFF, () -> getTitle(holder), true).setCenter(false));


for (int i = 0; i < 8; i++) {
int finalI = i;
builder.widget(new ImageCycleButtonWidget(6, 37 + 20 * i, 15, 15, GuiTextures.CLIPBOARD_BUTTON, 4,
() -> getButtonState(holder, finalI), (x) -> setButton(holder, finalI, x)));
builder.image(22, 38 + 20 * i, 140, 12, GuiTextures.CLIPBOARD_TEXT_BOX);
builder.widget(new SimpleTextWidget(24, 40 + 20 * i, "", 0xFFFFFF, () -> getString(holder, finalI)).setCenter(false));
builder.widget(new SimpleTextWidget(24, 40 + 20 * i, "", 0xFFFFFF, () -> getString(holder, finalI), true).setCenter(false));
}

builder.widget(new ClickButtonWidget(30, 200, 16, 16, "", (x) -> incrPageNum(holder, -1))
.setButtonTexture(GuiTextures.BUTTON_LEFT).setShouldClientCallback(true));
builder.widget(new ClickButtonWidget(124, 200, 16, 16, "", (x) -> incrPageNum(holder, 1))
.setButtonTexture(GuiTextures.BUTTON_RIGHT).setShouldClientCallback(true));
builder.widget(new SimpleTextWidget(85, 208, "", 0xFFFFFF,
() -> (getPageNum(holder) + 1) + " / " + MAX_PAGES));
() -> (getPageNum(holder) + 1) + " / " + MAX_PAGES, true));

return builder.build(holder, entityPlayer);
}
Expand Down
Loading