diff -r 855eeee4166f -r 55c0a856ecd0 project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/ClientFlagsUpdate.java --- /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 + "]"; + } +}