package openblocks.client.gui;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import java.util.List;
import net.minecraft.util.StatCollector;
import openblocks.common.container.ContainerPaintMixer;
import openblocks.common.tileentity.TileEntityPaintMixer;
import openblocks.common.tileentity.TileEntityPaintMixer.DyeSlot;
import openblocks.rpc.IColorChanger;
import openmods.api.IValueProvider;
import openmods.gui.SyncedGuiContainer;
import openmods.gui.component.BaseComponent;
import openmods.gui.component.GuiComponentColorPicker;
import openmods.gui.component.GuiComponentLevel;
import openmods.gui.component.GuiComponentPalettePicker;
import openmods.gui.component.GuiComponentPalettePicker.PaletteEntry;
import openmods.gui.component.GuiComponentProgress;
import openmods.gui.component.GuiComponentRect;
import openmods.gui.component.GuiComponentSlider;
import openmods.gui.component.GuiComponentTextButton;
import openmods.gui.component.GuiComponentTextbox;
import openmods.gui.listener.IMouseDownListener;
import openmods.gui.listener.IValueChangedListener;
import openmods.gui.logic.IValueUpdateAction;
import openmods.gui.logic.ValueCopyAction;
import openmods.utils.ColorUtils;
import openmods.utils.ColorUtils.ColorMeta;
public class GuiPaintMixer extends SyncedGuiContainer<ContainerPaintMixer> {
private static final int CYAN = 0xFF4B9FC1;
private static final int MAGENTA = 0xFFDB7AD5;
private static final int YELLOW = 0xFFE7E72A;
private static final int KEY = 0xFF000000;
private int selectedColor;
public GuiPaintMixer(ContainerPaintMixer container) {
super(container, 176, 200, "openblocks.gui.paintmixer");
TileEntityPaintMixer mixer = container.getOwner();
final IColorChanger rpcIntf = mixer.createRpcProxy();
root.addComponent(new GuiComponentRect(121, 74, 20, 20, CYAN));
root.addComponent(new GuiComponentRect(141, 74, 20, 20, MAGENTA));
root.addComponent(new GuiComponentRect(121, 94, 20, 20, YELLOW));
root.addComponent(new GuiComponentRect(141, 94, 20, 20, KEY));
{
final GuiComponentLevel level = new GuiComponentLevel(118, 74 + 6, 2, 14, CYAN, 0xFF888888, 0f, 2f, 0);
addSyncUpdateListener(ValueCopyAction.create(mixer.getDyeSlot(DyeSlot.cyan), level));
root.addComponent(level);
}
{
final GuiComponentLevel level = new GuiComponentLevel(141 + 21, 74 + 6, 2, 14, MAGENTA, 0xFF888888, 0f, 2f, 0);
addSyncUpdateListener(ValueCopyAction.create(mixer.getDyeSlot(DyeSlot.magenta), level));
root.addComponent(level);
}
{
final GuiComponentLevel level = new GuiComponentLevel(118, 94 + 6, 2, 14, YELLOW, 0xFF888888, 0f, 2f, 0);
addSyncUpdateListener(ValueCopyAction.create(mixer.getDyeSlot(DyeSlot.yellow), level));
root.addComponent(level);
}
{
final GuiComponentLevel level = new GuiComponentLevel(141 + 21, 94 + 6, 2, 14, KEY, 0xFF888888, 0f, 2f, 0);
addSyncUpdateListener(ValueCopyAction.create(mixer.getDyeSlot(DyeSlot.black), level));
root.addComponent(level);
}
{
GuiComponentProgress progress = new GuiComponentProgress(125, 43, TileEntityPaintMixer.PROGRESS_TICKS);
addSyncUpdateListener(ValueCopyAction.create(mixer.getProgress(), progress.progressReceiver()));
root.addComponent(progress);
}
{
GuiComponentTextButton buttonMix = new GuiComponentTextButton(125, 57, 30, 13, 0xFFFFFF);
buttonMix.setText("Mix")
.setListener(new IMouseDownListener() {
@Override
public void componentMouseDown(BaseComponent component, int x, int y, int button) {
rpcIntf.changeColor(selectedColor);
}
});
root.addComponent(buttonMix);
}
{
final GuiComponentTextbox textbox = new GuiComponentTextbox(65, 90, 44, 10);
root.addComponent(textbox);
final GuiComponentColorPicker colorPicker = new GuiComponentColorPicker(10, 20);
root.addComponent(colorPicker);
final GuiComponentSlider slider = new GuiComponentSlider(10, 75, 100, 0, 255, 0, false);
root.addComponent(slider);
final GuiComponentRect colorBox = new GuiComponentRect(10, 90, 45, 10, 0xFFFFFF);
root.addComponent(colorBox);
final GuiComponentPalettePicker palettePicker = new GuiComponentPalettePicker(112, 25);
palettePicker.setAreaSize(5);
palettePicker.setDrawTooltip(true);
root.addComponent(palettePicker);
{
final List<PaletteEntry> vanillaPalette = Lists.newArrayList();
for (ColorMeta color : ColorUtils.getAllColors()) {
vanillaPalette.add(new PaletteEntry(color.vanillaBlockId, color.rgb, StatCollector.translateToLocal(color.unlocalizedName)));
}
palettePicker.setPalette(vanillaPalette);
}
palettePicker.setListener(new IValueChangedListener<PaletteEntry>() {
@Override
public void valueChanged(PaletteEntry value) {
final int rgb = value.rgb;
selectedColor = rgb;
textbox.setValue(String.format("%06X", rgb));
colorBox.setValue(rgb);
colorPicker.setValue(rgb);
slider.setValue(colorPicker.tone);
}
});
textbox.setListener(new IValueChangedListener<String>() {
@Override
public void valueChanged(String value) {
try {
int parsed = Integer.parseInt(value, 16);
selectedColor = parsed;
colorPicker.setValue(parsed);
slider.setValue(colorPicker.tone);
colorBox.setValue(parsed);
} catch (NumberFormatException e) {
// NO-OP, user derp
}
}
});
colorPicker.setListener(new IValueChangedListener<Integer>() {
@Override
public void valueChanged(Integer value) {
selectedColor = value;
textbox.setValue(String.format("%06X", value));
colorBox.setValue(value);
}
});
slider.setListener(new IValueChangedListener<Integer>() {
@Override
public void valueChanged(Integer value) {
colorPicker.tone = value;
int color = colorPicker.getColor();
textbox.setValue(String.format("%06X", color));
colorBox.setValue(color);
}
});
final IValueProvider<Integer> color = mixer.getColor();
addSyncUpdateListener(new IValueUpdateAction() {
@Override
public Iterable<?> getTriggers() {
return ImmutableList.of(color);
}
@Override
public void execute() {
int value = color.getValue();
selectedColor = value;
textbox.setValue(String.format("%06X", value));
colorPicker.setValue(value);
slider.setValue(colorPicker.tone);
colorBox.setValue(value);
}
});
dispatcher().triggerAll();
}
}
}