/// <summary>
        /// Update the detail view with a puzzle
        /// </summary>
        /// <param name="puzzle">Puzzle.</param>
        public void SetPuzzle(PuzzleData puzzle)
        {
            ImagePuzzle.Image = UIImage.FromFile (puzzle.Filename);
            LabelTitle.Text = System.IO.Path.GetFileNameWithoutExtension (puzzle.Filename);

            DateTime? bestScore = puzzle.GetBestPlayerScore (GameCenterHelper.LocalPlayer.PlayerID);
            if (bestScore.HasValue) {
                LabelTime.Text = bestScore.Value.ToString ("mm:ss");
            } else {
                LabelTime.Text = "Not completed yet";
            }
        }
        public static PuzzlesListCellViewController Create(PuzzleData puzzle)
        {
            PuzzlesListCellViewController cell = Nib.Instantiate (null, null) [0] as PuzzlesListCellViewController;

            cell.UpdatePuzzleView (puzzle);

            // Get components. Check XCode for tags.
            // 1 = image
            // 2 = friends icon
            // 3 = completed icon
            UIImageView imageView = cell.ViewWithTag (1) as UIImageView;
            imageView.Image = UIImage.FromFile (puzzle.Filename);

            UIImageView friendsIcon = cell.ViewWithTag (2) as UIImageView;
            friendsIcon.Hidden = !(puzzle.IsCustom);

            UIImageView completedIcon = cell.ViewWithTag (3) as UIImageView;
            completedIcon.Hidden = (puzzle.GetBestPlayerScore(GameCenterHelper.LocalPlayer.PlayerID).HasValue == false);

            return cell;
        }
示例#3
0
        /// <summary>
        /// Update versus match status
        /// </summary>
        public static void UpdateMatchFromPuzzle(PuzzleData puzzle, Action<NSError> callback)
        {
            if (puzzle.Match == null) {
                Logger.E ("This puzzle contains no match data... Can't do anything!");
                return;
            }

            // Match data -> Puzzle + Image
            // -- Image as Base64 string
            UIImage image = UIImage.FromFile (puzzle.Filename);
            Byte[] byteArray = null;
            using (NSData nsImageData = image.AsPNG()) {
                byteArray = new Byte[nsImageData.Length];
                System.Runtime.InteropServices.Marshal.Copy (nsImageData.Bytes, byteArray, 0, Convert.ToInt32 (nsImageData.Length));
            }

            string base64image = Convert.ToBase64String (byteArray);

            // -- Data
            TransferablePuzzleData tp = new TransferablePuzzleData ();
            tp.Puzzle = puzzle;
            tp.Base64Image = base64image;

            // Build an XML text
            string xml = string.Empty;
            XmlSerializer xmlSerializer = new XmlSerializer (tp.GetType ());

            using (StringWriter textWriter = new StringWriter()) {
                xmlSerializer.Serialize (textWriter, tp);
                xml = textWriter.ToString ();
            }

            xmlSerializer = null;

            // Xml to bytes
            NSData puzzleData = NSData.FromString (xml);

            // Next participant
            GKTurnBasedParticipant nextPlayer = null;
            foreach (var participant in puzzle.Match.Participants) {
                if (participant.PlayerID != GKLocalPlayer.LocalPlayer.PlayerID) {
                    nextPlayer = participant;
                    break;
                }
            }

            // Game center match progress
            // -- Already an opponent score? End
            if (puzzle.GetBestPlayerScore (nextPlayer.PlayerID).HasValue) {
                puzzle.Match.EndMatchInTurn (
                    puzzleData,
                    (err) => {
                    if (callback != null) {
                        callback (err);
                    }
                }
                );
            } else {
                // -- Send current score
                puzzle.Match.EndTurn (
                    new GKTurnBasedParticipant[] { nextPlayer },
                    120,
                    puzzleData,
                    callback
                );
            }
        }