project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/ClientFlagsUpdate.java
changeset 7691 55c0a856ecd0
child 10017 de822cd3df3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/ClientFlagsUpdate.java	Sun Sep 16 22:31:34 2012 +0200
@@ -0,0 +1,48 @@
+package org.hedgewars.hedgeroid.netplay;
+
+import org.hedgewars.hedgeroid.Datastructures.Player;
+import org.hedgewars.hedgeroid.Datastructures.PlayerInRoom;
+
+final class ClientFlagsUpdate {
+	public static final char FLAG_ADMIN = 'a';
+	public static final char FLAG_CHIEF = 'h';
+	public static final char FLAG_READY = 'r';
+	public static final char FLAG_REGISTERED = 'u';
+	
+	public final String nick, flags;
+	public final boolean newFlagState;
+	
+	public ClientFlagsUpdate(String nick, String flags, boolean newFlagState) {
+		this.nick = nick;
+		this.flags = flags;
+		this.newFlagState = newFlagState;
+	}
+
+	public Player applyTo(Player p) {
+		return new Player(
+				p.name,
+				updatedFlag(FLAG_REGISTERED, p.registered),
+				updatedFlag(FLAG_ADMIN, p.admin));
+	}
+	
+	public PlayerInRoom applyTo(PlayerInRoom p) {
+		return new PlayerInRoom(
+				this.applyTo(p.player),
+				updatedFlag(FLAG_READY, p.ready),
+				updatedFlag(FLAG_CHIEF, p.roomChief));
+	}
+	
+	public boolean appliesTo(char flag) {
+		return flags.indexOf(flag) != -1;
+	}
+	
+	private boolean updatedFlag(char flag, boolean oldValue) {
+		return appliesTo(flag) ? newFlagState : oldValue;
+	}
+	
+	@Override
+	public String toString() {
+		return "ClientFlagsUpdate [nick=" + nick + ", flags=" + flags
+				+ ", newFlagState=" + newFlagState + "]";
+	}
+}