123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- 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;
- }
- }
- }
|