import java.awt.*; import ChannelInfo; import sfi; public class Chat { public static final short MESSAGE = 1; public static final short TITLE = 2; public short focus = MESSAGE; private ChannelInfo chan[]; private int totalUsers; private sfi comp; private String msg[] = new String[16]; private int chanStart = 0; private int chanSelect = -1; public String chanTitle = ""; public String chatMsg = ""; private boolean cursor = false; private int TTL = 1200; Chat(sfi c) { comp = c; comp.net.sendMessage("@list"); TTL = 1200; } public void addMessage(String m) { for (int i = 15; i > 0; i--) msg[i] = msg[i-1]; msg[0] = m; } public void addLetter(char c) { if (focus == MESSAGE && chatMsg.length() < 55) chatMsg += c; else if (focus == TITLE && chanTitle.length() < 22) chanTitle += c; } public void removeLetter() { if (focus == MESSAGE) { char[] temp = new char[chatMsg.length()]; chatMsg.getChars(0, chatMsg.length(), temp, 0); if (temp.length > 0) chatMsg = new String(temp, 0, chatMsg.length() -1); } else if (focus == TITLE) { char[] temp = new char[chanTitle.length()]; chanTitle.getChars(0, chanTitle.length(), temp, 0); if (temp.length > 0) chanTitle = new String(temp, 0, chanTitle.length() -1); } } public void mouseDown(int x, int y) { if (x > 450 && x < 460 && y > 280 && y < 300 && chanStart > 0) chanStart -= 1; else if (x > 450 && x < 460 && y > 360 && y < 380 && chan != null && chanStart+5 < chan.length) chanStart += 1; else if (x > 230 && x < 450 && y > 290 && y < 375) { for (int i = chanStart; i < chanStart+5; i++) { if (y > 290+(i-chanStart)*15 && y < 305+(i-chanStart)*25) { if (i == chanSelect) comp.joinChan(chan[i].chanID, chan[i].mode); else chanSelect = i; } } } else if (x > 20 && x < 220 && y > 325 && y < 341) { focus = TITLE; } else if (x > 30 && x < 130 && y > 345 && y < 365 && chanTitle.length() > 6) { if (chan != null) comp.joinNewChan(comp.getGameID() + chan.length + 10, chanTitle, "map1"); else comp.joinNewChan(comp.getGameID() + 10, chanTitle, "map1"); } else { focus = MESSAGE; chanSelect = -1; } } public void paint(Graphics g) { if (TTL-- == 0) { comp.net.sendMessage("@list"); TTL = 1200; chan = null; } g.setFont(comp.font); g.setColor(Color.black); g.fillRect(0,0,470,400); g.setColor(Color.white); g.drawRect(10, 10, 450, 248); g.drawRect(10, 263, 450, 16); cursor = !cursor; for (int i = 15; i >= 0; i--) { if (msg[i] != null) g.drawString(msg[i], 12, (15-i)*15+25); } if (focus == MESSAGE) { g.drawString(chatMsg, 12, 275); if (cursor) g.drawLine(14 + comp.fontSize.stringWidth(chatMsg), 265, 14 + comp.fontSize.stringWidth(chatMsg), 277); } g.drawString("Make New Battle", 10, 302); g.drawString("Title:", 20, 320); g.drawRect(20, 325, 200, 16); if (focus == TITLE) { g.drawString(chanTitle, 22, 339); if (cursor) g.drawLine(22 + comp.fontSize.stringWidth(chanTitle), 327, 22 + comp.fontSize.stringWidth(chanTitle), 339); } if (chanTitle.length() > 7) { g.drawRect(30, 345, 100, 20); g.drawString ("Make Battle!", 35, 359); } g.drawRect(230, 285, 230, 105); if (chan != null && chan.length > 5) { g.drawRect(450, 285, 10, 90); if (chanStart > 0) { g.drawLine(455, 288, 452, 295); g.drawLine(455, 288, 458, 295); g.drawLine(452, 295, 458, 295); } if (chan.length > 5+chanStart) { g.drawLine(455, 373, 452, 364); g.drawLine(455, 373, 458, 364); g.drawLine(452, 364, 458, 364); } } if (chan != null) { for (int i = chanStart; i < chanStart+5 && i < chan.length; i++) { if (i == chanSelect) { g.setColor(Color.blue); g.fillRect(231,290+(i-chanStart)*15, 228, 15); } g.setColor(Color.white); g.drawString("" + (i+1) + ") " + chan[i].title + " (" + chan[i].userCount + " users)", 233, (i-chanStart)*15+302); } g.drawLine(230, 375, 460, 375); if (chanSelect > -1) { g.setColor(Color.red); g.drawString("Click Again to Join Battle. . .", 233, 388); } else g.drawString("" + chan.length + " total Channels, " + totalUsers + " total Users", 233, 388); } else { g.drawLine(230, 375, 460, 375); g.drawString("No Current Channels", 233, 388); } } public void addChan(int id, String t, String m, int uc) { if (chan == null) chan = addChannel(id, t, m, uc, 0); else chan = addChannel(id, t, m, uc, chan.length); } private ChannelInfo[] addChannel(int id, String t, String m, int uc, int l) { ChannelInfo temp[] = new ChannelInfo[l+1]; totalUsers = uc; for (int i = 0; i < l; i++) { temp[i] = chan[i]; totalUsers += chan[i].userCount; } temp[l] = new ChannelInfo(id, t, m, uc); return temp; } }