123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- package pathgame.rendering;
- import me.hammerle.snuviengine.api.Key;
- import me.hammerle.snuviengine.api.Renderer;
- import pathgame.gameplay.Keys;
- import pathgame.gameplay.menu.Menu;
- import pathgame.gameplay.menu.MenuButton;
- public class MenuRenderer {
- private final float[] keyWidths;
- public MenuRenderer(Keys keys) {
- keyWidths = new float[keys.keys.length];
- }
- public void renderTick(Renderer r, float lag, Menu menu, Keys keys) {
- r.translateTo(0.0f, 0.0f);
- float scale = 2.0f;
- r.scale(scale, scale);
- r.updateMatrix();
- scale = 1.0f / scale;
- MenuButton[] options = menu.getOptions();
- float lastGap = 10.0f;
- float baseBoxHeight = 300.0f * scale;
- float textBoxPaddingY = (100.0f - (20.0f / 3.0f) * options.length) * scale;
- float windowHeight = r.getViewHeight() * scale;
- float windowWidth = r.getViewWidth() * scale;
- float y = (windowHeight - baseBoxHeight) * 0.5f + textBoxPaddingY;
- float textBoxHeight = baseBoxHeight - textBoxPaddingY * 2;
- float step = (textBoxHeight - r.getFontRenderer().getCharHeight()) / (options.length - 1) - lastGap / (options.length - 2);
- r.setMixColorEnabled(false);
- r.setColorEnabled(true);
- r.setTextureEnabled(false);
- r.enableBlending();
- r.getColorRenderer().drawRectangle(windowWidth * 0.10f, y - textBoxPaddingY * 0.5f, windowWidth * 0.90f, y + textBoxHeight + textBoxPaddingY * 0.5f, 0x50000000);
- r.setTextureEnabled(true);
- if(!menu.isOptionMenu()) {
- for(int i = 0; i < options.length - 1; i++) {
- renderText(options[i].getName(), menu.getActiveIndex() == i, r, windowWidth, y, false);
- y += step;
- }
- y += lastGap;
- renderText(options[options.length - 1].getName(), menu.getActiveIndex() == options.length - 1, r, windowWidth, y, false);
- } else {
- float max = Float.MIN_VALUE;
- for(int i = 0; i < keys.keys.length; i++) {
- keyWidths[i] = r.getFontRenderer().getSize(getKeyName(keys.keys[i])).getStringWidth();
- if(keyWidths[i] > max) {
- max = keyWidths[i];
- }
- }
- for(int i = 0; i < options.length - 1; i++) {
- boolean active = menu.getActiveIndex() == i;
- renderText(options[i].getName(), active, r, windowWidth, y, true);
- r.getFontRenderer().drawString(windowWidth * 0.85f - max * 0.5f - keyWidths[i] * 0.5f, y, addColor(getKeyName(keys.keys[i]), active));
- y += step;
- }
- y += lastGap;
- renderText(options[options.length - 1].getName(), menu.getActiveIndex() == options.length - 1, r, windowWidth, y, true);
- }
- }
- private void renderText(String s, boolean active, Renderer r, float wWidth, float y, boolean left) {
- if(left) {
- r.getFontRenderer().drawString(wWidth * 0.15f, y, addColor(s, active));
- } else {
- r.getFontRenderer().drawString(wWidth * 0.5f - (r.getFontRenderer().getSize(s).getStringWidth() * 0.5f), y, addColor(s, active));
- }
- }
- private String addColor(String s, boolean active) {
- return (active ? "#FFFFFF" : "#AAAAAA") + s;
- }
- private String getKeyName(Key key) {
- if(key.isRebinding()) {
- return "[...]";
- } else {
- return key.getName();
- }
- }
- }
|