Exemplo n.º 1
0
        /// <summary>
        /// Loads all the turn-based matches involving the local player and calls the callback on completion.
        /// </summary>
        /// <param name="callback">Callback.</param>
        public static void LoadAllMyMatches(Action <TurnBasedMatch[], NSError> callback)
        {
            GKTurnBasedMatch.LoadMatches(delegate(object[] gkmatches, NSError error) {
                if ((gkmatches == null) || (gkmatches.Length == 0))
                {
                    callback(null, error);
                    callback = null;
                }
                else
                {
                    var matches     = new TurnBasedMatch[gkmatches.Length];
                    int totalLoaded = 0;
                    for (int i = 0; i < gkmatches.Length; i++)
                    {
                        var gkmatch = gkmatches[i] as GKTurnBasedMatch;
                        matches[i]  = NSObjectWrapper.CreateWrapper(typeof(TurnBasedMatch), gkmatch) as TurnBasedMatch;
                        gkmatch     = null;

                        matches[i].ReloadPlayers(delegate() {
                            totalLoaded++;
                            if (totalLoaded == matches.Length)
                            {
                                callback(matches, error);
                                callback = null;
                                matches  = null;
                                error    = null;
                            }
                        });
                    }
                }

                gkmatches = null;
            });
        }
Exemplo n.º 2
0
        internal static void _OnTurnEvent(GKTurnBasedMatch match, bool didBecomeActive)
        {
            var tbmatch = NSObjectWrapper.CreateWrapper(typeof(TurnBasedMatch), match) as TurnBasedMatch;

            match = null;

            tbmatch.ReloadPlayers(delegate() {
                // set current match if it matches the id
                if (didBecomeActive)
                {
                    SetCurrentMatch(tbmatch);
                }
                else
                {
                    _CheckSetCurrentMatch(tbmatch);
                }

                if (_turnChangedHandlers != null)
                {
                    _turnChangedHandlers(null, new TurnChangedEventArgs(tbmatch));
                }

                tbmatch = null;
            });
        }
Exemplo n.º 3
0
        /// <summary>
        /// Sets a low-level GKTurnBasedMatch object as the current match.
        /// Some processing needs to happen in the background, and when it is done,
        /// one of the two events: TurnChanged or MatchEnded, will
        /// be raised. At that time, the currentMatch property will be set to a
        /// new high-level TurnBasedMatch object.
        /// <p></p>
        /// Be careful when using this method because it mixes the low-level and high-level API.
        /// </summary>
        /// <param name="match">Match.</param>
        public static void SetNativeMatchAsCurrentMatch(GKTurnBasedMatch match)
        {
            var tbmatch = NSObjectWrapper.CreateWrapper(typeof(TurnBasedMatch), match) as TurnBasedMatch;

            match = null;

            tbmatch.ReloadPlayers(delegate() {
                SetCurrentMatch(tbmatch);

                if (tbmatch.status == GKTurnBasedMatchStatus.Ended)
                {
                    if (_matchEndedHandlers != null)
                    {
                        _matchEndedHandlers(null, new MatchEventArgs(tbmatch));
                    }
                }
                else
                {
                    if (_turnChangedHandlers != null)
                    {
                        _turnChangedHandlers(null, new TurnChangedEventArgs(tbmatch));
                    }
                }

                tbmatch = null;
            });
        }
Exemplo n.º 4
0
        /// <summary>
        /// Returns a VoiceChat object with the channel name.  Use this to start a voice chat with other players.
        /// All players can talk to each other if using the same channel name.
        /// Or you can have the red team join one channel while the blue team join another channel, and have an "all" channel
        /// for all players to talk to all others.
        /// </summary>
        /// <returns>The voice chat.</returns>
        /// <param name="channel">Channel name.</param>
        public VoiceChat GetVoiceChat(string channel)
        {
            RealTimeMatchesController.EnableVoiceChat();

            // return if already created
            if (_voiceChats == null)
            {
                _voiceChats = new Dictionary <string, VoiceChat>();
            }

            VoiceChat chat = null;

            if (_voiceChats.TryGetValue(channel, out chat))
            {
                return(chat);
            }

            // get it and create a wrapper
            var gkchat = gkMatch.VoiceChat(channel);

            if (gkchat != null)
            {
                chat = NSObjectWrapper.CreateWrapper(typeof(VoiceChat), gkchat) as VoiceChat;
                _voiceChats[channel] = chat;
            }

            return(chat);
        }
Exemplo n.º 5
0
 internal static TurnBasedParticipant[] ToParticipants(object[] gkParticipants)
 {
     if (gkParticipants == null)
     {
         return(null);
     }
     return(gkParticipants.Select(x => NSObjectWrapper.CreateWrapper(typeof(TurnBasedParticipant), x as GKTurnBasedParticipant) as TurnBasedParticipant).ToArray());
 }
Exemplo n.º 6
0
        public override void PlayerDidChangeState(GKMatch match, string playerID, GKPlayerConnectionState state)
        {
            Player.LoadPlayersByIDs(new string[] { playerID }, delegate(Player[] players) {
                var rtMatch = NSObjectWrapper.GetWrapper(match.Uuid) as RealTimeMatch;
                if ((rtMatch != null) && (rtMatch.gkMatch != null) && (players.Length > 0))
                {
                    rtMatch._OnPlayerStateChanged(players[0], state);
                }

                match = null;
            });
        }
Exemplo n.º 7
0
        public override void DidReceive(GKMatch match, NSData data, string playerID)
        {
            Player.LoadPlayersByIDs(new string[] { playerID }, delegate(Player[] players) {
                var rtMatch = NSObjectWrapper.GetWrapper(match.Uuid) as RealTimeMatch;
                if ((rtMatch != null) && (players.Length > 0))
                {
                    rtMatch._OnReceiveData(players[0], data);
                }

                match = null;
                data  = null;
            });
        }
Exemplo n.º 8
0
        internal static void _OnPlayerQuit(GKTurnBasedMatch match)
        {
            var tbmatch = NSObjectWrapper.CreateWrapper(typeof(TurnBasedMatch), match) as TurnBasedMatch;

            match = null;

            tbmatch.ReloadPlayers(delegate() {
                if (_localPlayerQuitHandlers != null)
                {
                    _localPlayerQuitHandlers(null, new MatchEventArgs(tbmatch));
                }

                tbmatch = null;
            });
        }
Exemplo n.º 9
0
        internal static void _OnMatchMakerFoundMatch(GKTurnBasedMatch match)
        {
            var tbmatch = NSObjectWrapper.CreateWrapper(typeof(TurnBasedMatch), match) as TurnBasedMatch;

            match = null;

            tbmatch.ReloadPlayers(delegate() {
                // set current match if it matches the id
                SetCurrentMatch(tbmatch);

                if (_turnChangedHandlers != null)
                {
                    _turnChangedHandlers(null, new TurnChangedEventArgs(tbmatch));
                }

                tbmatch = null;
            });
        }
Exemplo n.º 10
0
        /// <summary>
        /// U3DXT internal.
        /// </summary>
        /// <returns>The current match.</returns>
        /// <param name="">.</param>
        public static void SetCurrentMatch(GKMatch gkMatch)
        {
            if (gkMatch == null)
            {
                _currentMatch = null;
                return;
            }

            // resolve to wrapper and then dispatch event
            var rtmatch = NSObjectWrapper.CreateWrapper(typeof(RealTimeMatch), gkMatch) as RealTimeMatch;

            gkMatch = null;

            rtmatch.ReloadPlayers(delegate() {
                _currentMatch = rtmatch;
                if (_matchMakerFoundMatchHandlers != null)
                {
                    _matchMakerFoundMatchHandlers(null, new MatchEventArgs(rtmatch));
                }
                rtmatch = null;
            });
        }
Exemplo n.º 11
0
        private static void _CheckLocalPlayer(NSError error)
        {
            var gkLocalPlayer = GKLocalPlayer.LocalPlayer();

            if (gkLocalPlayer.authenticated)
            {
                // create wrapper and dispatch event
                _localPlayer = NSObjectWrapper.CreateWrapper(typeof(LocalPlayer), gkLocalPlayer, gkLocalPlayer.playerID) as LocalPlayer;
                if (_localPlayerAuthenticatedHandlers != null)
                {
                    _localPlayerAuthenticatedHandlers(null, EventArgs.Empty);
                }
            }
            else
            {
                // set it to null and dispatch event
                _localPlayer = null;
                if (_localPlayerAuthenticationFailedHandlers != null)
                {
                    _localPlayerAuthenticationFailedHandlers(null, new U3DXTErrorEventArgs(error));
                }
            }
        }