Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.Collections.Generic;
- using System.Text;
- using UnityEngine;
- using System;
- using UnityEngine.SocialPlatforms;
- using GooglePlayGames;
- using GooglePlayGames.BasicApi;
- using GooglePlayGames.BasicApi.SavedGame;
- public class PlayServices : MonoBehaviour
- {
- public static PlayServices Instance { get; private set; }
- const string SAVE_NAME = "MyGame";
- bool isSaving;
- bool isCloudDataLoaded = false;
- bool bGoogleCheck;
- private void Awake()
- {
- Instance = this;
- DontDestroyOnLoad(gameObject);
- }
- void Start()
- {
- if (!PlayerPrefs.HasKey(SAVE_NAME))
- PlayerPrefs.SetString(SAVE_NAME, "0");
- if (!PlayerPrefs.HasKey("IsFirstTime"))
- PlayerPrefs.SetInt("IsFirstTime", 1);
- CloudSave.Instance.LoadPlayer();
- PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder()
- .EnableSavedGames()
- .Build();
- PlayGamesPlatform.InitializeInstance(config);
- PlayGamesPlatform.Activate();
- Debug.Log("Start has Run Successfully");
- SignIn();
- bGoogleCheck = true;
- }
- string GameDataToString()
- {
- Debug.Log("GameDataToString has Run Successfully");
- string gameDataString =
- CloudSave.marineDamageUpgrade.ToString() + " " +
- CloudSave.marineDamageCost.ToString() + " " +
- CloudSave.marineArmorClass.ToString() + " " +
- CloudSave.marineArmorCost.ToString() + " " +
- CloudSave.marineHealthUpgrade.ToString() + " " +
- CloudSave.marineHealthCost.ToString() + " " +
- CloudSave.marineAttackSpeed.ToString() + " " +
- CloudSave.marineAttackSpeedCost.ToString() + " " +
- CloudSave.marineCritChance.ToString() + " " +
- CloudSave.marineCritChanceCost.ToString() + " " +
- CloudSave.marineCritMulti.ToString() + " " +
- CloudSave.marineCritMultiCost.ToString() + " " +
- CloudSave.marineMagnetUpgrade.ToString() + " " +
- CloudSave.marineMagnetSpeedUpgrade.ToString() + " " +
- CloudSave.marineMagnetCost.ToString() + " " +
- CloudSave.totalXP.ToString() + " " +
- CloudSave.maxWave.ToString() + " " +
- CloudSave.currentWave.ToString() + " " +
- CloudSave.ether.ToString();
- return gameDataString;
- }
- void StringToGameData(string localData)
- {
- string[] gameLoadData = localData.Split(' ');
- CloudSave.marineDamageUpgrade = float.Parse(gameLoadData[0]);
- CloudSave.marineDamageCost = float.Parse(gameLoadData[1]);
- CloudSave.marineArmorClass = float.Parse(gameLoadData[2]);
- CloudSave.marineArmorCost = float.Parse(gameLoadData[3]);
- CloudSave.marineHealthUpgrade = float.Parse(gameLoadData[4]);
- CloudSave.marineHealthCost = float.Parse(gameLoadData[5]);
- CloudSave.marineAttackSpeed = float.Parse(gameLoadData[6]);
- CloudSave.marineAttackSpeedCost = float.Parse(gameLoadData[7]);
- CloudSave.marineCritChance = int.Parse(gameLoadData[8]);
- CloudSave.marineCritChanceCost = float.Parse(gameLoadData[9]);
- CloudSave.marineCritMulti = float.Parse(gameLoadData[10]);
- CloudSave.marineCritMultiCost = float.Parse(gameLoadData[11]);
- CloudSave.marineMagnetUpgrade = float.Parse(gameLoadData[12]);
- CloudSave.marineMagnetSpeedUpgrade = float.Parse(gameLoadData[13]);
- CloudSave.marineMagnetCost = float.Parse(gameLoadData[14]);
- CloudSave.totalXP = float.Parse(gameLoadData[15]);
- CloudSave.maxWave = int.Parse(gameLoadData[16]);
- CloudSave.currentWave = int.Parse(gameLoadData[17]);
- CloudSave.ether = int.Parse(gameLoadData[18]);
- }
- private void SignIn()
- {
- Debug.Log("Sign-in has Run Successfully");
- Social.localUser.Authenticate(success => { LoadData();
- if(success)
- {
- Debug.Log(bGoogleCheck.ToString());
- }
- });
- }
- #region Saved Games
- public void SaveData()
- {
- if (!isCloudDataLoaded)
- {
- LocalSave.Instance.SavePlayer();
- }
- if (Social.localUser.authenticated)
- {
- isSaving = false;
- ((PlayGamesPlatform)Social.Active).SavedGame.OpenWithManualConflictResolution(SAVE_NAME,
- DataSource.ReadCacheOrNetwork, true, ResolveConflict, OnSavedGameOpened);
- }
- else
- {
- LocalSave.Instance.SavePlayer();
- }
- }
- public void LoadData()
- {
- Debug.Log("LoadData has Run Successfully");
- if (Social.localUser.authenticated)
- {
- isSaving = false;
- ((PlayGamesPlatform)Social.Active).SavedGame.OpenWithManualConflictResolution(SAVE_NAME,
- DataSource.ReadCacheOrNetwork, true, ResolveConflict, OnSavedGameOpened);
- }
- else
- {
- CloudSave.Instance.LoadPlayer();
- }
- }
- private void OnSavedGameOpened(SavedGameRequestStatus status, ISavedGameMetadata game)
- {
- if(status == SavedGameRequestStatus.Success)
- {
- if(!isSaving)
- {
- LoadGame(game);
- }
- else
- {
- SaveGame(game);
- }
- }
- else
- {
- if (!isSaving)
- {
- CloudSave.Instance.LoadPlayer();
- }
- else
- {
- LocalSave.Instance.SavePlayer();
- }
- }
- }
- private void ResolveConflict(IConflictResolver resolver, ISavedGameMetadata original, byte[] originalData,
- ISavedGameMetadata unmerged, byte[] unmergedData)
- {
- if (originalData == null)
- resolver.ChooseMetadata(unmerged);
- else if (unmergedData == null)
- resolver.ChooseMetadata(original);
- else
- {
- //decoding byte data into string
- string originalStr = Encoding.ASCII.GetString(originalData);
- string unmergedStr = Encoding.ASCII.GetString(unmergedData);
- //parsing
- int originalNum = int.Parse(originalStr);
- int unmergedNum = int.Parse(unmergedStr);
- //if original score is greater than unmerged
- if (originalNum > unmergedNum)
- {
- resolver.ChooseMetadata(original);
- return;
- }
- //else (unmerged score is greater than original)
- else if (unmergedNum > originalNum)
- {
- resolver.ChooseMetadata(unmerged);
- return;
- }
- //if return doesn't get called, original and unmerged are identical
- //we can keep either one
- resolver.ChooseMetadata(original);
- }
- }
- private void LoadGame(ISavedGameMetadata game)
- {
- ((PlayGamesPlatform)Social.Active).SavedGame.ReadBinaryData(game, OnSavedGameDataRead);
- }
- private void SaveGame(ISavedGameMetadata game)
- {
- string stringToSave = GameDataToString();
- PlayerPrefs.SetString(SAVE_NAME, stringToSave);
- byte[] dataToSave = Encoding.ASCII.GetBytes(stringToSave);
- SavedGameMetadataUpdate update = new SavedGameMetadataUpdate.Builder().Build();
- ((PlayGamesPlatform)Social.Active).SavedGame.CommitUpdate(game, update, dataToSave,
- OnSavedGameDataWritten);
- }
- private void OnSavedGameDataRead(SavedGameRequestStatus status, byte[] savedData)
- {
- if (status == SavedGameRequestStatus.Success)
- {
- string cloudDataString = Encoding.ASCII.GetString(savedData);
- StringToGameData(cloudDataString);
- }
- }
- private void OnSavedGameDataWritten(SavedGameRequestStatus status, ISavedGameMetadata game)
- {
- Debug.Log("Game Has been successfully saved to the cloud!");
- }
- #endregion /Saved Games
- #region Achievements
- public void UnlockAchievement(string id)
- {
- Social.ReportProgress(id, 100, (bool success) => { });
- }
- public void IncrementAchievement(string id, int stepsToIncrement)
- {
- PlayGamesPlatform.Instance.IncrementAchievement(id, stepsToIncrement, success => { });
- }
- #endregion /Achievements
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement