393 lines
16 KiB
C#
393 lines
16 KiB
C#
|
|
using System;
|
|
using System.Linq;
|
|
using System.Numerics;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using Newtonsoft.Json.Linq;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.Networking;
|
|
using UnityEngine.UI;
|
|
|
|
public class ProfileMenu : MonoBehaviour
|
|
{
|
|
public Button exitButton;
|
|
public Button refreshButton;
|
|
public Button postButton;
|
|
|
|
public GameObject contentPanel;
|
|
public TMP_Text loadingText;
|
|
public GameObject voteOverlay;
|
|
public GameObject postOverlay;
|
|
|
|
public TMP_Text normalBerryStat;
|
|
public TMP_Text poisonBerryStat;
|
|
public TMP_Text slowBerryStat;
|
|
public TMP_Text ultraBerryStat;
|
|
public TMP_Text speedyBerryStat;
|
|
public TMP_Text coinBerryStat;
|
|
public TMP_Text randomBerryStat;
|
|
public TMP_Text antiBerryStat;
|
|
public TMP_Text coinStat;
|
|
public TMP_Text playerNameText;
|
|
public Image playerIconImage;
|
|
public Image playerOverlayImage;
|
|
public GameObject postSample;
|
|
|
|
public bool canVote = true;
|
|
|
|
|
|
void Awake()
|
|
{
|
|
exitButton.onClick.AddListener(() => Destroy(gameObject));
|
|
}
|
|
|
|
public async Task Init(
|
|
string normalBerries,
|
|
string poisonBerries,
|
|
string slowBerries,
|
|
string ultraBerries,
|
|
string speedyBerries,
|
|
string coinBerries,
|
|
string randomBerries,
|
|
string antiBerries,
|
|
string coins,
|
|
string playerName,
|
|
BigInteger playerID,
|
|
int playerIcon,
|
|
int playerOverlay,
|
|
string customIcon,
|
|
Color playerIconColor,
|
|
Color playerOverlayColor
|
|
)
|
|
{
|
|
normalBerryStat.text = normalBerries;
|
|
poisonBerryStat.text = poisonBerries;
|
|
slowBerryStat.text = slowBerries;
|
|
ultraBerryStat.text = ultraBerries;
|
|
speedyBerryStat.text = speedyBerries;
|
|
coinBerryStat.text = coinBerries;
|
|
randomBerryStat.text = randomBerries;
|
|
antiBerryStat.text = antiBerries;
|
|
coinStat.text = coins;
|
|
playerNameText.text = playerName;
|
|
|
|
if (customIcon == null)
|
|
{
|
|
playerIconImage.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + playerIcon);
|
|
if (playerIcon == 1)
|
|
{
|
|
playerIconImage.sprite = Tools.GetIconForUser(playerID);
|
|
}
|
|
playerOverlayImage.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + playerOverlay);
|
|
if (playerOverlay == 0)
|
|
{
|
|
playerOverlayImage.gameObject.SetActive(false);
|
|
}
|
|
else if (playerOverlay == 8)
|
|
{
|
|
playerOverlayImage.transform.localPosition = new UnityEngine.Vector2(-16.56f, 14.81f);
|
|
}
|
|
else if (playerOverlay == 11)
|
|
{
|
|
playerOverlayImage.transform.localPosition = new UnityEngine.Vector2(-14.74451f, 20.39122f);
|
|
}
|
|
else if (playerOverlay == 13)
|
|
{
|
|
playerOverlayImage.transform.localPosition = new UnityEngine.Vector2(-16.54019f, 14.70365f);
|
|
}
|
|
playerIconImage.color = playerIconColor;
|
|
playerOverlayImage.color = playerOverlayColor;
|
|
}
|
|
else
|
|
{
|
|
Tools.RenderFromBase64(customIcon, playerIconImage);
|
|
playerOverlayImage.gameObject.SetActive(false);
|
|
}
|
|
if (BazookaManager.Instance.GetAccountID() == playerID)
|
|
{
|
|
postButton.gameObject.SetActive(true);
|
|
postButton.onClick.AddListener(UploadPostPopup);
|
|
}
|
|
|
|
contentPanel.SetActive(true);
|
|
loadingText.gameObject.SetActive(false);
|
|
|
|
Tools.RefreshHierarchy(gameObject);
|
|
refreshButton.onClick.AddListener(async () => await RefreshPosts(playerID, playerName));
|
|
await RefreshPosts(playerID, playerName);
|
|
}
|
|
|
|
public async Task Init(BigInteger playerID)
|
|
{
|
|
EncryptedWWWForm dataForm = new();
|
|
dataForm.AddField("uesrId", playerID.ToString());
|
|
using UnityWebRequest request = UnityWebRequest.Post(SensitiveInfo.SERVER_DATABASE_PREFIX + "getAccountProfile.php", dataForm.form);
|
|
request.SetRequestHeader("Requester", "BerryDashClient");
|
|
request.SetRequestHeader("ClientVersion", Application.version);
|
|
request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
|
|
await request.SendWebRequest();
|
|
if (request.result != UnityWebRequest.Result.Success)
|
|
{
|
|
return;
|
|
}
|
|
string response = SensitiveInfo.Decrypt(request.downloadHandler.text, SensitiveInfo.SERVER_RECEIVE_TRANSFER_KEY);
|
|
var jsonResponse = JObject.Parse(response);
|
|
if ((bool)jsonResponse["success"])
|
|
{
|
|
var totalNormalBerries = (string)jsonResponse["totalNormalBerries"];
|
|
var totalPoisonBerries = (string)jsonResponse["totalPoisonBerries"];
|
|
var totalSlowBerries = (string)jsonResponse["totalSlowBerries"];
|
|
var totalUltraBerries = (string)jsonResponse["totalUltraBerries"];
|
|
var totalSpeedyBerries = (string)jsonResponse["totalSpeedyBerries"];
|
|
var totalCoinBerries = (string)jsonResponse["totalCoinBerries"];
|
|
var totalRandomBerries = (string)jsonResponse["totalRandomBerries"];
|
|
var totalAntiBerries = (string)jsonResponse["totalAntiBerries"];
|
|
var coins = (string)jsonResponse["coins"];
|
|
var name = (string)jsonResponse["name"];
|
|
var icon = (int)jsonResponse["icon"];
|
|
var overlay = (int)jsonResponse["overlay"];
|
|
var customIcon = (string)jsonResponse["customIcon"];
|
|
var playerIconColorArray = JArray.Parse(jsonResponse["playerIconColor"].ToString());
|
|
var playerIconColor = new Color((int)playerIconColorArray[0] / 255f, (int)playerIconColorArray[1] / 255f, (int)playerIconColorArray[2] / 255f);
|
|
var playerOverlayColorArray = JArray.Parse(jsonResponse["playerOverlayColor"].ToString());
|
|
var playerOverlayColor = new Color((int)playerOverlayColorArray[0] / 255f, (int)playerOverlayColorArray[1] / 255f, (int)playerOverlayColorArray[2] / 255f);
|
|
await Init(
|
|
totalNormalBerries,
|
|
totalPoisonBerries,
|
|
totalSlowBerries,
|
|
totalUltraBerries,
|
|
totalSpeedyBerries,
|
|
totalCoinBerries,
|
|
totalRandomBerries,
|
|
totalAntiBerries,
|
|
coins,
|
|
name,
|
|
playerID,
|
|
icon,
|
|
overlay,
|
|
customIcon,
|
|
playerIconColor,
|
|
playerOverlayColor
|
|
);
|
|
}
|
|
else
|
|
{
|
|
Destroy(gameObject);
|
|
}
|
|
}
|
|
|
|
async Task RefreshPosts(BigInteger playerID, string playerName)
|
|
{
|
|
exitButton.interactable = false;
|
|
refreshButton.interactable = false;
|
|
postButton.interactable = false;
|
|
foreach (Transform post in postSample.transform.parent)
|
|
{
|
|
if (post.gameObject.activeSelf)
|
|
{
|
|
Destroy(post.gameObject);
|
|
}
|
|
}
|
|
EncryptedWWWForm dataForm = new();
|
|
dataForm.AddField("targetId", playerID.ToString());
|
|
using UnityWebRequest request = UnityWebRequest.Post(SensitiveInfo.SERVER_DATABASE_PREFIX + "getAccountProfileMessages.php", dataForm.form);
|
|
request.SetRequestHeader("Requester", "BerryDashClient");
|
|
request.SetRequestHeader("ClientVersion", Application.version);
|
|
request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
|
|
await request.SendWebRequest();
|
|
if (request.result != UnityWebRequest.Result.Success)
|
|
{
|
|
return;
|
|
}
|
|
string response = SensitiveInfo.Decrypt(request.downloadHandler.text, SensitiveInfo.SERVER_RECEIVE_TRANSFER_KEY);
|
|
var posts = JArray.Parse(response).ToObject<ProfileMessageResponse[]>();
|
|
foreach (var post in posts)
|
|
{
|
|
var entry = Instantiate(postSample, postSample.transform.parent);
|
|
var entryUsername = entry.transform.GetChild(0).GetComponent<TMP_Text>();
|
|
var entryLikesParent = entry.transform.GetChild(1);
|
|
var entryLikesTexture = entryLikesParent.GetChild(1).GetComponent<TMP_Text>();
|
|
var entryLikesButton = entryLikesParent.GetChild(1).GetComponent<Button>();
|
|
var entryLikesCount = entryLikesParent.GetChild(2).GetComponent<TMP_Text>();
|
|
var entryMessage = entry.transform.GetChild(2).GetComponent<TMP_Text>();
|
|
var entryTimestamp = entry.transform.GetChild(3).GetComponent<TMP_Text>();
|
|
var entryDeleteButton = entryLikesParent.GetChild(0).GetComponent<Button>();
|
|
|
|
entryUsername.text = playerName;
|
|
entryLikesTexture.text = post.Likes < 0 ? "\\uf165" : "\\uf164";
|
|
entryLikesTexture.color = post.Likes < 0 ? new Color(1f, 0f, 0.5f) : new Color(1f, 1f, 0f);
|
|
entryLikesCount.text = Tools.FormatWithCommas(post.Likes);
|
|
entryLikesButton.onClick.AddListener(() =>
|
|
{
|
|
if (canVote && BazookaManager.Instance.GetAccountID() != post.UserID)
|
|
{
|
|
var likedPosts = BazookaManager.Instance
|
|
.GetLikedPosts()
|
|
.Select(x => x.ToString())
|
|
.ToList();
|
|
if (!likedPosts.Any(x => x.ToString() == post.ID.ToString())) VotePost(post.ID, entryLikesCount);
|
|
}
|
|
});
|
|
entryMessage.text = Encoding.UTF8.GetString(Convert.FromBase64String(post.Content));
|
|
entryTimestamp.text = post.Timestamp.ToString();
|
|
if (BazookaManager.Instance.GetAccountID() == post.UserID)
|
|
{
|
|
entryDeleteButton.gameObject.SetActive(true);
|
|
entryDeleteButton.onClick.AddListener(async () => await DeletePost(entry, post.ID));
|
|
}
|
|
|
|
entry.name = "PostEntry_" + post.ID;
|
|
entry.SetActive(true);
|
|
|
|
Tools.RefreshHierarchy(entry);
|
|
}
|
|
exitButton.interactable = true;
|
|
refreshButton.interactable = true;
|
|
postButton.interactable = true;
|
|
}
|
|
|
|
void VotePost(BigInteger postId, TMP_Text entryLikesCount)
|
|
{
|
|
var popup = Instantiate(voteOverlay, voteOverlay.transform.parent);
|
|
popup.SetActive(true);
|
|
var exitButton = popup.transform.GetChild(0).GetChild(0).GetComponent<Button>();
|
|
var likeButton = popup.transform.GetChild(0).GetChild(2).GetComponent<Button>();
|
|
var dislikeButton = popup.transform.GetChild(0).GetChild(3).GetComponent<Button>();
|
|
exitButton.onClick.AddListener(() => Destroy(popup));
|
|
likeButton.onClick.AddListener(async () =>
|
|
{
|
|
canVote = false;
|
|
Destroy(popup);
|
|
await SendPostVote(postId, true, entryLikesCount);
|
|
canVote = true;
|
|
});
|
|
dislikeButton.onClick.AddListener(async () =>
|
|
{
|
|
canVote = false;
|
|
Destroy(popup);
|
|
await SendPostVote(postId, false, entryLikesCount);
|
|
canVote = true;
|
|
});
|
|
}
|
|
|
|
async Task SendPostVote(BigInteger postId, bool liked, TMP_Text entryLikesCount)
|
|
{
|
|
EncryptedWWWForm dataForm = new();
|
|
dataForm.AddField("targetId", postId.ToString());
|
|
dataForm.AddField("liked", liked ? "1" : "0");
|
|
dataForm.AddField("username", BazookaManager.Instance.GetAccountName());
|
|
dataForm.AddField("token", BazookaManager.Instance.GetAccountSession());
|
|
using UnityWebRequest request = UnityWebRequest.Post(SensitiveInfo.SERVER_DATABASE_PREFIX + "voteAccountProfileMessage.php", dataForm.form);
|
|
request.SetRequestHeader("Requester", "BerryDashClient");
|
|
request.SetRequestHeader("ClientVersion", Application.version);
|
|
request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
|
|
await request.SendWebRequest();
|
|
if (request.result != UnityWebRequest.Result.Success)
|
|
{
|
|
return;
|
|
}
|
|
string response = SensitiveInfo.Decrypt(request.downloadHandler.text, SensitiveInfo.SERVER_RECEIVE_TRANSFER_KEY);
|
|
try
|
|
{
|
|
var jsonResponse = JObject.Parse(response);
|
|
if ((bool)jsonResponse["success"])
|
|
{
|
|
entryLikesCount.text = Tools.FormatWithCommas((string)jsonResponse["likes"]);
|
|
var likedPosts = BazookaManager.Instance.GetLikedPosts();
|
|
likedPosts.Add(postId.ToString());
|
|
BazookaManager.Instance.SetLikedPosts(likedPosts);
|
|
}
|
|
else
|
|
{
|
|
if ((string)jsonResponse["message"] == "You have already voted")
|
|
{
|
|
var likedPosts = BazookaManager.Instance.GetLikedPosts();
|
|
likedPosts.Add(postId.ToString());
|
|
BazookaManager.Instance.SetLikedPosts(likedPosts);
|
|
}
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
Debug.LogError("Failed to proccess vote");
|
|
}
|
|
}
|
|
|
|
void UploadPostPopup()
|
|
{
|
|
var popup = Instantiate(postOverlay, postOverlay.transform.parent);
|
|
popup.SetActive(true);
|
|
var inputBox = popup.transform.GetChild(0).GetChild(1).GetComponent<TMP_InputField>();
|
|
var cancelButton = popup.transform.GetChild(0).GetChild(2).GetComponent<Button>();
|
|
var submitButton = popup.transform.GetChild(0).GetChild(3).GetComponent<Button>();
|
|
cancelButton.onClick.AddListener(() => Destroy(popup));
|
|
submitButton.onClick.AddListener(async () =>
|
|
{
|
|
if (inputBox.text.Trim().Length == 0) return;
|
|
Destroy(popup);
|
|
await UploadPost(inputBox.text);
|
|
});
|
|
}
|
|
|
|
async Task UploadPost(string message)
|
|
{
|
|
EncryptedWWWForm dataForm = new();
|
|
dataForm.AddField("content", message);
|
|
dataForm.AddField("username", BazookaManager.Instance.GetAccountName());
|
|
dataForm.AddField("token", BazookaManager.Instance.GetAccountSession());
|
|
using UnityWebRequest request = UnityWebRequest.Post(SensitiveInfo.SERVER_DATABASE_PREFIX + "uploadAccountProfileMessage.php", dataForm.form);
|
|
request.SetRequestHeader("Requester", "BerryDashClient");
|
|
request.SetRequestHeader("ClientVersion", Application.version);
|
|
request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
|
|
await request.SendWebRequest();
|
|
if (request.result != UnityWebRequest.Result.Success)
|
|
{
|
|
return;
|
|
}
|
|
string response = SensitiveInfo.Decrypt(request.downloadHandler.text, SensitiveInfo.SERVER_RECEIVE_TRANSFER_KEY);
|
|
try
|
|
{
|
|
var jsonResponse = JObject.Parse(response);
|
|
if ((bool)jsonResponse["success"])
|
|
{
|
|
await RefreshPosts(BazookaManager.Instance.GetAccountID() ?? 0, BazookaManager.Instance.GetAccountName());
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
Debug.LogError("Failed to upload post");
|
|
}
|
|
}
|
|
|
|
async Task DeletePost(GameObject entryObject, BigInteger targetId)
|
|
{
|
|
EncryptedWWWForm dataForm = new();
|
|
dataForm.AddField("targetId", targetId.ToString());
|
|
dataForm.AddField("username", BazookaManager.Instance.GetAccountName());
|
|
dataForm.AddField("token", BazookaManager.Instance.GetAccountSession());
|
|
using UnityWebRequest request = UnityWebRequest.Post(SensitiveInfo.SERVER_DATABASE_PREFIX + "deleteAccountProfileMessage.php", dataForm.form);
|
|
request.SetRequestHeader("Requester", "BerryDashClient");
|
|
request.SetRequestHeader("ClientVersion", Application.version);
|
|
request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
|
|
await request.SendWebRequest();
|
|
if (request.result != UnityWebRequest.Result.Success)
|
|
{
|
|
return;
|
|
}
|
|
string response = SensitiveInfo.Decrypt(request.downloadHandler.text, SensitiveInfo.SERVER_RECEIVE_TRANSFER_KEY);
|
|
try
|
|
{
|
|
var jsonResponse = JObject.Parse(response);
|
|
if ((bool)jsonResponse["success"])
|
|
{
|
|
Destroy(entryObject);
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
Debug.LogError("Failed to upload post");
|
|
}
|
|
}
|
|
} |