public BombList(Player player, int capacity) { array = new Bomb[capacity]; for (int i = 0; i < capacity; ++i) { array[i] = new Bomb(player); } }
public int GetAlivePlayers(Player[] array, Player ignoredPlayer = null) { int count = 0; for (int i = 0; i < m_list.Count; ++i) { Player player = m_list[i]; if (player != ignoredPlayer && player.IsAlive) { array[count] = player; ++count; } } return count; }
public DiseaseList(Player player) { this.m_player = player; remains = new float[diseaseArray.Length]; flags = new BitArray(diseaseArray.Length); oldFlags = new BitArray(diseaseArray.Length); randomIndices = new int[diseaseArray.Length]; for (int i = 0; i < randomIndices.Length; ++i) { randomIndices[i] = i; } }
protected override void OnStart() { base.OnStart(); Application.SetWindowTitle("Server"); game = new Game(MultiplayerMode.Server); networkPlayersLookup = new Dictionary<NetConnection, Player>(); networkPlayers = new List<Player>(); // local players are ready int playerIndex = 0; GameSettings.InputEntry[] entries = settings.inputEntries; for (; playerIndex < entries.Length; ++playerIndex) { Player player = new Player(entries[playerIndex].playerIndex); player.SetPlayerInput(entries[playerIndex].input); player.IsReady = true; game.AddPlayer(player); } // network players are not ready List<NetConnection> connections = GetServer().GetConnections(); for (int i = 0; i < connections.Count; ++i) { Player player = new Player(playerIndex + i); player.SetPlayerInput(new PlayerNetworkInput()); player.ResetNetworkState(); game.AddPlayer(player); AddPlayerConnection(connections[i], player); } LoadField(settings.scheme); GetConsole().TryExecuteCommand("exec game.cfg"); SetPacketRate(CVars.sv_packetRate.intValue); RegisterNotification(Notifications.ConsoleVariableChanged, ServerRateVarChangedCallback); RegisterNotification(NetworkNotifications.ClientConnected, ClientConnectedNotification); RegisterNotification(NetworkNotifications.ClientDisconnected, ClientDisconnectedNotification); }
private void ReplayPlayerActions(Player player) { //float delta = Application.frameTime; //player.input.Reset(); //for (int id = player.lastAckPacketId; id <= m_lastSentPacketId; ++id) //{ // ClientPacket packet = GetPacket(id); // int actions = packet.actions; // int actionsCount = (int)PlayerAction.Count; // for (int i = 0; i < actionsCount; ++i) // { // player.input.SetActionPressed(i, (actions & (1 << i)) != 0); // } // player.UpdateMoving(delta); //} throw new NotImplementedException(); }
private void ReadFieldState(Peer peer, NetIncomingMessage message) { game = new Game(MultiplayerMode.Client); SetupField(settings.scheme); ReadFieldState(message); m_localPlayer = null; List<Player> players = game.GetPlayers().list; for (int i = 0; i < players.Count; ++i) { if (players[i].input == null) { m_localPlayer = players[i]; m_localPlayer.SetPlayerInput(InputMapping.CreatePlayerInput(InputType.Keyboard1)); m_localPlayer.input.IsActive = true; // TODO: handle console break; } } Debug.Assert(m_localPlayer != null); m_localPlayer.connection = peer.RemoteConnection; m_localPlayer.IsReady = true; m_localPlayer.needsFieldState = false; }
public Bomb(Player player) : base(FieldCellType.Bomb, player.GetCx(), player.GetCy()) { m_player = player; m_state = State.Undefined; }
public void AddPlayer(Player player) { m_field.AddPlayer(player); }
private void Remove(Player player, bool removeFromList) { Debug.Assert(m_list.Contains(player)); if (removeFromList) { m_list.Remove(player); } }
public void Kill(Player player) { player.Kill(); Remove(player, false); }
private void WriteRoundStartMessage(NetBuffer buffer, Player player) { if (player == null) { buffer.Write(false); // player is not ready buffer.Write(true); // player needs field state } else { buffer.Write(player.IsReady); buffer.Write(player.needsFieldState); } }
private void AddPlayerConnection(NetConnection connection, Player player) { Debug.Assert(!networkPlayersLookup.ContainsKey(connection)); networkPlayersLookup.Add(connection, player); Debug.Assert(player.connection == null); player.connection = connection; Debug.Assert(!networkPlayers.Contains(player)); networkPlayers.Add(player); }
public void SetFrom(Player p) { direction = p.direction; px = p.px; py = p.py; speed = p.GetSpeed(); // powerups = p.powerups; // TODO // diseases = p.diseases; // TODO bombs = EnsureArray(bombs, p.bombs.array.Length); for (int i = 0; i < bombs.Length; ++i) { bombs[i].SetFrom(p.bombs.array[i]); } }
private void WritePlayerState(NetBuffer buffer, Player p) { bool alive = p.IsAlive; buffer.Write(alive); if (alive) { buffer.Write(p.px); buffer.Write(p.py); buffer.Write(p.IsMoving()); buffer.Write((byte)p.direction); buffer.Write(p.GetSpeed()); // powerups int powerupsCount = (int)Powerups.Count; for (int i = 0; i < powerupsCount; ++i) { bool hasPower = p.powerups.HasPowerup(i); buffer.Write(hasPower); if (hasPower) { buffer.Write((byte)p.powerups.GetCount(i)); } } // diseases int diseasesCount = DiseaseList.diseaseArray.Length; for (int i = 0; i < diseasesCount; ++i) { bool infected = p.diseases.IsInfected(i); buffer.Write(infected); if (infected) { buffer.WriteTime(NetTime.Now + p.diseases.GetInfectedRemains(i), false); } } } Bomb[] bombs = p.bombs.array; for (int i = 0; i < bombs.Length; ++i) { WriteBombState(buffer, bombs[i]); } }
private void ReadPlayerState(NetIncomingMessage msg, Player p) { bool alive = msg.ReadBoolean(); if (alive) { float px = msg.ReadFloat(); float py = msg.ReadFloat(); bool moving = msg.ReadBoolean(); Direction direction = (Direction)msg.ReadByte(); float speed = msg.ReadFloat(); // player state p.UpdateFromNetwork(px, py, moving, direction, speed); // powerups int powerupsCount = (int)Powerups.Count; for (int i = 0; i < powerupsCount; ++i) { bool hasPower = msg.ReadBoolean(); if (hasPower) { int count = msg.ReadByte(); p.powerups.SetCount(i, count); } else { p.powerups.SetCount(i, 0); } } // diseases int diseasesCount = DiseaseList.diseaseArray.Length; for (int i = 0; i < diseasesCount; ++i) { bool infected = msg.ReadBoolean(); if (infected) { float remains = (float)(msg.ReadTime(false) - NetTime.Now); p.diseases.TryInfect(i); p.diseases.SetInfectedRemains(i, remains); } else { p.diseases.TryCure(i); } } } else if (p.IsAlive) { Field.KillPlayer(p); } Bomb[] bombs = p.bombs.array; for (int i = 0; i < bombs.Length; ++i) { ReadBombState(msg, p, bombs[i]); } }
private void ReadBombState(NetIncomingMessage msg, Player p, Bomb b) { bool active = msg.ReadBoolean(); if (active) { float remains = (float)(msg.ReadTime(false) - NetTime.Now); float px = msg.ReadFloat(); float py = msg.ReadFloat(); Direction dir = (Direction)msg.ReadByte(); float speed = msg.ReadFloat(); bool jelly = msg.ReadBoolean(); bool trigger = msg.ReadBoolean(); if (!b.isActive) { b.player = p; b.Activate(); game.Field.SetBomb(b); } b.timeRemains = remains; b.SetPos(px, py); b.SetSpeed(speed); b.SetJelly(jelly); b.SetTrigger(trigger); // TODO: jelly & trigger } else if (b.isActive) { b.Deactivate(); b.RemoveFromField(); } }
protected void WriteFieldState(NetBuffer buffer, Player player) { // bricks & powerups FieldCellSlot[] slots = game.Field.GetCells().slots; for (int i = 0; i < slots.Length; ++i) { BrickCell brick = slots[i].GetBrick(); if (brick != null) { bool hasPowerup = brick.HasPowerup(); buffer.Write(hasPowerup); if (hasPowerup) { buffer.Write((byte)brick.powerup); } } } // players List<Player> players = game.GetPlayers().list; int senderIndex = players.IndexOf(player); Debug.Assert(senderIndex != -1); buffer.Write((byte)senderIndex); buffer.Write((byte)players.Count); for (int i = 0; i < players.Count; ++i) { Player p = players[i]; buffer.Write((byte)p.cx); buffer.Write((byte)p.cy); } }
protected void ReadFieldState(NetBuffer buffer) { // bricks & powerups FieldCellSlot[] slots = game.Field.GetCells().slots; for (int i = 0; i < slots.Length; ++i) { BrickCell brick = slots[i].GetBrick(); if (brick != null) { bool hasPowerup = buffer.ReadBoolean(); if (hasPowerup) { brick.powerup = buffer.ReadByte(); } } } // players int senderIndex = buffer.ReadByte(); int playersCount = buffer.ReadByte(); for (int i = 0; i < playersCount; ++i) { Player player = new Player(i); int cx = buffer.ReadByte(); int cy = buffer.ReadByte(); player.SetCell(cx, cy); if (i != senderIndex) { player.SetPlayerInput(new PlayerNetworkInput()); } game.AddPlayer(player); } }
private void WritePlayingMessage(NetOutgoingMessage msg, Player player) { Debug.Assert(player != null); int actions = 0; int actionsCount = (int)PlayerAction.Count; for (int i = 0; i < actionsCount; ++i) { if (player.input.IsActionPressed(i)) { actions |= 1 << i; } } ClientPacket packet; packet.id = player.lastSentPacketId; packet.lastAckServerPacketId = player.lastAckPacketId; packet.actions = actions; WriteClientPacket(msg, ref packet); PushPacket(ref packet); }
private void WriteRoundEndMessage(NetBuffer buffer, Player player) { buffer.Write(player.IsReady); buffer.Write(player.needsRoundResults); }
public bool IsInfectedSame(Player other) { return m_diseases.IsInfectedSame(other.m_diseases); }
public LocalPlayerView(Player player) { m_player = player; m_packetDiffView = AddTextView(); m_cordErrView = AddTextView("px: 0\npy: 0"); // HACK: need to adjust height LayoutVer(0); ResizeToFitViews(); }
private void Swap(Player other) { float tpx = other.px; float tpy = other.py; other.SetPos(px, py); SetPos(tpx, tpy); }
public void Remove(Player player) { Remove(player, true); }
public PlayerResultView(Player player) { m_player = player; Font font = Helper.fontButton; m_readyTextView = new TextView(font, "Not Ready"); m_winsView = new TextView(font, "99"); m_suicidesView = new TextView(font, "99"); UpdateState(); AddView(m_readyTextView); AddView(m_winsView); AddView(m_suicidesView); LayoutHor(10); ResizeToFitViews(); }
public void Add(Player player) { Debug.Assert(!m_list.Contains(player)); m_list.Add(player); }
private static bool TransmitDiseases(Player p1, Player p2) { if (p1.IsInfectedSame(p2)) { return false; } bool transmitted = false; int totalCount = (int)Diseases.Count; for (int diseaseIndex = 0; diseaseIndex < totalCount; ++diseaseIndex) { if (p1.IsInfected(diseaseIndex)) { transmitted |= p2.TryInfect(diseaseIndex); } else if (p2.IsInfected(diseaseIndex)) { transmitted |= p1.TryInfect(diseaseIndex); } } return transmitted; }
public FlameCell(Player player, int cx, int cy) : base(FieldCellType.Flame, cx, cy) { this.player = player; remains = CVars.cg_timeFlame.intValue * 0.001f; }
private bool HandleCollision(Player other) { if (other.IsAlive) { return TransmitDiseases(this, other); } return false; }