//
// Copyright (C) 2015 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
#if UNITY_ANDROID
namespace GooglePlayGames
{
using System.Collections.Generic;
using GooglePlayGames.BasicApi;
using UnityEngine;
using UnityEngine.SocialPlatforms;
public class PlayGamesLeaderboard : ILeaderboard
{
private string mId;
private UserScope mUserScope;
private Range mRange;
private TimeScope mTimeScope;
private string[] mFilteredUserIds;
private bool mLoading;
private IScore mLocalUserScore;
private uint mMaxRange;
private List mScoreList = new List();
private string mTitle;
public PlayGamesLeaderboard(string id)
{
mId = id;
}
#region ILeaderboard implementation
public void SetUserFilter(string[] userIDs)
{
mFilteredUserIds = userIDs;
}
public void LoadScores(System.Action callback)
{
PlayGamesPlatform.Instance.LoadScores(this, callback);
}
public bool loading
{
get { return mLoading; }
internal set { mLoading = value; }
}
public string id
{
get { return mId; }
set { mId = value; }
}
public UserScope userScope
{
get { return mUserScope; }
set { mUserScope = value; }
}
public Range range
{
get { return mRange; }
set { mRange = value; }
}
public TimeScope timeScope
{
get { return mTimeScope; }
set { mTimeScope = value; }
}
public IScore localUserScore
{
get { return mLocalUserScore; }
}
public uint maxRange
{
get { return mMaxRange; }
}
public IScore[] scores
{
get
{
PlayGamesScore[] arr = new PlayGamesScore[mScoreList.Count];
mScoreList.CopyTo(arr);
return arr;
}
}
public string title
{
get { return mTitle; }
}
#endregion
internal bool SetFromData(LeaderboardScoreData data)
{
if (data.Valid)
{
OurUtils.Logger.d("Setting leaderboard from: " + data);
SetMaxRange(data.ApproximateCount);
SetTitle(data.Title);
SetLocalUserScore((PlayGamesScore) data.PlayerScore);
foreach (IScore score in data.Scores)
{
AddScore((PlayGamesScore) score);
}
mLoading = data.Scores.Length == 0 || HasAllScores();
}
return data.Valid;
}
internal void SetMaxRange(ulong val)
{
mMaxRange = (uint) val;
}
internal void SetTitle(string value)
{
mTitle = value;
}
internal void SetLocalUserScore(PlayGamesScore score)
{
mLocalUserScore = score;
}
internal int AddScore(PlayGamesScore score)
{
if (mFilteredUserIds == null || mFilteredUserIds.Length == 0)
{
mScoreList.Add(score);
}
else
{
foreach (string fid in mFilteredUserIds)
{
if (fid.Equals(score.userID))
{
mScoreList.Add(score);
break;
}
}
}
return mScoreList.Count;
}
public int ScoreCount
{
get { return mScoreList.Count; }
}
internal bool HasAllScores()
{
return mScoreList.Count >= mRange.count || mScoreList.Count >= maxRange;
}
}
}
#endif