mirror of
https://github.com/Sollace/Unicopia.git
synced 2025-02-25 14:14:32 +01:00
Update the spellbook interface and rewrite the page about gems
This commit is contained in:
parent
497b0f03b5
commit
a098e18100
5 changed files with 63 additions and 15 deletions
BIN
book.xcf
BIN
book.xcf
Binary file not shown.
|
@ -26,6 +26,21 @@ public interface IPageOwner extends ITransmittable {
|
||||||
sendCapabilities(true);
|
sendCapabilities(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default boolean hasPageStateRelative(IPage start, PageState state, int direction) {
|
||||||
|
int pos = start.getIndex();
|
||||||
|
|
||||||
|
do {
|
||||||
|
if (getPageState(Pages.instance().getByIndex(pos)) == state) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
pos += direction;
|
||||||
|
|
||||||
|
} while (pos >= 0 && pos < Pages.instance().getTotalPages());
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
default PageState getPageState(IPage page) {
|
default PageState getPageState(IPage page) {
|
||||||
return getPageStates().getOrDefault(page.getName(), page.getDefaultState());
|
return getPageStates().getOrDefault(page.getName(), page.getDefaultState());
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,6 @@ public class GuiSpellBook extends GuiContainer implements IPageUnlockListener {
|
||||||
|
|
||||||
private IPlayer playerExtension;
|
private IPlayer playerExtension;
|
||||||
|
|
||||||
|
|
||||||
private PageButton nextPage;
|
private PageButton nextPage;
|
||||||
private PageButton prevPage;
|
private PageButton prevPage;
|
||||||
|
|
||||||
|
@ -53,14 +52,22 @@ public class GuiSpellBook extends GuiContainer implements IPageUnlockListener {
|
||||||
int x = (width - xSize) / 2;
|
int x = (width - xSize) / 2;
|
||||||
int y = (height - ySize) / 2;
|
int y = (height - ySize) / 2;
|
||||||
|
|
||||||
buttonList.add(nextPage = new PageButton(1, x + 360, y + 160, true));
|
buttonList.add(nextPage = new PageButton(1, x + 360, y + 185, true));
|
||||||
buttonList.add(prevPage = new PageButton(2, x + 20, y + 160, false));
|
buttonList.add(prevPage = new PageButton(2, x + 20, y + 185, false));
|
||||||
|
|
||||||
if (currentIPage == null) {
|
if (currentIPage == null) {
|
||||||
currentIPage = Pages.instance().getByIndex(0);
|
currentIPage = Pages.instance().getByIndex(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
onPageChange();
|
onPageChange();
|
||||||
|
|
||||||
|
if (playerExtension.hasPageStateRelative(currentIPage, PageState.UNREAD, 1)) {
|
||||||
|
nextPage.triggerShake();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (playerExtension.hasPageStateRelative(currentIPage, PageState.UNREAD, -1)) {
|
||||||
|
prevPage.triggerShake();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -77,8 +84,8 @@ public class GuiSpellBook extends GuiContainer implements IPageUnlockListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void onPageChange() {
|
protected void onPageChange() {
|
||||||
prevPage.visible = currentIPage.getIndex() > 0;
|
prevPage.enabled = currentIPage.getIndex() > 0;
|
||||||
nextPage.visible = currentIPage.getIndex() < Pages.instance().getTotalPages() - 1;
|
nextPage.enabled = currentIPage.getIndex() < Pages.instance().getTotalPages() - 1;
|
||||||
|
|
||||||
if (playerExtension.getPageState(currentIPage) == PageState.UNREAD) {
|
if (playerExtension.getPageState(currentIPage) == PageState.UNREAD) {
|
||||||
playerExtension.setPageState(currentIPage, PageState.READ);
|
playerExtension.setPageState(currentIPage, PageState.READ);
|
||||||
|
@ -103,6 +110,7 @@ public class GuiSpellBook extends GuiContainer implements IPageUnlockListener {
|
||||||
@Override
|
@Override
|
||||||
protected void drawGradientRect(int left, int top, int width, int height, int startColor, int endColor) {
|
protected void drawGradientRect(int left, int top, int width, int height, int startColor, int endColor) {
|
||||||
Slot slot = getSlotUnderMouse();
|
Slot slot = getSlotUnderMouse();
|
||||||
|
|
||||||
if (slot == null || left != slot.xPos || top != slot.yPos || !drawSlotOverlay(slot)) {
|
if (slot == null || left != slot.xPos || top != slot.yPos || !drawSlotOverlay(slot)) {
|
||||||
super.drawGradientRect(left, top, width, height, startColor, endColor);
|
super.drawGradientRect(left, top, width, height, startColor, endColor);
|
||||||
}
|
}
|
||||||
|
@ -114,13 +122,14 @@ public class GuiSpellBook extends GuiContainer implements IPageUnlockListener {
|
||||||
GL11.glDisable(GL11.GL_ALPHA_TEST);
|
GL11.glDisable(GL11.GL_ALPHA_TEST);
|
||||||
|
|
||||||
mc.getTextureManager().bindTexture(spellBookGuiTextures);
|
mc.getTextureManager().bindTexture(spellBookGuiTextures);
|
||||||
drawModalRectWithCustomSizedTexture(slot.xPos - 1, slot.yPos - 1, 51, 223, 18, 18, 512, 256);
|
drawModalRectWithCustomSizedTexture(slot.xPos - 1, slot.yPos - 1, 74, 223, 18, 18, 512, 256);
|
||||||
|
|
||||||
GL11.glEnable(GL11.GL_ALPHA_TEST);
|
GL11.glEnable(GL11.GL_ALPHA_TEST);
|
||||||
GlStateManager.disableBlend();
|
GlStateManager.disableBlend();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -135,11 +144,12 @@ public class GuiSpellBook extends GuiContainer implements IPageUnlockListener {
|
||||||
protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) {
|
protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) {
|
||||||
String text = String.format("%d / %d", currentIPage.getIndex() + 1, Pages.instance().getTotalPages());
|
String text = String.format("%d / %d", currentIPage.getIndex() + 1, Pages.instance().getTotalPages());
|
||||||
|
|
||||||
fontRenderer.drawString(text, 203 - fontRenderer.getStringWidth(text)/2, 165, 0x0);
|
fontRenderer.drawString(text, 70 - fontRenderer.getStringWidth(text)/2, 190, 0x0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) {
|
protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) {
|
||||||
|
drawWorldBackground(0);
|
||||||
GlStateManager.color(1, 1, 1, 1);
|
GlStateManager.color(1, 1, 1, 1);
|
||||||
|
|
||||||
int left = (width - xSize) / 2;
|
int left = (width - xSize) / 2;
|
||||||
|
@ -187,29 +197,52 @@ public class GuiSpellBook extends GuiContainer implements IPageUnlockListener {
|
||||||
@Override
|
@Override
|
||||||
public void drawButton(Minecraft mc, int mouseX, int mouseY, float partialTicks) {
|
public void drawButton(Minecraft mc, int mouseX, int mouseY, float partialTicks) {
|
||||||
if (visible) {
|
if (visible) {
|
||||||
|
|
||||||
|
boolean shaking = false;
|
||||||
|
|
||||||
int x = this.x;
|
int x = this.x;
|
||||||
int y = this.y;
|
int y = this.y;
|
||||||
|
|
||||||
if (shakesLeft > 0) {
|
if (shakesLeft > 0) {
|
||||||
shakeCount += (float)Math.PI/2;
|
shaking = true;
|
||||||
|
shakeCount += (float)Math.PI / 2;
|
||||||
|
|
||||||
if (shakeCount >= Math.PI * 2) {
|
if (shakeCount >= Math.PI * 2) {
|
||||||
shakeCount %= Math.PI*2;
|
shakeCount %= Math.PI * 2;
|
||||||
shakesLeft--;
|
shakesLeft--;
|
||||||
}
|
}
|
||||||
x += (int)(Math.sin(shakeCount)*3);
|
|
||||||
y -= (int)(Math.sin(shakeCount)*3);
|
x += (int)(Math.sin(shakeCount) * 3);
|
||||||
|
y -= (int)(Math.sin(shakeCount) * 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean hovered = mouseX >= this.x && mouseY >= this.y && mouseX < this.x + width && mouseY < this.y + height;
|
GlStateManager.color(1, 1, 1, 1);
|
||||||
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
|
|
||||||
mc.getTextureManager().bindTexture(spellBookGuiTextures);
|
mc.getTextureManager().bindTexture(spellBookGuiTextures);
|
||||||
|
|
||||||
int u = 0;
|
int u = 0;
|
||||||
int v = 220;
|
int v = 220;
|
||||||
if (hovered) u += 23;
|
|
||||||
if (!direction) v += 13;
|
if (shaking || isMouseOver(mouseX, mouseY)) {
|
||||||
|
u += 23;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (shaking) {
|
||||||
|
u += 23;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!direction) {
|
||||||
|
v += 13;
|
||||||
|
}
|
||||||
|
|
||||||
drawModalRectWithCustomSizedTexture(x, y, u, v, 23, 13, 512, 256);
|
drawModalRectWithCustomSizedTexture(x, y, u, v, 23, 13, 512, 256);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isMouseOver(int mouseX, int mouseY) {
|
||||||
|
return enabled && mouseX >= x && mouseY >= y && mouseX < x + width && mouseY < y + height;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public void triggerShake() {
|
public void triggerShake() {
|
||||||
if (shakesLeft <= 0) {
|
if (shakesLeft <= 0) {
|
||||||
shakesLeft = 5;
|
shakesLeft = 5;
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 2 MiB After Width: | Height: | Size: 63 KiB |
Binary file not shown.
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 58 KiB |
Loading…
Reference in a new issue