173 lines
6.6 KiB
C#
173 lines
6.6 KiB
C#
using Microsoft.Win32;
|
|
using RBG.Helpers;
|
|
using System;
|
|
using System.Collections.Concurrent;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Controls.Primitives;
|
|
using System.Windows.Media;
|
|
using System.Windows.Media.Effects;
|
|
using System.Windows.Media.Imaging;
|
|
using System.Windows.Shapes;
|
|
|
|
namespace RBG_Server.WPF
|
|
{
|
|
|
|
/// <summary>
|
|
/// Interaction logic for MainWindow.xaml
|
|
/// </summary>
|
|
public partial class MainWindow : Window
|
|
{
|
|
// Global Styles etc
|
|
private static readonly SolidColorBrush borderBrush = new(Color.FromRgb(255, 0, 0));
|
|
|
|
|
|
GameServer gameServer;
|
|
// Game board bytes
|
|
byte[] gameBoard;
|
|
|
|
public MainWindow()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Draws the overlay grid, clearing existing elements if necessary
|
|
/// </summary>
|
|
//private void RedrawGrid()
|
|
//{
|
|
|
|
// PreviewImageOverlay.RowDefinitions.Clear();
|
|
// PreviewImageOverlay.ColumnDefinitions.Clear();
|
|
// PreviewImageOverlay.Children.Clear();
|
|
// for (int i = 0; i < NumberOfColumns.Value; i++)
|
|
// {
|
|
// PreviewImageOverlay.ColumnDefinitions.Add(new ColumnDefinition());
|
|
// }
|
|
// for (int i = 0; i < NumberOfRows.Value; i++)
|
|
// {
|
|
// PreviewImageOverlay.RowDefinitions.Add(new RowDefinition());
|
|
// }
|
|
// // Draw the overlay
|
|
// Rectangle overlay = new();
|
|
// overlay.Fill = new SolidColorBrush(Color.FromArgb(128, 0, 128, 255));
|
|
// _ = PreviewImageOverlay.Children.Add(overlay);
|
|
// Grid.SetRow(overlay, (int)ZoomBoxStartRow.Value);
|
|
// Grid.SetColumn(overlay, (int)ZoomBoxStartColumn.Value);
|
|
// Grid.SetRowSpan(overlay, (int)ZoomBoxSpan.Value);
|
|
// Grid.SetColumnSpan(overlay, (int)ZoomBoxSpan.Value);
|
|
// // Draw the starting position
|
|
// overlay = new();
|
|
// overlay.Fill = new SolidColorBrush(Color.FromArgb(64, 0, 255, 128));
|
|
// _ = PreviewImageOverlay.Children.Add(overlay);
|
|
// Grid.SetRow(overlay, (int)StartingRow.Value);
|
|
// Grid.SetColumn(overlay, (int)StartingColumn.Value);
|
|
// // Draw grids onto the preview image
|
|
// for (int v = 0; v < PreviewImageOverlay.RowDefinitions.Count; v++)
|
|
// {
|
|
// for (int u = 0; u < PreviewImageOverlay.ColumnDefinitions.Count; u++)
|
|
// {
|
|
// Border border = new();
|
|
// border.BorderBrush = borderBrush;
|
|
// border.BorderThickness = new Thickness(2);
|
|
// _ = PreviewImageOverlay.Children.Add(border);
|
|
// Grid.SetRow(border, v);
|
|
// Grid.SetColumn(border, u);
|
|
// }
|
|
// }
|
|
//}
|
|
|
|
/// <summary>
|
|
/// Generates the game board overlay grid
|
|
/// The grid should be appropriately sized before using this
|
|
/// </summary>
|
|
private void GenerateGameBoard(List<Player> players)
|
|
{
|
|
// Create an array of BoardCells Rows*Columns in size
|
|
BoardCell[] cells = new BoardCell[PreviewImageOverlay.RowDefinitions.Count * PreviewImageOverlay.ColumnDefinitions.Count];
|
|
List<Player> unaddedPlayers = players;
|
|
for (int i = 0; i < cells.Length; i++)
|
|
{
|
|
cells[i] = new BoardCell();
|
|
Queue<Player> removedPlayers = new();
|
|
foreach (Player item in unaddedPlayers)
|
|
{
|
|
if ((item.Row * PreviewImageOverlay.ColumnDefinitions.Count) + item.Column == i)
|
|
{
|
|
removedPlayers.Enqueue(item);
|
|
}
|
|
}
|
|
while (removedPlayers.Count > 0)
|
|
{
|
|
Player removed = removedPlayers.Dequeue();
|
|
_ = unaddedPlayers.Remove(removed);
|
|
_ = cells[i].CellStack.Children.Add(removed);
|
|
}
|
|
_ = PreviewImageOverlay.Children.Add(cells[i]);
|
|
cells[i].CellButton.Tag = new Tuple<int, int>(i % PreviewImageOverlay.ColumnDefinitions.Count, i / PreviewImageOverlay.ColumnDefinitions.Count);
|
|
Grid.SetColumn(cells[i], i % PreviewImageOverlay.ColumnDefinitions.Count);
|
|
Grid.SetRow(cells[i], i / PreviewImageOverlay.ColumnDefinitions.Count);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Represents a cell on the board; as a grid
|
|
/// </summary>
|
|
class BoardCell : Grid
|
|
{
|
|
// brush the button should have
|
|
|
|
static SolidColorBrush buttonBrush = new(Color.FromArgb(1, 255, 255, 255));
|
|
|
|
|
|
// Each cell has a uniform grid that
|
|
public UniformGrid CellStack { get; } = new()
|
|
{
|
|
Columns = 4,
|
|
HorizontalAlignment = HorizontalAlignment.Stretch,
|
|
VerticalAlignment = VerticalAlignment.Stretch
|
|
};
|
|
public Button CellButton { get; } = new()
|
|
{
|
|
Content = "",
|
|
};
|
|
Queue<Player> removedPlayers = new();
|
|
// Grid parentGrid; // Parent grid is now this itself
|
|
|
|
public BoardCell() : base()
|
|
{
|
|
CellButton.MouseEnter += CellButton_MouseEnter;
|
|
CellButton.MouseLeave += CellButton_MouseLeave;
|
|
CellButton.Click += CellButton_Click;
|
|
CellButton.Background = buttonBrush;
|
|
CellStack.Columns = 2;
|
|
CellStack.VerticalAlignment = VerticalAlignment.Top;
|
|
// Add our grid and button
|
|
_ = Children.Add(CellStack);
|
|
_ = Children.Add(CellButton);
|
|
}
|
|
|
|
private void CellButton_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
Button cellButton = sender as Button;
|
|
System.Diagnostics.Debug.WriteLine("Button at {0}, {1} was clicked", ((Tuple<int, int>)cellButton.Tag).Item2, ((Tuple<int, int>)cellButton.Tag).Item1);
|
|
}
|
|
|
|
private void CellButton_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
|
|
{
|
|
//throw new NotImplementedException();
|
|
}
|
|
|
|
private void CellButton_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
|
|
{
|
|
//throw new NotImplementedException();
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|