package openmods.gui.component;
import com.google.common.collect.Lists;
import java.util.List;
import net.minecraft.client.Minecraft;
import net.minecraft.client.audio.PositionedSoundRecord;
import net.minecraft.util.IIcon;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.StatCollector;
import openmods.gui.component.page.BookScaleConfig;
import openmods.gui.listener.IMouseDownListener;
import openmods.utils.render.FakeIcon;
public class GuiComponentBook extends BaseComposite {
private static final ResourceLocation PAGETURN = new ResourceLocation("openmodslib", "pageturn");
private GuiComponentSpriteButton imgPrev;
private GuiComponentSpriteButton imgNext;
private GuiComponentLabel pageNumberLeft;
private GuiComponentLabel pageNumberRight;
public static IIcon iconPageLeft = FakeIcon.createSheetIcon(211, 0, -211, 180);
public static IIcon iconPageRight = FakeIcon.createSheetIcon(0, 0, 211, 180);
public static IIcon iconPrev = FakeIcon.createSheetIcon(57, 226, 18, 10);
public static IIcon iconNext = FakeIcon.createSheetIcon(57, 213, 18, 10);
public static IIcon iconPrevHover = FakeIcon.createSheetIcon(80, 226, 18, 10);
public static IIcon iconNextHover = FakeIcon.createSheetIcon(80, 213, 18, 10);
private static final ResourceLocation texture = new ResourceLocation("openmodslib:textures/gui/book.png");
public List<BaseComponent> pages;
private int index = 0;
public GuiComponentBook() {
super(0, 0);
GuiComponentSprite imgLeftBackground = new GuiComponentSprite(0, 0, iconPageLeft, texture);
GuiComponentSprite imgRightBackground = new GuiComponentSprite(0, 0, iconPageRight, texture);
imgRightBackground.setX(iconPageRight.getIconWidth());
imgPrev = new GuiComponentSpriteButton(24, 158, iconPrev, iconPrevHover, texture);
imgPrev.setListener(new IMouseDownListener() {
@Override
public void componentMouseDown(BaseComponent component, int x, int y, int button) {
prevPage();
}
});
imgNext = new GuiComponentSpriteButton(380, 158, iconNext, iconNextHover, texture);
imgNext.setListener(new IMouseDownListener() {
@Override
public void componentMouseDown(BaseComponent component, int x, int y, int button) {
nextPage();
}
});
final float scalePageNumber = BookScaleConfig.getPageNumberScale();
pageNumberLeft = new GuiComponentLabel(85, 163, 100, 10, "XXX");
pageNumberLeft.setScale(scalePageNumber);
pageNumberRight = new GuiComponentLabel(295, 163, 100, 10, "XXX");
pageNumberRight.setScale(scalePageNumber);
addComponent(imgLeftBackground);
addComponent(imgRightBackground);
addComponent(imgPrev);
addComponent(imgNext);
addComponent(pageNumberLeft);
addComponent(pageNumberRight);
pages = Lists.newArrayList();
}
public int getNumberOfPages() {
return pages.size();
}
@Override
public int getWidth() {
return iconPageRight.getIconWidth() * 2;
}
@Override
public int getHeight() {
return iconPageRight.getIconHeight();
}
public void addPage(BaseComponent page) {
addComponent(page);
page.setEnabled(false);
pages.add(page);
}
public void enablePages() {
int i = 0;
for (BaseComponent page : pages) {
final boolean isLeft = i == index;
final boolean isRight = i == index + 1;
if (isLeft) {
page.setEnabled(true);
page.setX(20);
} else if (isRight) {
page.setEnabled(true);
page.setX(10 + iconPageRight.getIconWidth());
} else {
page.setEnabled(false);
}
i++;
}
int totalPageCount = i % 2 == 0? i : i + 1;
imgNext.setEnabled(index < pages.size() - 2);
imgPrev.setEnabled(index > 0);
pageNumberLeft.setText(StatCollector.translateToLocalFormatted("openblocks.misc.page", index + 1, totalPageCount));
pageNumberRight.setText(StatCollector.translateToLocalFormatted("openblocks.misc.page", index + 2, totalPageCount));
}
@Override
public void renderComponentBackground(Minecraft minecraft, int offsetX, int offsetY, int mouseX, int mouseY) {}
public void changePage(int newPage) {
newPage &= ~1;
if (newPage != index) {
index = newPage;
enablePages();
playPageTurnSound();
}
}
private static void playPageTurnSound() {
Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(PAGETURN, 1.0f));
}
public IMouseDownListener createBookmarkListener(final int index) {
return new IMouseDownListener() {
@Override
public void componentMouseDown(BaseComponent component, int x, int y, int button) {
changePage(index);
}
};
}
public void prevPage() {
if (index > 0) changePage(index - 2);
}
public void nextPage() {
if (index < pages.size() - 2) changePage(index + 2);
}
public void firstPage() {
changePage(0);
}
public void lastPage() {
changePage(getNumberOfPages() - 1);
}
}