You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

305 lines
9.4 KiB

using System;
using System.Collections.Generic;
using System.ComponentModel;
using Xamarin.Forms;
using TheGameExtreme.model.@event;
using TheGameExtreme.viewmodel;
using SkiaSharp;
using System.IO;
using System.Reflection;
using SkiaSharp.Views.Forms;
using TouchTracking;
namespace TheGameExtreme.view
{
// Learn more about making custom code visible in the Xamarin.Forms previewer
// by visiting https://aka.ms/xamarinforms-previewer
[DesignTimeVisible(false)]
public partial class MainPage : ContentPage
{
private bool isFirst = true;
private Main viewmodel;
private List<SKRect> stacks = new List<SKRect>();
Button button = new Button();
List<string> playersNames;
TouchManipulationBitmap bitmap;
List<TouchManipulationBitmap> bitmapCollection = new List<TouchManipulationBitmap>();
Dictionary<long, TouchManipulationBitmap> bitmapDictionary = new Dictionary<long, TouchManipulationBitmap>();
public MainPage(List<string> playersNames)
{
this.playersNames = playersNames;
InitializeComponent();
NavigationPage.SetHasNavigationBar(this, false);
Assembly assembly = GetType().GetTypeInfo().Assembly;
string[] resourceIDs = assembly.GetManifestResourceNames();
SKPoint position = new SKPoint();
foreach (string resourceID in resourceIDs)
{
if (resourceID.EndsWith(".png") ||
resourceID.EndsWith(".jpg"))
{
using (Stream stream = assembly.GetManifestResourceStream(resourceID))
{
SKBitmap bitmap = SKBitmap.Decode(stream);
bitmapCollection.Add(new TouchManipulationBitmap(bitmap)
{
Matrix = SKMatrix.MakeTranslation(position.X, position.Y),
});
position.X += 100;
position.Y += 100;
}
}
}
//stacks.Add(checkbox0);
//stacks.Add(checkbox1);
//stacks.Add(checkbox2);
//stacks.Add(checkbox3);
//button.Text = "Retry";
//button.Clicked += retry;
viewmodel = new Main(playersNames);
//viewmodel.BindingChanged += OnBindingChanged;
//viewmodel.PlayerChanged += OnPlayerChanged;
//Alert.SetBinding(Label.TextProperty, new Binding("Alert", source: viewmodel));
pseudo.SetBinding(Label.TextProperty, new Binding("Pseudo", source: viewmodel));
inflateHand();
}
void OnCanvasViewPaintSurface(object sender, SKPaintSurfaceEventArgs args) // Faire plusieurs canvas
{
SKCanvas canvas = args.Surface.Canvas;
canvas.Clear();
foreach (TouchManipulationBitmap bitmap in bitmapCollection)
{
bitmap.Paint(canvas);
}
}
void OnTouchEffectAction(object sender, TouchActionEventArgs args)
{
// Convert Xamarin.Forms point to pixels
TouchTrackingPoint pt = args.Location;
SKPoint point =
new SKPoint((float)(canvasView.CanvasSize.Width * pt.X / canvasView.Width),
(float)(canvasView.CanvasSize.Height * pt.Y / canvasView.Height));
switch (args.Type)
{
case TouchActionType.Pressed:
for (int i = bitmapCollection.Count - 1; i >= 0; i--)
{
TouchManipulationBitmap bitmap = bitmapCollection[i];
if (bitmap.HitTest(point))
{
// Move bitmap to end of collection
bitmapCollection.Remove(bitmap);
bitmapCollection.Add(bitmap);
// Do the touch processing
bitmapDictionary.Add(args.Id, bitmap);
bitmap.ProcessTouchEvent(args.Id, args.Type, point);
canvasView.InvalidateSurface();
break;
}
}
break;
case TouchActionType.Moved:
if (bitmapDictionary.ContainsKey(args.Id))
{
TouchManipulationBitmap bitmap = bitmapDictionary[args.Id];
bitmap.ProcessTouchEvent(args.Id, args.Type, point);
canvasView.InvalidateSurface();
}
break;
case TouchActionType.Released:
case TouchActionType.Cancelled:
if (bitmapDictionary.ContainsKey(args.Id))
{
TouchManipulationBitmap bitmap = bitmapDictionary[args.Id];
bitmap.ProcessTouchEvent(args.Id, args.Type, point);
bitmapDictionary.Remove(args.Id);
canvasView.InvalidateSurface();
}
break;
}
}
void OnTouchModePickerSelectedIndexChanged(object sender, EventArgs args)
{
if (bitmap != null)
{
Picker picker = (Picker)sender;
bitmap.TouchManager.Mode = (TouchManipulationMode)picker.SelectedItem;
}
}
private void OnPlayerChanged(object sender, PlayerChangedEventArgs args)
{
inflateHand();
}
private void inflateHand()
{
//Hand.Children.Clear();
//for (int i = 0; i < viewmodel.CurrentHand.Count; i++)
//{
// Button card = new Button();
// card.Text = viewmodel.CurrentHand[i].Value.ToString();
// card.Clicked += played;
// Hand.Children.Add(card);
//}
for(int i = 0; i < playersNames.Count; i++)
{
}
}
/*
private void OnBindingChanged(object sender, TopRangeChangedEventArgs args)
{
switch (args.NumStackChanged)
{
case 0:
pile0.Text = args.NewTopRangeCard.Value.ToString();
break;
case 1:
pile1.Text = args.NewTopRangeCard.Value.ToString();
break;
case 2:
pile2.Text = args.NewTopRangeCard.Value.ToString();
break;
case 3:
pile3.Text = args.NewTopRangeCard.Value.ToString();
break;
}
for (int i = 0; i < Hand.Children.Count; i++)
{
Button b = Hand.Children[i] as Button;
if (String.Equals(b.Text,args.NewTopRangeCard.Value.ToString()))
{
Hand.Children.RemoveAt(i);
break;
}
}
}
private void played(object sender, EventArgs args)
{
viewmodel.Alert = "";
int numStack = 0;
bool hasFind = false;
stacks.ForEach(checkbox =>
{
if (checkbox.IsChecked)
{
hasFind = true;
if (viewmodel.played(numStack, Convert.ToInt32((sender as Button).Text)))
{
botPanel.Children.Add(button);
}
}
numStack += 1;
});
if (!hasFind)
{
viewmodel.Alert = "Aucune pile selectionné! Veuillez séléctionner une pile.";
return;
}
}
private void radioButton(object sender, EventArgs args)
{
if (isFirst)
{
isFirst = false;
stacks.ForEach(checkbox =>
{
if (!checkbox.Equals(sender))
{
checkbox.IsChecked = false;
}
});
isFirst = true;
}
}
private void retry(object sender, EventArgs args)
{
viewmodel = new Main(playersNames);
viewmodel.BindingChanged += OnBindingChanged;
Alert.SetBinding(Label.TextProperty, new Binding("Alert", source: viewmodel));
pseudo.SetBinding(Label.TextProperty, new Binding("Pseudo", source: viewmodel));
inflateHand();
pile0.Text = "1";
pile1.Text = "1";
pile2.Text = "100";
pile3.Text = "100";
botPanel.Children.Remove(button);
}
private void endTurn(object sender, EventArgs args)
{
viewmodel.Alert = "";
if (viewmodel.endTurn())
{
botPanel.Children.Add(button);
}
else
{
inflateHand();
}
}*/
/*private async void Back(object sender, EventArgs args)
{
await Navigation.PopToRootAsync();
}*/
private async void PlayToHome(object sender, EventArgs args)
{
await Navigation.PopToRootAsync();
}
}
}