Linear Layout for text/image alignment on row
This commit is contained in:
@@ -0,0 +1,7 @@
|
|||||||
|
package mightypork.gamecore.gui.components;
|
||||||
|
|
||||||
|
|
||||||
|
public interface DynamicWidthComponent extends Component {
|
||||||
|
|
||||||
|
double computeWidth(double height);
|
||||||
|
}
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
package mightypork.gamecore.gui.components;
|
||||||
|
|
||||||
|
|
||||||
|
import mightypork.gamecore.util.math.constraints.num.Num;
|
||||||
|
import mightypork.gamecore.util.math.constraints.rect.Rect;
|
||||||
|
import mightypork.gamecore.util.math.constraints.rect.proxy.RectBound;
|
||||||
|
import mightypork.gamecore.util.math.constraints.vect.Vect;
|
||||||
|
import mightypork.gamecore.util.math.constraints.vect.proxy.VectAdapter;
|
||||||
|
|
||||||
|
|
||||||
|
public abstract class LinearComponent extends BaseComponent implements DynamicWidthComponent {
|
||||||
|
|
||||||
|
private final Rect rect = new Rect() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Vect size()
|
||||||
|
{
|
||||||
|
return new Vect() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double x()
|
||||||
|
{
|
||||||
|
return computeWidth(y());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double y()
|
||||||
|
{
|
||||||
|
return height.value();
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Vect origin()
|
||||||
|
{
|
||||||
|
return new VectAdapter() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Vect getSource()
|
||||||
|
{
|
||||||
|
return origin;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
private Vect origin;
|
||||||
|
private Num height;
|
||||||
|
|
||||||
|
|
||||||
|
public LinearComponent()
|
||||||
|
{
|
||||||
|
super.setRect(rect);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setRect(RectBound rect)
|
||||||
|
{
|
||||||
|
throw new RuntimeException("Cannot assign a rect to a linear component. Set origin and height instead.");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setHeight(Num height)
|
||||||
|
{
|
||||||
|
this.height = height;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setOrigin(Vect origin)
|
||||||
|
{
|
||||||
|
this.origin = origin;
|
||||||
|
}
|
||||||
|
}
|
||||||
+2
-1
@@ -1,8 +1,9 @@
|
|||||||
package mightypork.gamecore.gui.components;
|
package mightypork.gamecore.gui.components.input;
|
||||||
|
|
||||||
|
|
||||||
import mightypork.gamecore.gui.Action;
|
import mightypork.gamecore.gui.Action;
|
||||||
import mightypork.gamecore.gui.ActionTrigger;
|
import mightypork.gamecore.gui.ActionTrigger;
|
||||||
|
import mightypork.gamecore.gui.components.InputComponent;
|
||||||
import mightypork.gamecore.input.events.MouseButtonEvent;
|
import mightypork.gamecore.input.events.MouseButtonEvent;
|
||||||
import mightypork.gamecore.input.events.MouseButtonListener;
|
import mightypork.gamecore.input.events.MouseButtonListener;
|
||||||
|
|
||||||
+1
-2
@@ -1,4 +1,4 @@
|
|||||||
package mightypork.gamecore.gui.components.layout;
|
package mightypork.gamecore.gui.components.input;
|
||||||
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -6,7 +6,6 @@ import java.util.Collection;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import mightypork.gamecore.eventbus.clients.DelegatingClient;
|
import mightypork.gamecore.eventbus.clients.DelegatingClient;
|
||||||
import mightypork.gamecore.gui.components.ClickableComponent;
|
|
||||||
import mightypork.gamecore.gui.components.Component;
|
import mightypork.gamecore.gui.components.Component;
|
||||||
|
|
||||||
|
|
||||||
+13
-6
@@ -1,8 +1,8 @@
|
|||||||
package mightypork.rogue.screens;
|
package mightypork.gamecore.gui.components.input;
|
||||||
|
|
||||||
|
|
||||||
import mightypork.gamecore.gui.AlignX;
|
import mightypork.gamecore.gui.AlignX;
|
||||||
import mightypork.gamecore.gui.components.ClickableComponent;
|
import mightypork.gamecore.gui.components.DynamicWidthComponent;
|
||||||
import mightypork.gamecore.gui.components.painters.TextPainter;
|
import mightypork.gamecore.gui.components.painters.TextPainter;
|
||||||
import mightypork.gamecore.input.InputSystem;
|
import mightypork.gamecore.input.InputSystem;
|
||||||
import mightypork.gamecore.resources.fonts.GLFont;
|
import mightypork.gamecore.resources.fonts.GLFont;
|
||||||
@@ -17,7 +17,7 @@ import mightypork.gamecore.util.math.constraints.vect.mutable.VectVar;
|
|||||||
*
|
*
|
||||||
* @author MightyPork
|
* @author MightyPork
|
||||||
*/
|
*/
|
||||||
public class PushButton extends ClickableComponent {
|
public class TextButton extends ClickableComponent implements DynamicWidthComponent {
|
||||||
|
|
||||||
public final TextPainter textPainter;
|
public final TextPainter textPainter;
|
||||||
|
|
||||||
@@ -32,14 +32,14 @@ public class PushButton extends ClickableComponent {
|
|||||||
private boolean hoverMove = true;
|
private boolean hoverMove = true;
|
||||||
|
|
||||||
|
|
||||||
public PushButton(GLFont font, String text, Color color)
|
public TextButton(GLFont font, String text, Color color)
|
||||||
{
|
{
|
||||||
this.color = color;
|
this.color = color;
|
||||||
|
|
||||||
this.textPainter = new TextPainter(font, AlignX.CENTER, this.color, text);
|
this.textPainter = new TextPainter(font, AlignX.CENTER, this.color, text);
|
||||||
this.textPainter.setRect(this);
|
this.textPainter.setRect(this);
|
||||||
this.textPainter.setShadow(RGB.BLACK_30, offset);
|
this.textPainter.setShadow(RGB.BLACK_30, offset);
|
||||||
textPainter.setPaddingHPerc(0, 5);
|
textPainter.setVPaddingPercent(5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -63,9 +63,16 @@ public class PushButton extends ClickableComponent {
|
|||||||
/**
|
/**
|
||||||
* Disable offset change on hover
|
* Disable offset change on hover
|
||||||
*/
|
*/
|
||||||
public void disableHover()
|
public void disableHoverEffect()
|
||||||
{
|
{
|
||||||
hoverMove = false;
|
hoverMove = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double computeWidth(double height)
|
||||||
|
{
|
||||||
|
return textPainter.computeWidth(height);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
+3
-3
@@ -15,7 +15,7 @@ import mightypork.gamecore.util.math.constraints.rect.proxy.RectBound;
|
|||||||
*
|
*
|
||||||
* @author MightyPork
|
* @author MightyPork
|
||||||
*/
|
*/
|
||||||
public class HorizontalFixedFlowLayout extends LayoutComponent {
|
public class FlowColumnLayout extends LayoutComponent {
|
||||||
|
|
||||||
private int col = 0;
|
private int col = 0;
|
||||||
private Num elementWidth;
|
private Num elementWidth;
|
||||||
@@ -28,7 +28,7 @@ public class HorizontalFixedFlowLayout extends LayoutComponent {
|
|||||||
* @param elementWidth width of all elements
|
* @param elementWidth width of all elements
|
||||||
* @param align component align. Legal values are LEFT and RIGHT.
|
* @param align component align. Legal values are LEFT and RIGHT.
|
||||||
*/
|
*/
|
||||||
public HorizontalFixedFlowLayout(AppAccess app, RectBound context, Num elementWidth, AlignX align)
|
public FlowColumnLayout(AppAccess app, RectBound context, Num elementWidth, AlignX align)
|
||||||
{
|
{
|
||||||
super(app, context);
|
super(app, context);
|
||||||
this.elementWidth = elementWidth;
|
this.elementWidth = elementWidth;
|
||||||
@@ -48,7 +48,7 @@ public class HorizontalFixedFlowLayout extends LayoutComponent {
|
|||||||
* @param elementWidth width of all elements
|
* @param elementWidth width of all elements
|
||||||
* @param align component align. Legal values are LEFT and RIGHT.
|
* @param align component align. Legal values are LEFT and RIGHT.
|
||||||
*/
|
*/
|
||||||
public HorizontalFixedFlowLayout(AppAccess app, Num elementWidth, AlignX align)
|
public FlowColumnLayout(AppAccess app, Num elementWidth, AlignX align)
|
||||||
{
|
{
|
||||||
this(app, null, elementWidth, align);
|
this(app, null, elementWidth, align);
|
||||||
}
|
}
|
||||||
+3
-3
@@ -15,7 +15,7 @@ import mightypork.gamecore.util.math.constraints.rect.proxy.RectBound;
|
|||||||
*
|
*
|
||||||
* @author MightyPork
|
* @author MightyPork
|
||||||
*/
|
*/
|
||||||
public class VerticalFixedFlowLayout extends LayoutComponent {
|
public class FlowRowLayout extends LayoutComponent {
|
||||||
|
|
||||||
private int row = 0;
|
private int row = 0;
|
||||||
private Num elementHeight;
|
private Num elementHeight;
|
||||||
@@ -28,7 +28,7 @@ public class VerticalFixedFlowLayout extends LayoutComponent {
|
|||||||
* @param elementHeight height of all elements
|
* @param elementHeight height of all elements
|
||||||
* @param align component align. Legal values are TOP and BOTTOM.
|
* @param align component align. Legal values are TOP and BOTTOM.
|
||||||
*/
|
*/
|
||||||
public VerticalFixedFlowLayout(AppAccess app, RectBound context, Num elementHeight, AlignY align)
|
public FlowRowLayout(AppAccess app, RectBound context, Num elementHeight, AlignY align)
|
||||||
{
|
{
|
||||||
super(app, context);
|
super(app, context);
|
||||||
this.elementHeight = elementHeight;
|
this.elementHeight = elementHeight;
|
||||||
@@ -48,7 +48,7 @@ public class VerticalFixedFlowLayout extends LayoutComponent {
|
|||||||
* @param elementHeight height of all elements
|
* @param elementHeight height of all elements
|
||||||
* @param align component align. Legal values are TOP and BOTTOM.
|
* @param align component align. Legal values are TOP and BOTTOM.
|
||||||
*/
|
*/
|
||||||
public VerticalFixedFlowLayout(AppAccess app, Num elementHeight, AlignY align)
|
public FlowRowLayout(AppAccess app, Num elementHeight, AlignY align)
|
||||||
{
|
{
|
||||||
this(app, null, elementHeight, align);
|
this(app, null, elementHeight, align);
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
package mightypork.gamecore.gui.components.layout.linear;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import mightypork.gamecore.eventbus.clients.DelegatingClient;
|
||||||
|
import mightypork.gamecore.gui.components.Component;
|
||||||
|
import mightypork.gamecore.gui.components.LinearComponent;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a component into a linear component
|
||||||
|
*
|
||||||
|
* @author MightyPork
|
||||||
|
*/
|
||||||
|
public abstract class AbstractLinearWrapper extends LinearComponent implements DelegatingClient {
|
||||||
|
|
||||||
|
protected final Component wrapped;
|
||||||
|
private final List<Component> list;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param wrapped wrapped component. Can be null.
|
||||||
|
*/
|
||||||
|
public AbstractLinearWrapper(Component wrapped)
|
||||||
|
{
|
||||||
|
this.wrapped = wrapped;
|
||||||
|
if (wrapped != null) {
|
||||||
|
if (wrapped instanceof LinearComponent) {
|
||||||
|
((LinearComponent) wrapped).setHeight(height());
|
||||||
|
((LinearComponent) wrapped).setOrigin(origin());
|
||||||
|
} else {
|
||||||
|
wrapped.setRect(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
list = new ArrayList<>(1);
|
||||||
|
list.add(wrapped);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void renderComponent()
|
||||||
|
{
|
||||||
|
if (wrapped != null) wrapped.render();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<?> getChildClients()
|
||||||
|
{
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean doesDelegate()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package mightypork.gamecore.gui.components.layout.linear;
|
||||||
|
|
||||||
|
|
||||||
|
import mightypork.gamecore.util.math.constraints.num.Num;
|
||||||
|
|
||||||
|
|
||||||
|
public class LinearGap extends LinearRectangle {
|
||||||
|
|
||||||
|
public LinearGap(Num width)
|
||||||
|
{
|
||||||
|
super(null, width);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public LinearGap(double heightPercent)
|
||||||
|
{
|
||||||
|
super(null, Num.ZERO);
|
||||||
|
setWidth(height().perc(heightPercent));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,90 @@
|
|||||||
|
package mightypork.gamecore.gui.components.layout.linear;
|
||||||
|
|
||||||
|
|
||||||
|
import mightypork.gamecore.app.AppAccess;
|
||||||
|
import mightypork.gamecore.gui.AlignX;
|
||||||
|
import mightypork.gamecore.gui.components.DynamicWidthComponent;
|
||||||
|
import mightypork.gamecore.gui.components.LayoutComponent;
|
||||||
|
import mightypork.gamecore.gui.components.LinearComponent;
|
||||||
|
import mightypork.gamecore.util.math.constraints.num.Num;
|
||||||
|
import mightypork.gamecore.util.math.constraints.num.NumSum;
|
||||||
|
import mightypork.gamecore.util.math.constraints.rect.proxy.RectBound;
|
||||||
|
import mightypork.gamecore.util.math.constraints.vect.Vect;
|
||||||
|
import mightypork.gamecore.util.math.constraints.vect.proxy.VectAdapter;
|
||||||
|
|
||||||
|
|
||||||
|
public class LinearLayout extends LayoutComponent {
|
||||||
|
|
||||||
|
public LinearLayout(AppAccess app, AlignX align)
|
||||||
|
{
|
||||||
|
super(app);
|
||||||
|
this.align = align;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public LinearLayout(AppAccess app, RectBound context, AlignX align)
|
||||||
|
{
|
||||||
|
super(app, context);
|
||||||
|
this.align = align;
|
||||||
|
}
|
||||||
|
|
||||||
|
private final NumSum totalWidth = new NumSum();
|
||||||
|
|
||||||
|
private final Vect leftAlignOrigin = LinearLayout.this.origin();
|
||||||
|
private final Vect centerAlignOrigin = LinearLayout.this.topCenter().sub(totalWidth.half(), Num.ZERO);
|
||||||
|
private final Vect rightAlignOrigin = LinearLayout.this.topRight().sub(totalWidth, Num.ZERO);
|
||||||
|
|
||||||
|
private final Vect leftMostOrigin = new VectAdapter() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Vect getSource()
|
||||||
|
{
|
||||||
|
switch (align) {
|
||||||
|
default:
|
||||||
|
case LEFT:
|
||||||
|
return leftAlignOrigin;
|
||||||
|
case CENTER:
|
||||||
|
return centerAlignOrigin;
|
||||||
|
case RIGHT:
|
||||||
|
return rightAlignOrigin;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
private Vect nextOrigin = leftMostOrigin;
|
||||||
|
|
||||||
|
private AlignX align = AlignX.LEFT;
|
||||||
|
|
||||||
|
|
||||||
|
public void add(DynamicWidthComponent dwcomp)
|
||||||
|
{
|
||||||
|
add(new LinearWrapper(dwcomp));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void add(LinearComponent lincomp)
|
||||||
|
{
|
||||||
|
lincomp.setHeight(height());
|
||||||
|
lincomp.setOrigin(nextOrigin);
|
||||||
|
nextOrigin = nextOrigin.add(lincomp.width(), Num.ZERO);
|
||||||
|
totalWidth.addSummand(lincomp.width());
|
||||||
|
attach(lincomp);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setAlign(AlignX align)
|
||||||
|
{
|
||||||
|
this.align = align;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a gap.
|
||||||
|
*
|
||||||
|
* @param heightPercent percent of height for gap width
|
||||||
|
*/
|
||||||
|
public void gap(double heightPercent)
|
||||||
|
{
|
||||||
|
add(new LinearGap(heightPercent));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
package mightypork.gamecore.gui.components.layout.linear;
|
||||||
|
|
||||||
|
|
||||||
|
import mightypork.gamecore.gui.components.Component;
|
||||||
|
import mightypork.gamecore.util.math.constraints.num.Num;
|
||||||
|
|
||||||
|
|
||||||
|
public class LinearRectangle extends AbstractLinearWrapper {
|
||||||
|
|
||||||
|
private Num width;
|
||||||
|
|
||||||
|
|
||||||
|
public LinearRectangle(Component wrapped, Num width)
|
||||||
|
{
|
||||||
|
super(wrapped);
|
||||||
|
this.width = width;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setWidth(Num width)
|
||||||
|
{
|
||||||
|
this.width = width;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double computeWidth(double height)
|
||||||
|
{
|
||||||
|
return this.width.value();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package mightypork.gamecore.gui.components.layout.linear;
|
||||||
|
|
||||||
|
|
||||||
|
import mightypork.gamecore.gui.components.Component;
|
||||||
|
|
||||||
|
|
||||||
|
public class LinearSquare extends AbstractLinearWrapper {
|
||||||
|
|
||||||
|
public LinearSquare(Component wrapped)
|
||||||
|
{
|
||||||
|
super(wrapped);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double computeWidth(double height)
|
||||||
|
{
|
||||||
|
return height;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package mightypork.gamecore.gui.components.layout.linear;
|
||||||
|
|
||||||
|
|
||||||
|
import mightypork.gamecore.gui.components.DynamicWidthComponent;
|
||||||
|
|
||||||
|
|
||||||
|
public class LinearWrapper extends AbstractLinearWrapper {
|
||||||
|
|
||||||
|
public LinearWrapper(DynamicWidthComponent wrapped)
|
||||||
|
{
|
||||||
|
super(wrapped);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double computeWidth(double height)
|
||||||
|
{
|
||||||
|
return ((DynamicWidthComponent) wrapped).computeWidth(height);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -2,10 +2,9 @@ package mightypork.gamecore.gui.components.painters;
|
|||||||
|
|
||||||
|
|
||||||
import mightypork.gamecore.gui.components.BaseComponent;
|
import mightypork.gamecore.gui.components.BaseComponent;
|
||||||
|
import mightypork.gamecore.gui.components.DynamicWidthComponent;
|
||||||
import mightypork.gamecore.render.Render;
|
import mightypork.gamecore.render.Render;
|
||||||
import mightypork.gamecore.resources.textures.TxQuad;
|
import mightypork.gamecore.resources.textures.TxQuad;
|
||||||
import mightypork.gamecore.util.math.constraints.num.Num;
|
|
||||||
import mightypork.gamecore.util.math.constraints.rect.Rect;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13,11 +12,9 @@ import mightypork.gamecore.util.math.constraints.rect.Rect;
|
|||||||
*
|
*
|
||||||
* @author MightyPork
|
* @author MightyPork
|
||||||
*/
|
*/
|
||||||
public class ImagePainter extends BaseComponent {
|
public class ImagePainter extends BaseComponent implements DynamicWidthComponent {
|
||||||
|
|
||||||
private final TxQuad txQuad;
|
private final TxQuad txQuad;
|
||||||
private boolean aspratio = false;
|
|
||||||
private final Rect asprRect;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -26,20 +23,19 @@ public class ImagePainter extends BaseComponent {
|
|||||||
public ImagePainter(TxQuad txQuad)
|
public ImagePainter(TxQuad txQuad)
|
||||||
{
|
{
|
||||||
this.txQuad = txQuad;
|
this.txQuad = txQuad;
|
||||||
this.asprRect = ((Rect) this).axisV().grow(height().div(txQuad.uvs.height()).mul(txQuad.uvs.width()).half(), Num.ZERO);;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void keepAspectRatio()
|
|
||||||
{
|
|
||||||
aspratio = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void renderComponent()
|
public void renderComponent()
|
||||||
{
|
{
|
||||||
Render.quadTextured(aspratio ? asprRect : this, txQuad);
|
Render.quadTextured(this, txQuad);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double computeWidth(double height)
|
||||||
|
{
|
||||||
|
return (height / txQuad.uvs.height().value()) * txQuad.uvs.width().value();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package mightypork.gamecore.gui.components.painters;
|
|||||||
|
|
||||||
import mightypork.gamecore.gui.AlignX;
|
import mightypork.gamecore.gui.AlignX;
|
||||||
import mightypork.gamecore.gui.components.BaseComponent;
|
import mightypork.gamecore.gui.components.BaseComponent;
|
||||||
|
import mightypork.gamecore.gui.components.DynamicWidthComponent;
|
||||||
import mightypork.gamecore.render.Render;
|
import mightypork.gamecore.render.Render;
|
||||||
import mightypork.gamecore.resources.fonts.FontRenderer;
|
import mightypork.gamecore.resources.fonts.FontRenderer;
|
||||||
import mightypork.gamecore.resources.fonts.GLFont;
|
import mightypork.gamecore.resources.fonts.GLFont;
|
||||||
@@ -17,13 +18,11 @@ import mightypork.rogue.Config;
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Text painting component.<br>
|
* Text painting component.
|
||||||
* Drawing values are obtained through getters, so overriding getters can be
|
|
||||||
* used to change parameters dynamically.
|
|
||||||
*
|
*
|
||||||
* @author MightyPork
|
* @author MightyPork
|
||||||
*/
|
*/
|
||||||
public class TextPainter extends BaseComponent {
|
public class TextPainter extends BaseComponent implements DynamicWidthComponent {
|
||||||
|
|
||||||
private final FontRenderer font;
|
private final FontRenderer font;
|
||||||
private Color color;
|
private Color color;
|
||||||
@@ -32,7 +31,6 @@ public class TextPainter extends BaseComponent {
|
|||||||
private boolean shadow;
|
private boolean shadow;
|
||||||
|
|
||||||
private double yPaddingPerc = 0;
|
private double yPaddingPerc = 0;
|
||||||
private double xPaddingPerc = 0;
|
|
||||||
|
|
||||||
private Color shadowColor = RGB.BLACK;
|
private Color shadowColor = RGB.BLACK;
|
||||||
private Vect shadowOffset = Vect.make(2, 2);
|
private Vect shadowOffset = Vect.make(2, 2);
|
||||||
@@ -47,28 +45,30 @@ public class TextPainter extends BaseComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
public TextPainter(GLFont font, Color color, String text)
|
||||||
* Constructor for fixed text
|
{
|
||||||
*
|
this(font, AlignX.LEFT, color, new StringWrapper(text));
|
||||||
* @param font font to use
|
}
|
||||||
* @param align text align
|
|
||||||
* @param color default color
|
|
||||||
* @param text drawn text
|
public TextPainter(GLFont font, Color color, StringProvider text)
|
||||||
*/
|
{
|
||||||
|
this(font, AlignX.LEFT, color, text);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public TextPainter(GLFont font, Color color)
|
||||||
|
{
|
||||||
|
this(font, AlignX.LEFT, color, (StringProvider) null);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public TextPainter(GLFont font, AlignX align, Color color, String text)
|
public TextPainter(GLFont font, AlignX align, Color color, String text)
|
||||||
{
|
{
|
||||||
this(font, align, color, new StringWrapper(text));
|
this(font, align, color, new StringWrapper(text));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* COnstructor for changeable text.
|
|
||||||
*
|
|
||||||
* @param font font to use
|
|
||||||
* @param align text align
|
|
||||||
* @param color default color
|
|
||||||
* @param text text provider
|
|
||||||
*/
|
|
||||||
public TextPainter(GLFont font, AlignX align, Color color, StringProvider text)
|
public TextPainter(GLFont font, AlignX align, Color color, StringProvider text)
|
||||||
{
|
{
|
||||||
this.font = new FontRenderer(font);
|
this.font = new FontRenderer(font);
|
||||||
@@ -78,11 +78,6 @@ public class TextPainter extends BaseComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param font font to use
|
|
||||||
* @param align text align
|
|
||||||
* @param color default color
|
|
||||||
*/
|
|
||||||
public TextPainter(GLFont font, AlignX align, Color color)
|
public TextPainter(GLFont font, AlignX align, Color color)
|
||||||
{
|
{
|
||||||
this(font, align, color, (StringProvider) null);
|
this(font, align, color, (StringProvider) null);
|
||||||
@@ -96,10 +91,9 @@ public class TextPainter extends BaseComponent {
|
|||||||
|
|
||||||
final String str = text.getString();
|
final String str = text.getString();
|
||||||
|
|
||||||
final Num shrX = height().perc(xPaddingPerc);
|
|
||||||
final Num shrY = height().perc(yPaddingPerc);
|
final Num shrY = height().perc(yPaddingPerc);
|
||||||
|
|
||||||
final Rect rect = getRect().shrink(shrX, shrY);
|
final Rect rect = getRect().shrink(Num.ZERO, shrY);
|
||||||
|
|
||||||
if (shadow) {
|
if (shadow) {
|
||||||
font.draw(str, rect.round(), align, shadowColor);
|
font.draw(str, rect.round(), align, shadowColor);
|
||||||
@@ -162,9 +156,15 @@ public class TextPainter extends BaseComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void setPaddingHPerc(double percX, double percY)
|
public void setVPaddingPercent(double percY)
|
||||||
{
|
{
|
||||||
xPaddingPerc = percX;
|
|
||||||
yPaddingPerc = percY;
|
yPaddingPerc = percY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double computeWidth(double height)
|
||||||
|
{
|
||||||
|
return font.getWidth(this.text.getString(), height * ((100 - yPaddingPerc * 2) / 100D));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
package mightypork.gamecore.util.math.constraints.num;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Expandable sum of multiple numbers
|
||||||
|
*
|
||||||
|
* @author MightyPork
|
||||||
|
*/
|
||||||
|
public class NumSum extends Num {
|
||||||
|
|
||||||
|
private final List<Num> summands = new ArrayList<>();
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double value()
|
||||||
|
{
|
||||||
|
double v = 0;
|
||||||
|
for (final Num n : summands) {
|
||||||
|
if (n != null) v += n.value();
|
||||||
|
}
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a number to the sum
|
||||||
|
*
|
||||||
|
* @param summand added number
|
||||||
|
*/
|
||||||
|
public void addSummand(Num summand)
|
||||||
|
{
|
||||||
|
summands.add(summand);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a number to the sum
|
||||||
|
*
|
||||||
|
* @param summand added number
|
||||||
|
*/
|
||||||
|
public void addSummand(double summand)
|
||||||
|
{
|
||||||
|
summands.add(Num.make(summand));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,6 +6,7 @@ import java.util.Locale;
|
|||||||
|
|
||||||
import mightypork.gamecore.app.BaseApp;
|
import mightypork.gamecore.app.BaseApp;
|
||||||
import mightypork.gamecore.app.MainLoop;
|
import mightypork.gamecore.app.MainLoop;
|
||||||
|
import mightypork.gamecore.app.MainLoopRequest;
|
||||||
import mightypork.gamecore.eventbus.BusEvent;
|
import mightypork.gamecore.eventbus.BusEvent;
|
||||||
import mightypork.gamecore.eventbus.EventBus;
|
import mightypork.gamecore.eventbus.EventBus;
|
||||||
import mightypork.gamecore.gui.screens.ScreenRegistry;
|
import mightypork.gamecore.gui.screens.ScreenRegistry;
|
||||||
@@ -24,6 +25,7 @@ import mightypork.rogue.events.GameStateRequest;
|
|||||||
import mightypork.rogue.screens.FpsOverlay;
|
import mightypork.rogue.screens.FpsOverlay;
|
||||||
import mightypork.rogue.screens.LoadingOverlay;
|
import mightypork.rogue.screens.LoadingOverlay;
|
||||||
import mightypork.rogue.screens.game.ScreenGame;
|
import mightypork.rogue.screens.game.ScreenGame;
|
||||||
|
import mightypork.rogue.screens.layout_testing.LayoutTestScreen;
|
||||||
import mightypork.rogue.screens.menu.ScreenMainMenu;
|
import mightypork.rogue.screens.menu.ScreenMainMenu;
|
||||||
import mightypork.rogue.screens.select_world.ScreenSelectWorld;
|
import mightypork.rogue.screens.select_world.ScreenSelectWorld;
|
||||||
import mightypork.rogue.world.Inventory;
|
import mightypork.rogue.world.Inventory;
|
||||||
@@ -121,6 +123,7 @@ public final class App extends BaseApp {
|
|||||||
screens.addScreen("main_menu", new ScreenMainMenu(this));
|
screens.addScreen("main_menu", new ScreenMainMenu(this));
|
||||||
screens.addScreen("select_world", new ScreenSelectWorld(this));
|
screens.addScreen("select_world", new ScreenSelectWorld(this));
|
||||||
screens.addScreen("game", new ScreenGame(this));
|
screens.addScreen("game", new ScreenGame(this));
|
||||||
|
screens.addScreen("test.layout", new LayoutTestScreen(this));
|
||||||
|
|
||||||
screens.addOverlay(new FpsOverlay(this));
|
screens.addOverlay(new FpsOverlay(this));
|
||||||
screens.addOverlay(new LoadingOverlay(this));
|
screens.addOverlay(new LoadingOverlay(this));
|
||||||
@@ -168,11 +171,14 @@ public final class App extends BaseApp {
|
|||||||
@Override
|
@Override
|
||||||
protected void postInit()
|
protected void postInit()
|
||||||
{
|
{
|
||||||
// TODO tmp
|
getEventBus().send(new MainLoopRequest(new Runnable() {
|
||||||
//WorldProvider.get().createWorld(Double.doubleToLongBits(Math.random()));
|
|
||||||
|
|
||||||
//getEventBus().send(new CrossfadeRequest("game", true));
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
getEventBus().send(new GameStateRequest(GameState.MAIN_MENU));
|
getEventBus().send(new GameStateRequest(GameState.MAIN_MENU));
|
||||||
|
//getEventBus().send(new CrossfadeRequest("test.layout", true));
|
||||||
|
}
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ public final class Res {
|
|||||||
font.setDiscardRatio(3 / 16D, 2 / 16D);
|
font.setDiscardRatio(3 / 16D, 2 / 16D);
|
||||||
|
|
||||||
fonts.loadFont("tinyutf", font = new DeferredFont("/res/font/TinyUnicode2.ttf", Glyphs.basic, 16));
|
fonts.loadFont("tinyutf", font = new DeferredFont("/res/font/TinyUnicode2.ttf", Glyphs.basic, 16));
|
||||||
font.setDiscardRatio(6 / 16D, 2 / 16D);
|
font.setDiscardRatio(5 / 16D, 3 / 16D);
|
||||||
|
|
||||||
// aliases
|
// aliases
|
||||||
fonts.addAlias("thick", "press_start");
|
fonts.addAlias("thick", "press_start");
|
||||||
|
|||||||
@@ -5,8 +5,9 @@ import java.io.IOException;
|
|||||||
|
|
||||||
import mightypork.gamecore.gui.Action;
|
import mightypork.gamecore.gui.Action;
|
||||||
import mightypork.gamecore.gui.AlignX;
|
import mightypork.gamecore.gui.AlignX;
|
||||||
import mightypork.gamecore.gui.components.layout.ColumnLayout;
|
import mightypork.gamecore.gui.components.input.TextButton;
|
||||||
import mightypork.gamecore.gui.components.layout.RowLayout;
|
import mightypork.gamecore.gui.components.layout.RowLayout;
|
||||||
|
import mightypork.gamecore.gui.components.layout.linear.LinearLayout;
|
||||||
import mightypork.gamecore.gui.components.painters.QuadPainter;
|
import mightypork.gamecore.gui.components.painters.QuadPainter;
|
||||||
import mightypork.gamecore.gui.components.painters.TextPainter;
|
import mightypork.gamecore.gui.components.painters.TextPainter;
|
||||||
import mightypork.gamecore.gui.screens.ScreenLayer;
|
import mightypork.gamecore.gui.screens.ScreenLayer;
|
||||||
@@ -20,7 +21,6 @@ import mightypork.gamecore.util.math.constraints.num.Num;
|
|||||||
import mightypork.gamecore.util.math.constraints.num.mutable.NumAnimated;
|
import mightypork.gamecore.util.math.constraints.num.mutable.NumAnimated;
|
||||||
import mightypork.gamecore.util.math.timing.TimedTask;
|
import mightypork.gamecore.util.math.timing.TimedTask;
|
||||||
import mightypork.rogue.Res;
|
import mightypork.rogue.Res;
|
||||||
import mightypork.rogue.screens.PushButton;
|
|
||||||
import mightypork.rogue.screens.game.ScreenGame.GScrState;
|
import mightypork.rogue.screens.game.ScreenGame.GScrState;
|
||||||
import mightypork.rogue.world.WorldProvider;
|
import mightypork.rogue.world.WorldProvider;
|
||||||
|
|
||||||
@@ -66,29 +66,29 @@ public class AskSaveLayer extends ScreenLayer {
|
|||||||
|
|
||||||
final TextPainter txp = new TextPainter(thick_font, AlignX.CENTER, RGB.WHITE, "Save the game?");
|
final TextPainter txp = new TextPainter(thick_font, AlignX.CENTER, RGB.WHITE, "Save the game?");
|
||||||
rl.add(txp, 1);
|
rl.add(txp, 1);
|
||||||
txp.setPaddingHPerc(0, 25);
|
txp.setVPaddingPercent(25);
|
||||||
|
|
||||||
final ColumnLayout cl = new ColumnLayout(root, 21);
|
final LinearLayout ll = new LinearLayout(root, AlignX.CENTER);
|
||||||
cl.skip(2);
|
rl.add(ll);
|
||||||
rl.add(cl);
|
|
||||||
|
|
||||||
final PushButton btn1 = new PushButton(thick_font, "Yes", ScreenGame.COLOR_BTN_GOOD);
|
final double vPadPerc = 20;
|
||||||
|
|
||||||
|
final TextButton btn1 = new TextButton(thick_font, "Yes", ScreenGame.COLOR_BTN_GOOD);
|
||||||
btn1.textPainter.setAlign(AlignX.RIGHT);
|
btn1.textPainter.setAlign(AlignX.RIGHT);
|
||||||
btn1.textPainter.setPaddingHPerc(25, 20);
|
btn1.textPainter.setVPaddingPercent(vPadPerc);
|
||||||
btn1.disableHover();
|
ll.add(btn1);
|
||||||
cl.add(btn1, 6);
|
ll.gap(50);
|
||||||
|
|
||||||
final PushButton btn2 = new PushButton(thick_font, "No", ScreenGame.COLOR_BTN_BAD);
|
final TextButton btn2 = new TextButton(thick_font, "No", ScreenGame.COLOR_BTN_BAD);
|
||||||
btn2.textPainter.setAlign(AlignX.CENTER);
|
btn2.textPainter.setAlign(AlignX.CENTER);
|
||||||
btn2.textPainter.setPaddingHPerc(25, 20);
|
btn2.textPainter.setVPaddingPercent(vPadPerc);
|
||||||
btn2.disableHover();
|
ll.add(btn2);
|
||||||
cl.add(btn2, 3);
|
ll.gap(50);
|
||||||
|
|
||||||
final PushButton btn3 = new PushButton(thick_font, "Cancel", ScreenGame.COLOR_BTN_CANCEL);
|
final TextButton btn3 = new TextButton(thick_font, "Cancel", ScreenGame.COLOR_BTN_CANCEL);
|
||||||
btn3.textPainter.setAlign(AlignX.LEFT);
|
btn3.textPainter.setAlign(AlignX.LEFT);
|
||||||
btn3.textPainter.setPaddingHPerc(25, 20);
|
btn3.textPainter.setVPaddingPercent(vPadPerc);
|
||||||
btn3.disableHover();
|
ll.add(btn3);
|
||||||
cl.add(btn3, 10);
|
|
||||||
|
|
||||||
final Action cancel = new Action() {
|
final Action cancel = new Action() {
|
||||||
|
|
||||||
|
|||||||
@@ -5,8 +5,10 @@ import java.io.IOException;
|
|||||||
|
|
||||||
import mightypork.gamecore.gui.Action;
|
import mightypork.gamecore.gui.Action;
|
||||||
import mightypork.gamecore.gui.AlignX;
|
import mightypork.gamecore.gui.AlignX;
|
||||||
import mightypork.gamecore.gui.components.layout.ColumnLayout;
|
import mightypork.gamecore.gui.components.input.TextButton;
|
||||||
import mightypork.gamecore.gui.components.layout.RowLayout;
|
import mightypork.gamecore.gui.components.layout.RowLayout;
|
||||||
|
import mightypork.gamecore.gui.components.layout.linear.LinearGap;
|
||||||
|
import mightypork.gamecore.gui.components.layout.linear.LinearLayout;
|
||||||
import mightypork.gamecore.gui.components.painters.ImagePainter;
|
import mightypork.gamecore.gui.components.painters.ImagePainter;
|
||||||
import mightypork.gamecore.gui.components.painters.QuadPainter;
|
import mightypork.gamecore.gui.components.painters.QuadPainter;
|
||||||
import mightypork.gamecore.gui.components.painters.TextPainter;
|
import mightypork.gamecore.gui.components.painters.TextPainter;
|
||||||
@@ -18,7 +20,6 @@ import mightypork.gamecore.util.math.constraints.num.Num;
|
|||||||
import mightypork.rogue.GameStateManager.GameState;
|
import mightypork.rogue.GameStateManager.GameState;
|
||||||
import mightypork.rogue.Res;
|
import mightypork.rogue.Res;
|
||||||
import mightypork.rogue.events.GameStateRequest;
|
import mightypork.rogue.events.GameStateRequest;
|
||||||
import mightypork.rogue.screens.PushButton;
|
|
||||||
import mightypork.rogue.screens.game.ScreenGame.GScrState;
|
import mightypork.rogue.screens.game.ScreenGame.GScrState;
|
||||||
import mightypork.rogue.world.WorldProvider;
|
import mightypork.rogue.world.WorldProvider;
|
||||||
|
|
||||||
@@ -42,24 +43,27 @@ public class DeathLayer extends ScreenLayer {
|
|||||||
|
|
||||||
final TextPainter txp = new TextPainter(thick_font, AlignX.CENTER, RGB.YELLOW, "You're dead!");
|
final TextPainter txp = new TextPainter(thick_font, AlignX.CENTER, RGB.YELLOW, "You're dead!");
|
||||||
rl.add(txp, 1);
|
rl.add(txp, 1);
|
||||||
txp.setPaddingHPerc(0, 15);
|
txp.setVPaddingPercent(15);
|
||||||
|
|
||||||
final ImagePainter img = new ImagePainter(Res.getTxQuad("death"));
|
LinearLayout linl = new LinearLayout(root, AlignX.CENTER);
|
||||||
img.keepAspectRatio();
|
linl.add(new ImagePainter(Res.getTxQuad("death")));
|
||||||
rl.add(img, 3);
|
rl.add(linl, 3);
|
||||||
|
|
||||||
final ColumnLayout cl = new ColumnLayout(root, 2);
|
linl = new LinearLayout(root, AlignX.CENTER);
|
||||||
rl.add(cl);
|
rl.add(linl);
|
||||||
|
|
||||||
final PushButton btn1 = new PushButton(thick_font, "Retry", ScreenGame.COLOR_BTN_GOOD);
|
|
||||||
|
final TextButton btn1 = new TextButton(thick_font, "Retry", ScreenGame.COLOR_BTN_GOOD);
|
||||||
btn1.textPainter.setAlign(AlignX.RIGHT);
|
btn1.textPainter.setAlign(AlignX.RIGHT);
|
||||||
btn1.textPainter.setPaddingHPerc(20, 25);
|
btn1.textPainter.setVPaddingPercent(25);
|
||||||
cl.add(btn1);
|
linl.add(btn1);
|
||||||
|
|
||||||
final PushButton btn2 = new PushButton(thick_font, "Quit", ScreenGame.COLOR_BTN_BAD);
|
linl.add(new LinearGap(50));
|
||||||
|
|
||||||
|
final TextButton btn2 = new TextButton(thick_font, "Quit", ScreenGame.COLOR_BTN_BAD);
|
||||||
btn2.textPainter.setAlign(AlignX.LEFT);
|
btn2.textPainter.setAlign(AlignX.LEFT);
|
||||||
btn2.textPainter.setPaddingHPerc(20, 25);
|
btn2.textPainter.setVPaddingPercent(25);
|
||||||
cl.add(btn2);
|
linl.add(btn2);
|
||||||
|
|
||||||
btn1.setAction(new Action() {
|
btn1.setAction(new Action() {
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ package mightypork.rogue.screens.game;
|
|||||||
import mightypork.gamecore.app.AppAccess;
|
import mightypork.gamecore.app.AppAccess;
|
||||||
import mightypork.gamecore.gui.AlignX;
|
import mightypork.gamecore.gui.AlignX;
|
||||||
import mightypork.gamecore.gui.components.LayoutComponent;
|
import mightypork.gamecore.gui.components.LayoutComponent;
|
||||||
import mightypork.gamecore.gui.components.layout.HorizontalFixedFlowLayout;
|
import mightypork.gamecore.gui.components.layout.FlowColumnLayout;
|
||||||
import mightypork.gamecore.render.Render;
|
import mightypork.gamecore.render.Render;
|
||||||
import mightypork.gamecore.resources.textures.TxQuad;
|
import mightypork.gamecore.resources.textures.TxQuad;
|
||||||
import mightypork.gamecore.util.math.constraints.rect.Rect;
|
import mightypork.gamecore.util.math.constraints.rect.Rect;
|
||||||
@@ -14,8 +14,8 @@ import mightypork.rogue.Res;
|
|||||||
|
|
||||||
public class IngameNav extends LayoutComponent {
|
public class IngameNav extends LayoutComponent {
|
||||||
|
|
||||||
private final HorizontalFixedFlowLayout leftFlow;
|
private final FlowColumnLayout leftFlow;
|
||||||
private final HorizontalFixedFlowLayout rightFlow;
|
private final FlowColumnLayout rightFlow;
|
||||||
private final Rect paintHelper;
|
private final Rect paintHelper;
|
||||||
|
|
||||||
private final TxQuad bg;
|
private final TxQuad bg;
|
||||||
@@ -32,8 +32,8 @@ public class IngameNav extends LayoutComponent {
|
|||||||
super(app, context);
|
super(app, context);
|
||||||
|
|
||||||
final Rect shr = this.shrink(height().perc(5));
|
final Rect shr = this.shrink(height().perc(5));
|
||||||
leftFlow = new HorizontalFixedFlowLayout(app, context, shr.height(), AlignX.LEFT);
|
leftFlow = new FlowColumnLayout(app, context, shr.height(), AlignX.LEFT);
|
||||||
rightFlow = new HorizontalFixedFlowLayout(app, context, shr.height(), AlignX.RIGHT);
|
rightFlow = new FlowColumnLayout(app, context, shr.height(), AlignX.RIGHT);
|
||||||
|
|
||||||
|
|
||||||
leftFlow.setRect(shr);
|
leftFlow.setRect(shr);
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package mightypork.rogue.screens.game;
|
|||||||
|
|
||||||
import mightypork.gamecore.gui.Action;
|
import mightypork.gamecore.gui.Action;
|
||||||
import mightypork.gamecore.gui.AlignX;
|
import mightypork.gamecore.gui.AlignX;
|
||||||
import mightypork.gamecore.gui.components.ClickableComponent;
|
import mightypork.gamecore.gui.components.input.ClickableComponent;
|
||||||
import mightypork.gamecore.gui.components.painters.TextPainter;
|
import mightypork.gamecore.gui.components.painters.TextPainter;
|
||||||
import mightypork.gamecore.render.Render;
|
import mightypork.gamecore.render.Render;
|
||||||
import mightypork.gamecore.resources.textures.TxQuad;
|
import mightypork.gamecore.resources.textures.TxQuad;
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ package mightypork.rogue.screens.game;
|
|||||||
|
|
||||||
import mightypork.gamecore.gui.AlignX;
|
import mightypork.gamecore.gui.AlignX;
|
||||||
import mightypork.gamecore.gui.components.layout.ConstraintLayout;
|
import mightypork.gamecore.gui.components.layout.ConstraintLayout;
|
||||||
|
import mightypork.gamecore.gui.components.layout.FlowColumnLayout;
|
||||||
import mightypork.gamecore.gui.components.layout.GridLayout;
|
import mightypork.gamecore.gui.components.layout.GridLayout;
|
||||||
import mightypork.gamecore.gui.components.layout.HorizontalFixedFlowLayout;
|
|
||||||
import mightypork.gamecore.gui.components.painters.QuadPainter;
|
import mightypork.gamecore.gui.components.painters.QuadPainter;
|
||||||
import mightypork.gamecore.gui.components.painters.TextPainter;
|
import mightypork.gamecore.gui.components.painters.TextPainter;
|
||||||
import mightypork.gamecore.gui.screens.ScreenLayer;
|
import mightypork.gamecore.gui.screens.ScreenLayer;
|
||||||
@@ -105,10 +105,10 @@ public class InventoryLayer extends ScreenLayer {
|
|||||||
|
|
||||||
final TextPainter txp = new TextPainter(Res.getFont("thick"), AlignX.CENTER, RGB.YELLOW, "Inventory");
|
final TextPainter txp = new TextPainter(Res.getFont("thick"), AlignX.CENTER, RGB.YELLOW, "Inventory");
|
||||||
gl.put(txp, pos, 0, 1, 1);
|
gl.put(txp, pos, 0, 1, 1);
|
||||||
txp.setPaddingHPerc(0, 5);
|
txp.setVPaddingPercent(5);
|
||||||
pos += 1;
|
pos += 1;
|
||||||
|
|
||||||
final HorizontalFixedFlowLayout row1 = new HorizontalFixedFlowLayout(root, null, AlignX.LEFT);
|
final FlowColumnLayout row1 = new FlowColumnLayout(root, null, AlignX.LEFT);
|
||||||
row1.setElementWidth(row1.height());
|
row1.setElementWidth(row1.height());
|
||||||
final ConstraintLayout cl1 = new ConstraintLayout(root);
|
final ConstraintLayout cl1 = new ConstraintLayout(root);
|
||||||
row1.setRect(cl1.axisV().grow(cl1.height().mul(2), Num.ZERO));
|
row1.setRect(cl1.axisV().grow(cl1.height().mul(2), Num.ZERO));
|
||||||
@@ -122,7 +122,7 @@ public class InventoryLayer extends ScreenLayer {
|
|||||||
row1.add(slots[2] = new InvSlot(2, slots));
|
row1.add(slots[2] = new InvSlot(2, slots));
|
||||||
row1.add(slots[3] = new InvSlot(3, slots));
|
row1.add(slots[3] = new InvSlot(3, slots));
|
||||||
|
|
||||||
final HorizontalFixedFlowLayout row2 = new HorizontalFixedFlowLayout(root, null, AlignX.LEFT);
|
final FlowColumnLayout row2 = new FlowColumnLayout(root, null, AlignX.LEFT);
|
||||||
row2.setElementWidth(row2.height());
|
row2.setElementWidth(row2.height());
|
||||||
final ConstraintLayout cl2 = new ConstraintLayout(root);
|
final ConstraintLayout cl2 = new ConstraintLayout(root);
|
||||||
row2.setRect(cl2.axisV().grow(cl2.height().mul(2), Num.ZERO));
|
row2.setRect(cl2.axisV().grow(cl2.height().mul(2), Num.ZERO));
|
||||||
@@ -137,7 +137,7 @@ public class InventoryLayer extends ScreenLayer {
|
|||||||
|
|
||||||
final TextPainter txp2 = new TextPainter(Res.getFont("thick"), AlignX.CENTER, RGB.WHITE, contextStrProv);
|
final TextPainter txp2 = new TextPainter(Res.getFont("thick"), AlignX.CENTER, RGB.WHITE, contextStrProv);
|
||||||
gl.put(txp2, pos, 0, 1, 1);
|
gl.put(txp2, pos, 0, 1, 1);
|
||||||
txp2.setPaddingHPerc(0, 25);
|
txp2.setVPaddingPercent(25);
|
||||||
|
|
||||||
bindKey(new KeyStroke(Keys.ESCAPE), new Runnable() {
|
bindKey(new KeyStroke(Keys.ESCAPE), new Runnable() {
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package mightypork.rogue.screens.game;
|
package mightypork.rogue.screens.game;
|
||||||
|
|
||||||
|
|
||||||
import mightypork.gamecore.gui.components.ClickableComponent;
|
import mightypork.gamecore.gui.components.input.ClickableComponent;
|
||||||
import mightypork.gamecore.render.Render;
|
import mightypork.gamecore.render.Render;
|
||||||
import mightypork.gamecore.resources.textures.TxQuad;
|
import mightypork.gamecore.resources.textures.TxQuad;
|
||||||
import mightypork.rogue.Res;
|
import mightypork.rogue.Res;
|
||||||
|
|||||||
@@ -0,0 +1,59 @@
|
|||||||
|
package mightypork.rogue.screens.layout_testing;
|
||||||
|
|
||||||
|
|
||||||
|
import mightypork.gamecore.app.AppAccess;
|
||||||
|
import mightypork.gamecore.gui.AlignX;
|
||||||
|
import mightypork.gamecore.gui.components.layout.linear.LinearGap;
|
||||||
|
import mightypork.gamecore.gui.components.layout.linear.LinearLayout;
|
||||||
|
import mightypork.gamecore.gui.components.layout.linear.LinearSquare;
|
||||||
|
import mightypork.gamecore.gui.components.painters.QuadPainter;
|
||||||
|
import mightypork.gamecore.gui.components.painters.TextPainter;
|
||||||
|
import mightypork.gamecore.gui.screens.LayeredScreen;
|
||||||
|
import mightypork.gamecore.gui.screens.Screen;
|
||||||
|
import mightypork.gamecore.gui.screens.ScreenLayer;
|
||||||
|
import mightypork.gamecore.util.math.color.pal.RGB;
|
||||||
|
import mightypork.gamecore.util.math.constraints.rect.Rect;
|
||||||
|
import mightypork.rogue.Res;
|
||||||
|
|
||||||
|
|
||||||
|
public class LayoutTestScreen extends LayeredScreen {
|
||||||
|
|
||||||
|
class Layer1 extends ScreenLayer {
|
||||||
|
|
||||||
|
public Layer1(Screen screen)
|
||||||
|
{
|
||||||
|
super(screen);
|
||||||
|
|
||||||
|
final Rect testRect = root.shrink(root.width().perc(10), root.height().perc(45));
|
||||||
|
|
||||||
|
final LinearLayout ll = new LinearLayout(root, AlignX.CENTER);
|
||||||
|
ll.setRect(testRect);
|
||||||
|
root.add(ll);
|
||||||
|
|
||||||
|
ll.add(new LinearSquare(new QuadPainter(RGB.RED)));
|
||||||
|
ll.add(new LinearGap(50));
|
||||||
|
ll.add(new LinearSquare(new QuadPainter(RGB.ORANGE)));
|
||||||
|
ll.add(new LinearGap(100));
|
||||||
|
ll.add(new LinearSquare(new QuadPainter(RGB.YELLOW)));
|
||||||
|
ll.add(new TextPainter(Res.getFont("tiny"), RGB.WHITE, "Text qjf'\"^"));
|
||||||
|
ll.add(new LinearSquare(new QuadPainter(RGB.GREEN)));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getZIndex()
|
||||||
|
{
|
||||||
|
return 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public LayoutTestScreen(AppAccess app)
|
||||||
|
{
|
||||||
|
super(app);
|
||||||
|
|
||||||
|
addLayer(new Layer1(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -3,7 +3,10 @@ package mightypork.rogue.screens.menu;
|
|||||||
|
|
||||||
import mightypork.gamecore.app.AppAccess;
|
import mightypork.gamecore.app.AppAccess;
|
||||||
import mightypork.gamecore.gui.Action;
|
import mightypork.gamecore.gui.Action;
|
||||||
|
import mightypork.gamecore.gui.AlignX;
|
||||||
|
import mightypork.gamecore.gui.components.input.TextButton;
|
||||||
import mightypork.gamecore.gui.components.layout.RowLayout;
|
import mightypork.gamecore.gui.components.layout.RowLayout;
|
||||||
|
import mightypork.gamecore.gui.components.layout.linear.LinearLayout;
|
||||||
import mightypork.gamecore.gui.components.painters.ImagePainter;
|
import mightypork.gamecore.gui.components.painters.ImagePainter;
|
||||||
import mightypork.gamecore.gui.components.painters.QuadPainter;
|
import mightypork.gamecore.gui.components.painters.QuadPainter;
|
||||||
import mightypork.gamecore.gui.screens.LayeredScreen;
|
import mightypork.gamecore.gui.screens.LayeredScreen;
|
||||||
@@ -19,7 +22,6 @@ import mightypork.gamecore.util.math.constraints.rect.Rect;
|
|||||||
import mightypork.rogue.GameStateManager.GameState;
|
import mightypork.rogue.GameStateManager.GameState;
|
||||||
import mightypork.rogue.Res;
|
import mightypork.rogue.Res;
|
||||||
import mightypork.rogue.events.GameStateRequest;
|
import mightypork.rogue.events.GameStateRequest;
|
||||||
import mightypork.rogue.screens.PushButton;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -65,17 +67,17 @@ public class ScreenMainMenu extends LayeredScreen {
|
|||||||
rows.enableCaching(true);
|
rows.enableCaching(true);
|
||||||
root.add(rows);
|
root.add(rows);
|
||||||
|
|
||||||
final ImagePainter ip = new ImagePainter(Res.getTxQuad("logo"));
|
final LinearLayout linlayout = new LinearLayout(root, AlignX.CENTER);
|
||||||
ip.keepAspectRatio();
|
linlayout.add(new ImagePainter(Res.getTxQuad("logo")));
|
||||||
rows.add(ip, 4);
|
rows.add(linlayout, 4);
|
||||||
rows.skip(1);
|
rows.skip(1);
|
||||||
|
|
||||||
PushButton btn;
|
TextButton btn;
|
||||||
|
|
||||||
final GLFont btnFont = Res.getFont("thick");
|
final GLFont btnFont = Res.getFont("thick");
|
||||||
|
|
||||||
// world button
|
// world button
|
||||||
btn = new PushButton(btnFont, "Play", PAL16.SLIMEGREEN);
|
btn = new TextButton(btnFont, "Play", PAL16.SLIMEGREEN);
|
||||||
btn.setAction(new Action() {
|
btn.setAction(new Action() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -103,7 +105,7 @@ public class ScreenMainMenu extends LayeredScreen {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// quit button
|
// quit button
|
||||||
btn = new PushButton(btnFont, "Exit", PAL16.BLOODRED);
|
btn = new TextButton(btnFont, "Exit", PAL16.BLOODRED);
|
||||||
btn.setAction(new Action() {
|
btn.setAction(new Action() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ public class ScreenSelectWorld extends LayeredScreen {
|
|||||||
TextPainter tp;
|
TextPainter tp;
|
||||||
|
|
||||||
rows.add(tp = new TextPainter(Res.getFont("thick"), AlignX.CENTER, RGB.YELLOW, "Save slot:"));
|
rows.add(tp = new TextPainter(Res.getFont("thick"), AlignX.CENTER, RGB.YELLOW, "Save slot:"));
|
||||||
tp.setPaddingHPerc(0, 20);
|
tp.setVPaddingPercent(20);
|
||||||
tp.setShadow(RGB.BLACK_50, tp.height().mul(0.6 / 8D).toVectXY());
|
tp.setShadow(RGB.BLACK_50, tp.height().mul(0.6 / 8D).toVectXY());
|
||||||
|
|
||||||
slot1 = new WorldSlot(root, Paths.SAVE_SLOT_1);
|
slot1 = new WorldSlot(root, Paths.SAVE_SLOT_1);
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import java.io.IOException;
|
|||||||
import mightypork.gamecore.app.AppAccess;
|
import mightypork.gamecore.app.AppAccess;
|
||||||
import mightypork.gamecore.gui.Action;
|
import mightypork.gamecore.gui.Action;
|
||||||
import mightypork.gamecore.gui.AlignX;
|
import mightypork.gamecore.gui.AlignX;
|
||||||
|
import mightypork.gamecore.gui.components.input.TextButton;
|
||||||
import mightypork.gamecore.gui.components.layout.ConstraintLayout;
|
import mightypork.gamecore.gui.components.layout.ConstraintLayout;
|
||||||
import mightypork.gamecore.gui.components.layout.GridLayout;
|
import mightypork.gamecore.gui.components.layout.GridLayout;
|
||||||
import mightypork.gamecore.gui.components.painters.QuadPainter;
|
import mightypork.gamecore.gui.components.painters.QuadPainter;
|
||||||
@@ -21,7 +22,6 @@ import mightypork.gamecore.util.math.constraints.rect.Rect;
|
|||||||
import mightypork.gamecore.util.strings.StringProvider;
|
import mightypork.gamecore.util.strings.StringProvider;
|
||||||
import mightypork.rogue.Res;
|
import mightypork.rogue.Res;
|
||||||
import mightypork.rogue.events.LoadingOverlayRequest;
|
import mightypork.rogue.events.LoadingOverlayRequest;
|
||||||
import mightypork.rogue.screens.PushButton;
|
|
||||||
import mightypork.rogue.world.World;
|
import mightypork.rogue.world.World;
|
||||||
import mightypork.rogue.world.WorldProvider;
|
import mightypork.rogue.world.WorldProvider;
|
||||||
|
|
||||||
@@ -42,9 +42,9 @@ public class WorldSlot extends ConstraintLayout {
|
|||||||
|
|
||||||
private IonBundle worldBundle;
|
private IonBundle worldBundle;
|
||||||
|
|
||||||
private PushButton loadBtn;
|
private TextButton loadBtn;
|
||||||
|
|
||||||
private PushButton delBtn;
|
private TextButton delBtn;
|
||||||
|
|
||||||
|
|
||||||
public WorldSlot(AppAccess app, File worldFile)
|
public WorldSlot(AppAccess app, File worldFile)
|
||||||
@@ -75,11 +75,11 @@ public class WorldSlot extends ConstraintLayout {
|
|||||||
|
|
||||||
final GLFont font = Res.getFont("thick");
|
final GLFont font = Res.getFont("thick");
|
||||||
|
|
||||||
gridl.put(loadBtn = new PushButton(font, "", RGB.WHITE), 0, 0, 1, 7);
|
gridl.put(loadBtn = new TextButton(font, "", RGB.WHITE), 0, 0, 1, 7);
|
||||||
loadBtn.textPainter.setPaddingHPerc(0, 20);
|
loadBtn.textPainter.setVPaddingPercent(20);
|
||||||
loadBtn.textPainter.setAlign(AlignX.LEFT);
|
loadBtn.textPainter.setAlign(AlignX.LEFT);
|
||||||
loadBtn.textPainter.setText(lblStrp);
|
loadBtn.textPainter.setText(lblStrp);
|
||||||
loadBtn.disableHover();
|
loadBtn.disableHoverEffect();
|
||||||
|
|
||||||
loadBtn.setAction(new Action() {
|
loadBtn.setAction(new Action() {
|
||||||
|
|
||||||
@@ -136,10 +136,10 @@ public class WorldSlot extends ConstraintLayout {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
gridl.put(delBtn = new PushButton(font, "X", RGB.RED), 0, 7, 1, 1);
|
gridl.put(delBtn = new TextButton(font, "X", RGB.RED), 0, 7, 1, 1);
|
||||||
delBtn.textPainter.setPaddingHPerc(0, 20);
|
delBtn.textPainter.setVPaddingPercent(20);
|
||||||
delBtn.textPainter.setAlign(AlignX.RIGHT);
|
delBtn.textPainter.setAlign(AlignX.RIGHT);
|
||||||
delBtn.disableHover();
|
delBtn.disableHoverEffect();
|
||||||
|
|
||||||
delBtn.setAction(new Action() {
|
delBtn.setAction(new Action() {
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user