package me.hammerle.snuviengine.game; import me.hammerle.snuviengine.api.FontRenderer; import me.hammerle.snuviengine.api.Shader; public class Chat { private final char[] input = new char[256]; private final StringBuilder[] chat = new StringBuilder[25]; private int startIndex = 0; private int writeIndex = 0; private int viewIndex = 0; private int viewLenght = 5; private final int lineLenght = 20; public Chat() { for(int i = 0; i < chat.length; i++) { chat[i] = new StringBuilder(); } for(int i = 0; i < 30; i++) { addString(String.valueOf(i).toCharArray()); } } private void nextWriteIndex() { writeIndex = (writeIndex + 1) % chat.length; chat[writeIndex].delete(0, chat[writeIndex].length()); if(writeIndex == startIndex) { startIndex = (startIndex + 1) % chat.length; } int distance; if(viewIndex < writeIndex) { distance = writeIndex - viewIndex; } else { distance = chat.length - viewIndex + writeIndex; } if(distance - 1 == viewLenght) { viewIndex = (viewIndex + 1) % chat.length; } } private void addString(char[] text) { int pos = 0; for(int i = 0; i < text.length; i++) { int j = i; int w = 0; OUTER: while(j < text.length) { switch(text[j]) { case ' ': break OUTER; case FontRenderer.COLOR_CHAR: j++; if(j < text.length) { j++; } break; default: w++; j++; break; } } pos += w; if(pos > lineLenght) { pos = w; nextWriteIndex(); } while(i < j) { chat[writeIndex].append(text[i]); i++; } pos++; chat[writeIndex].append(' '); } nextWriteIndex(); } public void tick() { if(((Game.DOWN.getTime() + 15) & 0x7) == 0) { if((viewIndex + viewLenght) % chat.length != writeIndex) { viewIndex = (viewIndex + 1) % chat.length; } } if(((Game.UP.getTime() + 15) & 0x7) == 0) { if(viewIndex != startIndex) { viewIndex--; if(viewIndex < 0) { viewIndex += chat.length; } } } } public void renderTick() { Shader.setTextureEnabled(true); Shader.setColorEnabled(true); float x = 0.0f; float y = 0.0f; FontRenderer fr = Shader.getFontRenderer(); int i = viewIndex; int end = (viewIndex + viewLenght) % chat.length; while(i != end) { y = fr.drawString(x, y, true, chat[i].toString()); i = (i + 1) % chat.length; } } }