private void CalculateBulletHit(BulletMp bullet) { foreach (var entity in _tickingEntities) { var player = entity as PlayerMp; if (player != null) { if (bullet.OwnerGuid == player.Guid) { continue; } var leftUp = new Vector2(player.Position.X - 5, player.Position.Y - 5); var rightBott = new Vector2(player.Position.X + 5, player.Position.Y + 5); if (bullet.Position.InRange(leftUp, rightBott) && player.Alive) { player.Hit(bullet.Damage); bullet.Delete(); return; } } } }
private void Protocol_PacketArrived(object sender, TcpCompletedEventArgs e) { var clientSocket = (GameTcpServerConnection)sender; if (e.Error) { Console.WriteLine($"Server closed connection with client during error: {e.Data}"); CloseConnectionWithClient(clientSocket); } else if (e.Data == null) { Console.WriteLine($"Client {clientSocket.RemoteEndPoint} disconnected."); CloseConnectionWithClient(clientSocket); } else { var bytePacket = Packet.Deserialize((byte[])e.Data); Packet packet = bytePacket as Packet; if (packet != null) { var context = clients.Where(x => x.Key == clientSocket).FirstOrDefault().Value; switch (packet.Type) { case PacketType.PLAYER_INFO: context.Player = new PlayerMp((PlayerShared)packet.Content); PacketProtocol.SendPacket(clientSocket, new Packet { Content = context.Player, Type = PacketType.PLAYER_INFO }); BroadcastPacket(new Packet { Type = PacketType.MESSAGE_SYSTEM, Content = $"connected>{context.Player.Name}" }, context.Player.Guid); _tickingEntities.Add(context.Player); break; case PacketType.MESSAGE_CHAT: BroadcastPacket(packet, Guid.Empty); break; case PacketType.PLAYER_MOVE: context.Player.AddPos((Vector2)packet.Content); break; case PacketType.BULLET_SHOOT: var bullet = new BulletMp((Vector2)packet.Content, context.Player.Position, context.Player.Guid); _tickingEntities.Add(bullet); break; case PacketType.PLAYER_REVIVE: context.Player.Spawn(); break; default: break; } } } }