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 stacks = new List(); Button button = new Button(); List playersNames; TouchManipulationBitmap bitmap; List bitmapCollection = new List(); Dictionary bitmapDictionary = new Dictionary(); public MainPage(List 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(); } } }