mmorpg2d/Assets/Script/CharacterSkin/CharacterSelection.cs
2024-11-10 23:39:20 +05:30

94 lines
2.7 KiB
C#

using System;
using System.Collections.Generic;
using Firebase.Extensions;
using Firebase.Firestore;
using UnityEngine;
using UnityEngine.UI;
public class CharacterSelection : MonoBehaviour
{
[SerializeField] public static string selectedCharJson = "";
public List<CharacterDataSO> predefinedCharacterJsons;
public List<Button> predefinedCharacterButtons;
public static Action OnCharacterChanged;
void Start()
{
for (int i = 0; i < predefinedCharacterButtons.Count; i++)
{
int tempI = i;
predefinedCharacterButtons[i].onClick.AddListener(() => { OnPredefinedCharButtonPress(tempI); });
}
LoadCharacterSkinCloud();
}
public void LoadCharacterFromString(string characterData)
{
selectedCharJson = characterData;
OnCharacterChanged?.Invoke();
}
void OnPredefinedCharButtonPress(int i)
{
selectedCharJson = predefinedCharacterJsons[i].jsonCharData;
OnCharacterChanged?.Invoke();
SaveCharacterSkinCloud();
}
public static void SaveCharacterSkinCloud()
{
#if UNITY_EDITOR
PlayerPrefs.SetString("skinData", selectedCharJson);
PlayerPrefs.Save();
#else
FirebaseFirestore db = FirebaseFirestore.DefaultInstance;
Dictionary<string,object> skindataDictionary = new Dictionary<string, object>();
skindataDictionary.Add("json", selectedCharJson);
DocumentReference docRef = db.Collection("SkinData").Document(gplayAuth.userID);
docRef.SetAsync(skindataDictionary).ContinueWithOnMainThread(task => {
if(task.IsCompleted){
Debug.Log("**** Save Completed Firestore ****");
}
else{
Debug.Log("**** Failed to save data to firestore ****");
}
});
#endif
}
void LoadCharacterSkinCloud()
{
#if UNITY_EDITOR
if (PlayerPrefs.HasKey("skinData"))
{
LoadCharacterFromString(PlayerPrefs.GetString("skinData"));
}
#else
FirebaseFirestore db = FirebaseFirestore.DefaultInstance;
DocumentReference docRef = db.Collection("SkinData").Document(gplayAuth.userID);
docRef.GetSnapshotAsync().ContinueWithOnMainThread(task => {
DocumentSnapshot snapshot = task.Result;
if(snapshot.Exists){
LoadCharacterFromString(snapshot.GetValue<string>("json"));
}else{
//show error previous data doesnt exists to load
Debug.Log("**** No previous data to load ****");
}
});
#endif
}
}