//using System.Collections.Generic; //using Chop.Game.User; //using System; //namespace Chop.Game.Rooms.Games //{ // public class VirtualGame // { // #region Fields // public int mID; // public string mName; // public GameClient mOwner; // public byte mMapID; // public VirtualGameState mState; // public Lobby mLobby; // public bool mIsStarting; // public short mSecondsToStart; // public GameRoom mRoom; // public GameTeam[] mTeams; // //public List mPlayers; // public List mSubscribers; // guys looking at info, for updating // public List mSpectators; // #endregion // #region Properties // public bool Launchable // { // get // { // return true; ///* // byte b = 0; // for (int i = 0; i < mTeams.Length; i++) // if (!mTeams[i].IsEmpty) // b++; // return (b > 1); //*/ // } // } // public List Users // { // get // { // List d = new List(); // for (int i = 0; i < mTeams.Length; i++) // foreach (GamePlayer user in mTeams[i].Players) // d.Add(user); // return d; // } // } // #endregion // #region (De)Constructors ETC // public VirtualGame() // { // //mPlayers = new List(); // mSubscribers = new List(); // mSpectators = new List(); // } // public void Start() // { // mIsStarting = true; // mRoom = new GameRoom {mGame = this}; // mRoom.Init(); // } // public void Stop() // { // RemoveAllPlayers(6); // RemoveAllSpectators(6); // RemoveAllSubscribers(6); // mLobby.RemoveGame(mID); // } // #endregion // #region User managament // public void InitTeams(byte count) // { // mTeams = new GameTeam[count]; // for (byte i = 0; i < mTeams.Length; i++) // mTeams[i] = new GameTeam(i, (byte)(12 / count)); // } // public byte GetFreeTeam() // { // byte i = 0; // foreach (GameTeam team in mTeams) // { // if (team.HasOpenSpace) // return i; // i++; // } // return 12; // } // public void AddSubscriber(GameClient client) // { // client.mGame = this; // if (!mSubscribers.Contains(client)) // mSubscribers.Add(client); // } // public void RemoveSubscriber(GameClient client) // { // if (client.GamePlayer == null) // client.mGame = null; // if (mSubscribers.Contains(client)) // mSubscribers.Remove(client); // } // //public void AddSpectator(GameClient client) // //{ // // RemoveSubscriber(client); // // if (!mSpectators.ContainsKey(client.ID)) // // mSpectators.Add(client.ID, client); // //} // //public void RemoveSpectator(GameClient client) // //{ // // if (mSpectators.ContainsKey(client.ID)) // // mSpectators.Remove(client.ID); // //} // //public void AddPlayer(GamePlayer user) // //{ // // byte team = GetFreeTeam(); // // RemoveSubscriber(user.mClient); // // mTeams[team].Add(user.mDynID, user); // // user.mTeamID = team; // // user.mGame = this; // // SendGameInfo(); // //} // public void AddPlayer(GameClient client, byte team) // { // RemoveSubscriber(client); // if (!mTeams[team].HasOpenSpace) // return; // if (client.GamePlayer != null) // { // mTeams[client.GamePlayer.mTeamID].RemovePlayer(client.GamePlayer); // client.GamePlayer.mTeamID = team; // } // else // { // GamePlayer player = new GamePlayer {mTeamID = team, mX = (byte) new Random().Next(0, 15)}; // player.mY = (byte)new Random(player.mTeamID).Next(0, 15); // client.mGame = this; // client.GamePlayer = player; // } // mTeams[team].AddPlayer(client.GamePlayer); // SendGameInfo(); // } // public void RemoveMember(GameClient client, bool error, byte reason) // { // //if (mSpectators.ContainsKey(client.ID)) // // RemoveSpectator(client); else // if (mSubscribers.Contains(client)) // RemoveSubscriber(client); // if(ContainsPlayer(client.GamePlayer)) // RemovePlayer(client.GamePlayer, error, reason); // } // public void RemovePlayer(GamePlayer player, bool error, byte reason) // { // if (!ContainsPlayer(player)) // return; // mTeams[player.mTeamID].RemovePlayer(player); // ResponseBuilder r = error ? new ResponseBuilder(236) : new ResponseBuilder(237); // r.AppendInt32(reason); // player.mClient.SendMessage(r); // SendGameInfo(); // if (player.mClient == mOwner) // STOP GAME!!!!! // { // Stop(); // return; // } // player.mClient.GamePlayer = null; // player.mClient.mGame = null; // } // public void RemoveAllPlayers(byte reason) // { // ResponseBuilder r = new ResponseBuilder(236); // "Cl" // r.AppendInt32(reason); // foreach (GameTeam t in mTeams) // foreach (GamePlayer player in t.Players) // { // player.mClient.SendMessage(r); // player.mClient.GamePlayer = null; // player.mClient.mGame = null; // } // } // public void RemoveAllSpectators(byte reason) // { // ResponseBuilder r = new ResponseBuilder(236); // "Cl" // r.AppendInt32(reason); // foreach (GameClient client in mSpectators) // { // client.mGame = null; // client.SendMessage(r); // } // } // public void RemoveAllSubscribers(byte reason) // { // ResponseBuilder r = new ResponseBuilder(236); // "Cl" // r.AppendInt32(reason); // foreach (GameClient client in mSubscribers) // { // client.mGame = null; // client.SendMessage(r); // } // } // public bool ContainsPlayer(GamePlayer player) // { // for (int i = 0; i < mTeams.Length; i++) // if (mTeams[i].ContainsPlayer(player)) // return true; // return false; // } // #endregion // #region Data sending // public void SendGameInfo() // { // ResponseBuilder r = new ResponseBuilder(233); // "Ci" // r.Append(ToInfoString()); // if (!mIsStarting) // { // SendMessageToPlayers(r); // SendMessageToSpectators(r); // } // SendMessageToSubscribers(r); // } // public void SendMessageToPlayers(ResponseBuilder r) // { // foreach (GameTeam t in mTeams) // foreach (GamePlayer user in t.Players) // user.mClient.SendMessage(r); // } // public void SendMessageToSpectators(ResponseBuilder r) // { // foreach (GameClient client in mSpectators) // client.SendMessage(r); // } // public void SendMessageToSubscribers(ResponseBuilder r) // { // foreach (GameClient client in mSubscribers) // client.SendMessage(r); // } // #endregion // #region Messages // public string ToFuseString() // { // ResponseBuilder r = new ResponseBuilder(); // r.AppendInt32(mID); // r.AppendString(mName); // r.AppendString(mOwner.mHabbo.mName); // r.AppendInt32(mMapID); // return r.ToString(); // } // public string ToInfoString() // { // // Can't figure out how to get the start game button on/off // //return "HHXelta BB" + Convert.ToChar(2) + "PAXelta" + Convert.ToChar(2) + "IHJIPAXelta" + Convert.ToChar(2) + "H1,2,3,4,5,6,7,8,9" + Convert.ToChar(2) + ""; // ResponseBuilder r = new ResponseBuilder(); // r.AppendInt32(mState); // if 1, nothing happends // r.AppendInt32(mID); // r.AppendString(mName); // r.AppendInt32(mOwner.mRoomUser.mDynamicID); // r.AppendString(mOwner.mHabbo.mName); // r.AppendInt32(mMapID); // r.AppendInt32(mSpectators.Count); // r.AppendInt32(mTeams.Length); // foreach (GameTeam t in mTeams) // { // List players = t.Players; // r.AppendInt32(players.Count); // foreach (GamePlayer user in players) // { // r.AppendInt32(user.mDynamicID); // r.AppendString(user.mClient.mHabbo.mName); // } // } // r.AppendString(9); // return r.ToString(); // } // #endregion // } //}