parent
3cad5ad202
commit
990c3de5ca
@ -0,0 +1,11 @@ |
|||||||
|
package mightypork.gamecore.gui; |
||||||
|
|
||||||
|
/** |
||||||
|
* Horizontal align sides |
||||||
|
* |
||||||
|
* @author MightyPork |
||||||
|
*/ |
||||||
|
public enum AlignX |
||||||
|
{ |
||||||
|
LEFT, CENTER, RIGHT; |
||||||
|
} |
@ -0,0 +1,11 @@ |
|||||||
|
package mightypork.gamecore.gui; |
||||||
|
|
||||||
|
/** |
||||||
|
* Vertical align sides |
||||||
|
* |
||||||
|
* @author MightyPork |
||||||
|
*/ |
||||||
|
public enum AlignY |
||||||
|
{ |
||||||
|
TOP, CENTER, BOTTOM; |
||||||
|
} |
@ -0,0 +1,82 @@ |
|||||||
|
package mightypork.gamecore.gui.components.layout; |
||||||
|
|
||||||
|
|
||||||
|
import mightypork.gamecore.control.AppAccess; |
||||||
|
import mightypork.gamecore.gui.AlignX; |
||||||
|
import mightypork.gamecore.gui.components.LayoutComponent; |
||||||
|
import mightypork.gamecore.gui.components.Component; |
||||||
|
import mightypork.utils.math.constraints.num.Num; |
||||||
|
import mightypork.utils.math.constraints.rect.Rect; |
||||||
|
import mightypork.utils.math.constraints.rect.proxy.RectBound; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Holder with same-sized columns, aligned to left or right |
||||||
|
* |
||||||
|
* @author MightyPork |
||||||
|
*/ |
||||||
|
public class HorizontalFixedFlowLayout extends LayoutComponent { |
||||||
|
|
||||||
|
private int col = 0; |
||||||
|
private Num colWidth; |
||||||
|
private AlignX align; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* @param app app access |
||||||
|
* @param context context |
||||||
|
* @param elementWidth width of all elements |
||||||
|
* @param align component align. Legal values are LEFT and RIGHT. |
||||||
|
*/ |
||||||
|
public HorizontalFixedFlowLayout(AppAccess app, RectBound context, Num elementWidth, AlignX align) { |
||||||
|
super(app, context); |
||||||
|
this.colWidth = elementWidth; |
||||||
|
this.align = align; |
||||||
|
|
||||||
|
if (align != AlignX.LEFT && align != AlignX.RIGHT) { |
||||||
|
throw new IllegalArgumentException("Can align only left or right."); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* make a new holder.<br> |
||||||
|
* Context must be assigned before rendering. |
||||||
|
* |
||||||
|
* @param app app access |
||||||
|
* @param elementWidth width of all elements |
||||||
|
* @param align component align. Legal values are LEFT and RIGHT. |
||||||
|
*/ |
||||||
|
public HorizontalFixedFlowLayout(AppAccess app, Num elementWidth, AlignX align) { |
||||||
|
this(app, null, elementWidth, align); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Add an item |
||||||
|
* |
||||||
|
* @param elem |
||||||
|
*/ |
||||||
|
public void add(final Component elem) |
||||||
|
{ |
||||||
|
if (elem == null) return; |
||||||
|
|
||||||
|
final Rect r; |
||||||
|
|
||||||
|
switch (align) { |
||||||
|
case LEFT: |
||||||
|
r = leftEdge().growRight(colWidth).moveX(colWidth.mul(col++)); |
||||||
|
break; |
||||||
|
case RIGHT: |
||||||
|
r = rightEdge().growLeft(colWidth).moveX(colWidth.mul(-(col++))); |
||||||
|
break; |
||||||
|
default: |
||||||
|
throw new IllegalArgumentException("Bad align."); |
||||||
|
} |
||||||
|
|
||||||
|
elem.setRect(r); |
||||||
|
|
||||||
|
attach(elem); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,82 @@ |
|||||||
|
package mightypork.gamecore.gui.components.layout; |
||||||
|
|
||||||
|
|
||||||
|
import mightypork.gamecore.control.AppAccess; |
||||||
|
import mightypork.gamecore.gui.AlignY; |
||||||
|
import mightypork.gamecore.gui.components.LayoutComponent; |
||||||
|
import mightypork.gamecore.gui.components.Component; |
||||||
|
import mightypork.utils.math.constraints.num.Num; |
||||||
|
import mightypork.utils.math.constraints.rect.Rect; |
||||||
|
import mightypork.utils.math.constraints.rect.proxy.RectBound; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Holder with same-sized rows, aligned to top or bottom |
||||||
|
* |
||||||
|
* @author MightyPork |
||||||
|
*/ |
||||||
|
public class VerticalFixedFlowLayout extends LayoutComponent { |
||||||
|
|
||||||
|
private int row = 0; |
||||||
|
private Num rowHeight; |
||||||
|
private AlignY align; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* @param app app access |
||||||
|
* @param context context |
||||||
|
* @param elementHeight height of all elements |
||||||
|
* @param align component align. Legal values are TOP and BOTTOM. |
||||||
|
*/ |
||||||
|
public VerticalFixedFlowLayout(AppAccess app, RectBound context, Num elementHeight, AlignY align) { |
||||||
|
super(app, context); |
||||||
|
this.rowHeight = elementHeight; |
||||||
|
this.align = align; |
||||||
|
|
||||||
|
if (align != AlignY.TOP && align != AlignY.BOTTOM) { |
||||||
|
throw new IllegalArgumentException("Can align only to top or bottom."); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* make a new holder.<br> |
||||||
|
* Context must be assigned before rendering. |
||||||
|
* |
||||||
|
* @param app app access |
||||||
|
* @param elementHeight height of all elements |
||||||
|
* @param align component align. Legal values are TOP and BOTTOM. |
||||||
|
*/ |
||||||
|
public VerticalFixedFlowLayout(AppAccess app, Num elementHeight, AlignY align) { |
||||||
|
this(app, null, elementHeight, align); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Add an item |
||||||
|
* |
||||||
|
* @param elem |
||||||
|
*/ |
||||||
|
public void add(final Component elem) |
||||||
|
{ |
||||||
|
if (elem == null) return; |
||||||
|
|
||||||
|
final Rect r; |
||||||
|
|
||||||
|
switch (align) { |
||||||
|
case TOP: |
||||||
|
r = topEdge().growDown(rowHeight).moveY(rowHeight.mul(row++)); |
||||||
|
break; |
||||||
|
case BOTTOM: |
||||||
|
r = bottomEdge().growUp(rowHeight).moveY(rowHeight.mul(-(row++))); |
||||||
|
break; |
||||||
|
default: |
||||||
|
throw new IllegalArgumentException("Bad align."); |
||||||
|
} |
||||||
|
|
||||||
|
elem.setRect(r); |
||||||
|
|
||||||
|
attach(elem); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,46 @@ |
|||||||
|
package mightypork.rogue.screens.main_menu; |
||||||
|
|
||||||
|
import mightypork.gamecore.gui.AlignX; |
||||||
|
import mightypork.gamecore.gui.AlignY; |
||||||
|
import mightypork.gamecore.gui.components.layout.VerticalFixedFlowLayout; |
||||||
|
import mightypork.gamecore.gui.components.painters.TextPainter; |
||||||
|
import mightypork.gamecore.gui.screens.Screen; |
||||||
|
import mightypork.gamecore.gui.screens.ScreenLayer; |
||||||
|
import mightypork.gamecore.render.fonts.GLFont; |
||||||
|
import mightypork.rogue.Res; |
||||||
|
import mightypork.utils.math.color.RGB; |
||||||
|
import mightypork.utils.math.constraints.num.Num; |
||||||
|
import mightypork.utils.math.constraints.rect.Rect; |
||||||
|
|
||||||
|
|
||||||
|
class MenuLayer extends ScreenLayer { |
||||||
|
|
||||||
|
public MenuLayer(Screen screen) { |
||||||
|
super(screen); |
||||||
|
|
||||||
|
init(); |
||||||
|
} |
||||||
|
|
||||||
|
private void init() |
||||||
|
{ |
||||||
|
Rect menuBox = root.shrink(root.height().min(root.width()).mul(0.1)); |
||||||
|
|
||||||
|
Num lineHeight = menuBox.height().min(menuBox.width()).mul(0.13); |
||||||
|
|
||||||
|
VerticalFixedFlowLayout layout = new VerticalFixedFlowLayout(root, menuBox, lineHeight, AlignY.TOP); |
||||||
|
root.add(layout); |
||||||
|
|
||||||
|
GLFont f = Res.getFont("press_start"); |
||||||
|
layout.add(new TextPainter(f, AlignX.CENTER, RGB.WHITE, "Hello!")); |
||||||
|
layout.add(new TextPainter(f, AlignX.CENTER, RGB.CYAN, "Woof Woof")); |
||||||
|
layout.add(new TextPainter(f, AlignX.CENTER, RGB.PURPLE, "MooooOOoOO")); |
||||||
|
layout.add(new TextPainter(f, AlignX.CENTER, RGB.GREEN, "Bye!")); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getPriority() |
||||||
|
{ |
||||||
|
return 2; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,23 @@ |
|||||||
|
package mightypork.rogue.screens.main_menu; |
||||||
|
|
||||||
|
|
||||||
|
import mightypork.gamecore.control.AppAccess; |
||||||
|
import mightypork.gamecore.gui.screens.LayeredScreen; |
||||||
|
|
||||||
|
|
||||||
|
public class ScreenMainMenu extends LayeredScreen { |
||||||
|
|
||||||
|
public ScreenMainMenu(AppAccess app) { |
||||||
|
super(app); |
||||||
|
|
||||||
|
addLayer(new MenuLayer(this)); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public String getName() |
||||||
|
{ |
||||||
|
return "rogue.menu"; |
||||||
|
} |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue