/// <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; }); }
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; }); }
/// <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; }); }
/// <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); }
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()); }
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; }); }
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; }); }
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; }); }
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; }); }
/// <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; }); }
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)); } } }