After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 519 B After Width: | Height: | Size: 519 B |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 320 KiB After Width: | Height: | Size: 8.9 KiB |
Before Width: | Height: | Size: 8.9 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 320 KiB |
@ -0,0 +1,74 @@ |
|||||||
|
package mightypork.rogue.screens.game; |
||||||
|
|
||||||
|
|
||||||
|
import mightypork.gamecore.app.AppAccess; |
||||||
|
import mightypork.gamecore.gui.AlignX; |
||||||
|
import mightypork.gamecore.gui.components.LayoutComponent; |
||||||
|
import mightypork.gamecore.gui.components.layout.HorizontalFixedFlowLayout; |
||||||
|
import mightypork.gamecore.render.Render; |
||||||
|
import mightypork.gamecore.resources.textures.TxQuad; |
||||||
|
import mightypork.gamecore.util.math.constraints.rect.Rect; |
||||||
|
import mightypork.gamecore.util.math.constraints.rect.proxy.RectBound; |
||||||
|
import mightypork.rogue.Res; |
||||||
|
|
||||||
|
|
||||||
|
public class IngameNav extends LayoutComponent { |
||||||
|
|
||||||
|
private final HorizontalFixedFlowLayout leftFlow; |
||||||
|
private final HorizontalFixedFlowLayout rightFlow; |
||||||
|
private final Rect paintHelper; |
||||||
|
|
||||||
|
private final TxQuad bg; |
||||||
|
|
||||||
|
|
||||||
|
public IngameNav(AppAccess app) |
||||||
|
{ |
||||||
|
this(app, null); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public IngameNav(AppAccess app, RectBound context) |
||||||
|
{ |
||||||
|
super(app, context); |
||||||
|
|
||||||
|
final Rect shr = this.shrink(height().perc(5)); |
||||||
|
leftFlow = new HorizontalFixedFlowLayout(app, context, shr.height(), AlignX.LEFT); |
||||||
|
rightFlow = new HorizontalFixedFlowLayout(app, context, shr.height(), AlignX.RIGHT); |
||||||
|
|
||||||
|
|
||||||
|
leftFlow.setRect(shr); |
||||||
|
rightFlow.setRect(shr); |
||||||
|
attach(leftFlow); |
||||||
|
attach(rightFlow); |
||||||
|
|
||||||
|
paintHelper = leftEdge().growRight(height().mul(4)); |
||||||
|
|
||||||
|
bg = Res.txq("nav.bg"); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public void addLeft(NavButton comp) |
||||||
|
{ |
||||||
|
leftFlow.add(comp); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public void addRight(NavButton comp) |
||||||
|
{ |
||||||
|
rightFlow.add(comp); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public void renderComponent() |
||||||
|
{ |
||||||
|
// draw BG (manually repeat)
|
||||||
|
for (int i = 0; i < Math.ceil(width().value() / paintHelper.width().value()); i++) { |
||||||
|
Render.quadTextured(paintHelper.moveX(paintHelper.width().value() * i), bg); |
||||||
|
} |
||||||
|
|
||||||
|
super.renderComponent(); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,47 @@ |
|||||||
|
package mightypork.rogue.screens.game; |
||||||
|
|
||||||
|
|
||||||
|
import mightypork.gamecore.gui.components.ClickableComponent; |
||||||
|
import mightypork.gamecore.render.Render; |
||||||
|
import mightypork.gamecore.resources.textures.TxQuad; |
||||||
|
import mightypork.rogue.Res; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Button in the ingame nav |
||||||
|
* |
||||||
|
* @author MightyPork |
||||||
|
*/ |
||||||
|
public class NavButton extends ClickableComponent { |
||||||
|
|
||||||
|
private final TxQuad base, hover, down, fg; |
||||||
|
|
||||||
|
|
||||||
|
public NavButton(TxQuad fg) |
||||||
|
{ |
||||||
|
super(); |
||||||
|
this.base = Res.txq("nav.button.bg.base"); |
||||||
|
this.hover = Res.txq("nav.button.bg.hover"); |
||||||
|
this.down = Res.txq("nav.button.bg.down"); |
||||||
|
this.fg = fg; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
protected void renderComponent() |
||||||
|
{ |
||||||
|
TxQuad bg; |
||||||
|
|
||||||
|
if (btnDownOver) { |
||||||
|
bg = down; |
||||||
|
} else if (isMouseOver()) { |
||||||
|
bg = hover; |
||||||
|
} else { |
||||||
|
bg = base; |
||||||
|
} |
||||||
|
|
||||||
|
Render.quadTextured(this, bg); |
||||||
|
Render.quadTextured(this, fg); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -1,89 +0,0 @@ |
|||||||
package mightypork.rogue.screens.game; |
|
||||||
|
|
||||||
|
|
||||||
import mightypork.gamecore.eventbus.events.Updateable; |
|
||||||
import mightypork.gamecore.gui.components.ClickableComponent; |
|
||||||
import mightypork.gamecore.input.events.MouseMotionEvent; |
|
||||||
import mightypork.gamecore.input.events.MouseMotionListener; |
|
||||||
import mightypork.gamecore.render.Render; |
|
||||||
import mightypork.gamecore.resources.textures.TxQuad; |
|
||||||
import mightypork.gamecore.util.math.Easing; |
|
||||||
import mightypork.gamecore.util.math.constraints.num.Num; |
|
||||||
import mightypork.gamecore.util.math.constraints.num.mutable.NumAnimated; |
|
||||||
import mightypork.gamecore.util.math.constraints.rect.Rect; |
|
||||||
import mightypork.gamecore.util.math.constraints.rect.caching.RectCache; |
|
||||||
import mightypork.gamecore.util.math.constraints.vect.Vect; |
|
||||||
import mightypork.rogue.Res; |
|
||||||
|
|
||||||
|
|
||||||
public class NavItemSlot extends ClickableComponent implements MouseMotionListener, Updateable { |
|
||||||
|
|
||||||
private final TxQuad image; |
|
||||||
private final TxQuad frame; |
|
||||||
private final RectCache paintBox; |
|
||||||
private final NumAnimated yOffset; |
|
||||||
private boolean wasInside = false; |
|
||||||
|
|
||||||
|
|
||||||
public NavItemSlot(TxQuad image) |
|
||||||
{ |
|
||||||
this.image = image; |
|
||||||
this.frame = Res.txq("item_frame"); |
|
||||||
|
|
||||||
final Rect ref = shrink(height().perc(8)); |
|
||||||
yOffset = new NumAnimated(0, Easing.LINEAR); |
|
||||||
yOffset.setDefaultDuration(0.05); |
|
||||||
|
|
||||||
final Num h = ref.width().min(ref.height()); |
|
||||||
this.paintBox = ref.bottomLeft().startRect().grow(Num.ZERO, h, h, Num.ZERO).moveY(yOffset.mul(h.perc(-5))).cached(); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
@Override |
|
||||||
protected void renderComponent() |
|
||||||
{ |
|
||||||
Render.quadTextured(paintBox, frame); |
|
||||||
|
|
||||||
Render.pushMatrix(); |
|
||||||
Render.translateXY(paintBox.center()); |
|
||||||
Render.scaleXY(0.7); |
|
||||||
Render.rotateZ(45); |
|
||||||
Render.quadTextured(Rect.make(paintBox.height()).centerTo(Vect.ZERO), image); |
|
||||||
Render.popMatrix(); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
@Override |
|
||||||
public void updateLayout() |
|
||||||
{ |
|
||||||
paintBox.poll(); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
@Override |
|
||||||
public void receive(MouseMotionEvent event) |
|
||||||
{ |
|
||||||
if (event.getPos().isInside(this) != wasInside) { |
|
||||||
if (wasInside) { |
|
||||||
// left
|
|
||||||
yOffset.fadeOut(); |
|
||||||
} else { |
|
||||||
// entered
|
|
||||||
yOffset.fadeIn(); |
|
||||||
} |
|
||||||
|
|
||||||
wasInside = !wasInside; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
@Override |
|
||||||
public void update(double delta) |
|
||||||
{ |
|
||||||
if (yOffset.isInProgress()) { |
|
||||||
yOffset.update(delta); |
|
||||||
paintBox.poll(); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
} |
|