Kenneth van Ewijk 10 yıl önce
ebeveyn
işleme
452f914117

+ 13 - 5
server/server/NetworkUser.java

@@ -59,13 +59,17 @@ public class NetworkUser {
 		this.match = match;
 		receivethread.start();
 	}
-	
-	public void sendOverlayText(String text){
-		sendMessage("3|"+text+"  ");
+
+	public void sendOverlayText(String text) {
+		sendMessage("3|" + text + "  ");
+	}
+
+	public void sendUpdateMessage(String m) {
+		sendMessage("2|" + m);
 	}
 	
-	public void sendUpdateMessage(String m){
-		sendMessage("2|"+m);
+	public void sendChatMessage(String m) {
+		sendMessage("4|" + m);
 	}
 
 	private void sendMessage(String m) {
@@ -88,7 +92,11 @@ public class NetworkUser {
 					match.playerShoot(pid);
 				}
 				break;
+			case "2":
+				match.sendChatMessage("[" + name + "] " + messagesplit[1]);
+				break;
 			}
+
 		} catch (IOException e) {
 			System.err.println("User disconnected");
 			receivethread.stop();

+ 5 - 0
server/server/match/Match.java

@@ -229,4 +229,9 @@ public class Match implements Runnable {
 	public void run() {
 
 	}
+
+	public void sendChatMessage(String string) {
+		nwuser1.sendChatMessage(string);
+		nwuser2.sendChatMessage(string);
+	}
 }

+ 25 - 4
src/model/InfoPanel.java

@@ -3,6 +3,8 @@ package model;
 import java.awt.Color;
 import java.awt.Font;
 import java.awt.Graphics2D;
+import java.util.ArrayList;
+import java.util.List;
 
 import main.Window;
 import model.state.PlayState;
@@ -13,9 +15,11 @@ public class InfoPanel {
 	private PlayState play;
 
 	private int OFFSET = 610;
+	private List<String> chat;
 
 	public InfoPanel(PlayState play) {
 		this.play = play;
+		chat = new ArrayList<String>();
 	}
 
 	public void paint(Graphics2D g2d) {
@@ -38,11 +42,13 @@ public class InfoPanel {
 
 		// Chat
 		g2d.drawLine(200, OFFSET, 200, Window.HEIGHT);
-		g2d.drawString("[" + play.getPlayer1().getName().toUpperCase() + "] > Hi!", 210, OFFSET + 50);
-		g2d.drawString("[" + play.getPlayer2().getName().toUpperCase() + "] > Hello", 210, OFFSET + 50 + g2d.getFont().getSize());
-		g2d.drawString("[" + play.getPlayer1().getName().toUpperCase() + "] > How are you?", 210, OFFSET + 50 + g2d.getFont().getSize() * 2);
-		g2d.drawString("[" + play.getPlayer2().getName().toUpperCase() + "] > Good :D", 210, OFFSET + 50 + g2d.getFont().getSize() * 3);
+		for(int i=0; i<chat.size(); i++)
+		{
+			g2d.drawString(chat.get(i), 210, OFFSET + 50  + g2d.getFont().getSize()*i);
+		}
 		g2d.drawLine(600, OFFSET, 600, Window.HEIGHT);
+		g2d.drawLine(200, OFFSET + 60  + g2d.getFont().getSize()*3, 600, OFFSET + 60  + g2d.getFont().getSize()*3);
+		g2d.drawString(play.chatMessage, 270, Window.HEIGHT - 20 - g2d.getFont().getSize());
 
 		g2d.drawLine(Window.WIDTH - 35, OFFSET, Window.WIDTH - 35, Window.HEIGHT);
 		g2d.drawString(play.getPlayer2().getName(), Window.WIDTH - 40 - play.getPlayer2().getName().length() * 15, OFFSET + 5 + g2d.getFont().getSize());
@@ -52,6 +58,21 @@ public class InfoPanel {
 		}
 		g2d.drawLine(Window.WIDTH - 35, OFFSET + g2d.getFont().getSize() * 3, Window.WIDTH - 200, OFFSET + g2d.getFont().getSize() * 3);
 		g2d.drawString("<Powerups>", Window.WIDTH - 40 - 140, OFFSET + g2d.getFont().getSize() * 4);
+		
+		if(play.typing)
+			g2d.setColor(Color.RED);
+		g2d.drawString("Chat: ", 210, Window.HEIGHT - 20 - g2d.getFont().getSize());
+	}
+
+	public void addChatMessage(String msg) {
+		chat.add(msg);
+		
+		if(chat.size() > 4)
+			chat.remove(0);
+	}
+
+	public void clearChat() {
+		chat.clear();
 	}
 
 }

+ 10 - 0
src/model/NetworkConnection.java

@@ -89,7 +89,12 @@ public class NetworkConnection {
 				break;
 			case "3": //Overlay text
 				play.setOverlayText(messagesplit[1]);
+				break;
+			case "4": //Chat Message
+				play.addChatMessage(messagesplit[1]);
+				break;
 			}
+			
 		} catch (IOException e) {
 			play.setOverlayText("Connection to the server closed");
 			System.err.println("Connection to the server closed");
@@ -101,6 +106,11 @@ public class NetworkConnection {
 	public void sendInput(int direction, int shoot) {
 		sendMessage("1|" + direction + "|" + shoot);
 	}
+	
+	public void sendChatMessage(String str)
+	{
+		sendMessage("2|" + str);
+	}
 
 	private void sendMessage(String m) {
 		try {

+ 68 - 23
src/model/state/PlayState.java

@@ -27,6 +27,9 @@ public class PlayState extends State {
 	private int timeleftpercent, direction, shoot;
 	private String overlayText;
 
+	public String chatMessage = "";
+	public boolean typing = false;
+
 	public PlayState(GameStateManager gsm) {
 		super("play", gsm);
 		player1 = new Player(Images.getImage(ImageType.PLAYER1), 40, 550, "");
@@ -41,6 +44,10 @@ public class PlayState extends State {
 		player2 = new Player(Images.getImage(ImageType.PLAYER2), 90, 550, p2);
 		infopanel = new InfoPanel(this);
 		balls = new ArrayList<Ball>();
+
+		typing = false;
+		chatMessage = "";
+		infopanel.clearChat();
 	}
 
 	/* INIT AND EXIT */
@@ -130,40 +137,74 @@ public class PlayState extends State {
 		this.timeleftpercent = timeleftpercent;
 	}
 
-	public void setOverlayText(String text){
+	public void setOverlayText(String text) {
 		this.overlayText = text;
 	}
+
 	/* EVENTS */
 	@Override
 	public void keyPressed(KeyEvent e) {
-		switch (e.getKeyCode()) {
-		case KeyEvent.VK_RIGHT:
-			direction = 1;
-			break;
-		case KeyEvent.VK_LEFT:
-			direction = -1;
-			break;
-		case KeyEvent.VK_SPACE:
-			shoot = 1;
-			break;
+		if (!typing) {
+			switch (e.getKeyCode()) {
+			case KeyEvent.VK_RIGHT:
+				direction = 1;
+				break;
+			case KeyEvent.VK_LEFT:
+				direction = -1;
+				break;
+			case KeyEvent.VK_SPACE:
+				shoot = 1;
+				break;
+			}
+		} else {
+			switch (e.getKeyCode()) {
+			case KeyEvent.VK_ENTER:
+				if (typing) {
+					System.out.println("\nSend");
+					typing = false;
+					if(chatMessage.length()>0)
+						nwc.sendChatMessage(chatMessage);
+					chatMessage = "";
+				}
+			}
 		}
 		nwc.sendInput(direction, shoot);
 	}
 
 	@Override
 	public void keyReleased(KeyEvent e) {
-		switch (e.getKeyCode()) {
-		case KeyEvent.VK_RIGHT:
-			direction = 0;
-		case KeyEvent.VK_LEFT:
-			direction = 0;
-			break;
-		case KeyEvent.VK_SPACE:
-			shoot = 0;
-			break;
-		case KeyEvent.VK_ESCAPE:
-			gsm.setState("menu");
-			break;
+		if (!typing)
+		{
+			switch (e.getKeyCode()) {
+			case KeyEvent.VK_RIGHT:
+				direction = 0;
+			case KeyEvent.VK_LEFT:
+				direction = 0;
+				break;
+			case KeyEvent.VK_SPACE:
+				shoot = 0;
+				break;
+			case KeyEvent.VK_ESCAPE:
+				gsm.setState("menu");
+				break;
+			case KeyEvent.VK_C:
+				typing = true;
+				System.out.print("Typing: ");
+				break;
+			}
+		}
+		else
+		{
+			if(e.getKeyCode() != KeyEvent.VK_BACK_SPACE)
+			{
+				chatMessage += e.getKeyChar();
+				System.out.println(chatMessage);
+			}
+			else if(e.getKeyCode() == KeyEvent.VK_BACK_SPACE && chatMessage.length() > 0)
+			{
+				chatMessage = chatMessage.substring(0, chatMessage.length()-1);
+				System.out.print(chatMessage);
+			}
 		}
 		nwc.sendInput(direction, shoot);
 	}
@@ -171,4 +212,8 @@ public class PlayState extends State {
 	@Override
 	public void keyTyped(KeyEvent e) {
 	};
+
+	public void addChatMessage(String msg) {
+		infopanel.addChatMessage(msg);
+	}
 }

BIN
src/resources/image/background.png