Example #1
0
 public MoveAnimator(BoardPanel2D owner, TimeSpan interval, FloatingPiece floatingPiece)
 {
     this.owner         = owner;
     this.interval      = interval;
     this.floatingPiece = floatingPiece;
     timer = new System.Threading.Timer(TimerCallback);
 }
        private Image CreateBoardImage(IBoard board, int squareSize, FloatingPiece floatingPiece)
        {
            int      boardWidth  = GetBoardWidth(squareSize);
            int      boardHeight = GetBoardHeight(squareSize);
            Bitmap   image       = new Bitmap(boardWidth, boardHeight);
            Graphics g           = Graphics.FromImage(image);

            Paint(g, board, squareSize, floatingPiece, true, false);
            return(image);
        }
        public void Paint(Graphics g, IBoard board, int squareSize, FloatingPiece floatingPiece)
        {
            Image boardImageCopy = this.boardImage;

            if (boardImageCopy == null)
            {
                boardImageCopy = this.boardImage = CreateBoardImage(board, squareSize, floatingPiece);
            }

            g.DrawImage(boardImageCopy, 0, 0);
            Paint(g, board, squareSize, floatingPiece, false, true);
        }
        private void Paint(Graphics g, IBoard board, int squareSize, FloatingPiece floatingPiece, bool paintBoard, bool paintPiece)
        {
            int x         = 0;
            int y         = 0;
            int imageSize = squareSize - imageInset * 2;
            int position  = BoardConstants.LightSquareCount;

            for (int row = 0; row < BoardConstants.Rows; row++)
            {
                x = 0;

                for (int col = 0; col < BoardConstants.Rows; col++)
                {
                    bool isDarkSquare = (row % 2 != col % 2);
                    //
                    // Draw square
                    //
                    if (paintBoard)
                    {
                        g.DrawImage(GetSquareImage(isDarkSquare), x, y, squareSize, squareSize);
                    }

                    if (isDarkSquare)
                    {
                        //
                        // Draw square number
                        //
                        if (paintBoard)
                        {
                            g.DrawString(position.ToString(CultureInfo.CurrentCulture), positionFont, positionBrush, x, y);
                        }
                        //
                        // Draw piece on square
                        //
                        if (paintPiece)
                        {
                            Piece piece = board[position];
                            if ((piece != Piece.None) && (floatingPiece.Position != position))
                            {
                                g.DrawImage(GetPieceImage(piece), x + imageInset, y + imageInset, imageSize, imageSize);
                            }
                        }

                        position--;
                    }
                    x += squareSize;
                }

                y += squareSize;
            }
            //
            // draw floating piece
            //
            if (paintPiece)
            {
                if ((floatingPiece.Active) && (BoardUtilities.IsPiece(board[floatingPiece.Position])))
                {
                    int       floatingPieceSize  = (int)(imageSize * 1.2);
                    const int shadowOffset       = 6;
                    Image     floatingPieceImage = GetPieceImage(board[floatingPiece.Position]);
                    g.FillEllipse(shadowBrush, floatingPiece.X + shadowOffset, floatingPiece.Y + shadowOffset, floatingPieceSize, floatingPieceSize);
                    g.DrawImage(floatingPieceImage, floatingPiece.X + imageInset, floatingPiece.Y + imageInset, floatingPieceSize, floatingPieceSize);
                }
            }
        }
Example #5
0
        private static void GotMessage(object state)
        {
            NetIncomingMessage incomingMessage;

            while ((incomingMessage = Client.ReadMessage()) != null)
            {
                // handle incoming message
                switch (incomingMessage.MessageType)
                {
                case NetIncomingMessageType.DebugMessage:
                case NetIncomingMessageType.ErrorMessage:
                case NetIncomingMessageType.WarningMessage:
                case NetIncomingMessageType.VerboseDebugMessage:
                    var text = incomingMessage.ReadString();
                    Console.WriteLine($"{incomingMessage.MessageType}: {text}");
                    break;

                case NetIncomingMessageType.StatusChanged:
                    var status = (NetConnectionStatus)incomingMessage.ReadByte();
                    var reason = incomingMessage.ReadString();
                    Console.WriteLine($"{status}, Reason: {reason}");

                    switch (status)
                    {
                    case NetConnectionStatus.Connected:
                        Connected?.Invoke(null, EventArgs.Empty);
                        break;

                    case NetConnectionStatus.Disconnected:
                        Disconnected?.Invoke(null, EventArgs.Empty);
                        break;
                    }

                    break;

                case NetIncomingMessageType.Data:
                    var messageType = (PacketType)incomingMessage.ReadInt16();

                    switch (messageType)
                    {
                    case PacketType.SPacketJoinRoom:
                        JoinRoomResponse?.Invoke(null, incomingMessage.ReadStruct <SPacketJoinRoom>());
                        break;

                    case PacketType.SPacketCreateRoom:
                        CreateRoomResponse?.Invoke(null, incomingMessage.ReadStruct <SPacketCreateRoom>());
                        break;

                    case PacketType.SPacketSyncRoom:
                    {
                        var packet = incomingMessage.ReadClass <SPacketSyncRoom>();

                        if (Room == null || Room.Id != packet.RoomId)
                        {
                            Room = new Room(packet.RoomId);
                        }

                        Player = packet.Players[packet.YourPlayer];

                        Room.Players.Clear();
                        Room.Players.AddRange(packet.Players);

                        Room.Board.Clear();
                        Room.Board.AddRange(packet.Board);

                        if (Room.CurrentPlayer != Player.Id && packet.CurrentPlayer == Player.Id)
                        {
                            TurnStarted?.Invoke(null, EventArgs.Empty);
                        }

                        Room.CurrentPlayer = packet.CurrentPlayer;

                        SyncRoom?.Invoke(null, packet);
                        break;
                    }

                    case PacketType.SPacketFloatingPiece:
                        FloatingPiece?.Invoke(null, incomingMessage.ReadStruct <SPacketFloatingPiece>());
                        break;
                    }
                    break;

                default:
                    Console.WriteLine($"Unhandled type: {incomingMessage.MessageType} {incomingMessage.LengthBytes} bytes");
                    break;
                }
                Client.FlushSendQueue();
                Client.Recycle(incomingMessage);
            }
        }