using DominionBase;
using DominionBase.Enums;
using DominionBase.Piles;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
namespace Dominion.NET_WPF
{
///
/// Interaction logic for wCardSelection.xaml
///
public partial class WCardSelection : Window
{
public WCardSelection()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
if (!(Owner is WMain main)) return;
wpGeneralCards.Visibility = System.Windows.Visibility.Collapsed;
wpLandscapes.Visibility = System.Windows.Visibility.Collapsed;
//IEnumerable items = main.Game.Table.TableEntities.Values;
IEnumerable items = WMain.Game.Table.TableEntities.Values;
//var supplies = items.OfType().Where(s => s.Randomizer.Location == Location.Kingdom || s.Randomizer.Source != Source.All).Union(main.Game.Table.SpecialPiles.Values.OfType().Where(s => s.Randomizer.Location == Location.Kingdom || s.Randomizer.Source != Source.All));
var supplies = items.OfType().Where(s => s.Randomizer.Location == Location.Kingdom || s.Randomizer.Source != Source.All).Union(WMain.Game.Table.SpecialPiles.Values.OfType().Where(s => s.Randomizer.Location == Location.Kingdom || s.Randomizer.Source != Source.All));
var supplyGroups = supplies.GroupBy(s => s.Randomizer.Location == Location.General || s.Randomizer.Location == Location.Invisible || s.Randomizer.Location == Location.Special);
foreach (var supplyGroup in supplyGroups)
{
if (supplyGroup.Key)
{
cccGeneralCards.TokenDict = supplyGroup.ToDictionary(s => s.Randomizer, s => s.Tokens);
cccGeneralCards.Pile = supplyGroup.Select(s => s.Randomizer);
wpGeneralCards.Visibility = System.Windows.Visibility.Visible;
}
else
{
cccKingdomCards.TokenDict = supplyGroup.ToDictionary(s => s.Randomizer, s => s.Tokens);
cccKingdomCards.Pile = supplyGroup.Select(s => s.Randomizer);
}
}
IEnumerable landscapes = items.Where(i => i.Orientation == DominionBase.Enums.Orientation.Landscape).OrderBy(i => i.Name);
cccLandscapes.Pile = landscapes;
if (landscapes.Any())
wpLandscapes.Visibility = System.Windows.Visibility.Visible;
}
private void BReshuffle_Click(object sender, RoutedEventArgs e)
{
if (!(Owner is WMain main)) return;
//main.Game.SelectCards();
WMain.Game.SelectCards();
Window_Loaded(this, null);
}
private void BAccept_Click(object sender, RoutedEventArgs e)
{
DialogResult = true;
Close();
}
private void SvSetCategoryGroupDisplay_ScrollChanged(object sender, ScrollChangedEventArgs e)
{
var sv = sender as ScrollViewer;
bSetCategoryGroupDisplayHorizontal.Width = sv.ViewportWidth * sv.ViewportWidth / sv.ExtentWidth;
bSetCategoryGroupDisplayVertical.Height = sv.ViewportHeight * sv.ViewportHeight / sv.ExtentHeight;
bSetCategoryGroupDisplayHorizontal.Margin = new Thickness(sv.ViewportWidth * sv.HorizontalOffset / sv.ExtentWidth, 0, 0, 0);
bSetCategoryGroupDisplayVertical.Margin = new Thickness(0, sv.ViewportHeight * sv.VerticalOffset / sv.ExtentHeight, 0, 0);
bOpacityLayerLeft.Visibility = bOpacityLayerRight.Visibility = System.Windows.Visibility.Visible;
if (bSetCategoryGroupDisplayHorizontal.Width >= sv.ViewportWidth)
bOpacityLayerLeft.Visibility = bOpacityLayerRight.Visibility = System.Windows.Visibility.Collapsed;
else if (bSetCategoryGroupDisplayHorizontal.Margin.Left <= 0)
bOpacityLayerLeft.Visibility = System.Windows.Visibility.Collapsed;
else if (bSetCategoryGroupDisplayHorizontal.Margin.Left + bSetCategoryGroupDisplayHorizontal.Width >= sv.ViewportWidth)
bOpacityLayerRight.Visibility = System.Windows.Visibility.Collapsed;
bOpacityLayerTop.Visibility = bOpacityLayerBottom.Visibility = System.Windows.Visibility.Visible;
if (bSetCategoryGroupDisplayVertical.Height >= sv.ViewportHeight)
bOpacityLayerTop.Visibility = bOpacityLayerBottom.Visibility = System.Windows.Visibility.Collapsed;
else if (bSetCategoryGroupDisplayVertical.Margin.Top <= 0)
bOpacityLayerTop.Visibility = System.Windows.Visibility.Collapsed;
else if (bSetCategoryGroupDisplayVertical.Margin.Top + bSetCategoryGroupDisplayVertical.Height >= sv.ViewportHeight)
bOpacityLayerBottom.Visibility = System.Windows.Visibility.Collapsed;
}
private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
var g = (Grid)sender;
g.CaptureMouse();
g.Cursor = Cursors.ScrollNS;
svSetCategoryGroupDisplay.ScrollToVerticalOffset(e.GetPosition(g).Y / g.ActualHeight * svSetCategoryGroupDisplay.ExtentHeight);
}
private void Grid_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
var g = (Grid)sender;
g.ReleaseMouseCapture();
g.Cursor = Cursors.Arrow;
}
private void Grid_MouseMove(object sender, MouseEventArgs e)
{
var g = (Grid)sender;
if (g.IsMouseCaptured)
svSetCategoryGroupDisplay.ScrollToVerticalOffset(e.GetPosition(g).Y / g.ActualHeight * svSetCategoryGroupDisplay.ExtentHeight);
}
private void Grid_MouseLeftButtonDown_1(object sender, MouseButtonEventArgs e)
{
var g = (Grid)sender;
g.CaptureMouse();
g.Cursor = Cursors.ScrollWE;
svSetCategoryGroupDisplay.ScrollToHorizontalOffset(e.GetPosition(g).X / g.ActualWidth * svSetCategoryGroupDisplay.ExtentWidth);
}
private void Grid_MouseMove_1(object sender, MouseEventArgs e)
{
var g = (Grid)sender;
if (g.IsMouseCaptured)
svSetCategoryGroupDisplay.ScrollToHorizontalOffset(e.GetPosition(g).X / g.ActualWidth * svSetCategoryGroupDisplay.ExtentWidth);
}
}
}