// // Copyright (C) 2014 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; using System.Collections; using GooglePlayGames.OurUtils; using UnityEngine; #if UNITY_2017_2_OR_NEWER using UnityEngine.Networking; #endif using UnityEngine.SocialPlatforms; /// /// Represents a Google Play Games user profile. In the current implementation, /// this is only used as a base class of /// and should not be used directly. /// public class PlayGamesUserProfile : IUserProfile { private string mDisplayName; private string mPlayerId; private string mAvatarUrl; private bool mIsFriend; private volatile bool mImageLoading = false; private Texture2D mImage; internal PlayGamesUserProfile(string displayName, string playerId, string avatarUrl) { mDisplayName = displayName; mPlayerId = playerId; setAvatarUrl(avatarUrl); mImageLoading = false; mIsFriend = false; } internal PlayGamesUserProfile(string displayName, string playerId, string avatarUrl, bool isFriend) { mDisplayName = displayName; mPlayerId = playerId; mAvatarUrl = avatarUrl; mImageLoading = false; mIsFriend = isFriend; } protected void ResetIdentity(string displayName, string playerId, string avatarUrl) { mDisplayName = displayName; mPlayerId = playerId; mIsFriend = false; if (mAvatarUrl != avatarUrl) { mImage = null; setAvatarUrl(avatarUrl); } mImageLoading = false; } #region IUserProfile implementation public string userName { get { return mDisplayName; } } public string id { get { return mPlayerId; } } public string gameId { get { return mPlayerId; } } public bool isFriend { get { return mIsFriend; } } public UserState state { get { return UserState.Online; } } public Texture2D image { get { if (!mImageLoading && mImage == null && !string.IsNullOrEmpty(AvatarURL)) { OurUtils.Logger.d("Starting to load image: " + AvatarURL); mImageLoading = true; PlayGamesHelperObject.RunCoroutine(LoadImage()); } return mImage; } } #endregion public string AvatarURL { get { return mAvatarUrl; } } /// /// Loads the local user's image from the url. Loading urls /// is asynchronous so the return from this call is fast, /// the image is returned once it is loaded. null is returned /// up to that point. /// internal IEnumerator LoadImage() { // the url can be null if the user does not have an // avatar configured. if (!string.IsNullOrEmpty(AvatarURL)) { #if UNITY_2017_2_OR_NEWER UnityWebRequest www = UnityWebRequestTexture.GetTexture(AvatarURL); www.SendWebRequest(); #else WWW www = new WWW(AvatarURL); #endif while (!www.isDone) { yield return null; } if (www.error == null) { #if UNITY_2017_2_OR_NEWER this.mImage = DownloadHandlerTexture.GetContent(www); #else this.mImage = www.texture; #endif } else { mImage = Texture2D.blackTexture; OurUtils.Logger.e("Error downloading image: " + www.error); } mImageLoading = false; } else { OurUtils.Logger.e("No URL found."); mImage = Texture2D.blackTexture; mImageLoading = false; } } public override bool Equals(object obj) { if (obj == null) { return false; } if (ReferenceEquals(this, obj)) { return true; } PlayGamesUserProfile other = obj as PlayGamesUserProfile; if (other == null) { return false; } return StringComparer.Ordinal.Equals(mPlayerId, other.mPlayerId); } public override int GetHashCode() { return typeof(PlayGamesUserProfile).GetHashCode() ^ mPlayerId.GetHashCode(); } public override string ToString() { return string.Format("[Player: '{0}' (id {1})]", mDisplayName, mPlayerId); } private void setAvatarUrl(string avatarUrl) { mAvatarUrl = avatarUrl; if (!avatarUrl.StartsWith("https") && avatarUrl.StartsWith("http")) { mAvatarUrl = avatarUrl.Insert(4, "s"); } } } } #endif