2015-02-18 3 views
1

Я использую код TicTacToss в качестве основы для игры пошаговой на андроид в Unity, используя это: https://github.com/playgameservices/play-games-plugin-for-unityПолучить все пошаговая Матчи Информация от GooglePlayServices, Unity Plugin

Все работает замечательно, но нет никакой функциональности подвергается возврату список игр, в которых задействован текущий пользователь, активный и завершенный. Мне нужно это для основного пользовательского интерфейса, поэтому я могу показать пользователю, какие игры они играют, против кого и т. Д. Без этого API кажется довольно недостающим.

Неужели кто-нибудь смог добиться этого? Мне кажется, что функция может быть там, так как есть функция GetAllTurnbasedMatches(), но мой C# недостаточно силен, чтобы понять, как это работает. (См в https://github.com/playgameservices/play-games-plugin-for-unity/blob/master/source/PluginDev/Assets/GooglePlayGames/Platforms/Native/PInvoke/TurnBasedManager.cs)

ответ

1

(подробнее @https://github.com/playgameservices/play-games-plugin-for-unity/issues/414)

мне удалось получить эту работу обратно добавив следующие NativeTurnBasedMultiplayerClient.cs:

public void GetAllTBMatches(Action<TurnBasedMatch, TurnBasedMatch.MatchTurnStatus> callback) 
{ 
    mTurnBasedManager.GetAllTurnbasedMatches(allMatches => 
    { 
     foreach (var match in allMatches.MatchesMyTurn()) 
     { 
      var converted = match.AsTurnBasedMatch(mNativeClient.GetUserId()); 
      Logger.d("MY turn : Passing converted match to user callback:" + converted); 
      callback(converted, TurnBasedMatch.MatchTurnStatus.MyTurn); 
     } 
     foreach (var match in allMatches.MatchesTheirTurn()) 
     { 
      var converted = match.AsTurnBasedMatch(mNativeClient.GetUserId()); 
      Logger.d("Their Turn : Passing converted match to user callback:" + converted); 
      callback(converted, TurnBasedMatch.MatchTurnStatus.TheirTurn); 
     } 
     foreach (var match in allMatches.MatchesCompleted()) 
     { 
      var converted = match.AsTurnBasedMatch(mNativeClient.GetUserId()); 
      Logger.d("Completed : Passing converted match to user callback:" + converted); 
      callback(converted, TurnBasedMatch.MatchTurnStatus.Complete); 
     } 

     callback(null, TurnBasedMatch.MatchTurnStatus.Unknown); 
    }); 
} 

public void GetAllTBInvitations(Action<Invitation> callback) 
{ 
    mTurnBasedManager.GetAllTurnbasedMatches(allMatches => 
    { 
     foreach (var invitation in allMatches.Invitations()) 
     { 
      var converted = invitation.AsInvitation(); 
      Logger.d("Passing converted invitation to user callback:" + converted); 
      callback(converted); 
     } 

     callback(null); 
    }); 
} 

Кроме того, необходимо отредактировать следующее TurnBasedManager .cs

internal class TurnBasedMatchesResponse : BaseReferenceHolder { 
    internal TurnBasedMatchesResponse(IntPtr selfPointer) : base(selfPointer) { 
    } 

    protected override void CallDispose(HandleRef selfPointer) { 
     C.TurnBasedMultiplayerManager_TurnBasedMatchesResponse_Dispose(SelfPtr()); 
    } 

    internal CommonErrorStatus.MultiplayerStatus Status() { 
     return C.TurnBasedMultiplayerManager_TurnBasedMatchesResponse_GetStatus(SelfPtr()); 
    } 

    internal IEnumerable<MultiplayerInvitation> Invitations() 
    { 
     return PInvokeUtilities.ToEnumerable(
      C.TurnBasedMultiplayerManager_TurnBasedMatchesResponse_GetInvitations_Length(SelfPtr()), 
      index => new MultiplayerInvitation(C.TurnBasedMultiplayerManager_TurnBasedMatchesResponse_GetInvitations_GetElement(SelfPtr(), index))); 
    } 

    internal IEnumerable<NativeTurnBasedMatch> MatchesMyTurn() 
    { 
     return PInvokeUtilities.ToEnumerable(
      C.TurnBasedMultiplayerManager_TurnBasedMatchesResponse_GetMyTurnMatches_Length(SelfPtr()), 
      index => new NativeTurnBasedMatch(C.TurnBasedMultiplayerManager_TurnBasedMatchesResponse_GetMyTurnMatches_GetElement(SelfPtr(), index))); 
    } 

    internal IEnumerable<NativeTurnBasedMatch> MatchesTheirTurn() 
    { 
     return PInvokeUtilities.ToEnumerable(
      C.TurnBasedMultiplayerManager_TurnBasedMatchesResponse_GetTheirTurnMatches_Length(SelfPtr()), 
      index => new NativeTurnBasedMatch(C.TurnBasedMultiplayerManager_TurnBasedMatchesResponse_GetTheirTurnMatches_GetElement(SelfPtr(), index))); 
    } 

    internal IEnumerable<NativeTurnBasedMatch> MatchesCompleted() 
    { 
     return PInvokeUtilities.ToEnumerable(
      C.TurnBasedMultiplayerManager_TurnBasedMatchesResponse_GetCompletedMatches_Length(SelfPtr()), 
      index => new NativeTurnBasedMatch(C.TurnBasedMultiplayerManager_TurnBasedMatchesResponse_GetCompletedMatches_GetElement(SelfPtr(), index))); 
    } 

    internal static TurnBasedMatchesResponse FromPointer(IntPtr pointer) 
    { 
     if (PInvokeUtilities.IsNull(pointer)) { 
      return null; 
     } 

     return new TurnBasedMatchesResponse(pointer); 
    } 
} 
Смежные вопросы