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; SKBitmap bitmap; SKBitmap bitmap2; SKMatrix matrix = SKMatrix.MakeIdentity(); // Touch information long touchId = -1; SKPoint previousPoint; public MainPage(List playersNames) { this.playersNames = playersNames; InitializeComponent(); NavigationPage.SetHasNavigationBar(this, false); string resourceID = "TheGameExtreme.Media.thegame.jpg"; string resourceID2 = "TheGameExtreme.Media.moon.jpg"; Assembly assembly = GetType().GetTypeInfo().Assembly; Stream stream = assembly.GetManifestResourceStream(resourceID); bitmap = SKBitmap.Decode(stream); Stream stream2 = assembly.GetManifestResourceStream(resourceID2); bitmap2 = SKBitmap.Decode(stream2); //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 { SKImageInfo info = args.Info; SKSurface surface = args.Surface; SKCanvas canvas = surface.Canvas; canvas.Clear(); // Display the bitmap canvas.SetMatrix(matrix); canvas.DrawBitmap(bitmap, new SKPoint()); //canvas.DrawBitmap(bitmap2, new SKPoint(500, 500)); } 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: // Find transformed bitmap rectangle SKRect rect = new SKRect(0, 0, bitmap.Width, bitmap.Height); rect = matrix.MapRect(rect); // Determine if the touch was within that rectangle if (rect.Contains(point)) { touchId = args.Id; previousPoint = point; } break; case TouchActionType.Moved: if (touchId == args.Id) { // Adjust the matrix for the new position matrix.TransX += point.X - previousPoint.X; matrix.TransY += point.Y - previousPoint.Y; previousPoint = point; canvasView.InvalidateSurface(); } break; case TouchActionType.Released: case TouchActionType.Cancelled: touchId = -1; break; } } 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); //} } /* 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(); } } }