MenuRenderer.java 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package pathgame.rendering;
  2. import me.hammerle.snuviengine.api.Key;
  3. import me.hammerle.snuviengine.api.Renderer;
  4. import pathgame.gameplay.Keys;
  5. import pathgame.gameplay.menu.Menu;
  6. import pathgame.gameplay.menu.MenuButton;
  7. public class MenuRenderer {
  8. private final float[] keyWidths;
  9. public MenuRenderer(Keys keys) {
  10. keyWidths = new float[keys.keys.length];
  11. }
  12. public void renderTick(Renderer r, float lag, Menu menu, Keys keys) {
  13. r.translateTo(0.0f, 0.0f);
  14. float scale = 2.0f;
  15. r.scale(scale, scale);
  16. r.updateMatrix();
  17. scale = 1.0f / scale;
  18. MenuButton[] options = menu.getOptions();
  19. float lastGap = 10.0f;
  20. float baseBoxHeight = 300.0f * scale;
  21. float textBoxPaddingY = (100.0f - (20.0f / 3.0f) * options.length) * scale;
  22. float windowHeight = r.getViewHeight() * scale;
  23. float windowWidth = r.getViewWidth() * scale;
  24. float y = (windowHeight - baseBoxHeight) * 0.5f + textBoxPaddingY;
  25. float textBoxHeight = baseBoxHeight - textBoxPaddingY * 2;
  26. float step = (textBoxHeight - r.getFontRenderer().getCharHeight()) / (options.length - 1) - lastGap / (options.length - 2);
  27. r.setMixColorEnabled(false);
  28. r.setColorEnabled(true);
  29. r.setTextureEnabled(false);
  30. r.enableBlending();
  31. r.getColorRenderer().drawRectangle(windowWidth * 0.10f, y - textBoxPaddingY * 0.5f, windowWidth * 0.90f, y + textBoxHeight + textBoxPaddingY * 0.5f, 0x50000000);
  32. r.setTextureEnabled(true);
  33. if(!menu.isOptionMenu()) {
  34. for(int i = 0; i < options.length - 1; i++) {
  35. renderText(options[i].getName(), menu.getActiveIndex() == i, r, windowWidth, y, false);
  36. y += step;
  37. }
  38. y += lastGap;
  39. renderText(options[options.length - 1].getName(), menu.getActiveIndex() == options.length - 1, r, windowWidth, y, false);
  40. } else {
  41. float max = Float.MIN_VALUE;
  42. for(int i = 0; i < keys.keys.length; i++) {
  43. keyWidths[i] = r.getFontRenderer().getSize(getKeyName(keys.keys[i])).getStringWidth();
  44. if(keyWidths[i] > max) {
  45. max = keyWidths[i];
  46. }
  47. }
  48. for(int i = 0; i < options.length - 1; i++) {
  49. boolean active = menu.getActiveIndex() == i;
  50. renderText(options[i].getName(), active, r, windowWidth, y, true);
  51. r.getFontRenderer().drawString(windowWidth * 0.85f - max * 0.5f - keyWidths[i] * 0.5f, y, addColor(getKeyName(keys.keys[i]), active));
  52. y += step;
  53. }
  54. y += lastGap;
  55. renderText(options[options.length - 1].getName(), menu.getActiveIndex() == options.length - 1, r, windowWidth, y, true);
  56. }
  57. }
  58. private void renderText(String s, boolean active, Renderer r, float wWidth, float y, boolean left) {
  59. if(left) {
  60. r.getFontRenderer().drawString(wWidth * 0.15f, y, addColor(s, active));
  61. } else {
  62. r.getFontRenderer().drawString(wWidth * 0.5f - (r.getFontRenderer().getSize(s).getStringWidth() * 0.5f), y, addColor(s, active));
  63. }
  64. }
  65. private String addColor(String s, boolean active) {
  66. return (active ? "#FFFFFF" : "#AAAAAA") + s;
  67. }
  68. private String getKeyName(Key key) {
  69. if(key.isRebinding()) {
  70. return "[...]";
  71. } else {
  72. return key.getName();
  73. }
  74. }
  75. }