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); } } }
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); } }