Make play menu into a popup

This commit is contained in:
Lncvrt committed 2026-03-15 19:49:46 -07:00
1 parent f2c2a24bfe
commit 62ebeec2c4
32 files changed
+9895 -10304

No files matched your search

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: f99c5ab8b366c1e45894edb89fdafbd9
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,59 @@
using Newtonsoft.Json.Linq;
using TMPro;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
public class AccountChangePassword : MonoBehaviour {
[SerializeField] private TMP_Text changePasswordStatusText;
[SerializeField] private TMP_InputField changePasswordNewPasswordInput;
[SerializeField] private TMP_InputField changePasswordRetypeNewPasswordInput;
[SerializeField] private Button changePasswordSubmitButton;
void Awake() {
changePasswordNewPasswordInput.onSelect.AddListener((_) => changePasswordNewPasswordInput.caretPosition = changePasswordNewPasswordInput.text.Length);
changePasswordRetypeNewPasswordInput.onSelect.AddListener((_) => changePasswordRetypeNewPasswordInput.caretPosition = changePasswordRetypeNewPasswordInput.text.Length);
}
void OnEnable() {
changePasswordNewPasswordInput.text = "";
changePasswordRetypeNewPasswordInput.text = "";
changePasswordStatusText.text = "";
changePasswordSubmitButton.onClick.RemoveAllListeners();
AccountHandler.Instance.backButton.onClick.AddListener(() => AccountHandler.Instance.SwitchPanel(0));
changePasswordSubmitButton.onClick.AddListener(() => ChangePassword());
}
async void ChangePassword() {
if (changePasswordNewPasswordInput.text != changePasswordRetypeNewPasswordInput.text) {
Tools.UpdateStatusText(changePasswordStatusText, "Passwords do not match", Color.red);
return;
}
AccountHandler.Instance.backButton.interactable = false;
changePasswordSubmitButton.interactable = false;
WWWForm dataForm = new();
dataForm.AddField("newPassword", changePasswordNewPasswordInput.text);
using UnityWebRequest request = UnityWebRequest.Post(Endpoints.ACCOUNT_CHANGE_PASSWORD_ENDPOINT, dataForm);
request.SetRequestHeader("Authorization", BazookaManager.Instance.GetAccountSession());
request.SetRequestHeader("Requester", "BerryDashClient");
request.SetRequestHeader("ClientVersion", Application.version);
request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
await request.SendWebRequest();
if (request.downloadHandler.text == null) {
AccountHandler.Instance.backButton.interactable = true;
changePasswordSubmitButton.interactable = true;
Tools.UpdateStatusText(changePasswordStatusText, "Failed to make HTTP request", Color.red);
return;
}
var jsonResponse = JObject.Parse(request.downloadHandler.text);
if ((bool)jsonResponse["success"]) {
BazookaManager.Instance.SetAccountSession((string)jsonResponse["data"]);
AccountHandler.Instance.SwitchPanel(0);
Tools.UpdateStatusText(AccountHandler.Instance.accountLoggedIn.loggedInText, "Password changed successfully", Color.green);
} else {
Tools.UpdateStatusText(changePasswordStatusText, (string)jsonResponse["message"], Color.red);
}
AccountHandler.Instance.backButton.interactable = true;
changePasswordSubmitButton.interactable = true;
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: ae8dc061a6b24a14f81e1024c84f6695
@@ -0,0 +1,53 @@
using Newtonsoft.Json.Linq;
using TMPro;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
public class AccountChangeUsername : MonoBehaviour {
[SerializeField] private TMP_Text changeUsernameStatusText;
[SerializeField] private TMP_InputField changeUsernameNewUsernameInput;
[SerializeField] private Button changeUsernameSubmitButton;
void Awake() {
changeUsernameNewUsernameInput.onSelect.AddListener((_) => changeUsernameNewUsernameInput.caretPosition = changeUsernameNewUsernameInput.text.Length);
}
void OnEnable() {
changeUsernameNewUsernameInput.text = "";
changeUsernameStatusText.text = "";
changeUsernameSubmitButton.onClick.RemoveAllListeners();
AccountHandler.Instance.backButton.onClick.AddListener(() => AccountHandler.Instance.SwitchPanel(0));
changeUsernameSubmitButton.onClick.AddListener(() => ChangeUsername());
}
async void ChangeUsername() {
AccountHandler.Instance.backButton.interactable = false;
changeUsernameSubmitButton.interactable = false;
WWWForm dataForm = new();
dataForm.AddField("newUsername", changeUsernameNewUsernameInput.text);
using UnityWebRequest request = UnityWebRequest.Post(Endpoints.ACCOUNT_CHANGE_USERNAME_ENDPOINT, dataForm);
request.SetRequestHeader("Authorization", BazookaManager.Instance.GetAccountSession());
request.SetRequestHeader("Requester", "BerryDashClient");
request.SetRequestHeader("ClientVersion", Application.version);
request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
await request.SendWebRequest();
if (request.downloadHandler.text == null) {
AccountHandler.Instance.backButton.interactable = true;
changeUsernameSubmitButton.interactable = true;
Tools.UpdateStatusText(changeUsernameStatusText, "Failed to make HTTP request", Color.red);
return;
}
var jsonResponse = JObject.Parse(request.downloadHandler.text);
if ((bool)jsonResponse["success"]) {
BazookaManager.Instance.SetAccountName(changeUsernameNewUsernameInput.text);
BazookaManager.Instance.SetAccountSession((string)jsonResponse["data"]);
AccountHandler.Instance.SwitchPanel(0);
Tools.UpdateStatusText(AccountHandler.Instance.accountLoggedIn.loggedInText, "Username changed successfully", Color.green);
} else {
Tools.UpdateStatusText(changeUsernameStatusText, (string)jsonResponse["message"], Color.red);
}
AccountHandler.Instance.backButton.interactable = true;
changeUsernameSubmitButton.interactable = true;
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: be362dee96ceba548be09c7fede7bf16
@@ -0,0 +1,58 @@
using Newtonsoft.Json.Linq;
using TMPro;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
public class AccountForgotDetails : MonoBehaviour {
[SerializeField] internal TMP_Text forgotDetailsTitleText;
[SerializeField] private TMP_Text forgotDetailsStatusText;
[SerializeField] private TMP_InputField forgotDetailsEmailInput;
[SerializeField] private TMP_InputField forgotDetailsVerifyCodeInput;
[SerializeField] internal Button forgotDetailsSubmitButton;
internal int mode = 0;
void Awake() {
forgotDetailsEmailInput.onSelect.AddListener((_) => forgotDetailsEmailInput.caretPosition = forgotDetailsEmailInput.text.Length);
forgotDetailsVerifyCodeInput.onSelect.AddListener((_) => forgotDetailsVerifyCodeInput.caretPosition = forgotDetailsVerifyCodeInput.text.Length);
}
void OnEnable() {
forgotDetailsEmailInput.text = "";
forgotDetailsVerifyCodeInput.text = "";
forgotDetailsSubmitButton.onClick.RemoveAllListeners();
AccountHandler.Instance.backButton.onClick.AddListener(() => {
forgotDetailsSubmitButton.interactable = false;
mode = 0;
forgotDetailsTitleText.text = "";
forgotDetailsStatusText.text = "";
AccountHandler.Instance.SwitchPanel(2);
});
forgotDetailsSubmitButton.onClick.AddListener(() => ForgotDetails());
}
async void ForgotDetails() {
AccountHandler.Instance.backButton.interactable = false;
forgotDetailsSubmitButton.interactable = false;
WWWForm dataForm = new();
dataForm.AddField("email", forgotDetailsEmailInput.text);
dataForm.AddField("verifyCode", forgotDetailsVerifyCodeInput.text);
forgotDetailsVerifyCodeInput.text = "";
using UnityWebRequest request = UnityWebRequest.Post(mode == 0 ? Endpoints.ACCOUNT_FORGOT_USERNAME_ENDPOINT : Endpoints.ACCOUNT_FORGOT_PASSWORD_ENDPOINT, dataForm);
request.SetRequestHeader("Requester", "BerryDashClient");
request.SetRequestHeader("ClientVersion", Application.version);
request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
await request.SendWebRequest();
if (request.downloadHandler.text == null) {
AccountHandler.Instance.backButton.interactable = true;
forgotDetailsSubmitButton.interactable = true;
Tools.UpdateStatusText(forgotDetailsStatusText, "Failed to make HTTP request", Color.red);
return;
}
var jsonResponse = JObject.Parse(request.downloadHandler.text);
if ((bool)jsonResponse["success"]) Tools.UpdateStatusText(forgotDetailsStatusText, "An email has been sent to your inbox", Color.green);
else Tools.UpdateStatusText(forgotDetailsStatusText, (string)jsonResponse["message"], Color.red);
AccountHandler.Instance.backButton.interactable = true;
forgotDetailsSubmitButton.interactable = true;
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 8e73b40d4fe6b41dd9b73f1334fd3e78
@@ -0,0 +1,147 @@
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.UI;
public class AccountHandler : MonoBehaviour {
public static AccountHandler Instance;
public AccountLoggedIn accountLoggedIn;
[SerializeField] internal Button exitButton;
[SerializeField] internal Button backButton;
[SerializeField] private AccountLoggedOut accountLoggedOut;
[SerializeField] private AccountLogin accountLogin;
[SerializeField] private AccountRegister accountRegister;
[SerializeField] private AccountChangeUsername accountChangeUsername;
[SerializeField] private AccountChangePassword accountChangePassword;
[SerializeField] private AccountRefreshLogin accountRefreshLogin;
[SerializeField] internal AccountForgotDetails accountForgotDetails;
void Awake() {
Instance = this;
exitButton.onClick.AddListener(() => Destroy(gameObject));
}
void Start() {
if (BazookaManager.Instance.GetAccountID() != null && BazookaManager.Instance.GetAccountName() != null && BazookaManager.Instance.GetAccountSession() != null) {
SwitchPanel(0);
} else {
SwitchPanel(1);
}
}
public void SwitchPanel(int panel) {
switch (panel) {
case 0:
backButton.onClick.RemoveAllListeners();
exitButton.gameObject.SetActive(true);
backButton.gameObject.SetActive(false);
accountLoggedOut.gameObject.SetActive(false);
accountLogin.gameObject.SetActive(false);
accountRegister.gameObject.SetActive(false);
accountChangeUsername.gameObject.SetActive(false);
accountChangePassword.gameObject.SetActive(false);
accountRefreshLogin.gameObject.SetActive(false);
accountForgotDetails.gameObject.SetActive(false);
accountLoggedIn.gameObject.SetActive(true);
break;
case 1:
backButton.onClick.RemoveAllListeners();
exitButton.gameObject.SetActive(true);
backButton.gameObject.SetActive(false);
accountLoggedIn.gameObject.SetActive(false);
accountLogin.gameObject.SetActive(false);
accountRegister.gameObject.SetActive(false);
accountChangeUsername.gameObject.SetActive(false);
accountChangePassword.gameObject.SetActive(false);
accountRefreshLogin.gameObject.SetActive(false);
accountForgotDetails.gameObject.SetActive(false);
accountLoggedOut.gameObject.SetActive(true);
break;
case 2:
backButton.onClick.RemoveAllListeners();
exitButton.gameObject.SetActive(false);
backButton.gameObject.SetActive(true);
accountLoggedIn.gameObject.SetActive(false);
accountLoggedOut.gameObject.SetActive(false);
accountRegister.gameObject.SetActive(false);
accountChangeUsername.gameObject.SetActive(false);
accountChangePassword.gameObject.SetActive(false);
accountRefreshLogin.gameObject.SetActive(false);
accountForgotDetails.gameObject.SetActive(false);
accountLogin.gameObject.SetActive(true);
break;
case 3:
backButton.onClick.RemoveAllListeners();
exitButton.gameObject.SetActive(false);
backButton.gameObject.SetActive(true);
accountLoggedIn.gameObject.SetActive(false);
accountLoggedOut.gameObject.SetActive(false);
accountLogin.gameObject.SetActive(false);
accountChangeUsername.gameObject.SetActive(false);
accountChangePassword.gameObject.SetActive(false);
accountRefreshLogin.gameObject.SetActive(false);
accountForgotDetails.gameObject.SetActive(false);
accountRegister.gameObject.SetActive(true);
break;
case 4:
backButton.onClick.RemoveAllListeners();
exitButton.gameObject.SetActive(false);
backButton.gameObject.SetActive(true);
accountLoggedIn.gameObject.SetActive(false);
accountLoggedOut.gameObject.SetActive(false);
accountLogin.gameObject.SetActive(false);
accountRegister.gameObject.SetActive(false);
accountChangePassword.gameObject.SetActive(false);
accountRefreshLogin.gameObject.SetActive(false);
accountForgotDetails.gameObject.SetActive(false);
accountChangeUsername.gameObject.SetActive(true);
break;
case 5:
backButton.onClick.RemoveAllListeners();
exitButton.gameObject.SetActive(false);
backButton.gameObject.SetActive(true);
accountLoggedIn.gameObject.SetActive(false);
accountLoggedOut.gameObject.SetActive(false);
accountLogin.gameObject.SetActive(false);
accountRegister.gameObject.SetActive(false);
accountChangeUsername.gameObject.SetActive(false);
accountRefreshLogin.gameObject.SetActive(false);
accountForgotDetails.gameObject.SetActive(false);
accountChangePassword.gameObject.SetActive(true);
break;
case 6:
backButton.onClick.RemoveAllListeners();
exitButton.gameObject.SetActive(false);
backButton.gameObject.SetActive(true);
accountLoggedIn.gameObject.SetActive(false);
accountLoggedOut.gameObject.SetActive(false);
accountLogin.gameObject.SetActive(false);
accountRegister.gameObject.SetActive(false);
accountChangeUsername.gameObject.SetActive(false);
accountChangePassword.gameObject.SetActive(false);
accountForgotDetails.gameObject.SetActive(false);
accountRefreshLogin.gameObject.SetActive(true);
break;
case 7:
backButton.onClick.RemoveAllListeners();
exitButton.gameObject.SetActive(false);
backButton.gameObject.SetActive(true);
accountLoggedIn.gameObject.SetActive(false);
accountLoggedOut.gameObject.SetActive(false);
accountLogin.gameObject.SetActive(false);
accountRegister.gameObject.SetActive(false);
accountChangeUsername.gameObject.SetActive(false);
accountChangePassword.gameObject.SetActive(false);
accountRefreshLogin.gameObject.SetActive(false);
accountForgotDetails.gameObject.SetActive(true);
break;
}
foreach (CustomColorObject customColorObject in FindObjectsByType<CustomColorObject>(FindObjectsSortMode.None)) customColorObject.SetColor();
}
void Update() {
if (Keyboard.current.escapeKey.wasPressedThisFrame) {
if (exitButton.gameObject.activeSelf && exitButton.interactable) exitButton.onClick.Invoke();
else if (backButton.gameObject.activeSelf && backButton.interactable) backButton.onClick.Invoke();
}
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 1d3604e648db0614cb2265963d39721b
@@ -0,0 +1,151 @@
using System;
using System.Text;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using TMPro;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class AccountLoggedIn : MonoBehaviour {
public TMP_Text loggedInText;
[SerializeField] private AccountLoggedOut accountLoggedOut;
[SerializeField] private Button loggedInChangeUsernameButton;
[SerializeField] private Button loggedInChangePasswordButton;
[SerializeField] private Button loggedInSaveButton;
[SerializeField] private Button loggedInLoadButton;
[SerializeField] private Button loggedInRefreshLoginButton;
[SerializeField] private Button loggedInLogoutButton;
void OnEnable() {
loggedInSaveButton.interactable = true;
loggedInLoadButton.interactable = true;
var textColor = BazookaManager.Instance.GetColorSettingText();
Tools.UpdateStatusText(loggedInText, "Logged in as: " + BazookaManager.Instance.GetAccountName(), new Color(int.Parse(textColor[0].ToString()) / 255f, int.Parse(textColor[1].ToString()) / 255f, int.Parse(textColor[2].ToString()) / 255f));
loggedInChangeUsernameButton.onClick.RemoveAllListeners();
loggedInChangePasswordButton.onClick.RemoveAllListeners();
loggedInSaveButton.onClick.RemoveAllListeners();
loggedInLoadButton.onClick.RemoveAllListeners();
loggedInRefreshLoginButton.onClick.RemoveAllListeners();
loggedInLogoutButton.onClick.RemoveAllListeners();
loggedInChangeUsernameButton.onClick.AddListener(() => AccountHandler.Instance.SwitchPanel(4));
loggedInChangePasswordButton.onClick.AddListener(() => AccountHandler.Instance.SwitchPanel(5));
loggedInSaveButton.onClick.AddListener(() => SaveAccount());
loggedInLoadButton.onClick.AddListener(() => LoadAccount());
loggedInRefreshLoginButton.onClick.AddListener(() => AccountHandler.Instance.SwitchPanel(6));
loggedInLogoutButton.onClick.AddListener(() => {
AccountHandler.Instance.exitButton.interactable = false;
BazookaManager.Instance.ResetSave();
DontDestroyOnLoad(AccountHandler.Instance.gameObject);
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
SceneManager.sceneLoaded += OnSceneLoaded;
AccountHandler.Instance.SwitchPanel(1);
AccountHandler.Instance.exitButton.interactable = true;
});
}
async void SaveAccount() {
loggedInChangeUsernameButton.interactable = false;
loggedInChangePasswordButton.interactable = false;
loggedInSaveButton.interactable = false;
loggedInLoadButton.interactable = false;
loggedInRefreshLoginButton.interactable = false;
loggedInLogoutButton.interactable = false;
AccountHandler.Instance.exitButton.interactable = false;
WWWForm dataForm = new();
dataForm.AddField("saveData", Convert.ToBase64String(Encoding.UTF8.GetBytes(BazookaManager.Instance.saveFile.ToString(Formatting.None))));
using UnityWebRequest request = UnityWebRequest.Post(Endpoints.ACCOUNT_SAVE_ENDPOINT, dataForm);
request.SetRequestHeader("Authorization", BazookaManager.Instance.GetAccountSession());
request.SetRequestHeader("Requester", "BerryDashClient");
request.SetRequestHeader("ClientVersion", Application.version);
request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
await request.SendWebRequest();
if (request.downloadHandler.text == null) {
loggedInChangeUsernameButton.interactable = true;
loggedInChangePasswordButton.interactable = true;
loggedInSaveButton.interactable = true;
loggedInLoadButton.interactable = true;
loggedInRefreshLoginButton.interactable = true;
loggedInLogoutButton.interactable = true;
AccountHandler.Instance.exitButton.interactable = true;
Tools.UpdateStatusText(loggedInText, "Failed to make HTTP request", Color.red);
return;
}
var jsonResponse = JObject.Parse(request.downloadHandler.text);
Tools.UpdateStatusText(loggedInText, (string)jsonResponse["message"], (bool)jsonResponse["success"] ? Color.green : Color.red);
loggedInChangeUsernameButton.interactable = true;
loggedInChangePasswordButton.interactable = true;
loggedInSaveButton.interactable = true;
loggedInLoadButton.interactable = true;
loggedInRefreshLoginButton.interactable = true;
loggedInLogoutButton.interactable = true;
AccountHandler.Instance.exitButton.interactable = true;
}
async void LoadAccount() {
loggedInChangeUsernameButton.interactable = false;
loggedInChangePasswordButton.interactable = false;
loggedInSaveButton.interactable = false;
loggedInLoadButton.interactable = false;
loggedInRefreshLoginButton.interactable = false;
loggedInLogoutButton.interactable = false;
AccountHandler.Instance.exitButton.interactable = false;
using UnityWebRequest request = UnityWebRequest.Get(Endpoints.ACCOUNT_SAVE_ENDPOINT);
request.SetRequestHeader("Authorization", BazookaManager.Instance.GetAccountSession());
request.SetRequestHeader("Requester", "BerryDashClient");
request.SetRequestHeader("ClientVersion", Application.version);
request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
await request.SendWebRequest();
if (request.downloadHandler.text == null) {
loggedInChangeUsernameButton.interactable = true;
loggedInChangePasswordButton.interactable = true;
loggedInSaveButton.interactable = true;
loggedInLoadButton.interactable = true;
loggedInRefreshLoginButton.interactable = true;
loggedInLogoutButton.interactable = true;
AccountHandler.Instance.exitButton.interactable = true;
Tools.UpdateStatusText(loggedInText, "Failed to make HTTP request", Color.red);
return;
}
var jsonResponse = JObject.Parse(request.downloadHandler.text);
if ((bool)jsonResponse["success"]) {
BazookaManager.Instance.saveFile = JObject.FromObject(jsonResponse["data"]);
DontDestroyOnLoad(AccountHandler.Instance.gameObject);
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
SceneManager.sceneLoaded += OnSceneLoaded;
if (!Application.isMobilePlatform) {
var width = Display.main.systemWidth;
var height = Display.main.systemHeight;
Screen.SetResolution(width, height, BazookaManager.Instance.GetSettingFullScreen());
QualitySettings.vSyncCount = BazookaManager.Instance.GetSettingVsync() ? 1 : -1;
} else {
Application.targetFrameRate = 360;
QualitySettings.vSyncCount = 0;
}
MenuMusic.Instance.GetComponent<AudioSource>().volume = BazookaManager.Instance.GetSettingMusicVolume();
foreach (CustomColorObject customColorObject in FindObjectsByType<CustomColorObject>(FindObjectsSortMode.None)) customColorObject.SetColor();
}
Tools.UpdateStatusText(loggedInText, (string)jsonResponse["message"], (bool)jsonResponse["success"] ? Color.green : Color.red);
loggedInChangeUsernameButton.interactable = true;
loggedInChangePasswordButton.interactable = true;
loggedInSaveButton.interactable = true;
loggedInLoadButton.interactable = true;
loggedInRefreshLoginButton.interactable = true;
loggedInLogoutButton.interactable = true;
AccountHandler.Instance.exitButton.interactable = true;
}
void OnSceneLoaded(Scene scene, LoadSceneMode mode) {
SceneManager.MoveGameObjectToScene(AccountHandler.Instance.gameObject, scene);
SceneManager.sceneLoaded -= OnSceneLoaded;
var canvas = AccountHandler.Instance.GetComponentInChildren<Canvas>();
canvas.enabled = false;
canvas.enabled = true;
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 2f7c13bcd16e34840be5ed44f70b3824
@@ -0,0 +1,14 @@
using UnityEngine;
using UnityEngine.UI;
public class AccountLoggedOut : MonoBehaviour {
[SerializeField] private Button loggedOutLoginButton;
[SerializeField] private Button loggedOutRegisterButton;
void OnEnable() {
loggedOutLoginButton.onClick.RemoveAllListeners();
loggedOutRegisterButton.onClick.RemoveAllListeners();
loggedOutLoginButton.onClick.AddListener(() => AccountHandler.Instance.SwitchPanel(2));
loggedOutRegisterButton.onClick.AddListener(() => AccountHandler.Instance.SwitchPanel(3));
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 9d660b01e28b0234bb44f79e71fba5b3
@@ -0,0 +1,80 @@
using Newtonsoft.Json.Linq;
using System.Numerics;
using TMPro;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
public class AccountLogin : MonoBehaviour {
[SerializeField] private TMP_Text loginPanelStatusText;
[SerializeField] private TMP_InputField loginUsernameInput;
[SerializeField] private TMP_InputField loginPasswordInput;
[SerializeField] private Button forgotUsernameButton;
[SerializeField] private Button forgotPasswordButton;
[SerializeField] private Button loginSubmitButton;
void Awake() {
loginUsernameInput.onSelect.AddListener((_) => loginUsernameInput.caretPosition = loginUsernameInput.text.Length);
loginPasswordInput.onSelect.AddListener((_) => loginPasswordInput.caretPosition = loginPasswordInput.text.Length);
}
void OnEnable() {
loginUsernameInput.text = "";
loginPasswordInput.text = "";
loginPanelStatusText.text = "";
loginSubmitButton.onClick.RemoveAllListeners();
forgotUsernameButton.onClick.RemoveAllListeners();
forgotPasswordButton.onClick.RemoveAllListeners();
AccountHandler.Instance.backButton.onClick.AddListener(() => AccountHandler.Instance.SwitchPanel(1));
loginSubmitButton.onClick.AddListener(() => SubmitLogin());
forgotUsernameButton.onClick.AddListener(() => {
AccountHandler.Instance.SwitchPanel(7);
AccountHandler.Instance.accountForgotDetails.mode = 0;
AccountHandler.Instance.accountForgotDetails.forgotDetailsTitleText.text = "Forgot username";
AccountHandler.Instance.backButton.interactable = true;
AccountHandler.Instance.accountForgotDetails.forgotDetailsSubmitButton.interactable = true;
});
forgotPasswordButton.onClick.AddListener(() => {
AccountHandler.Instance.SwitchPanel(7);
AccountHandler.Instance.accountForgotDetails.mode = 1;
AccountHandler.Instance.accountForgotDetails.forgotDetailsTitleText.text = "Forgot password";
AccountHandler.Instance.backButton.interactable = true;
AccountHandler.Instance.accountForgotDetails.forgotDetailsSubmitButton.interactable = true;
});
}
async void SubmitLogin() {
AccountHandler.Instance.backButton.interactable = false;
loginSubmitButton.interactable = false;
if (loginUsernameInput.text == string.Empty || loginPasswordInput.text == string.Empty) {
Tools.UpdateStatusText(loginPanelStatusText, "All input fields must be filled", Color.red);
return;
}
WWWForm dataForm = new();
dataForm.AddField("username", loginUsernameInput.text);
dataForm.AddField("password", loginPasswordInput.text);
using UnityWebRequest request = UnityWebRequest.Post(Endpoints.ACCOUNT_LOGIN_ENDPOINT, dataForm);
request.SetRequestHeader("Requester", "BerryDashClient");
request.SetRequestHeader("ClientVersion", Application.version);
request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
await request.SendWebRequest();
if (request.downloadHandler.text == null) {
AccountHandler.Instance.backButton.interactable = true;
loginSubmitButton.interactable = true;
Tools.UpdateStatusText(loginPanelStatusText, "Failed to make HTTP request", Color.red);
return;
}
var jsonResponse = JObject.Parse(request.downloadHandler.text);
if ((bool)jsonResponse["success"]) {
BazookaManager.Instance.SetAccountSession((string)jsonResponse["data"]["session"]);
BazookaManager.Instance.SetAccountName((string)jsonResponse["data"]["username"]);
BazookaManager.Instance.SetAccountID(BigInteger.Parse((string)jsonResponse["data"]["id"]));
AccountHandler.Instance.SwitchPanel(0);
Tools.UpdateStatusText(loginPanelStatusText, "", Color.red);
} else {
Tools.UpdateStatusText(loginPanelStatusText, (string)jsonResponse["message"], Color.red);
}
AccountHandler.Instance.backButton.interactable = true;
loginSubmitButton.interactable = true;
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 396f21a29cb8a2844884c0daac1a67ee
@@ -0,0 +1,57 @@
using System.Numerics;
using Newtonsoft.Json.Linq;
using TMPro;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
public class AccountRefreshLogin : MonoBehaviour {
[SerializeField] private TMP_Text refreshLoginStatusText;
[SerializeField] private TMP_InputField refreshLoginUsernameInput;
[SerializeField] private TMP_InputField refreshLoginPasswordInput;
[SerializeField] private Button refreshLoginSubmitButton;
void Awake() {
refreshLoginUsernameInput.onSelect.AddListener((_) => refreshLoginUsernameInput.caretPosition = refreshLoginUsernameInput.text.Length);
refreshLoginPasswordInput.onSelect.AddListener((_) => refreshLoginPasswordInput.caretPosition = refreshLoginPasswordInput.text.Length);
}
void OnEnable() {
refreshLoginUsernameInput.text = "";
refreshLoginPasswordInput.text = "";
refreshLoginSubmitButton.onClick.RemoveAllListeners();
AccountHandler.Instance.backButton.onClick.AddListener(() => AccountHandler.Instance.SwitchPanel(0));
refreshLoginSubmitButton.onClick.AddListener(() => RefreshLogin());
}
async void RefreshLogin() {
AccountHandler.Instance.backButton.interactable = false;
refreshLoginSubmitButton.interactable = false;
WWWForm dataForm = new();
dataForm.AddField("username", refreshLoginUsernameInput.text);
dataForm.AddField("password", refreshLoginPasswordInput.text);
using UnityWebRequest request = UnityWebRequest.Post(Endpoints.ACCOUNT_LOGIN_ENDPOINT, dataForm);
request.SetRequestHeader("Requester", "BerryDashClient");
request.SetRequestHeader("ClientVersion", Application.version);
request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
await request.SendWebRequest();
if (request.downloadHandler.text == null) {
AccountHandler.Instance.backButton.interactable = true;
refreshLoginSubmitButton.interactable = true;
Tools.UpdateStatusText(refreshLoginStatusText, "Failed to make HTTP request", Color.red);
return;
}
var jsonResponse = JObject.Parse(request.downloadHandler.text);
if ((bool)jsonResponse["success"]) {
BazookaManager.Instance.SetAccountSession((string)jsonResponse["data"]["session"]);
BazookaManager.Instance.SetAccountName((string)jsonResponse["data"]["username"]);
BazookaManager.Instance.SetAccountID(BigInteger.Parse((string)jsonResponse["data"]["id"]));
AccountHandler.Instance.SwitchPanel(0);
Tools.UpdateStatusText(refreshLoginStatusText, "", Color.red);
} else {
Tools.UpdateStatusText(refreshLoginStatusText, (string)jsonResponse["message"], Color.red);
}
AccountHandler.Instance.backButton.interactable = true;
refreshLoginSubmitButton.interactable = true;
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 0cfd036ba0d22324d8dd09b06d7bcf75
@@ -0,0 +1,78 @@
using Newtonsoft.Json.Linq;
using TMPro;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
public class AccountRegister : MonoBehaviour {
[SerializeField] private TMP_Text registerPanelStatusText;
[SerializeField] private TMP_InputField registerUsernameInput;
[SerializeField] private TMP_InputField registerEmailInput;
[SerializeField] private TMP_InputField registerPasswordInput;
[SerializeField] private TMP_InputField registerRetypePasswordInput;
[SerializeField] private TMP_InputField registerVerifyCodeInput;
[SerializeField] private Button registerSubmitButton;
void Awake() {
registerUsernameInput.onSelect.AddListener((_) => registerUsernameInput.caretPosition = registerUsernameInput.text.Length);
registerEmailInput.onSelect.AddListener((_) => registerEmailInput.caretPosition = registerEmailInput.text.Length);
registerPasswordInput.onSelect.AddListener((_) => registerPasswordInput.caretPosition = registerPasswordInput.text.Length);
registerRetypePasswordInput.onSelect.AddListener((_) => registerRetypePasswordInput.caretPosition = registerRetypePasswordInput.text.Length);
registerVerifyCodeInput.onSelect.AddListener((_) => registerVerifyCodeInput.caretPosition = registerVerifyCodeInput.text.Length);
}
void OnEnable() {
registerUsernameInput.text = "";
registerEmailInput.text = "";
registerPasswordInput.text = "";
registerRetypePasswordInput.text = "";
registerVerifyCodeInput.text = "";
registerPanelStatusText.text = "";
AccountHandler.Instance.backButton.onClick.AddListener(() => AccountHandler.Instance.SwitchPanel(1));
registerSubmitButton.onClick.AddListener(() => SubmitRegister());
}
async void SubmitRegister() {
if (
registerUsernameInput.text == string.Empty ||
registerEmailInput.text == string.Empty ||
registerPasswordInput.text == string.Empty ||
registerRetypePasswordInput.text == string.Empty ||
registerVerifyCodeInput.text == string.Empty
) {
Tools.UpdateStatusText(registerPanelStatusText, "All input fields must be filled", Color.red);
return;
}
if (registerPasswordInput.text != registerRetypePasswordInput.text) {
Tools.UpdateStatusText(registerPanelStatusText, "Passwords don't match", Color.red);
return;
}
AccountHandler.Instance.backButton.interactable = false;
registerSubmitButton.interactable = false;
WWWForm dataForm = new();
dataForm.AddField("username", registerUsernameInput.text);
dataForm.AddField("email", registerEmailInput.text);
dataForm.AddField("password", registerPasswordInput.text);
dataForm.AddField("verifyCode", registerVerifyCodeInput.text);
registerVerifyCodeInput.text = "";
using UnityWebRequest request = UnityWebRequest.Post(Endpoints.ACCOUNT_REGISTER_ENDPOINT, dataForm);
request.SetRequestHeader("Requester", "BerryDashClient");
request.SetRequestHeader("ClientVersion", Application.version);
request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
await request.SendWebRequest();
if (request.downloadHandler.text == null) {
AccountHandler.Instance.backButton.interactable = true;
registerSubmitButton.interactable = true;
Tools.UpdateStatusText(registerPanelStatusText, "Failed to make HTTP request", Color.red);
return;
}
var jsonResponse = JObject.Parse(request.downloadHandler.text);
if ((bool)jsonResponse["success"]) {
AccountHandler.Instance.SwitchPanel(2);
} else {
Tools.UpdateStatusText(registerPanelStatusText, (string)jsonResponse["message"], Color.red);
}
AccountHandler.Instance.backButton.interactable = true;
registerSubmitButton.interactable = true;
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 15b428d2b1e250a4385f3a56d0b4d43e
@@ -0,0 +1,382 @@
using System;
using MikeSchweitzer.WebSocket;
using Newtonsoft.Json.Linq;
using TMPro;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class PlayModePrefab : MonoBehaviour {
[SerializeField] private GameObject selectionMenu;
[SerializeField] private GameObject customMenu;
[SerializeField] private GameObject autoWarningMenu;
[SerializeField] private Button customButton;
[SerializeField] private Button customBackButton;
[SerializeField] private Button customPlayButton;
[SerializeField] private Button customNormalizeButton;
[SerializeField] private Button multiplayerButton;
[SerializeField] private GameObject multiplayerJoinStatusPanel;
[SerializeField] private GameObject multiplayerJoiningPanel;
[SerializeField] private GameObject multiplayerDeniedPanel;
[SerializeField] private Button multiplayerDeniedBackButton;
[SerializeField] private TMP_Text multiplayerDeniedReasonText;
[SerializeField] private Button autoButton;
[SerializeField] private Button autoBackButton;
[SerializeField] private Button autoPlayButton;
[SerializeField] private Button backButton;
[SerializeField] private TMP_InputField normalBerryChance;
[SerializeField] private TMP_InputField poisonBerryChance;
[SerializeField] private TMP_InputField slowBerryChance;
[SerializeField] private TMP_InputField ultraBerryChance;
[SerializeField] private TMP_InputField speedyBerryChance;
[SerializeField] private TMP_InputField randomBerryChance;
[SerializeField] private TMP_InputField antiBerryChance;
[SerializeField] private TMP_InputField goldenBerryChance;
[SerializeField] private TMP_InputField nothingBerryChance;
[SerializeField] private Toggle useAiToggle;
[SerializeField] private TMP_Text validateTotalText;
private readonly float defaultNormalBerryChance = 42.5f;
private readonly float defaultPoisonBerryChance = 12.5f;
private readonly float defaultSlowBerryChance = 10f;
private readonly float defaultUltraBerryChance = 10f;
private readonly float defaultSpeedyBerryChance = 10f;
private readonly float defaultRandomBerryChance = 5f;
private readonly float defaultAntiBerryChance = 5f;
private readonly float defaultGoldenBerryChance = 5f;
private readonly float defaultNothingBerryChance = 0f;
void Awake() {
customButton.onClick.AddListener(() => {
selectionMenu.SetActive(false);
customMenu.SetActive(true);
if (DiscordRPCHandler.Instance != null)
DiscordRPCHandler.Instance.UpdateRPC("Customizing to play the custom mode", "");
});
customBackButton.onClick.AddListener(() => {
customMenu.SetActive(false);
selectionMenu.SetActive(true);
normalBerryChance.text = defaultNormalBerryChance.ToString() + "%";
poisonBerryChance.text = defaultPoisonBerryChance.ToString() + "%";
slowBerryChance.text = defaultSlowBerryChance.ToString() + "%";
ultraBerryChance.text = defaultUltraBerryChance.ToString() + "%";
speedyBerryChance.text = defaultSpeedyBerryChance.ToString() + "%";
randomBerryChance.text = defaultRandomBerryChance.ToString() + "%";
antiBerryChance.text = defaultAntiBerryChance.ToString() + "%";
goldenBerryChance.text = defaultGoldenBerryChance.ToString() + "%";
nothingBerryChance.text = defaultNothingBerryChance.ToString() + "%";
useAiToggle.isOn = false;
ValidateTotal();
if (DiscordRPCHandler.Instance != null)
DiscordRPCHandler.Instance.UpdateRPC("Picking what mode they want to play", "");
});
customNormalizeButton.onClick.AddListener(() => {
float normalBerry = GetValueFrom(normalBerryChance);
float poisonBerry = GetValueFrom(poisonBerryChance);
float slowBerry = GetValueFrom(slowBerryChance);
float ultraBerry = GetValueFrom(ultraBerryChance);
float speedyBerry = GetValueFrom(speedyBerryChance);
float randomBerry = GetValueFrom(randomBerryChance);
float antiBerry = GetValueFrom(antiBerryChance);
float goldenBerry = GetValueFrom(goldenBerryChance);
float nothingBerry = GetValueFrom(nothingBerryChance);
int divideBy = 0;
divideBy += normalBerry > 0 ? 1 : 0;
divideBy += poisonBerry > 0 ? 1 : 0;
divideBy += slowBerry > 0 ? 1 : 0;
divideBy += ultraBerry > 0 ? 1 : 0;
divideBy += speedyBerry > 0 ? 1 : 0;
divideBy += randomBerry > 0 ? 1 : 0;
divideBy += antiBerry > 0 ? 1 : 0;
divideBy += goldenBerry > 0 ? 1 : 0;
divideBy += nothingBerry > 0 ? 1 : 0;
float addedChances = normalBerry + poisonBerry + slowBerry + ultraBerry + speedyBerry + randomBerry + antiBerry + goldenBerry + nothingBerry;
float difference = addedChances - 100f;
if (normalBerry > 0) NormalizeOne(normalBerryChance, normalBerry, divideBy, difference);
if (poisonBerry > 0) NormalizeOne(poisonBerryChance, poisonBerry, divideBy, difference);
if (slowBerry > 0) NormalizeOne(slowBerryChance, slowBerry, divideBy, difference);
if (ultraBerry > 0) NormalizeOne(ultraBerryChance, ultraBerry, divideBy, difference);
if (speedyBerry > 0) NormalizeOne(speedyBerryChance, speedyBerry, divideBy, difference);
if (randomBerry > 0) NormalizeOne(randomBerryChance, randomBerry, divideBy, difference);
if (antiBerry > 0) NormalizeOne(antiBerryChance, antiBerry, divideBy, difference);
if (goldenBerry > 0) NormalizeOne(goldenBerryChance, goldenBerry, divideBy, difference);
if (nothingBerry > 0) NormalizeOne(nothingBerryChance, nothingBerry, divideBy, difference);
normalBerry = GetValueFrom(normalBerryChance);
poisonBerry = GetValueFrom(poisonBerryChance);
slowBerry = GetValueFrom(slowBerryChance);
ultraBerry = GetValueFrom(ultraBerryChance);
speedyBerry = GetValueFrom(speedyBerryChance);
randomBerry = GetValueFrom(randomBerryChance);
antiBerry = GetValueFrom(antiBerryChance);
goldenBerry = GetValueFrom(goldenBerryChance);
nothingBerry = GetValueFrom(nothingBerryChance);
if (normalBerry > 0) normalBerry = (float)Math.Floor(normalBerry);
if (poisonBerry > 0) poisonBerry = (float)Math.Floor(poisonBerry);
if (slowBerry > 0) slowBerry = (float)Math.Floor(slowBerry);
if (ultraBerry > 0) ultraBerry = (float)Math.Floor(ultraBerry);
if (speedyBerry > 0) speedyBerry = (float)Math.Floor(speedyBerry);
if (randomBerry > 0) randomBerry = (float)Math.Floor(randomBerry);
if (antiBerry > 0) antiBerry = (float)Math.Floor(antiBerry);
if (goldenBerry > 0) goldenBerry = (float)Math.Floor(goldenBerry);
if (nothingBerry > 0) nothingBerry = (float)Math.Floor(nothingBerry);
float addedChances2 = normalBerry + poisonBerry + slowBerry + ultraBerry + speedyBerry + randomBerry + antiBerry + goldenBerry + nothingBerry;
float difference2 = addedChances2 - 100f;
bool fixedValues = false;
if (normalBerry > 0) {
NormalizeTwo(normalBerryChance, fixedValues, normalBerry, difference2);
fixedValues = true;
}
if (poisonBerry > 0) {
NormalizeTwo(poisonBerryChance, fixedValues, poisonBerry, difference2);
fixedValues = true;
}
if (slowBerry > 0) {
NormalizeTwo(slowBerryChance, fixedValues, slowBerry, difference2);
fixedValues = true;
}
if (ultraBerry > 0) {
NormalizeTwo(ultraBerryChance, fixedValues, ultraBerry, difference2);
fixedValues = true;
}
if (speedyBerry > 0) {
NormalizeTwo(speedyBerryChance, fixedValues, speedyBerry, difference2);
fixedValues = true;
}
if (randomBerry > 0) {
NormalizeTwo(randomBerryChance, fixedValues, randomBerry, difference2);
fixedValues = true;
}
if (antiBerry > 0) {
NormalizeTwo(antiBerryChance, fixedValues, antiBerry, difference2);
fixedValues = true;
}
if (goldenBerry > 0) {
NormalizeTwo(goldenBerryChance, fixedValues, goldenBerry, difference2);
fixedValues = true;
}
if (nothingBerry > 0) {
NormalizeTwo(nothingBerryChance, fixedValues, nothingBerry, difference2);
fixedValues = true;
}
ValidateTotal();
});
customPlayButton.onClick.AddListener(async () => {
GameObject obj = new("CustomGameTempData");
obj.AddComponent<CustomGameTempData>();
CustomGameTempData customGameTempData = obj.GetComponent<CustomGameTempData>();
customGameTempData.normalBerryChance = GetValueFrom(normalBerryChance);
customGameTempData.poisonBerryChance = GetValueFrom(poisonBerryChance);
customGameTempData.slowBerryChance = GetValueFrom(slowBerryChance);
customGameTempData.ultraBerryChance = GetValueFrom(ultraBerryChance);
customGameTempData.speedyBerryChance = GetValueFrom(speedyBerryChance);
customGameTempData.randomBerryChance = GetValueFrom(randomBerryChance);
customGameTempData.antiBerryChance = GetValueFrom(antiBerryChance);
customGameTempData.goldenBerryChance = GetValueFrom(goldenBerryChance);
customGameTempData.nothingBerryChance = GetValueFrom(nothingBerryChance);
customGameTempData.useAI = useAiToggle.isOn;
await SceneManager.LoadSceneAsync("CustomGamePlayer");
});
multiplayerButton.onClick.AddListener(() => {
selectionMenu.SetActive(false);
multiplayerJoinStatusPanel.SetActive(true);
multiplayerJoiningPanel.SetActive(true);
MultiplayerJoinRequestMessage msg = new() {
auth = BazookaManager.Instance.GetAccountSession()
};
WebsocketHandler.Instance._Connection.AddOutgoingMessage(JsonUtility.ToJson(msg));
});
multiplayerDeniedBackButton.onClick.AddListener(() => {
multiplayerDeniedReasonText.text = "";
multiplayerDeniedPanel.SetActive(false);
multiplayerJoinStatusPanel.SetActive(false);
selectionMenu.SetActive(true);
});
autoButton.onClick.AddListener(async () => {
if (BazookaManager.Instance.GetReadAutoWarning() == true) {
await SceneManager.LoadSceneAsync("AutoGamePlayer");
return;
}
selectionMenu.SetActive(false);
autoWarningMenu.SetActive(true);
});
autoBackButton.onClick.AddListener(() => {
selectionMenu.SetActive(true);
autoWarningMenu.SetActive(false);
});
autoPlayButton.onClick.AddListener(async () => {
BazookaManager.Instance.SetReadAutoWarning(true);
await SceneManager.LoadSceneAsync("AutoGamePlayer");
});
backButton.onClick.AddListener(() => Destroy(gameObject));
normalBerryChance.onSelect.AddListener((value) => OnSelect(value, normalBerryChance));
normalBerryChance.onDeselect.AddListener((value) => OnDeselect(value, normalBerryChance));
poisonBerryChance.onSelect.AddListener((value) => OnSelect(value, poisonBerryChance));
poisonBerryChance.onDeselect.AddListener((value) => OnDeselect(value, poisonBerryChance));
slowBerryChance.onSelect.AddListener((value) => OnSelect(value, slowBerryChance));
slowBerryChance.onDeselect.AddListener((value) => OnDeselect(value, slowBerryChance));
ultraBerryChance.onSelect.AddListener((value) => OnSelect(value, ultraBerryChance));
ultraBerryChance.onDeselect.AddListener((value) => OnDeselect(value, ultraBerryChance));
speedyBerryChance.onSelect.AddListener((value) => OnSelect(value, speedyBerryChance));
speedyBerryChance.onDeselect.AddListener((value) => OnDeselect(value, speedyBerryChance));
randomBerryChance.onSelect.AddListener((value) => OnSelect(value, randomBerryChance));
randomBerryChance.onDeselect.AddListener((value) => OnDeselect(value, randomBerryChance));
antiBerryChance.onSelect.AddListener((value) => OnSelect(value, antiBerryChance));
antiBerryChance.onDeselect.AddListener((value) => OnDeselect(value, antiBerryChance));
goldenBerryChance.onSelect.AddListener((value) => OnSelect(value, goldenBerryChance));
goldenBerryChance.onDeselect.AddListener((value) => OnDeselect(value, goldenBerryChance));
nothingBerryChance.onSelect.AddListener((value) => OnSelect(value, nothingBerryChance));
nothingBerryChance.onDeselect.AddListener((value) => OnDeselect(value, nothingBerryChance));
WebsocketHandler.Instance._Connection.MessageReceived += OnMessageReceived;
}
private void OnMessageReceived(WebSocketConnection connection, WebSocketMessage message) {
if (message.String != null && connection.State == WebSocketState.Connected) {
JToken data = JToken.Parse(message.String);
if (data["type"] != null) {
if (data["type"].ToString() == "multiplayer_join_response") {
bool accepted = bool.Parse(data["accepted"].ToString());
string denyReason = data["denyReason"].ToString();
MultiplayerPlayerFromResponse[] players = data["players"].ToObject<MultiplayerPlayerFromResponse[]>();
if (accepted) {
GameObject obj = new("MultiplayerGameTempData");
obj.AddComponent<MultiplayerGameTempData>();
MultiplayerGameTempData multiplayerGameTempData = obj.GetComponent<MultiplayerGameTempData>();
multiplayerGameTempData.players = players;
SceneManager.LoadScene("MultiplayerGamePlayer");
} else {
multiplayerJoiningPanel.SetActive(false);
multiplayerDeniedPanel.SetActive(true);
multiplayerDeniedReasonText.text = denyReason;
}
}
}
}
}
void Start() {
if (DiscordRPCHandler.Instance != null)
DiscordRPCHandler.Instance.UpdateRPC("Picking what mode they want to play", "");
if (Tools.GetLevelInfo().level < 5) {
useAiToggle.gameObject.SetActive(false);
customButton.interactable = false;
customButton.transform.GetChild(0).GetComponent<TMP_Text>().text += "\n<size=12>You need level 5 or higher to access this</size>";
}
if (Tools.GetLevelInfo().level < 3) {
autoButton.interactable = false;
autoButton.transform.GetChild(0).GetComponent<TMP_Text>().text += "\n<size=12>You need level 3 or higher to access this</size>";
}
if (WebsocketHandler.Instance == null || WebsocketHandler.Instance._Connection.State != WebSocketState.Connected) {
multiplayerButton.gameObject.SetActive(false);
var pos = autoButton.transform.localPosition;
pos.x = 0;
autoButton.transform.localPosition = pos;
} else if (BazookaManager.Instance.GetAccountID() == null || BazookaManager.Instance.GetAccountName() == null || BazookaManager.Instance.GetAccountSession() == null) {
multiplayerButton.interactable = false;
multiplayerButton.transform.GetChild(0).GetComponent<TMP_Text>().text += "\n<size=12>You must be logged to access this</size>";
} else if (Tools.GetLevelInfo().level < 10) {
multiplayerButton.interactable = false;
multiplayerButton.transform.GetChild(0).GetComponent<TMP_Text>().text += "\n<size=12>You need level 10 or higher to access this</size>";
}
}
void OnDestroy() {
WebsocketHandler.Instance._Connection.MessageReceived -= OnMessageReceived;
}
void ValidateTotal() {
customBackButton.interactable = false;
customPlayButton.interactable = false;
customNormalizeButton.interactable = false;
float total = 0f;
total += GetValueFrom(normalBerryChance);
total += GetValueFrom(poisonBerryChance);
total += GetValueFrom(slowBerryChance);
total += GetValueFrom(ultraBerryChance);
total += GetValueFrom(speedyBerryChance);
total += GetValueFrom(randomBerryChance);
total += GetValueFrom(antiBerryChance);
total += GetValueFrom(goldenBerryChance);
total += GetValueFrom(nothingBerryChance);
if (total == 100f) {
customBackButton.interactable = true;
customPlayButton.interactable = true;
validateTotalText.gameObject.SetActive(false);
} else {
customNormalizeButton.interactable = true;
validateTotalText.text = "Total must add up to 100%!";
validateTotalText.gameObject.SetActive(true);
}
}
private float GetValueFrom(TMP_InputField inputField) {
return GetValueFroText(inputField.text);
}
private float GetValueFroText(string text) {
try {
return float.Parse(text.Replace("%", "").Trim());
}
catch {
return 0f;
}
}
void OnSelect(string value, TMP_InputField inputField) {
validateTotalText.gameObject.SetActive(false);
customBackButton.interactable = false;
customPlayButton.interactable = false;
customNormalizeButton.interactable = false;
inputField.text = value.Replace("%", "");
inputField.stringPosition = inputField.text.Length;
}
void OnDeselect(string value, TMP_InputField inputField) {
if (float.TryParse(value, out var value2) && value2 < 0f) {
value = "0";
}
inputField.text = value + "%";
ValidateTotal();
}
void NormalizeOne(TMP_InputField inputField, float berryChance, int divideBy, float difference) {
inputField.text = (berryChance - (difference / divideBy)).ToString() + "%";
inputField.stringPosition = inputField.text.Length;
}
void NormalizeTwo(TMP_InputField inputField, bool fixedValues, float berryChance, float difference2) {
if (!fixedValues) {
inputField.text = (berryChance - difference2).ToString() + "%";
inputField.stringPosition = inputField.text.Length;
} else {
inputField.text = berryChance.ToString() + "%";
inputField.stringPosition = inputField.text.Length;
}
}
void Update() {
if (Keyboard.current.escapeKey.wasPressedThisFrame && customBackButton.interactable) {
if (customMenu.activeSelf) customBackButton.onClick.Invoke();
else if (autoWarningMenu.activeSelf) autoBackButton.onClick.Invoke();
else if (multiplayerJoinStatusPanel.activeSelf) {
if (multiplayerDeniedPanel.activeSelf) multiplayerDeniedBackButton.onClick.Invoke();
} else Destroy(gameObject);
}
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: dbc4899af328c47f6ad3eafd878a71a2
@@ -0,0 +1,340 @@
using System.Linq;
using System.Numerics;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
using TMPro;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.Networking;
using UnityEngine.UI;
public class ProfileMenu : MonoBehaviour {
[SerializeField] private Button exitButton;
[SerializeField] private Button refreshButton;
[SerializeField] private Button postButton;
[SerializeField] private GameObject contentPanel;
[SerializeField] private TMP_Text loadingText;
[SerializeField] private GameObject voteOverlay;
[SerializeField] private GameObject postOverlay;
[SerializeField] private TMP_Text normalBerryStat;
[SerializeField] private TMP_Text poisonBerryStat;
[SerializeField] private TMP_Text slowBerryStat;
[SerializeField] private TMP_Text ultraBerryStat;
[SerializeField] private TMP_Text speedyBerryStat;
[SerializeField] private TMP_Text coinBerryStat;
[SerializeField] private TMP_Text randomBerryStat;
[SerializeField] private TMP_Text antiBerryStat;
[SerializeField] private TMP_Text goldenBerryStat;
[SerializeField] private TMP_Text coinStat;
[SerializeField] private TMP_Text playerLevelAndXPStat;
[SerializeField] private TMP_Text playerNameText;
[SerializeField] private Image playerIconImage;
[SerializeField] private Image playerOverlayImage;
[SerializeField] private GameObject postSample;
[SerializeField] private bool canVote = true;
private GameObject popupObject;
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 goldenBerries,
string coins,
string playerName,
BigInteger playerID,
int? playerIcon,
int? playerOverlay,
Color playerIconColor,
Color playerOverlayColor,
string customIcon
) {
var xp = Tools.CalculateXP(BigInteger.Parse(normalBerries), BigInteger.Parse(poisonBerries), BigInteger.Parse(slowBerries), BigInteger.Parse(ultraBerries), BigInteger.Parse(speedyBerries), BigInteger.Parse(coinBerries), BigInteger.Parse(randomBerries), BigInteger.Parse(antiBerries), BigInteger.Parse(goldenBerries));
var level = Tools.GetLevelInfo(xp).level;
normalBerryStat.text = Tools.FormatWithCommas(normalBerries);
poisonBerryStat.text = Tools.FormatWithCommas(poisonBerries);
slowBerryStat.text = Tools.FormatWithCommas(slowBerries);
ultraBerryStat.text = Tools.FormatWithCommas(ultraBerries);
speedyBerryStat.text = Tools.FormatWithCommas(speedyBerries);
coinBerryStat.text = Tools.FormatWithCommas(coinBerries);
randomBerryStat.text = Tools.FormatWithCommas(randomBerries);
antiBerryStat.text = Tools.FormatWithCommas(antiBerries);
goldenBerryStat.text = Tools.FormatWithCommas(goldenBerries);
coinStat.text = Tools.FormatWithCommas(coins);
playerLevelAndXPStat.text = $"Level: {Tools.FormatWithCommas((BigInteger)level)}\nXP: {Tools.FormatWithCommas(xp)}";
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(true);
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 {
var waitingForCustomIcon = playerIconImage.gameObject.AddComponent<WaitingForCustomIcon>();
waitingForCustomIcon.ID = customIcon;
CustomIconLoader.Init(new[] { waitingForCustomIcon });
}
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) {
if (BazookaManager.Instance.GetAccountID() == playerID) { await Init(); return; }
using UnityWebRequest request = UnityWebRequest.Get(Endpoints.BD_ACCOUNT_ENDPOINT + "?id=" + playerID.ToString() + "&exact=true");
request.SetRequestHeader("Requester", "BerryDashClient");
request.SetRequestHeader("ClientVersion", Application.version);
request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
await request.SendWebRequest();
if (request.downloadHandler.text == null) {
Destroy(gameObject);
return;
}
string response = request.downloadHandler.text;
try {
var jsonResponse = JObject.Parse(response);
if ((bool)jsonResponse["success"]) {
var data = jsonResponse["data"].ToObject<Account>();
var iconColorArray = data.BirdColor;
var overlayColorArray = data.OverlayColor;
var iconColor = new Color(iconColorArray[0] / 255f, iconColorArray[1] / 255f, iconColorArray[2] / 255f);
var overlayColor = new Color(overlayColorArray[0] / 255f, overlayColorArray[1] / 255f, overlayColorArray[2] / 255f);
await Init(
data.Stats.TotalNormalBerries.ToString(),
data.Stats.TotalPoisonBerries.ToString(),
data.Stats.TotalSlowBerries.ToString(),
data.Stats.TotalUltraBerries.ToString(),
data.Stats.TotalSpeedyBerries.ToString(),
data.Stats.TotalCoinBerries.ToString(),
data.Stats.TotalRandomBerries.ToString(),
data.Stats.TotalAntiBerries.ToString(),
data.Stats.TotalGoldenBerries.ToString(),
data.Stats.Coins.ToString(),
data.Username,
playerID,
data.Icon,
data.Overlay,
iconColor,
overlayColor,
data.CustomIcon
);
} else {
Destroy(gameObject);
}
}
catch {
Destroy(gameObject);
}
}
public async Task Init() {
var customIconData = BazookaManager.Instance.GetCustomBirdIconData();
var iconColor = customIconData.Selected == null ? BazookaManager.Instance.GetColorSettingIcon() : null;
var overlayColor = customIconData.Selected == null ? BazookaManager.Instance.GetColorSettingOverlay() : null;
await Init(
BazookaManager.Instance.GetGameStoreTotalNormalBerries().ToString(),
BazookaManager.Instance.GetGameStoreTotalPoisonBerries().ToString(),
BazookaManager.Instance.GetGameStoreTotalSlowBerries().ToString(),
BazookaManager.Instance.GetGameStoreTotalUltraBerries().ToString(),
BazookaManager.Instance.GetGameStoreTotalSpeedyBerries().ToString(),
BazookaManager.Instance.GetGameStoreTotalCoinBerries().ToString(),
BazookaManager.Instance.GetGameStoreTotalRandomBerries().ToString(),
BazookaManager.Instance.GetGameStoreTotalAntiBerries().ToString(),
BazookaManager.Instance.GetGameStoreTotalGoldenBerries().ToString(),
customIconData.Balance.ToString(),
BazookaManager.Instance.GetAccountName().ToString(),
BazookaManager.Instance.GetAccountID() ?? 0,
customIconData.Selected == null ? BazookaManager.Instance.GetBirdIcon() : null,
customIconData.Selected == null ? BazookaManager.Instance.GetBirdOverlay() : null,
customIconData.Selected == null ? new Color((int)iconColor[0] / 255f, (int)iconColor[1] / 255f, (int)iconColor[2] / 255f) : Color.white,
customIconData.Selected == null ? new Color((int)overlayColor[0] / 255f, (int)overlayColor[1] / 255f, (int)overlayColor[2] / 255f) : Color.white,
customIconData.Selected
);
}
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);
}
}
using UnityWebRequest request = UnityWebRequest.Get(Endpoints.PROFILE_POSTS_ENDPOINT + "?userId=" + playerID.ToString());
request.SetRequestHeader("Requester", "BerryDashClient");
request.SetRequestHeader("ClientVersion", Application.version);
request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
await request.SendWebRequest();
if (request.downloadHandler.text == null) {
exitButton.interactable = true;
refreshButton.interactable = true;
return;
}
string response = request.downloadHandler.text;
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() != null && BazookaManager.Instance.GetAccountID() != playerID) {
var likedPosts = BazookaManager.Instance
.GetLikedPosts()
.Select(x => x.ToString())
.ToList();
if (!likedPosts.Any(x => x.ToString() == post.ID.ToString())) VotePost(post.ID, entryLikesCount, entryLikesTexture);
}
});
entryMessage.text = post.Content;
entryTimestamp.text = post.Timestamp.ToString();
if (BazookaManager.Instance.GetAccountID() == playerID) {
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, TMP_Text entryLikesTexture) {
var popup = Instantiate(voteOverlay, voteOverlay.transform.parent);
popupObject = popup;
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;
popupObject = null;
Destroy(popup);
await SendPostVote(postId, true, entryLikesCount, entryLikesTexture);
canVote = true;
});
dislikeButton.onClick.AddListener(async () => {
canVote = false;
popupObject = null;
Destroy(popup);
await SendPostVote(postId, false, entryLikesCount, entryLikesTexture);
canVote = true;
});
}
async Task SendPostVote(BigInteger postId, bool liked, TMP_Text entryLikesCount, TMP_Text entryLikesTexture) {
using UnityWebRequest request = UnityWebRequest.Put(Endpoints.PROFILE_POSTS_ENDPOINT + $"?id={postId}&liked={liked}", new WWWForm().data);
request.SetRequestHeader("Authorization", BazookaManager.Instance.GetAccountSession());
request.SetRequestHeader("Requester", "BerryDashClient");
request.SetRequestHeader("ClientVersion", Application.version);
request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
await request.SendWebRequest();
if (request.downloadHandler.text == null) return;
var jsonResponse = JObject.Parse(request.downloadHandler.text);
if ((bool)jsonResponse["success"]) {
BigInteger likes = BigInteger.Parse((string)jsonResponse["data"]["likes"]);
entryLikesCount.text = Tools.FormatWithCommas(likes);
entryLikesTexture.text = likes < 0 ? "\\uf165" : "\\uf164";
entryLikesTexture.color = likes < 0 ? new Color(1f, 0f, 0.5f) : new Color(1f, 1f, 0f);
var likedPosts = BazookaManager.Instance.GetLikedPosts();
likedPosts.Add(postId.ToString());
BazookaManager.Instance.SetLikedPosts(likedPosts);
}
}
void UploadPostPopup() {
var popup = Instantiate(postOverlay, postOverlay.transform.parent);
popupObject = popup;
popup.SetActive(true);
var inputBox = popup.transform.GetChild(0).GetChild(1).GetComponent<TMP_InputField>();
inputBox.onSelect.AddListener((_) => inputBox.caretPosition = inputBox.text.Length);
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);
popupObject = null;
});
submitButton.onClick.AddListener(async () => {
if (inputBox.text.Trim().Length == 0) return;
popupObject = null;
Destroy(popup);
await UploadPost(inputBox.text);
});
}
async Task UploadPost(string message) {
WWWForm dataForm = new();
dataForm.AddField("content", message);
using UnityWebRequest request = UnityWebRequest.Post(Endpoints.PROFILE_POSTS_ENDPOINT, dataForm);
request.SetRequestHeader("Authorization", BazookaManager.Instance.GetAccountSession());
request.SetRequestHeader("Requester", "BerryDashClient");
request.SetRequestHeader("ClientVersion", Application.version);
request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
await request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success && request.responseCode == 200) {
await RefreshPosts(BazookaManager.Instance.GetAccountID() ?? 0, BazookaManager.Instance.GetAccountName());
}
}
async Task DeletePost(GameObject entryObject, BigInteger targetId) {
using UnityWebRequest request = UnityWebRequest.Delete(Endpoints.PROFILE_POSTS_ENDPOINT + "?id=" + targetId.ToString());
request.SetRequestHeader("Authorization", BazookaManager.Instance.GetAccountSession());
request.SetRequestHeader("Requester", "BerryDashClient");
request.SetRequestHeader("ClientVersion", Application.version);
request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
await request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success && request.responseCode == 200) {
Destroy(entryObject);
}
}
void Update() {
if (Keyboard.current.escapeKey.wasPressedThisFrame && exitButton.interactable) exitButton.onClick.Invoke();
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 6923be8c4608e4af893f64b3729b9f1a
@@ -0,0 +1,146 @@
using Newtonsoft.Json.Linq;
using TMPro;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class SettingsMenu : MonoBehaviour {
[SerializeField] private GameObject settingsMenu;
[SerializeField] private ColorPanel colorMenu;
[SerializeField] private Button exitButton;
[SerializeField] private Button toggleButton;
[SerializeField] private Toggle setting1toggle;
[SerializeField] private Toggle setting2toggle;
[SerializeField] private Toggle setting3toggle;
[SerializeField] private Toggle setting4toggle;
[SerializeField] private Toggle setting5toggle;
[SerializeField] private Slider musicSlider;
[SerializeField] private Slider sfxSlider;
[SerializeField] private GameObject settingsUI;
[SerializeField] private Button switchColorTypeButton;
[SerializeField] private int colorType = 0;
[SerializeField] private bool colorCanSave = true;
private void Start() {
colorMenu.Init(Color.white, Color.white);
colorMenu.OnColorChanged += color => {
if (!colorCanSave) return;
if (colorType == 0) BazookaManager.Instance.SetColorSettingBackground(color);
else if (colorType == 1) BazookaManager.Instance.SetColorSettingMenuBackground(color);
else if (colorType == 2) BazookaManager.Instance.SetColorSettingButton(color);
else if (colorType == 3) BazookaManager.Instance.SetColorSettingButtonContent(color);
else if (colorType == 4) BazookaManager.Instance.SetColorSettingText(color);
foreach (CustomColorObject customColorObject in FindObjectsByType<CustomColorObject>(FindObjectsSortMode.None)) customColorObject.SetColor();
};
exitButton.onClick.AddListener(() => Destroy(gameObject));
toggleButton.onClick.AddListener(() => {
settingsMenu.SetActive(!settingsMenu.activeSelf);
colorMenu.gameObject.SetActive(!colorMenu.gameObject.activeSelf);
SwitchColorType(4);
foreach (CustomColorObject customColorObject in FindObjectsByType<CustomColorObject>(FindObjectsSortMode.None)) customColorObject.SetColor();
});
switchColorTypeButton.onClick.AddListener(() => SwitchColorType());
musicSlider.value = BazookaManager.Instance.GetSettingMusicVolume();
sfxSlider.value = BazookaManager.Instance.GetSettingSFXVolume();
if (!Application.isMobilePlatform) {
setting1toggle.isOn = BazookaManager.Instance.GetSettingFullScreen() == true;
setting2toggle.isOn = BazookaManager.Instance.GetSettingShowFPS() == true;
setting3toggle.isOn = BazookaManager.Instance.GetSettingVsync() == true;
setting4toggle.isOn = BazookaManager.Instance.GetSettingHideSocials() == true;
setting5toggle.isOn = BazookaManager.Instance.GetSettingRandomMusic() == true;
setting1toggle.onValueChanged.AddListener(value => {
BazookaManager.Instance.SetSettingFullScreen(value);
var width = Display.main.systemWidth;
var height = Display.main.systemHeight;
Screen.SetResolution(width, height, value);
});
setting3toggle.onValueChanged.AddListener(value => {
BazookaManager.Instance.SetSettingVsync(value);
QualitySettings.vSyncCount = value ? 1 : -1;
});
} else {
setting1toggle.gameObject.SetActive(false);
setting2toggle.isOn = BazookaManager.Instance.GetSettingShowFPS() == true;
setting3toggle.gameObject.SetActive(false);
setting4toggle.isOn = BazookaManager.Instance.GetSettingHideSocials() == true;
setting5toggle.isOn = BazookaManager.Instance.GetSettingRandomMusic() == true;
}
setting2toggle.onValueChanged.AddListener(value => {
BazookaManager.Instance.SetSettingShowFPS(value);
});
setting4toggle.onValueChanged.AddListener(value => {
BazookaManager.Instance.SetSettingHideSocials(value);
DontDestroyOnLoad(gameObject);
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
SceneManager.sceneLoaded += OnSceneLoaded;
});
setting5toggle.onValueChanged.AddListener(value => BazookaManager.Instance.SetSettingRandomMusic(value));
musicSlider.onValueChanged.AddListener(value => {
BazookaManager.Instance.SetSettingMusicVolume(value);
MenuMusic.Instance.GetComponent<AudioSource>().volume = value;
});
sfxSlider.onValueChanged.AddListener(value => BazookaManager.Instance.SetSettingSFXVolume(value));
Tools.RefreshHierarchy(setting1toggle.transform.parent.gameObject);
}
void SwitchColorType(int color = -1) {
var type = color == -1 ? colorType : color;
var text = colorMenu.transform.GetChild(0).GetComponent<TMP_Text>();
var colorToSet = new JArray(255, 255, 255);
switch (type) {
case 0: //IGBGColor
text.text = "Menu background color";
colorType = 1;
colorToSet = BazookaManager.Instance.GetColorSettingMenuBackground();
colorMenu.defaultColor = new(24f / 255f, 24f / 255f, 24f / 255f);
break;
case 1: //MBGColor
text.text = "Button color";
colorType = 2;
colorToSet = BazookaManager.Instance.GetColorSettingButton();
colorMenu.defaultColor = new(1f, 1f, 1f);
break;
case 2: //BCColor
text.text = "Button content color";
colorType = 3;
colorToSet = BazookaManager.Instance.GetColorSettingButtonContent();
colorMenu.defaultColor = new(0f, 0f, 0f);
break;
case 3: //TColor
text.text = "Text color";
colorType = 4;
colorToSet = BazookaManager.Instance.GetColorSettingText();
colorMenu.defaultColor = new(1f, 1f, 1f);
break;
case 4: //IGColor
text.text = "In game background color";
colorType = 0;
colorToSet = BazookaManager.Instance.GetColorSettingBackground();
colorMenu.defaultColor = new(58f / 255f, 58f / 255f, 58f / 255f);
break;
}
colorCanSave = false;
colorMenu.SetColor(new Color((int)colorToSet[0] / 255f, (int)colorToSet[1] / 255f, (int)colorToSet[2] / 255f));
colorCanSave = true;
}
void Update() {
if (Keyboard.current.escapeKey.wasPressedThisFrame && exitButton.interactable) exitButton.onClick.Invoke();
}
void OnSceneLoaded(Scene scene, LoadSceneMode mode) {
SceneManager.MoveGameObjectToScene(gameObject, scene);
SceneManager.sceneLoaded -= OnSceneLoaded;
var canvas = GetComponentInChildren<Canvas>();
canvas.enabled = false;
canvas.enabled = true;
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: daf792cf8b2068a48ae031a87590a1da
@@ -0,0 +1,99 @@
using System;
using TMPro;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.UI;
public class StatsPrefab : MonoBehaviour {
[SerializeField] private GameObject panel;
[SerializeField] private TMP_Text normalBerryStat;
[SerializeField] private TMP_Text poisonBerryStat;
[SerializeField] private TMP_Text slowBerryStat;
[SerializeField] private TMP_Text ultraBerryStat;
[SerializeField] private TMP_Text speedyBerryStat;
[SerializeField] private TMP_Text coinBerryStat;
[SerializeField] private TMP_Text randomBerryStat;
[SerializeField] private TMP_Text antiBerryStat;
[SerializeField] private TMP_Text goldenBerryStat;
[SerializeField] private TMP_Text coinStat;
[SerializeField] private Image playerIcon;
[SerializeField] private Image playerOverlay;
[SerializeField] private TMP_Text xpUsernameText;
[SerializeField] private TMP_Text xpText;
[SerializeField] private TMP_Text xpLevelText;
[SerializeField] private RectTransform progressFilledRect;
[SerializeField] private Button exitButton;
void Start() {
normalBerryStat.text = Tools.FormatWithCommas(BazookaManager.Instance.GetGameStoreTotalNormalBerries());
poisonBerryStat.text = Tools.FormatWithCommas(BazookaManager.Instance.GetGameStoreTotalPoisonBerries());
slowBerryStat.text = Tools.FormatWithCommas(BazookaManager.Instance.GetGameStoreTotalSlowBerries());
ultraBerryStat.text = Tools.FormatWithCommas(BazookaManager.Instance.GetGameStoreTotalUltraBerries());
speedyBerryStat.text = Tools.FormatWithCommas(BazookaManager.Instance.GetGameStoreTotalSpeedyBerries());
coinBerryStat.text = Tools.FormatWithCommas(BazookaManager.Instance.GetGameStoreTotalCoinBerries());
randomBerryStat.text = Tools.FormatWithCommas(BazookaManager.Instance.GetGameStoreTotalRandomBerries());
antiBerryStat.text = Tools.FormatWithCommas(BazookaManager.Instance.GetGameStoreTotalAntiBerries());
goldenBerryStat.text = Tools.FormatWithCommas(BazookaManager.Instance.GetGameStoreTotalGoldenBerries());
coinStat.text = Tools.FormatWithCommas(BazookaManager.Instance.GetCustomBirdIconData().Balance);
var customIcon = BazookaManager.Instance.GetCustomBirdIconData().Selected;
if (customIcon == null) {
int icon = BazookaManager.Instance.GetBirdIcon();
int overlay = BazookaManager.Instance.GetBirdOverlay();
var iconColor = BazookaManager.Instance.GetColorSettingIcon();
var overlayColor = BazookaManager.Instance.GetColorSettingOverlay();
playerIcon.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + icon);
if (icon == 1) playerIcon.sprite = Tools.GetIconForUser(BazookaManager.Instance.GetAccountID() ?? 0);
playerOverlay.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + overlay);
if (overlay != 0) playerOverlay.gameObject.SetActive(true);
if (overlay == 8) playerOverlay.rectTransform.localPosition = new Vector3(-27.6232f, 23.42824f, 0f);
else if (overlay == 11) playerOverlay.rectTransform.localPosition = new Vector3(-24.5611f, 32.250931f, 0f);
else if (overlay == 13) playerOverlay.rectTransform.localPosition = new Vector3(-27.56624f, 23.25544f, 0f);
try {
playerIcon.color = new Color(
int.Parse(iconColor[0].ToString()) / 255f,
int.Parse(iconColor[1].ToString()) / 255f,
int.Parse(iconColor[2].ToString()) / 255f
);
playerOverlay.color = new Color(
int.Parse(overlayColor[0].ToString()) / 255f,
int.Parse(overlayColor[1].ToString()) / 255f,
int.Parse(overlayColor[2].ToString()) / 255f
);
}
catch {
playerIcon.color = Color.white;
playerOverlay.color = Color.white;
}
} else {
var waitingForCustomIcon = playerIcon.gameObject.AddComponent<WaitingForCustomIcon>();
waitingForCustomIcon.ID = customIcon;
CustomIconLoader.Init(new[] { waitingForCustomIcon });
}
var (_, level, currentXpInLevel, totalXpForLevel, percentDone) = Tools.GetLevelInfo();
xpUsernameText.text = BazookaManager.Instance.GetAccountName() ?? "";
xpText.text = $"{Tools.FormatWithCommas(currentXpInLevel.ToString())}/{Tools.FormatWithCommas(totalXpForLevel.ToString())} xp";
xpLevelText.text = "Level " + Tools.FormatWithCommas(level.ToString());
SetXPProgressFilled((int)percentDone);
Tools.RefreshHierarchy(panel);
exitButton.onClick.AddListener(() => Destroy(gameObject));
}
void Update() {
if (Keyboard.current.escapeKey.wasPressedThisFrame && exitButton.interactable) exitButton.onClick.Invoke();
}
void SetXPProgressFilled(int progress) {
int newProgress = Math.Clamp(progress, 0, 100);
progressFilledRect.sizeDelta = new Vector2(newProgress * 3, progressFilledRect.sizeDelta.y);
progressFilledRect.anchoredPosition = new Vector2((newProgress * 3 - 300f) * 0.5f, progressFilledRect.anchoredPosition.y);
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 56e4845943127672f8cbd4e3137aa5ba