Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2019
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.40 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using UnityEngine;
  5. using System;
  6. using UnityEngine.SocialPlatforms;
  7. using GooglePlayGames;
  8. using GooglePlayGames.BasicApi;
  9. using GooglePlayGames.BasicApi.SavedGame;
  10.  
  11. public class PlayServices : MonoBehaviour
  12. {
  13. public static PlayServices Instance { get; private set; }
  14. const string SAVE_NAME = "MyGame";
  15. bool isSaving;
  16. bool isCloudDataLoaded = false;
  17. bool bGoogleCheck;
  18.  
  19. private void Awake()
  20. {
  21. Instance = this;
  22. DontDestroyOnLoad(gameObject);
  23. }
  24.  
  25. void Start()
  26. {
  27. if (!PlayerPrefs.HasKey(SAVE_NAME))
  28. PlayerPrefs.SetString(SAVE_NAME, "0");
  29.  
  30. if (!PlayerPrefs.HasKey("IsFirstTime"))
  31. PlayerPrefs.SetInt("IsFirstTime", 1);
  32.  
  33. CloudSave.Instance.LoadPlayer();
  34.  
  35. PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder()
  36. .EnableSavedGames()
  37. .Build();
  38. PlayGamesPlatform.InitializeInstance(config);
  39. PlayGamesPlatform.Activate();
  40. Debug.Log("Start has Run Successfully");
  41. SignIn();
  42. bGoogleCheck = true;
  43. }
  44. string GameDataToString()
  45. {
  46. Debug.Log("GameDataToString has Run Successfully");
  47. string gameDataString =
  48. CloudSave.marineDamageUpgrade.ToString() + " " +
  49. CloudSave.marineDamageCost.ToString() + " " +
  50. CloudSave.marineArmorClass.ToString() + " " +
  51. CloudSave.marineArmorCost.ToString() + " " +
  52. CloudSave.marineHealthUpgrade.ToString() + " " +
  53. CloudSave.marineHealthCost.ToString() + " " +
  54. CloudSave.marineAttackSpeed.ToString() + " " +
  55. CloudSave.marineAttackSpeedCost.ToString() + " " +
  56. CloudSave.marineCritChance.ToString() + " " +
  57. CloudSave.marineCritChanceCost.ToString() + " " +
  58. CloudSave.marineCritMulti.ToString() + " " +
  59. CloudSave.marineCritMultiCost.ToString() + " " +
  60. CloudSave.marineMagnetUpgrade.ToString() + " " +
  61. CloudSave.marineMagnetSpeedUpgrade.ToString() + " " +
  62. CloudSave.marineMagnetCost.ToString() + " " +
  63. CloudSave.totalXP.ToString() + " " +
  64. CloudSave.maxWave.ToString() + " " +
  65. CloudSave.currentWave.ToString() + " " +
  66. CloudSave.ether.ToString();
  67. return gameDataString;
  68. }
  69. void StringToGameData(string localData)
  70. {
  71. string[] gameLoadData = localData.Split(' ');
  72. CloudSave.marineDamageUpgrade = float.Parse(gameLoadData[0]);
  73. CloudSave.marineDamageCost = float.Parse(gameLoadData[1]);
  74. CloudSave.marineArmorClass = float.Parse(gameLoadData[2]);
  75. CloudSave.marineArmorCost = float.Parse(gameLoadData[3]);
  76. CloudSave.marineHealthUpgrade = float.Parse(gameLoadData[4]);
  77. CloudSave.marineHealthCost = float.Parse(gameLoadData[5]);
  78. CloudSave.marineAttackSpeed = float.Parse(gameLoadData[6]);
  79. CloudSave.marineAttackSpeedCost = float.Parse(gameLoadData[7]);
  80. CloudSave.marineCritChance = int.Parse(gameLoadData[8]);
  81. CloudSave.marineCritChanceCost = float.Parse(gameLoadData[9]);
  82. CloudSave.marineCritMulti = float.Parse(gameLoadData[10]);
  83. CloudSave.marineCritMultiCost = float.Parse(gameLoadData[11]);
  84. CloudSave.marineMagnetUpgrade = float.Parse(gameLoadData[12]);
  85. CloudSave.marineMagnetSpeedUpgrade = float.Parse(gameLoadData[13]);
  86. CloudSave.marineMagnetCost = float.Parse(gameLoadData[14]);
  87. CloudSave.totalXP = float.Parse(gameLoadData[15]);
  88. CloudSave.maxWave = int.Parse(gameLoadData[16]);
  89. CloudSave.currentWave = int.Parse(gameLoadData[17]);
  90. CloudSave.ether = int.Parse(gameLoadData[18]);
  91. }
  92.  
  93. private void SignIn()
  94. {
  95. Debug.Log("Sign-in has Run Successfully");
  96. Social.localUser.Authenticate(success => { LoadData();
  97. if(success)
  98. {
  99. Debug.Log(bGoogleCheck.ToString());
  100. }
  101. });
  102. }
  103.  
  104. #region Saved Games
  105.  
  106. public void SaveData()
  107. {
  108. if (!isCloudDataLoaded)
  109. {
  110. LocalSave.Instance.SavePlayer();
  111. }
  112. if (Social.localUser.authenticated)
  113. {
  114. isSaving = false;
  115. ((PlayGamesPlatform)Social.Active).SavedGame.OpenWithManualConflictResolution(SAVE_NAME,
  116. DataSource.ReadCacheOrNetwork, true, ResolveConflict, OnSavedGameOpened);
  117. }
  118. else
  119. {
  120. LocalSave.Instance.SavePlayer();
  121. }
  122. }
  123. public void LoadData()
  124. {
  125. Debug.Log("LoadData has Run Successfully");
  126. if (Social.localUser.authenticated)
  127. {
  128. isSaving = false;
  129. ((PlayGamesPlatform)Social.Active).SavedGame.OpenWithManualConflictResolution(SAVE_NAME,
  130. DataSource.ReadCacheOrNetwork, true, ResolveConflict, OnSavedGameOpened);
  131. }
  132. else
  133. {
  134. CloudSave.Instance.LoadPlayer();
  135. }
  136. }
  137.  
  138. private void OnSavedGameOpened(SavedGameRequestStatus status, ISavedGameMetadata game)
  139. {
  140. if(status == SavedGameRequestStatus.Success)
  141. {
  142. if(!isSaving)
  143. {
  144. LoadGame(game);
  145. }
  146. else
  147. {
  148. SaveGame(game);
  149. }
  150.  
  151. }
  152. else
  153. {
  154. if (!isSaving)
  155. {
  156. CloudSave.Instance.LoadPlayer();
  157. }
  158. else
  159. {
  160. LocalSave.Instance.SavePlayer();
  161. }
  162. }
  163. }
  164. private void ResolveConflict(IConflictResolver resolver, ISavedGameMetadata original, byte[] originalData,
  165. ISavedGameMetadata unmerged, byte[] unmergedData)
  166. {
  167. if (originalData == null)
  168. resolver.ChooseMetadata(unmerged);
  169. else if (unmergedData == null)
  170. resolver.ChooseMetadata(original);
  171. else
  172. {
  173. //decoding byte data into string
  174. string originalStr = Encoding.ASCII.GetString(originalData);
  175. string unmergedStr = Encoding.ASCII.GetString(unmergedData);
  176.  
  177. //parsing
  178. int originalNum = int.Parse(originalStr);
  179. int unmergedNum = int.Parse(unmergedStr);
  180.  
  181. //if original score is greater than unmerged
  182. if (originalNum > unmergedNum)
  183. {
  184. resolver.ChooseMetadata(original);
  185. return;
  186. }
  187. //else (unmerged score is greater than original)
  188. else if (unmergedNum > originalNum)
  189. {
  190. resolver.ChooseMetadata(unmerged);
  191. return;
  192. }
  193. //if return doesn't get called, original and unmerged are identical
  194. //we can keep either one
  195. resolver.ChooseMetadata(original);
  196. }
  197. }
  198.  
  199. private void LoadGame(ISavedGameMetadata game)
  200. {
  201. ((PlayGamesPlatform)Social.Active).SavedGame.ReadBinaryData(game, OnSavedGameDataRead);
  202. }
  203. private void SaveGame(ISavedGameMetadata game)
  204. {
  205. string stringToSave = GameDataToString();
  206.  
  207. PlayerPrefs.SetString(SAVE_NAME, stringToSave);
  208.  
  209. byte[] dataToSave = Encoding.ASCII.GetBytes(stringToSave);
  210.  
  211. SavedGameMetadataUpdate update = new SavedGameMetadataUpdate.Builder().Build();
  212. ((PlayGamesPlatform)Social.Active).SavedGame.CommitUpdate(game, update, dataToSave,
  213. OnSavedGameDataWritten);
  214. }
  215.  
  216. private void OnSavedGameDataRead(SavedGameRequestStatus status, byte[] savedData)
  217. {
  218. if (status == SavedGameRequestStatus.Success)
  219. {
  220. string cloudDataString = Encoding.ASCII.GetString(savedData);
  221. StringToGameData(cloudDataString);
  222. }
  223.  
  224. }
  225. private void OnSavedGameDataWritten(SavedGameRequestStatus status, ISavedGameMetadata game)
  226. {
  227. Debug.Log("Game Has been successfully saved to the cloud!");
  228. }
  229.  
  230. #endregion /Saved Games
  231.  
  232. #region Achievements
  233.  
  234.  
  235. public void UnlockAchievement(string id)
  236. {
  237. Social.ReportProgress(id, 100, (bool success) => { });
  238. }
  239.  
  240. public void IncrementAchievement(string id, int stepsToIncrement)
  241. {
  242. PlayGamesPlatform.Instance.IncrementAchievement(id, stepsToIncrement, success => { });
  243. }
  244. #endregion /Achievements
  245. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement