use of buildcraft.lib.gui.elem.GuiElementDrawable in project BuildCraft by BuildCraft.
the class GuiEmzuliPipe_BC8 method addButton.
private void addButton(SlotIndex index, int x, int y) {
Supplier<EnumDyeColor> getter = () -> container.behaviour.slotColours.get(index);
Consumer<EnumDyeColor> setter = c -> container.paintWidgets.get(index).setColour(c);
IGuiPosition elem = mainGui.rootElement.offset(x, y);
GuiButtonDrawable button = new GuiButtonDrawable(mainGui, index.name(), elem, PAINT_BUTTON_BUILDER);
button.registerListener((b, key) -> {
final EnumDyeColor old = getter.get();
EnumDyeColor nColour;
switch(key) {
case 0:
{
nColour = ColourUtil.getNextOrNull(old);
break;
}
case 1:
{
nColour = ColourUtil.getPrevOrNull(old);
break;
}
case 2:
{
nColour = null;
break;
}
default:
{
return;
}
}
setter.accept(nColour);
});
mainGui.shownElements.add(button);
// Button paintbrush
IGuiArea area = new GuiRectangle(20, 20).offset(elem);
ISimpleDrawable paintIcon = (px, py) -> {
EnumDyeColor colour = getter.get();
if (colour == null) {
ICON_NO_PAINT.drawAt(px + 2, py + 2);
} else {
ISprite sprite = BCTransportSprites.ACTION_PIPE_COLOUR[colour.ordinal()];
GuiIcon.drawAt(sprite, px + 2, py + 2, 16);
}
};
mainGui.shownElements.add(new GuiElementDrawable(mainGui, area, paintIcon, false));
ITooltipElement tooltips = list -> {
EnumDyeColor colour = getter.get();
String line;
if (colour == null) {
line = LocaleUtil.localize("gui.pipes.emzuli.nopaint");
} else {
line = LocaleUtil.localize("gui.pipes.emzuli.paint", ColourUtil.getTextFullTooltip(colour));
}
list.add(new ToolTip(line));
};
mainGui.shownElements.add(new GuiElementToolTip(mainGui, area, tooltips));
}
use of buildcraft.lib.gui.elem.GuiElementDrawable in project BuildCraft by BuildCraft.
the class ElementTypeDrawnStack method deserialize0.
@Override
protected IGuiElement deserialize0(BuildCraftJsonGui gui, IGuiPosition parent, JsonGuiInfo info, JsonGuiElement json) {
FunctionContext ctx = createContext(json);
IGuiPosition pos = resolvePosition(json, "pos", parent, ctx);
INodeBoolean visible = getEquationBool(json, "visible", ctx, true);
boolean foreground = resolveEquationBool(json, "foreground", ctx, false);
Item item = JsonUtils.getItem(json.json, "id");
int meta = resolveEquationInt(json, "meta", ctx);
ItemStack stack = new ItemStack(item, 1, meta);
ISimpleDrawable icon = new GuiStack(stack);
IGuiArea area = IGuiArea.create(pos, 16, 16);
return new GuiElementDrawable(gui, area, icon, foreground, visible);
}
use of buildcraft.lib.gui.elem.GuiElementDrawable in project BuildCraft by BuildCraft.
the class ElementTypeSprite method deserialize0.
@Override
public IGuiElement deserialize0(BuildCraftJsonGui gui, IGuiPosition parent, JsonGuiInfo info, JsonGuiElement json) {
FunctionContext ctx = createContext(json);
inheritProperty(json, "pos[0]", "area[0]");
inheritProperty(json, "pos[1]", "area[1]");
inheritProperty(json, "size[0]", "area[2]");
inheritProperty(json, "size[1]", "area[3]");
inheritProperty(json, "source.pos[0]", "source.area[0]");
inheritProperty(json, "source.pos[1]", "source.area[1]");
inheritProperty(json, "source.size[0]", "source.area[2]");
inheritProperty(json, "source.size[1]", "source.area[3]");
inheritProperty(json, "area", "source.area");
inheritProperty(json, "area[0]", "source.area[0]");
inheritProperty(json, "area[1]", "source.area[1]");
inheritProperty(json, "area[2]", "source.area[2]");
inheritProperty(json, "area[3]", "source.area[3]");
IGuiArea area = resolveArea(json, "area", parent, ctx);
IGuiArea srcArea = resolveArea(json, "source.area", PositionAbsolute.ORIGIN, ctx);
INodeBoolean visible = getEquationBool(json, "visible", ctx, true);
boolean foreground = resolveEquationBool(json, "foreground", ctx, false);
// TODO: Allow the source sprite to be changing as well!
SrcTexture tex = resolveTexture(info, json, "source");
String origin = tex.origin;
int texSize = tex.texSize;
if (//
!json.properties.containsKey("source.area[2]") && //
!json.properties.containsKey("source.area[3]") && !json.properties.containsKey("source.area")) {
srcArea = new GuiRectangle(texSize, texSize);
}
ISprite sprite = gui.properties.get(origin, ISprite.class);
if (sprite == null) {
ResourceLocation loc = SpriteUtil.transformLocation(new ResourceLocation(origin));
sprite = new SpriteRaw(loc, 0, 0, 1, 1);
}
if (srcArea instanceof GuiRectangle) {
double u = srcArea.getX();
double v = srcArea.getY();
double uSize = srcArea.getWidth();
double vSize = srcArea.getHeight();
sprite = GuiUtil.subRelative(sprite, u, v, uSize, vSize, texSize);
} else {
final IGuiArea a = srcArea;
INodeDouble u = () -> a.getX() / texSize;
INodeDouble v = () -> a.getY() / texSize;
INodeDouble uSize = () -> a.getEndX() / texSize;
INodeDouble vSize = () -> a.getEndY() / texSize;
sprite = new SubSpriteChanging(sprite, u, v, uSize, vSize);
}
ISimpleDrawable icon = new GuiSpriteScaled(sprite, area.offsetToOrigin());
GuiElementDrawable element = new GuiElementDrawable(gui, area, icon, foreground, visible);
return element;
}
Aggregations