Format again

This commit is contained in:
Lncvrt committed 2026-03-06 12:28:02 -07:00
1 parent 3f6849060f
commit 78f3a8c04c
93 files changed
+7328 -7323

No files matched your search

+2
View File
@@ -7,3 +7,5 @@ charset = utf-8
csharp_new_line_before_open_brace = none csharp_new_line_before_open_brace = none
csharp_new_line_before_else = false csharp_new_line_before_else = false
dotnet_diagnostic.IDE0005.severity = warning dotnet_diagnostic.IDE0005.severity = warning
indent_size = 2
indent_style = space
@@ -5,56 +5,56 @@ using UnityEngine.Networking;
using UnityEngine.UI; using UnityEngine.UI;
public class AccountChangePassword : MonoBehaviour { public class AccountChangePassword : MonoBehaviour {
[SerializeField] private TMP_Text changePasswordStatusText; [SerializeField] private TMP_Text changePasswordStatusText;
[SerializeField] private TMP_InputField changePasswordNewPasswordInput; [SerializeField] private TMP_InputField changePasswordNewPasswordInput;
[SerializeField] private TMP_InputField changePasswordRetypeNewPasswordInput; [SerializeField] private TMP_InputField changePasswordRetypeNewPasswordInput;
[SerializeField] private Button changePasswordBackButton; [SerializeField] private Button changePasswordBackButton;
[SerializeField] private Button changePasswordSubmitButton; [SerializeField] private Button changePasswordSubmitButton;
void Awake() { void Awake() {
changePasswordNewPasswordInput.onSelect.AddListener((_) => changePasswordNewPasswordInput.caretPosition = changePasswordNewPasswordInput.text.Length); changePasswordNewPasswordInput.onSelect.AddListener((_) => changePasswordNewPasswordInput.caretPosition = changePasswordNewPasswordInput.text.Length);
changePasswordRetypeNewPasswordInput.onSelect.AddListener((_) => changePasswordRetypeNewPasswordInput.caretPosition = changePasswordRetypeNewPasswordInput.text.Length); changePasswordRetypeNewPasswordInput.onSelect.AddListener((_) => changePasswordRetypeNewPasswordInput.caretPosition = changePasswordRetypeNewPasswordInput.text.Length);
changePasswordBackButton.onClick.AddListener(() => AccountHandler.instance.SwitchPanel(0)); changePasswordBackButton.onClick.AddListener(() => AccountHandler.instance.SwitchPanel(0));
changePasswordSubmitButton.onClick.AddListener(() => ChangePassword()); changePasswordSubmitButton.onClick.AddListener(() => ChangePassword());
}
void OnEnable() {
changePasswordNewPasswordInput.text = "";
changePasswordRetypeNewPasswordInput.text = "";
changePasswordStatusText.text = "";
}
async void ChangePassword() {
if (changePasswordNewPasswordInput.text != changePasswordRetypeNewPasswordInput.text) {
Tools.UpdateStatusText(changePasswordStatusText, "Passwords do not match", Color.red);
return;
} }
changePasswordBackButton.interactable = false;
void OnEnable() { changePasswordSubmitButton.interactable = false;
changePasswordNewPasswordInput.text = ""; WWWForm dataForm = new();
changePasswordRetypeNewPasswordInput.text = ""; dataForm.AddField("newPassword", changePasswordNewPasswordInput.text);
changePasswordStatusText.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) {
changePasswordBackButton.interactable = true;
changePasswordSubmitButton.interactable = true;
Tools.UpdateStatusText(changePasswordStatusText, "Failed to make HTTP request", Color.red);
return;
} }
var jsonResponse = JObject.Parse(request.downloadHandler.text);
async void ChangePassword() { if ((bool)jsonResponse["success"]) {
if (changePasswordNewPasswordInput.text != changePasswordRetypeNewPasswordInput.text) { BazookaManager.Instance.SetAccountSession((string)jsonResponse["data"]);
Tools.UpdateStatusText(changePasswordStatusText, "Passwords do not match", Color.red); AccountHandler.instance.SwitchPanel(0);
return; Tools.UpdateStatusText(AccountHandler.instance.accountLoggedIn.loggedInText, "Password changed successfully", Color.green);
} } else {
changePasswordBackButton.interactable = false; Tools.UpdateStatusText(changePasswordStatusText, (string)jsonResponse["message"], Color.red);
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) {
changePasswordBackButton.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);
}
changePasswordBackButton.interactable = true;
changePasswordSubmitButton.interactable = true;
} }
changePasswordBackButton.interactable = true;
changePasswordSubmitButton.interactable = true;
}
} }
@@ -5,50 +5,50 @@ using UnityEngine.Networking;
using UnityEngine.UI; using UnityEngine.UI;
public class AccountChangeUsername : MonoBehaviour { public class AccountChangeUsername : MonoBehaviour {
[SerializeField] private TMP_Text changeUsernameStatusText; [SerializeField] private TMP_Text changeUsernameStatusText;
[SerializeField] private TMP_InputField changeUsernameNewUsernameInput; [SerializeField] private TMP_InputField changeUsernameNewUsernameInput;
[SerializeField] private Button changeUsernameBackButton; [SerializeField] private Button changeUsernameBackButton;
[SerializeField] private Button changeUsernameSubmitButton; [SerializeField] private Button changeUsernameSubmitButton;
void Awake() { void Awake() {
changeUsernameNewUsernameInput.onSelect.AddListener((_) => changeUsernameNewUsernameInput.caretPosition = changeUsernameNewUsernameInput.text.Length); changeUsernameNewUsernameInput.onSelect.AddListener((_) => changeUsernameNewUsernameInput.caretPosition = changeUsernameNewUsernameInput.text.Length);
changeUsernameBackButton.onClick.AddListener(() => AccountHandler.instance.SwitchPanel(0)); changeUsernameBackButton.onClick.AddListener(() => AccountHandler.instance.SwitchPanel(0));
changeUsernameSubmitButton.onClick.AddListener(() => ChangeUsername()); changeUsernameSubmitButton.onClick.AddListener(() => ChangeUsername());
}
void OnEnable() {
changeUsernameNewUsernameInput.text = "";
changeUsernameStatusText.text = "";
}
async void ChangeUsername() {
changeUsernameBackButton.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) {
changeUsernameBackButton.interactable = true;
changeUsernameSubmitButton.interactable = true;
Tools.UpdateStatusText(changeUsernameStatusText, "Failed to make HTTP request", Color.red);
return;
} }
var jsonResponse = JObject.Parse(request.downloadHandler.text);
void OnEnable() { if ((bool)jsonResponse["success"]) {
changeUsernameNewUsernameInput.text = ""; BazookaManager.Instance.SetAccountName(changeUsernameNewUsernameInput.text);
changeUsernameStatusText.text = ""; BazookaManager.Instance.SetAccountSession((string)jsonResponse["data"]);
} AccountHandler.instance.SwitchPanel(0);
Tools.UpdateStatusText(AccountHandler.instance.accountLoggedIn.loggedInText, "Username changed successfully", Color.green);
async void ChangeUsername() { } else {
changeUsernameBackButton.interactable = false; Tools.UpdateStatusText(changeUsernameStatusText, (string)jsonResponse["message"], Color.red);
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) {
changeUsernameBackButton.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);
}
changeUsernameBackButton.interactable = true;
changeUsernameSubmitButton.interactable = true;
} }
changeUsernameBackButton.interactable = true;
changeUsernameSubmitButton.interactable = true;
}
} }
@@ -5,56 +5,56 @@ using UnityEngine.Networking;
using UnityEngine.UI; using UnityEngine.UI;
public class AccountForgotDetails : MonoBehaviour { public class AccountForgotDetails : MonoBehaviour {
[SerializeField] internal TMP_Text forgotDetailsTitleText; [SerializeField] internal TMP_Text forgotDetailsTitleText;
[SerializeField] private TMP_Text forgotDetailsStatusText; [SerializeField] private TMP_Text forgotDetailsStatusText;
[SerializeField] private TMP_InputField forgotDetailsEmailInput; [SerializeField] private TMP_InputField forgotDetailsEmailInput;
[SerializeField] private TMP_InputField forgotDetailsVerifyCodeInput; [SerializeField] private TMP_InputField forgotDetailsVerifyCodeInput;
[SerializeField] internal Button forgotDetailsBackButton; [SerializeField] internal Button forgotDetailsBackButton;
[SerializeField] internal Button forgotDetailsSubmitButton; [SerializeField] internal Button forgotDetailsSubmitButton;
internal int mode = 0; internal int mode = 0;
void Awake() { void Awake() {
forgotDetailsEmailInput.onSelect.AddListener((_) => forgotDetailsEmailInput.caretPosition = forgotDetailsEmailInput.text.Length); forgotDetailsEmailInput.onSelect.AddListener((_) => forgotDetailsEmailInput.caretPosition = forgotDetailsEmailInput.text.Length);
forgotDetailsVerifyCodeInput.onSelect.AddListener((_) => forgotDetailsVerifyCodeInput.caretPosition = forgotDetailsVerifyCodeInput.text.Length); forgotDetailsVerifyCodeInput.onSelect.AddListener((_) => forgotDetailsVerifyCodeInput.caretPosition = forgotDetailsVerifyCodeInput.text.Length);
forgotDetailsBackButton.onClick.AddListener(() => { forgotDetailsBackButton.onClick.AddListener(() => {
forgotDetailsBackButton.interactable = false; forgotDetailsBackButton.interactable = false;
forgotDetailsSubmitButton.interactable = false; forgotDetailsSubmitButton.interactable = false;
mode = 0; mode = 0;
forgotDetailsTitleText.text = ""; forgotDetailsTitleText.text = "";
forgotDetailsStatusText.text = ""; forgotDetailsStatusText.text = "";
AccountHandler.instance.SwitchPanel(2); AccountHandler.instance.SwitchPanel(2);
}); });
forgotDetailsSubmitButton.onClick.AddListener(() => ForgotDetails()); forgotDetailsSubmitButton.onClick.AddListener(() => ForgotDetails());
} }
void OnEnable() { void OnEnable() {
forgotDetailsEmailInput.text = ""; forgotDetailsEmailInput.text = "";
forgotDetailsVerifyCodeInput.text = ""; forgotDetailsVerifyCodeInput.text = "";
} }
async void ForgotDetails() { async void ForgotDetails() {
forgotDetailsBackButton.interactable = false; forgotDetailsBackButton.interactable = false;
forgotDetailsSubmitButton.interactable = false; forgotDetailsSubmitButton.interactable = false;
WWWForm dataForm = new(); WWWForm dataForm = new();
dataForm.AddField("email", forgotDetailsEmailInput.text); dataForm.AddField("email", forgotDetailsEmailInput.text);
dataForm.AddField("verifyCode", forgotDetailsVerifyCodeInput.text); dataForm.AddField("verifyCode", forgotDetailsVerifyCodeInput.text);
forgotDetailsVerifyCodeInput.text = ""; forgotDetailsVerifyCodeInput.text = "";
using UnityWebRequest request = UnityWebRequest.Post(mode == 0 ? Endpoints.ACCOUNT_FORGOT_USERNAME_ENDPOINT : Endpoints.ACCOUNT_FORGOT_PASSWORD_ENDPOINT, dataForm); using UnityWebRequest request = UnityWebRequest.Post(mode == 0 ? Endpoints.ACCOUNT_FORGOT_USERNAME_ENDPOINT : Endpoints.ACCOUNT_FORGOT_PASSWORD_ENDPOINT, dataForm);
request.SetRequestHeader("Requester", "BerryDashClient"); request.SetRequestHeader("Requester", "BerryDashClient");
request.SetRequestHeader("ClientVersion", Application.version); request.SetRequestHeader("ClientVersion", Application.version);
request.SetRequestHeader("ClientPlatform", Application.platform.ToString()); request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
await request.SendWebRequest(); await request.SendWebRequest();
if (request.downloadHandler.text == null) { if (request.downloadHandler.text == null) {
forgotDetailsBackButton.interactable = true; forgotDetailsBackButton.interactable = true;
forgotDetailsSubmitButton.interactable = true; forgotDetailsSubmitButton.interactable = true;
Tools.UpdateStatusText(forgotDetailsStatusText, "Failed to make HTTP request", Color.red); Tools.UpdateStatusText(forgotDetailsStatusText, "Failed to make HTTP request", Color.red);
return; 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);
forgotDetailsBackButton.interactable = true;
forgotDetailsSubmitButton.interactable = true;
} }
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);
forgotDetailsBackButton.interactable = true;
forgotDetailsSubmitButton.interactable = true;
}
} }
+109 -109
View File
@@ -3,120 +3,120 @@ using UnityEngine.InputSystem;
using UnityEngine.SceneManagement; using UnityEngine.SceneManagement;
public class AccountHandler : MonoBehaviour { public class AccountHandler : MonoBehaviour {
public static AccountHandler instance; public static AccountHandler instance;
public AccountLoggedIn accountLoggedIn; public AccountLoggedIn accountLoggedIn;
[SerializeField] private AccountLoggedOut accountLoggedOut; [SerializeField] private AccountLoggedOut accountLoggedOut;
[SerializeField] private AccountLogin accountLogin; [SerializeField] private AccountLogin accountLogin;
[SerializeField] private AccountRegister accountRegister; [SerializeField] private AccountRegister accountRegister;
[SerializeField] private AccountChangeUsername accountChangeUsername; [SerializeField] private AccountChangeUsername accountChangeUsername;
[SerializeField] private AccountChangePassword accountChangePassword; [SerializeField] private AccountChangePassword accountChangePassword;
[SerializeField] private AccountRefreshLogin accountRefreshLogin; [SerializeField] private AccountRefreshLogin accountRefreshLogin;
[SerializeField] internal AccountForgotDetails accountForgotDetails; [SerializeField] internal AccountForgotDetails accountForgotDetails;
void Awake() { void Awake() {
instance = this; instance = this;
} }
void Start() { void Start() {
if (BazookaManager.Instance.GetAccountID() != null && BazookaManager.Instance.GetAccountName() != null && BazookaManager.Instance.GetAccountSession() != null) { if (BazookaManager.Instance.GetAccountID() != null && BazookaManager.Instance.GetAccountName() != null && BazookaManager.Instance.GetAccountSession() != null) {
SwitchPanel(0); SwitchPanel(0);
} else { } else {
SwitchPanel(1); SwitchPanel(1);
}
} }
}
public void SwitchPanel(int panel) { public void SwitchPanel(int panel) {
switch (panel) { switch (panel) {
case 0: case 0:
accountLoggedIn.gameObject.SetActive(true); accountLoggedIn.gameObject.SetActive(true);
accountLoggedOut.gameObject.SetActive(false); accountLoggedOut.gameObject.SetActive(false);
accountLogin.gameObject.SetActive(false); accountLogin.gameObject.SetActive(false);
accountRegister.gameObject.SetActive(false); accountRegister.gameObject.SetActive(false);
accountChangeUsername.gameObject.SetActive(false); accountChangeUsername.gameObject.SetActive(false);
accountChangePassword.gameObject.SetActive(false); accountChangePassword.gameObject.SetActive(false);
accountRefreshLogin.gameObject.SetActive(false); accountRefreshLogin.gameObject.SetActive(false);
accountForgotDetails.gameObject.SetActive(false); accountForgotDetails.gameObject.SetActive(false);
break; break;
case 1: case 1:
accountLoggedIn.gameObject.SetActive(false); accountLoggedIn.gameObject.SetActive(false);
accountLoggedOut.gameObject.SetActive(true); accountLoggedOut.gameObject.SetActive(true);
accountLogin.gameObject.SetActive(false); accountLogin.gameObject.SetActive(false);
accountRegister.gameObject.SetActive(false); accountRegister.gameObject.SetActive(false);
accountChangeUsername.gameObject.SetActive(false); accountChangeUsername.gameObject.SetActive(false);
accountChangePassword.gameObject.SetActive(false); accountChangePassword.gameObject.SetActive(false);
accountRefreshLogin.gameObject.SetActive(false); accountRefreshLogin.gameObject.SetActive(false);
accountForgotDetails.gameObject.SetActive(false); accountForgotDetails.gameObject.SetActive(false);
break; break;
case 2: case 2:
accountLoggedIn.gameObject.SetActive(false); accountLoggedIn.gameObject.SetActive(false);
accountLoggedOut.gameObject.SetActive(false); accountLoggedOut.gameObject.SetActive(false);
accountLogin.gameObject.SetActive(true); accountLogin.gameObject.SetActive(true);
accountRegister.gameObject.SetActive(false); accountRegister.gameObject.SetActive(false);
accountChangeUsername.gameObject.SetActive(false); accountChangeUsername.gameObject.SetActive(false);
accountChangePassword.gameObject.SetActive(false); accountChangePassword.gameObject.SetActive(false);
accountRefreshLogin.gameObject.SetActive(false); accountRefreshLogin.gameObject.SetActive(false);
accountForgotDetails.gameObject.SetActive(false); accountForgotDetails.gameObject.SetActive(false);
break; break;
case 3: case 3:
accountLoggedIn.gameObject.SetActive(false); accountLoggedIn.gameObject.SetActive(false);
accountLoggedOut.gameObject.SetActive(false); accountLoggedOut.gameObject.SetActive(false);
accountLogin.gameObject.SetActive(false); accountLogin.gameObject.SetActive(false);
accountRegister.gameObject.SetActive(true); accountRegister.gameObject.SetActive(true);
accountChangeUsername.gameObject.SetActive(false); accountChangeUsername.gameObject.SetActive(false);
accountChangePassword.gameObject.SetActive(false); accountChangePassword.gameObject.SetActive(false);
accountRefreshLogin.gameObject.SetActive(false); accountRefreshLogin.gameObject.SetActive(false);
accountForgotDetails.gameObject.SetActive(false); accountForgotDetails.gameObject.SetActive(false);
break; break;
case 4: case 4:
accountLoggedIn.gameObject.SetActive(false); accountLoggedIn.gameObject.SetActive(false);
accountLoggedOut.gameObject.SetActive(false); accountLoggedOut.gameObject.SetActive(false);
accountLogin.gameObject.SetActive(false); accountLogin.gameObject.SetActive(false);
accountRegister.gameObject.SetActive(false); accountRegister.gameObject.SetActive(false);
accountChangeUsername.gameObject.SetActive(true); accountChangeUsername.gameObject.SetActive(true);
accountChangePassword.gameObject.SetActive(false); accountChangePassword.gameObject.SetActive(false);
accountRefreshLogin.gameObject.SetActive(false); accountRefreshLogin.gameObject.SetActive(false);
accountForgotDetails.gameObject.SetActive(false); accountForgotDetails.gameObject.SetActive(false);
break; break;
case 5: case 5:
accountLoggedIn.gameObject.SetActive(false); accountLoggedIn.gameObject.SetActive(false);
accountLoggedOut.gameObject.SetActive(false); accountLoggedOut.gameObject.SetActive(false);
accountLogin.gameObject.SetActive(false); accountLogin.gameObject.SetActive(false);
accountRegister.gameObject.SetActive(false); accountRegister.gameObject.SetActive(false);
accountChangeUsername.gameObject.SetActive(false); accountChangeUsername.gameObject.SetActive(false);
accountChangePassword.gameObject.SetActive(true); accountChangePassword.gameObject.SetActive(true);
accountRefreshLogin.gameObject.SetActive(false); accountRefreshLogin.gameObject.SetActive(false);
accountForgotDetails.gameObject.SetActive(false); accountForgotDetails.gameObject.SetActive(false);
break; break;
case 6: case 6:
accountLoggedIn.gameObject.SetActive(false); accountLoggedIn.gameObject.SetActive(false);
accountLoggedOut.gameObject.SetActive(false); accountLoggedOut.gameObject.SetActive(false);
accountLogin.gameObject.SetActive(false); accountLogin.gameObject.SetActive(false);
accountRegister.gameObject.SetActive(false); accountRegister.gameObject.SetActive(false);
accountChangeUsername.gameObject.SetActive(false); accountChangeUsername.gameObject.SetActive(false);
accountChangePassword.gameObject.SetActive(false); accountChangePassword.gameObject.SetActive(false);
accountRefreshLogin.gameObject.SetActive(true); accountRefreshLogin.gameObject.SetActive(true);
accountForgotDetails.gameObject.SetActive(false); accountForgotDetails.gameObject.SetActive(false);
break; break;
case 7: case 7:
accountLoggedIn.gameObject.SetActive(false); accountLoggedIn.gameObject.SetActive(false);
accountLoggedOut.gameObject.SetActive(false); accountLoggedOut.gameObject.SetActive(false);
accountLogin.gameObject.SetActive(false); accountLogin.gameObject.SetActive(false);
accountRegister.gameObject.SetActive(false); accountRegister.gameObject.SetActive(false);
accountChangeUsername.gameObject.SetActive(false); accountChangeUsername.gameObject.SetActive(false);
accountChangePassword.gameObject.SetActive(false); accountChangePassword.gameObject.SetActive(false);
accountRefreshLogin.gameObject.SetActive(false); accountRefreshLogin.gameObject.SetActive(false);
accountForgotDetails.gameObject.SetActive(true); accountForgotDetails.gameObject.SetActive(true);
break; break;
}
foreach (CustomColorObject customColorObject in FindObjectsByType<CustomColorObject>(FindObjectsSortMode.None)) customColorObject.SetColor();
} }
foreach (CustomColorObject customColorObject in FindObjectsByType<CustomColorObject>(FindObjectsSortMode.None)) customColorObject.SetColor();
}
async void Update() { async void Update() {
if (Keyboard.current.escapeKey.wasPressedThisFrame) { if (Keyboard.current.escapeKey.wasPressedThisFrame) {
if (accountChangePassword.gameObject.activeSelf || accountChangeUsername.gameObject.activeSelf || accountRefreshLogin.gameObject.activeSelf) SwitchPanel(0); if (accountChangePassword.gameObject.activeSelf || accountChangeUsername.gameObject.activeSelf || accountRefreshLogin.gameObject.activeSelf) SwitchPanel(0);
else if (accountLogin.gameObject.activeSelf || accountRegister.gameObject.activeSelf) SwitchPanel(1); else if (accountLogin.gameObject.activeSelf || accountRegister.gameObject.activeSelf) SwitchPanel(1);
else if (accountForgotDetails.gameObject.activeSelf) accountForgotDetails.forgotDetailsBackButton.onClick.Invoke(); else if (accountForgotDetails.gameObject.activeSelf) accountForgotDetails.forgotDetailsBackButton.onClick.Invoke();
else await SceneManager.LoadSceneAsync("MainMenu"); else await SceneManager.LoadSceneAsync("MainMenu");
}
} }
}
} }
+110 -110
View File
@@ -8,120 +8,120 @@ using UnityEngine.Networking;
using UnityEngine.UI; using UnityEngine.UI;
public class AccountLoggedIn : MonoBehaviour { public class AccountLoggedIn : MonoBehaviour {
public TMP_Text loggedInText; public TMP_Text loggedInText;
[SerializeField] private AccountLoggedOut accountLoggedOut; [SerializeField] private AccountLoggedOut accountLoggedOut;
[SerializeField] private Button loggedInChangeUsernameButton; [SerializeField] private Button loggedInChangeUsernameButton;
[SerializeField] private Button loggedInChangePasswordButton; [SerializeField] private Button loggedInChangePasswordButton;
[SerializeField] private Button loggedInSaveButton; [SerializeField] private Button loggedInSaveButton;
[SerializeField] private Button loggedInLoadButton; [SerializeField] private Button loggedInLoadButton;
[SerializeField] private Button loggedInRefreshLoginButton; [SerializeField] private Button loggedInRefreshLoginButton;
[SerializeField] private Button loggedInLogoutButton; [SerializeField] private Button loggedInLogoutButton;
[SerializeField] private Button loggedInBackButton; [SerializeField] private Button loggedInBackButton;
void Awake() { void Awake() {
loggedInChangeUsernameButton.onClick.AddListener(() => AccountHandler.instance.SwitchPanel(4)); loggedInChangeUsernameButton.onClick.AddListener(() => AccountHandler.instance.SwitchPanel(4));
loggedInChangePasswordButton.onClick.AddListener(() => AccountHandler.instance.SwitchPanel(5)); loggedInChangePasswordButton.onClick.AddListener(() => AccountHandler.instance.SwitchPanel(5));
loggedInSaveButton.onClick.AddListener(() => SaveAccount()); loggedInSaveButton.onClick.AddListener(() => SaveAccount());
loggedInLoadButton.onClick.AddListener(() => LoadAccount()); loggedInLoadButton.onClick.AddListener(() => LoadAccount());
loggedInRefreshLoginButton.onClick.AddListener(() => AccountHandler.instance.SwitchPanel(6)); loggedInRefreshLoginButton.onClick.AddListener(() => AccountHandler.instance.SwitchPanel(6));
loggedInLogoutButton.onClick.AddListener(() => { loggedInLogoutButton.onClick.AddListener(() => {
BazookaManager.Instance.ResetSave(); BazookaManager.Instance.ResetSave();
AccountHandler.instance.SwitchPanel(1); AccountHandler.instance.SwitchPanel(1);
}); });
} }
void OnEnable() { void OnEnable() {
loggedInSaveButton.interactable = true; loggedInSaveButton.interactable = true;
loggedInLoadButton.interactable = true; loggedInLoadButton.interactable = true;
var textColor = BazookaManager.Instance.GetColorSettingText(); 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)); 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));
} }
async void SaveAccount() { async void SaveAccount() {
loggedInChangeUsernameButton.interactable = false; loggedInChangeUsernameButton.interactable = false;
loggedInChangePasswordButton.interactable = false; loggedInChangePasswordButton.interactable = false;
loggedInSaveButton.interactable = false; loggedInSaveButton.interactable = false;
loggedInLoadButton.interactable = false; loggedInLoadButton.interactable = false;
loggedInRefreshLoginButton.interactable = false; loggedInRefreshLoginButton.interactable = false;
loggedInLogoutButton.interactable = false; loggedInLogoutButton.interactable = false;
loggedInBackButton.interactable = false; loggedInBackButton.interactable = false;
WWWForm dataForm = new(); WWWForm dataForm = new();
dataForm.AddField("saveData", Convert.ToBase64String(Encoding.UTF8.GetBytes(BazookaManager.Instance.saveFile.ToString(Formatting.None)))); dataForm.AddField("saveData", Convert.ToBase64String(Encoding.UTF8.GetBytes(BazookaManager.Instance.saveFile.ToString(Formatting.None))));
using UnityWebRequest request = UnityWebRequest.Post(Endpoints.ACCOUNT_SAVE_ENDPOINT, dataForm); using UnityWebRequest request = UnityWebRequest.Post(Endpoints.ACCOUNT_SAVE_ENDPOINT, dataForm);
request.SetRequestHeader("Authorization", BazookaManager.Instance.GetAccountSession()); request.SetRequestHeader("Authorization", BazookaManager.Instance.GetAccountSession());
request.SetRequestHeader("Requester", "BerryDashClient"); request.SetRequestHeader("Requester", "BerryDashClient");
request.SetRequestHeader("ClientVersion", Application.version); request.SetRequestHeader("ClientVersion", Application.version);
request.SetRequestHeader("ClientPlatform", Application.platform.ToString()); request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
await request.SendWebRequest(); await request.SendWebRequest();
if (request.downloadHandler.text == null) { if (request.downloadHandler.text == null) {
loggedInChangeUsernameButton.interactable = true; loggedInChangeUsernameButton.interactable = true;
loggedInChangePasswordButton.interactable = true; loggedInChangePasswordButton.interactable = true;
loggedInSaveButton.interactable = true; loggedInSaveButton.interactable = true;
loggedInLoadButton.interactable = true; loggedInLoadButton.interactable = true;
loggedInRefreshLoginButton.interactable = true; loggedInRefreshLoginButton.interactable = true;
loggedInLogoutButton.interactable = true; loggedInLogoutButton.interactable = true;
loggedInBackButton.interactable = true; loggedInBackButton.interactable = true;
Tools.UpdateStatusText(loggedInText, "Failed to make HTTP request", Color.red); Tools.UpdateStatusText(loggedInText, "Failed to make HTTP request", Color.red);
return; 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;
loggedInBackButton.interactable = true;
} }
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;
loggedInBackButton.interactable = true;
}
async void LoadAccount() { async void LoadAccount() {
loggedInChangeUsernameButton.interactable = false; loggedInChangeUsernameButton.interactable = false;
loggedInChangePasswordButton.interactable = false; loggedInChangePasswordButton.interactable = false;
loggedInSaveButton.interactable = false; loggedInSaveButton.interactable = false;
loggedInLoadButton.interactable = false; loggedInLoadButton.interactable = false;
loggedInRefreshLoginButton.interactable = false; loggedInRefreshLoginButton.interactable = false;
loggedInLogoutButton.interactable = false; loggedInLogoutButton.interactable = false;
loggedInBackButton.interactable = false; loggedInBackButton.interactable = false;
using UnityWebRequest request = UnityWebRequest.Get(Endpoints.ACCOUNT_SAVE_ENDPOINT); using UnityWebRequest request = UnityWebRequest.Get(Endpoints.ACCOUNT_SAVE_ENDPOINT);
request.SetRequestHeader("Authorization", BazookaManager.Instance.GetAccountSession()); request.SetRequestHeader("Authorization", BazookaManager.Instance.GetAccountSession());
request.SetRequestHeader("Requester", "BerryDashClient"); request.SetRequestHeader("Requester", "BerryDashClient");
request.SetRequestHeader("ClientVersion", Application.version); request.SetRequestHeader("ClientVersion", Application.version);
request.SetRequestHeader("ClientPlatform", Application.platform.ToString()); request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
await request.SendWebRequest(); await request.SendWebRequest();
if (request.downloadHandler.text == null) { if (request.downloadHandler.text == null) {
loggedInChangeUsernameButton.interactable = true; loggedInChangeUsernameButton.interactable = true;
loggedInChangePasswordButton.interactable = true; loggedInChangePasswordButton.interactable = true;
loggedInSaveButton.interactable = true; loggedInSaveButton.interactable = true;
loggedInLoadButton.interactable = true; loggedInLoadButton.interactable = true;
loggedInRefreshLoginButton.interactable = true; loggedInRefreshLoginButton.interactable = true;
loggedInLogoutButton.interactable = true; loggedInLogoutButton.interactable = true;
loggedInBackButton.interactable = true; loggedInBackButton.interactable = true;
Tools.UpdateStatusText(loggedInText, "Failed to make HTTP request", Color.red); Tools.UpdateStatusText(loggedInText, "Failed to make HTTP request", Color.red);
return; return;
}
var jsonResponse = JObject.Parse(request.downloadHandler.text);
if ((bool)jsonResponse["success"]) {
BazookaManager.Instance.saveFile = JObject.FromObject(jsonResponse["data"]);
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;
loggedInBackButton.interactable = true;
} }
var jsonResponse = JObject.Parse(request.downloadHandler.text);
if ((bool)jsonResponse["success"]) {
BazookaManager.Instance.saveFile = JObject.FromObject(jsonResponse["data"]);
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;
loggedInBackButton.interactable = true;
}
} }
@@ -2,11 +2,11 @@ using UnityEngine;
using UnityEngine.UI; using UnityEngine.UI;
public class AccountLoggedOut : MonoBehaviour { public class AccountLoggedOut : MonoBehaviour {
[SerializeField] private Button loggedOutLoginButton; [SerializeField] private Button loggedOutLoginButton;
[SerializeField] private Button loggedOutRegisterButton; [SerializeField] private Button loggedOutRegisterButton;
void Awake() { void Awake() {
loggedOutLoginButton.onClick.AddListener(() => AccountHandler.instance.SwitchPanel(2)); loggedOutLoginButton.onClick.AddListener(() => AccountHandler.instance.SwitchPanel(2));
loggedOutRegisterButton.onClick.AddListener(() => AccountHandler.instance.SwitchPanel(3)); loggedOutRegisterButton.onClick.AddListener(() => AccountHandler.instance.SwitchPanel(3));
} }
} }
+65 -65
View File
@@ -6,74 +6,74 @@ using UnityEngine.Networking;
using UnityEngine.UI; using UnityEngine.UI;
public class AccountLogin : MonoBehaviour { public class AccountLogin : MonoBehaviour {
[SerializeField] private TMP_Text loginPanelStatusText; [SerializeField] private TMP_Text loginPanelStatusText;
[SerializeField] private TMP_InputField loginUsernameInput; [SerializeField] private TMP_InputField loginUsernameInput;
[SerializeField] private TMP_InputField loginPasswordInput; [SerializeField] private TMP_InputField loginPasswordInput;
[SerializeField] private Button forgotUsernameButton; [SerializeField] private Button forgotUsernameButton;
[SerializeField] private Button forgotPasswordButton; [SerializeField] private Button forgotPasswordButton;
[SerializeField] private Button loginBackButton; [SerializeField] private Button loginBackButton;
[SerializeField] private Button loginSubmitButton; [SerializeField] private Button loginSubmitButton;
void Awake() { void Awake() {
loginUsernameInput.onSelect.AddListener((_) => loginUsernameInput.caretPosition = loginUsernameInput.text.Length); loginUsernameInput.onSelect.AddListener((_) => loginUsernameInput.caretPosition = loginUsernameInput.text.Length);
loginPasswordInput.onSelect.AddListener((_) => loginPasswordInput.caretPosition = loginPasswordInput.text.Length); loginPasswordInput.onSelect.AddListener((_) => loginPasswordInput.caretPosition = loginPasswordInput.text.Length);
loginBackButton.onClick.AddListener(() => AccountHandler.instance.SwitchPanel(1)); loginBackButton.onClick.AddListener(() => AccountHandler.instance.SwitchPanel(1));
loginSubmitButton.onClick.AddListener(() => SubmitLogin()); loginSubmitButton.onClick.AddListener(() => SubmitLogin());
forgotUsernameButton.onClick.AddListener(() => { forgotUsernameButton.onClick.AddListener(() => {
AccountHandler.instance.SwitchPanel(7); AccountHandler.instance.SwitchPanel(7);
AccountHandler.instance.accountForgotDetails.mode = 0; AccountHandler.instance.accountForgotDetails.mode = 0;
AccountHandler.instance.accountForgotDetails.forgotDetailsTitleText.text = "Forgot username"; AccountHandler.instance.accountForgotDetails.forgotDetailsTitleText.text = "Forgot username";
AccountHandler.instance.accountForgotDetails.forgotDetailsBackButton.interactable = true; AccountHandler.instance.accountForgotDetails.forgotDetailsBackButton.interactable = true;
AccountHandler.instance.accountForgotDetails.forgotDetailsSubmitButton.interactable = true; AccountHandler.instance.accountForgotDetails.forgotDetailsSubmitButton.interactable = true;
}); });
forgotPasswordButton.onClick.AddListener(() => { forgotPasswordButton.onClick.AddListener(() => {
AccountHandler.instance.SwitchPanel(7); AccountHandler.instance.SwitchPanel(7);
AccountHandler.instance.accountForgotDetails.mode = 1; AccountHandler.instance.accountForgotDetails.mode = 1;
AccountHandler.instance.accountForgotDetails.forgotDetailsTitleText.text = "Forgot password"; AccountHandler.instance.accountForgotDetails.forgotDetailsTitleText.text = "Forgot password";
AccountHandler.instance.accountForgotDetails.forgotDetailsBackButton.interactable = true; AccountHandler.instance.accountForgotDetails.forgotDetailsBackButton.interactable = true;
AccountHandler.instance.accountForgotDetails.forgotDetailsSubmitButton.interactable = true; AccountHandler.instance.accountForgotDetails.forgotDetailsSubmitButton.interactable = true;
}); });
}
void OnEnable() {
loginUsernameInput.text = "";
loginPasswordInput.text = "";
loginPanelStatusText.text = "";
}
async void SubmitLogin() {
loginBackButton.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();
void OnEnable() { dataForm.AddField("username", loginUsernameInput.text);
loginUsernameInput.text = ""; dataForm.AddField("password", loginPasswordInput.text);
loginPasswordInput.text = ""; using UnityWebRequest request = UnityWebRequest.Post(Endpoints.ACCOUNT_LOGIN_ENDPOINT, dataForm);
loginPanelStatusText.text = ""; request.SetRequestHeader("Requester", "BerryDashClient");
request.SetRequestHeader("ClientVersion", Application.version);
request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
await request.SendWebRequest();
if (request.downloadHandler.text == null) {
loginBackButton.interactable = true;
loginSubmitButton.interactable = true;
Tools.UpdateStatusText(loginPanelStatusText, "Failed to make HTTP request", Color.red);
return;
} }
var jsonResponse = JObject.Parse(request.downloadHandler.text);
async void SubmitLogin() { if ((bool)jsonResponse["success"]) {
loginBackButton.interactable = false; BazookaManager.Instance.SetAccountSession((string)jsonResponse["data"]["session"]);
loginSubmitButton.interactable = false; BazookaManager.Instance.SetAccountName((string)jsonResponse["data"]["username"]);
if (loginUsernameInput.text == string.Empty || loginPasswordInput.text == string.Empty) { BazookaManager.Instance.SetAccountID(BigInteger.Parse((string)jsonResponse["data"]["id"]));
Tools.UpdateStatusText(loginPanelStatusText, "All input fields must be filled", Color.red); AccountHandler.instance.SwitchPanel(0);
return; Tools.UpdateStatusText(loginPanelStatusText, "", Color.red);
} } else {
WWWForm dataForm = new(); Tools.UpdateStatusText(loginPanelStatusText, (string)jsonResponse["message"], Color.red);
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) {
loginBackButton.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);
}
loginBackButton.interactable = true;
loginSubmitButton.interactable = true;
} }
loginBackButton.interactable = true;
loginSubmitButton.interactable = true;
}
} }
@@ -6,53 +6,53 @@ using UnityEngine.Networking;
using UnityEngine.UI; using UnityEngine.UI;
public class AccountRefreshLogin : MonoBehaviour { public class AccountRefreshLogin : MonoBehaviour {
[SerializeField] private TMP_Text refreshLoginStatusText; [SerializeField] private TMP_Text refreshLoginStatusText;
[SerializeField] private TMP_InputField refreshLoginUsernameInput; [SerializeField] private TMP_InputField refreshLoginUsernameInput;
[SerializeField] private TMP_InputField refreshLoginPasswordInput; [SerializeField] private TMP_InputField refreshLoginPasswordInput;
[SerializeField] private Button refreshLoginBackButton; [SerializeField] private Button refreshLoginBackButton;
[SerializeField] private Button refreshLoginSubmitButton; [SerializeField] private Button refreshLoginSubmitButton;
void Awake() { void Awake() {
refreshLoginUsernameInput.onSelect.AddListener((_) => refreshLoginUsernameInput.caretPosition = refreshLoginUsernameInput.text.Length); refreshLoginUsernameInput.onSelect.AddListener((_) => refreshLoginUsernameInput.caretPosition = refreshLoginUsernameInput.text.Length);
refreshLoginPasswordInput.onSelect.AddListener((_) => refreshLoginPasswordInput.caretPosition = refreshLoginPasswordInput.text.Length); refreshLoginPasswordInput.onSelect.AddListener((_) => refreshLoginPasswordInput.caretPosition = refreshLoginPasswordInput.text.Length);
refreshLoginBackButton.onClick.AddListener(() => AccountHandler.instance.SwitchPanel(0)); refreshLoginBackButton.onClick.AddListener(() => AccountHandler.instance.SwitchPanel(0));
refreshLoginSubmitButton.onClick.AddListener(() => RefreshLogin()); refreshLoginSubmitButton.onClick.AddListener(() => RefreshLogin());
}
void OnEnable() {
refreshLoginUsernameInput.text = "";
refreshLoginPasswordInput.text = "";
}
async void RefreshLogin() {
refreshLoginBackButton.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) {
refreshLoginBackButton.interactable = true;
refreshLoginSubmitButton.interactable = true;
Tools.UpdateStatusText(refreshLoginStatusText, "Failed to make HTTP request", Color.red);
return;
} }
var jsonResponse = JObject.Parse(request.downloadHandler.text);
void OnEnable() { if ((bool)jsonResponse["success"]) {
refreshLoginUsernameInput.text = ""; BazookaManager.Instance.SetAccountSession((string)jsonResponse["data"]["session"]);
refreshLoginPasswordInput.text = ""; BazookaManager.Instance.SetAccountName((string)jsonResponse["data"]["username"]);
} BazookaManager.Instance.SetAccountID(BigInteger.Parse((string)jsonResponse["data"]["id"]));
AccountHandler.instance.SwitchPanel(0);
async void RefreshLogin() { Tools.UpdateStatusText(refreshLoginStatusText, "", Color.red);
refreshLoginBackButton.interactable = false; } else {
refreshLoginSubmitButton.interactable = false; Tools.UpdateStatusText(refreshLoginStatusText, (string)jsonResponse["message"], Color.red);
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) {
refreshLoginBackButton.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);
}
refreshLoginBackButton.interactable = true;
refreshLoginSubmitButton.interactable = true;
} }
refreshLoginBackButton.interactable = true;
refreshLoginSubmitButton.interactable = true;
}
} }
+75 -75
View File
@@ -5,84 +5,84 @@ using UnityEngine.Networking;
using UnityEngine.UI; using UnityEngine.UI;
public class AccountRegister : MonoBehaviour { public class AccountRegister : MonoBehaviour {
[SerializeField] private TMP_Text registerPanelStatusText; [SerializeField] private TMP_Text registerPanelStatusText;
[SerializeField] private TMP_InputField registerUsernameInput; [SerializeField] private TMP_InputField registerUsernameInput;
[SerializeField] private TMP_InputField registerEmailInput; [SerializeField] private TMP_InputField registerEmailInput;
[SerializeField] private TMP_InputField registerRetypeEmailInput; [SerializeField] private TMP_InputField registerRetypeEmailInput;
[SerializeField] private TMP_InputField registerPasswordInput; [SerializeField] private TMP_InputField registerPasswordInput;
[SerializeField] private TMP_InputField registerRetypePasswordInput; [SerializeField] private TMP_InputField registerRetypePasswordInput;
[SerializeField] private TMP_InputField registerVerifyCodeInput; [SerializeField] private TMP_InputField registerVerifyCodeInput;
[SerializeField] private Button registerBackButton; [SerializeField] private Button registerBackButton;
[SerializeField] private Button registerSubmitButton; [SerializeField] private Button registerSubmitButton;
void Awake() { void Awake() {
registerUsernameInput.onSelect.AddListener((_) => registerUsernameInput.caretPosition = registerUsernameInput.text.Length); registerUsernameInput.onSelect.AddListener((_) => registerUsernameInput.caretPosition = registerUsernameInput.text.Length);
registerEmailInput.onSelect.AddListener((_) => registerEmailInput.caretPosition = registerEmailInput.text.Length); registerEmailInput.onSelect.AddListener((_) => registerEmailInput.caretPosition = registerEmailInput.text.Length);
registerRetypeEmailInput.onSelect.AddListener((_) => registerRetypeEmailInput.caretPosition = registerRetypeEmailInput.text.Length); registerRetypeEmailInput.onSelect.AddListener((_) => registerRetypeEmailInput.caretPosition = registerRetypeEmailInput.text.Length);
registerPasswordInput.onSelect.AddListener((_) => registerPasswordInput.caretPosition = registerPasswordInput.text.Length); registerPasswordInput.onSelect.AddListener((_) => registerPasswordInput.caretPosition = registerPasswordInput.text.Length);
registerRetypePasswordInput.onSelect.AddListener((_) => registerRetypePasswordInput.caretPosition = registerRetypePasswordInput.text.Length); registerRetypePasswordInput.onSelect.AddListener((_) => registerRetypePasswordInput.caretPosition = registerRetypePasswordInput.text.Length);
registerVerifyCodeInput.onSelect.AddListener((_) => registerVerifyCodeInput.caretPosition = registerVerifyCodeInput.text.Length); registerVerifyCodeInput.onSelect.AddListener((_) => registerVerifyCodeInput.caretPosition = registerVerifyCodeInput.text.Length);
registerBackButton.onClick.AddListener(() => AccountHandler.instance.SwitchPanel(1)); registerBackButton.onClick.AddListener(() => AccountHandler.instance.SwitchPanel(1));
registerSubmitButton.onClick.AddListener(() => SubmitRegister()); registerSubmitButton.onClick.AddListener(() => SubmitRegister());
}
void OnEnable() {
registerUsernameInput.text = "";
registerEmailInput.text = "";
registerRetypeEmailInput.text = "";
registerPasswordInput.text = "";
registerRetypePasswordInput.text = "";
registerVerifyCodeInput.text = "";
registerPanelStatusText.text = "";
}
async void SubmitRegister() {
if (
registerUsernameInput.text == string.Empty ||
registerEmailInput.text == string.Empty ||
registerRetypeEmailInput.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 (registerEmailInput.text != registerRetypeEmailInput.text) {
void OnEnable() { Tools.UpdateStatusText(registerPanelStatusText, "Emails don't match", Color.red);
registerUsernameInput.text = ""; return;
registerEmailInput.text = "";
registerRetypeEmailInput.text = "";
registerPasswordInput.text = "";
registerRetypePasswordInput.text = "";
registerVerifyCodeInput.text = "";
registerPanelStatusText.text = "";
} }
if (registerPasswordInput.text != registerRetypePasswordInput.text) {
async void SubmitRegister() { Tools.UpdateStatusText(registerPanelStatusText, "Passwords don't match", Color.red);
if ( return;
registerUsernameInput.text == string.Empty ||
registerEmailInput.text == string.Empty ||
registerRetypeEmailInput.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 (registerEmailInput.text != registerRetypeEmailInput.text) {
Tools.UpdateStatusText(registerPanelStatusText, "Emails don't match", Color.red);
return;
}
if (registerPasswordInput.text != registerRetypePasswordInput.text) {
Tools.UpdateStatusText(registerPanelStatusText, "Passwords don't match", Color.red);
return;
}
registerBackButton.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) {
registerBackButton.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);
}
registerBackButton.interactable = true;
registerSubmitButton.interactable = true;
} }
registerBackButton.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) {
registerBackButton.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);
}
registerBackButton.interactable = true;
registerSubmitButton.interactable = true;
}
} }
+337 -337
View File
@@ -13,359 +13,359 @@ using UnityEngine.SceneManagement;
using UnityEngine.UI; using UnityEngine.UI;
public class ChatroomMenu : MonoBehaviour { public class ChatroomMenu : MonoBehaviour {
[SerializeField] private TMP_Text statusText; [SerializeField] private TMP_Text statusText;
[SerializeField] private Button backButton; [SerializeField] private Button backButton;
[SerializeField] private Button sendButton; [SerializeField] private Button sendButton;
[SerializeField] private TMP_InputField messageInputField; [SerializeField] private TMP_InputField messageInputField;
[SerializeField] private GameObject content; [SerializeField] private GameObject content;
[SerializeField] private GameObject sampleObject; [SerializeField] private GameObject sampleObject;
[SerializeField] private Button downButton; [SerializeField] private Button downButton;
[SerializeField] private ProfileMenu profilePrefab; [SerializeField] private ProfileMenu profilePrefab;
[SerializeField] private GameObject optionsPanel; [SerializeField] private GameObject optionsPanel;
[SerializeField] private Button optionsPanelExitButton; [SerializeField] private Button optionsPanelExitButton;
[SerializeField] private Button optionsPanelDeleteButton; [SerializeField] private Button optionsPanelDeleteButton;
[SerializeField] private Button optionsPanelEditButton; [SerializeField] private Button optionsPanelEditButton;
[SerializeField] private Button optionsPanelReportButton; [SerializeField] private Button optionsPanelReportButton;
[SerializeField] private Button optionsPanelCopyButton; [SerializeField] private Button optionsPanelCopyButton;
private ChatroomMessage selectedMessageForOptions; private ChatroomMessage selectedMessageForOptions;
[SerializeField] private GameObject editMessagePanelSample; [SerializeField] private GameObject editMessagePanelSample;
private GameObject editMessagePanelCurrent; private GameObject editMessagePanelCurrent;
[SerializeField] private GameObject reportMessagePanel; [SerializeField] private GameObject reportMessagePanel;
[SerializeField] private Button reportMessagePanelExitButton; [SerializeField] private Button reportMessagePanelExitButton;
[SerializeField] private Button reportMessagePanelSubmitButton; [SerializeField] private Button reportMessagePanelSubmitButton;
[SerializeField] private TMP_InputField reportMessagePanelReportReason; [SerializeField] private TMP_InputField reportMessagePanelReportReason;
void Awake() { void Awake() {
messageInputField.onSelect.AddListener((_) => messageInputField.caretPosition = messageInputField.text.Length); messageInputField.onSelect.AddListener((_) => messageInputField.caretPosition = messageInputField.text.Length);
reportMessagePanelReportReason.onSelect.AddListener((_) => reportMessagePanelReportReason.caretPosition = reportMessagePanelReportReason.text.Length); reportMessagePanelReportReason.onSelect.AddListener((_) => reportMessagePanelReportReason.caretPosition = reportMessagePanelReportReason.text.Length);
WebsocketHandler.Instance._Connection.StateChanged += OnStateChanged; WebsocketHandler.Instance._Connection.StateChanged += OnStateChanged;
WebsocketHandler.Instance._Connection.MessageReceived += OnMessageReceived; WebsocketHandler.Instance._Connection.MessageReceived += OnMessageReceived;
if (WebsocketHandler.Instance._Connection.State == WebSocketState.Connected) { if (WebsocketHandler.Instance._Connection.State == WebSocketState.Connected) {
statusText.text = "Loading messages"; statusText.text = "Loading messages";
RequestInfoMessage msg = new() { RequestInfoMessage msg = new() {
kind = "chatroom_messages" kind = "chatroom_messages"
}; };
WebsocketHandler.Instance._Connection.AddOutgoingMessage(JsonUtility.ToJson(msg)); WebsocketHandler.Instance._Connection.AddOutgoingMessage(JsonUtility.ToJson(msg));
}
} }
}
private void OnStateChanged(WebSocketConnection connection, WebSocketState oldState, WebSocketState newState) { private void OnStateChanged(WebSocketConnection connection, WebSocketState oldState, WebSocketState newState) {
if (newState == WebSocketState.Connected) { if (newState == WebSocketState.Connected) {
statusText.text = "Loading messages"; statusText.text = "Loading messages";
RequestInfoMessage msg = new() { RequestInfoMessage msg = new() {
kind = "chatroom_messages" kind = "chatroom_messages"
}; };
WebsocketHandler.Instance._Connection.AddOutgoingMessage(JsonUtility.ToJson(msg)); WebsocketHandler.Instance._Connection.AddOutgoingMessage(JsonUtility.ToJson(msg));
}
} }
}
private void OnMessageReceived(WebSocketConnection connection, WebSocketMessage message) { private void OnMessageReceived(WebSocketConnection connection, WebSocketMessage message) {
if (message.String != null && connection.State == WebSocketState.Connected) { if (message.String != null && connection.State == WebSocketState.Connected) {
JToken data = JToken.Parse(message.String); JToken data = JToken.Parse(message.String);
if (data["for"] != null) { if (data["for"] != null) {
if (data["for"].ToString() == "info_request:chatroom_messages") { if (data["for"].ToString() == "info_request:chatroom_messages") {
var userId = BazookaManager.Instance.GetAccountID(); var userId = BazookaManager.Instance.GetAccountID();
foreach (Transform item in content.transform) { foreach (Transform item in content.transform) {
if (!item.gameObject.activeSelf) continue; if (!item.gameObject.activeSelf) continue;
Destroy(item.gameObject); Destroy(item.gameObject);
break; break;
} }
foreach (var chatMessage in data["data"].ToObject<ChatroomMessage[]>()) { foreach (var chatMessage in data["data"].ToObject<ChatroomMessage[]>()) {
InsertMessage(chatMessage, userId); InsertMessage(chatMessage, userId);
} }
statusText.text = ""; statusText.text = "";
StartCoroutine(ScrollToBottom()); StartCoroutine(ScrollToBottom());
CustomIconLoader.Init(FindObjectsByType<WaitingForCustomIcon>(FindObjectsSortMode.None)); CustomIconLoader.Init(FindObjectsByType<WaitingForCustomIcon>(FindObjectsSortMode.None));
} else if (data["for"].ToString() == "upload:chatroom_message") { } else if (data["for"].ToString() == "upload:chatroom_message") {
var userId = BazookaManager.Instance.GetAccountID(); var userId = BazookaManager.Instance.GetAccountID();
var chatMessage = data["data"].ToObject<ChatroomMessage>(); var chatMessage = data["data"].ToObject<ChatroomMessage>();
Destroy(content.transform.GetChild(1).gameObject); Destroy(content.transform.GetChild(1).gameObject);
InsertMessage(chatMessage, userId); InsertMessage(chatMessage, userId);
CustomIconLoader.Init(FindObjectsByType<WaitingForCustomIcon>(FindObjectsSortMode.None)); CustomIconLoader.Init(FindObjectsByType<WaitingForCustomIcon>(FindObjectsSortMode.None));
} else if (data["for"].ToString() == "delete:chatroom_message") { } else if (data["for"].ToString() == "delete:chatroom_message") {
Destroy(content.transform.Find("ChatroomRow_" + data["data"]["id"].ToString() ?? "").gameObject); Destroy(content.transform.Find("ChatroomRow_" + data["data"]["id"].ToString() ?? "").gameObject);
if (data["data"]["fillerMessage"].ToString() != null) { if (data["data"]["fillerMessage"].ToString() != null) {
var userId = BazookaManager.Instance.GetAccountID(); var userId = BazookaManager.Instance.GetAccountID();
var chatMessage = data["data"]["fillerMessage"].ToObject<ChatroomMessage>(); var chatMessage = data["data"]["fillerMessage"].ToObject<ChatroomMessage>();
var row = InsertMessage(chatMessage, userId); var row = InsertMessage(chatMessage, userId);
row.transform.SetSiblingIndex(1); row.transform.SetSiblingIndex(1);
CustomIconLoader.Init(FindObjectsByType<WaitingForCustomIcon>(FindObjectsSortMode.None));
}
} else if (data["for"].ToString() == "edit:chatroom_message") {
if (data["data"]["newContent"].ToString() != null) {
var rowInfo = content.transform.Find("ChatroomRow_" + data["data"]["id"].ToString());
var usernameText = rowInfo.transform.GetChild(0).GetComponent<TMP_Text>();
if (!usernameText.text.EndsWith(">(edited)</color>")) {
var color = BazookaManager.Instance.GetColorSettingText();
string hex = new Color((((float)color[0]) - 100f) / 255f, (((float)color[1]) - 100f) / 255f, (((float)color[2]) - 100f) / 255f).ToHexString();
rowInfo.transform.GetChild(0).GetComponent<TMP_Text>().text += $" <color=#{hex}>(edited)</color>";
}
rowInfo.transform.GetChild(2).GetComponent<TMP_Text>().text = data["data"]["newContent"].ToString();
}
}
}
}
}
GameObject InsertMessage(ChatroomMessage message, BigInteger? localUserId) {
var obj = content.transform.Find("ChatroomRow_" + message.ID);
var rowInfo = Instantiate(sampleObject, content.transform);
rowInfo.transform.SetSiblingIndex(content.transform.childCount - 1);
var usernameText = rowInfo.transform.GetChild(0).GetComponent<TMP_Text>();
var playerIcon = rowInfo.transform.GetChild(1).GetComponent<Image>();
var playerOverlayIcon = playerIcon.transform.GetChild(0).GetComponent<Image>();
var playerIconButton = rowInfo.transform.GetChild(1).GetComponent<Button>();
var messageText = rowInfo.transform.GetChild(2).GetComponent<TMP_Text>();
var optionsButton = rowInfo.transform.GetChild(3).GetComponent<Button>();
var color = BazookaManager.Instance.GetColorSettingText();
string hex1 = new Color((((float)color[0]) - 50f) / 255f, (((float)color[1]) - 50f) / 255f, (((float)color[2]) - 50f) / 255f).ToHexString();
string hex2 = new Color((((float)color[0]) - 100f) / 255f, (((float)color[1]) - 100f) / 255f, (((float)color[2]) - 100f) / 255f).ToHexString();
usernameText.text = $"{message.Username} <color=#{hex1}>{Tools.FormatHumanTime(message.Timestamp)}</color>" + (message.EditedAt != 0 ? $" <color=#{hex2}>(edited)</color>" : null);
messageText.text = message.Content;
if (message.CustomIcon == null) {
playerIcon.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + message.Icon);
if (message.Icon == 1) playerIcon.sprite = Tools.GetIconForUser(message.UserID);
playerOverlayIcon.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + message.Overlay);
if (message.Overlay != 0) playerOverlayIcon.gameObject.SetActive(true);
if (message.Overlay == 8) playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.56f, 14.81f);
else if (message.Overlay == 11) playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-14.74451f, 20.39122f);
else if (message.Overlay == 13) playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.54019f, 14.70365f);
try {
playerIcon.color = new Color(message.BirdColor[0] / 255f, message.BirdColor[1] / 255f, message.BirdColor[2] / 255f);
playerOverlayIcon.color = new Color(message.OverlayColor[0] / 255f, message.OverlayColor[1] / 255f, message.OverlayColor[2] / 255f);
}
catch {
playerIcon.color = Color.white;
playerOverlayIcon.color = Color.white;
}
} else playerIcon.gameObject.AddComponent<WaitingForCustomIcon>().ID = message.CustomIcon;
playerIconButton.onClick.AddListener(async () => {
var clone = Instantiate(profilePrefab.gameObject, profilePrefab.gameObject.transform.parent);
clone.SetActive(true);
await clone.GetComponent<ProfileMenu>().Init(message.UserID);
});
optionsButton.onClick.AddListener(() => OptionsButtonClick(message, localUserId ?? 0));
rowInfo.name = "ChatroomRow_" + message.ID;
var entryComponet = rowInfo.AddComponent<ChatroomMenuEntry>();
entryComponet.Init(optionsButton);
rowInfo.SetActive(true);
return rowInfo;
}
void OnDestroy() {
WebsocketHandler.Instance._Connection.StateChanged -= OnStateChanged;
WebsocketHandler.Instance._Connection.MessageReceived -= OnMessageReceived;
}
void Start() {
reportMessagePanelReportReason.transform.GetChild(0).GetChild(1).GetComponent<TMP_Text>().textWrappingMode = TextWrappingModes.Normal;
if (BazookaManager.Instance.GetAccountID() == null || BazookaManager.Instance.GetAccountName() == null || BazookaManager.Instance.GetAccountSession() == null) {
sendButton.interactable = false;
messageInputField.interactable = false;
}
sendButton.onClick.AddListener(HandleMessageSubmit);
downButton.onClick.AddListener(() => StartCoroutine(ScrollToBottom()));
messageInputField.textComponent.textWrappingMode = TextWrappingModes.Normal;
messageInputField.onSubmit.AddListener(_ => HandleMessageSubmit());
optionsPanelExitButton.onClick.AddListener(() => {
optionsPanel.SetActive(false);
selectedMessageForOptions = null;
});
optionsPanelDeleteButton.onClick.AddListener(() => { if (selectedMessageForOptions != null) HandleMessageDelete(); });
optionsPanelDeleteButton.onClick.AddListener(optionsPanelExitButton.onClick.Invoke);
optionsPanelEditButton.onClick.AddListener(() => {
var editMessage = Instantiate(editMessagePanelSample, editMessagePanelSample.transform.parent);
editMessagePanelCurrent = editMessage;
var editMessageChild = editMessage.transform.GetChild(0);
var editMessageChildExitButton = editMessageChild.GetChild(0).GetComponent<Button>();
var editMessageChildSubmitButton = editMessageChild.GetChild(1).GetComponent<Button>();
var editMessageChildOriginalPreview = editMessageChild.GetChild(2).gameObject;
var editMessageChildEditedPreview = editMessageChild.GetChild(3).gameObject;
var editMessageChildNewContentInputBox = editMessageChild.GetChild(4).GetComponent<TMP_InputField>();
editMessageChildNewContentInputBox.onSelect.AddListener((_) => editMessageChildNewContentInputBox.caretPosition = editMessageChildNewContentInputBox.text.Length);
editMessageChildNewContentInputBox.text = selectedMessageForOptions.Content;
editMessageChildExitButton.onClick.AddListener(() => {
editMessagePanelCurrent = null;
Destroy(editMessage);
optionsPanel.SetActive(true);
});
editMessageChildSubmitButton.onClick.AddListener(() => {
HandleMessageEdit();
editMessagePanelCurrent = null;
Destroy(editMessage);
selectedMessageForOptions = null;
});
var rowInfo = editMessageChild.GetChild(2);
var usernameText = rowInfo.transform.GetChild(1).GetComponent<TMP_Text>();
var playerIcon = rowInfo.transform.GetChild(2).GetComponent<Image>();
var playerOverlayIcon = playerIcon.transform.GetChild(0).GetComponent<Image>();
var messageText = rowInfo.transform.GetChild(3).GetComponent<TMP_Text>();
usernameText.text = selectedMessageForOptions.Username;
messageText.text = selectedMessageForOptions.Content;
if (selectedMessageForOptions.CustomIcon == null) {
playerIcon.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + selectedMessageForOptions.Icon);
if (selectedMessageForOptions.Icon == 1) playerIcon.sprite = Tools.GetIconForUser(selectedMessageForOptions.UserID);
playerOverlayIcon.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + selectedMessageForOptions.Overlay);
if (selectedMessageForOptions.Overlay != 0) playerOverlayIcon.gameObject.SetActive(true);
if (selectedMessageForOptions.Overlay == 8) playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.56f, 14.81f);
else if (selectedMessageForOptions.Overlay == 11) playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-14.74451f, 20.39122f);
else if (selectedMessageForOptions.Overlay == 13) playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.54019f, 14.70365f);
try {
playerIcon.color = new Color(selectedMessageForOptions.BirdColor[0] / 255f, selectedMessageForOptions.BirdColor[1] / 255f, selectedMessageForOptions.BirdColor[2] / 255f);
playerOverlayIcon.color = new Color(selectedMessageForOptions.OverlayColor[0] / 255f, selectedMessageForOptions.OverlayColor[1] / 255f, selectedMessageForOptions.OverlayColor[2] / 255f);
}
catch {
playerIcon.color = Color.white;
playerOverlayIcon.color = Color.white;
}
} else playerIcon.gameObject.AddComponent<WaitingForCustomIcon>().ID = selectedMessageForOptions.CustomIcon;
rowInfo = editMessageChild.GetChild(3);
usernameText = rowInfo.transform.GetChild(1).GetComponent<TMP_Text>();
playerIcon = rowInfo.transform.GetChild(2).GetComponent<Image>();
playerOverlayIcon = playerIcon.transform.GetChild(0).GetComponent<Image>();
messageText = rowInfo.transform.GetChild(3).GetComponent<TMP_Text>();
usernameText.text = selectedMessageForOptions.Username;
messageText.text = selectedMessageForOptions.Content;
editMessageChildNewContentInputBox.onValueChanged.AddListener((value) => messageText.text = value);
if (selectedMessageForOptions.CustomIcon == null) {
playerIcon.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + selectedMessageForOptions.Icon);
if (selectedMessageForOptions.Icon == 1) playerIcon.sprite = Tools.GetIconForUser(selectedMessageForOptions.UserID);
playerOverlayIcon.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + selectedMessageForOptions.Overlay);
if (selectedMessageForOptions.Overlay != 0) playerOverlayIcon.gameObject.SetActive(true);
if (selectedMessageForOptions.Overlay == 8) playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.56f, 14.81f);
else if (selectedMessageForOptions.Overlay == 11) playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-14.74451f, 20.39122f);
else if (selectedMessageForOptions.Overlay == 13) playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.54019f, 14.70365f);
try {
playerIcon.color = new Color(selectedMessageForOptions.BirdColor[0] / 255f, selectedMessageForOptions.BirdColor[1] / 255f, selectedMessageForOptions.BirdColor[2] / 255f);
playerOverlayIcon.color = new Color(selectedMessageForOptions.OverlayColor[0] / 255f, selectedMessageForOptions.OverlayColor[1] / 255f, selectedMessageForOptions.OverlayColor[2] / 255f);
}
catch {
playerIcon.color = Color.white;
playerOverlayIcon.color = Color.white;
}
} else playerIcon.gameObject.AddComponent<WaitingForCustomIcon>().ID = selectedMessageForOptions.CustomIcon;
optionsPanel.SetActive(false);
editMessage.SetActive(true);
CustomIconLoader.Init(FindObjectsByType<WaitingForCustomIcon>(FindObjectsSortMode.None)); CustomIconLoader.Init(FindObjectsByType<WaitingForCustomIcon>(FindObjectsSortMode.None));
}); }
optionsPanelReportButton.onClick.AddListener(() => { } else if (data["for"].ToString() == "edit:chatroom_message") {
reportMessagePanelReportReason.text = ""; if (data["data"]["newContent"].ToString() != null) {
optionsPanel.SetActive(false); var rowInfo = content.transform.Find("ChatroomRow_" + data["data"]["id"].ToString());
reportMessagePanel.SetActive(true); var usernameText = rowInfo.transform.GetChild(0).GetComponent<TMP_Text>();
}); if (!usernameText.text.EndsWith(">(edited)</color>")) {
reportMessagePanelExitButton.onClick.AddListener(() => { var color = BazookaManager.Instance.GetColorSettingText();
editMessagePanelCurrent = null; string hex = new Color((((float)color[0]) - 100f) / 255f, (((float)color[1]) - 100f) / 255f, (((float)color[2]) - 100f) / 255f).ToHexString();
reportMessagePanel.SetActive(false); rowInfo.transform.GetChild(0).GetComponent<TMP_Text>().text += $" <color=#{hex}>(edited)</color>";
optionsPanel.SetActive(true);
});
reportMessagePanelSubmitButton.onClick.AddListener(async () => {
reportMessagePanel.SetActive(false);
await HandleMessageReport();
editMessagePanelCurrent = null;
selectedMessageForOptions = null;
});
optionsPanelCopyButton.onClick.AddListener(() => {
if (selectedMessageForOptions != null) GUIUtility.systemCopyBuffer = selectedMessageForOptions.Content;
});
optionsPanelCopyButton.onClick.AddListener(optionsPanelExitButton.onClick.Invoke);
}
void HandleMessageSubmit() {
if (messageInputField.text.Trim() == string.Empty) return;
sendButton.interactable = false;
backButton.interactable = false;
messageInputField.interactable = false;
UploadMessage msg = new() {
kind = "chatroom_message",
data = new JObject() {
["content"] = messageInputField.text,
["auth"] = BazookaManager.Instance.GetAccountSession()
} }
}; rowInfo.transform.GetChild(2).GetComponent<TMP_Text>().text = data["data"]["newContent"].ToString();
WebsocketHandler.Instance._Connection.AddOutgoingMessage(JsonConvert.SerializeObject(msg)); }
sendButton.interactable = true;
backButton.interactable = true;
messageInputField.text = string.Empty;
messageInputField.interactable = true;
StartCoroutine(ScrollToBottom());
}
void HandleMessageDelete() {
DeleteMessage msg = new() {
kind = "chatroom_message",
data = new JObject() {
["id"] = (int)selectedMessageForOptions.ID,
["auth"] = BazookaManager.Instance.GetAccountSession()
}
};
WebsocketHandler.Instance._Connection.AddOutgoingMessage(JsonConvert.SerializeObject(msg));
StartCoroutine(ScrollToBottom());
}
void HandleMessageEdit() {
var newContent = editMessagePanelCurrent.transform.GetChild(0).GetChild(4).GetComponent<TMP_InputField>().text;
selectedMessageForOptions.Content = newContent;
EditMessage msg = new() {
kind = "chatroom_message",
data = new JObject() {
["id"] = (int)selectedMessageForOptions.ID,
["newContent"] = newContent,
["auth"] = BazookaManager.Instance.GetAccountSession()
}
};
WebsocketHandler.Instance._Connection.AddOutgoingMessage(JsonConvert.SerializeObject(msg));
StartCoroutine(ScrollToBottom());
}
async Task HandleMessageReport() {
WWWForm dataForm = new();
dataForm.AddField("id", selectedMessageForOptions.ID.ToString());
dataForm.AddField("reason", reportMessagePanelReportReason.text);
using UnityWebRequest request = UnityWebRequest.Post(Endpoints.CHATROOM_REPORT_MESSAGE_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();
StartCoroutine(ScrollToBottom());
}
async void Update() {
var max = content.GetComponent<RectTransform>().sizeDelta.y;
var current = content.transform.localPosition.y;
downButton.gameObject.SetActive(Mathf.Abs(max - current) > 0.1f * max);
if (Keyboard.current.escapeKey.wasPressedThisFrame && FindFirstObjectByType<ProfileMenu>() == null) {
if (optionsPanel.activeSelf) optionsPanelExitButton.onClick.Invoke();
else if (reportMessagePanel.activeSelf) reportMessagePanelExitButton.onClick.Invoke();
else if (editMessagePanelCurrent != null) editMessagePanelCurrent.transform.GetChild(0).GetChild(0).GetComponent<Button>().onClick.Invoke();
else await SceneManager.LoadSceneAsync("MainMenu");
} }
}
} }
}
IEnumerator ScrollToBottom() { GameObject InsertMessage(ChatroomMessage message, BigInteger? localUserId) {
yield return new WaitForEndOfFrame(); var obj = content.transform.Find("ChatroomRow_" + message.ID);
content.transform.localPosition = new UnityEngine.Vector2(0f, content.GetComponent<RectTransform>().sizeDelta.y);
var rowInfo = Instantiate(sampleObject, content.transform);
rowInfo.transform.SetSiblingIndex(content.transform.childCount - 1);
var usernameText = rowInfo.transform.GetChild(0).GetComponent<TMP_Text>();
var playerIcon = rowInfo.transform.GetChild(1).GetComponent<Image>();
var playerOverlayIcon = playerIcon.transform.GetChild(0).GetComponent<Image>();
var playerIconButton = rowInfo.transform.GetChild(1).GetComponent<Button>();
var messageText = rowInfo.transform.GetChild(2).GetComponent<TMP_Text>();
var optionsButton = rowInfo.transform.GetChild(3).GetComponent<Button>();
var color = BazookaManager.Instance.GetColorSettingText();
string hex1 = new Color((((float)color[0]) - 50f) / 255f, (((float)color[1]) - 50f) / 255f, (((float)color[2]) - 50f) / 255f).ToHexString();
string hex2 = new Color((((float)color[0]) - 100f) / 255f, (((float)color[1]) - 100f) / 255f, (((float)color[2]) - 100f) / 255f).ToHexString();
usernameText.text = $"{message.Username} <color=#{hex1}>{Tools.FormatHumanTime(message.Timestamp)}</color>" + (message.EditedAt != 0 ? $" <color=#{hex2}>(edited)</color>" : null);
messageText.text = message.Content;
if (message.CustomIcon == null) {
playerIcon.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + message.Icon);
if (message.Icon == 1) playerIcon.sprite = Tools.GetIconForUser(message.UserID);
playerOverlayIcon.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + message.Overlay);
if (message.Overlay != 0) playerOverlayIcon.gameObject.SetActive(true);
if (message.Overlay == 8) playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.56f, 14.81f);
else if (message.Overlay == 11) playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-14.74451f, 20.39122f);
else if (message.Overlay == 13) playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.54019f, 14.70365f);
try {
playerIcon.color = new Color(message.BirdColor[0] / 255f, message.BirdColor[1] / 255f, message.BirdColor[2] / 255f);
playerOverlayIcon.color = new Color(message.OverlayColor[0] / 255f, message.OverlayColor[1] / 255f, message.OverlayColor[2] / 255f);
}
catch {
playerIcon.color = Color.white;
playerOverlayIcon.color = Color.white;
}
} else playerIcon.gameObject.AddComponent<WaitingForCustomIcon>().ID = message.CustomIcon;
playerIconButton.onClick.AddListener(async () => {
var clone = Instantiate(profilePrefab.gameObject, profilePrefab.gameObject.transform.parent);
clone.SetActive(true);
await clone.GetComponent<ProfileMenu>().Init(message.UserID);
});
optionsButton.onClick.AddListener(() => OptionsButtonClick(message, localUserId ?? 0));
rowInfo.name = "ChatroomRow_" + message.ID;
var entryComponet = rowInfo.AddComponent<ChatroomMenuEntry>();
entryComponet.Init(optionsButton);
rowInfo.SetActive(true);
return rowInfo;
}
void OnDestroy() {
WebsocketHandler.Instance._Connection.StateChanged -= OnStateChanged;
WebsocketHandler.Instance._Connection.MessageReceived -= OnMessageReceived;
}
void Start() {
reportMessagePanelReportReason.transform.GetChild(0).GetChild(1).GetComponent<TMP_Text>().textWrappingMode = TextWrappingModes.Normal;
if (BazookaManager.Instance.GetAccountID() == null || BazookaManager.Instance.GetAccountName() == null || BazookaManager.Instance.GetAccountSession() == null) {
sendButton.interactable = false;
messageInputField.interactable = false;
} }
sendButton.onClick.AddListener(HandleMessageSubmit);
downButton.onClick.AddListener(() => StartCoroutine(ScrollToBottom()));
messageInputField.textComponent.textWrappingMode = TextWrappingModes.Normal;
messageInputField.onSubmit.AddListener(_ => HandleMessageSubmit());
void OptionsButtonClick(ChatroomMessage message, BigInteger localUserId) { optionsPanelExitButton.onClick.AddListener(() => {
selectedMessageForOptions = message; optionsPanel.SetActive(false);
optionsPanelDeleteButton.transform.parent.gameObject.SetActive(localUserId != 0 && message.UserID == localUserId); selectedMessageForOptions = null;
optionsPanelEditButton.transform.parent.gameObject.SetActive(localUserId != 0 && message.UserID == localUserId); });
optionsPanelReportButton.transform.parent.gameObject.SetActive(localUserId != 0 && message.UserID != localUserId); optionsPanelDeleteButton.onClick.AddListener(() => { if (selectedMessageForOptions != null) HandleMessageDelete(); });
optionsPanelDeleteButton.onClick.AddListener(optionsPanelExitButton.onClick.Invoke);
optionsPanelEditButton.onClick.AddListener(() => {
var editMessage = Instantiate(editMessagePanelSample, editMessagePanelSample.transform.parent);
editMessagePanelCurrent = editMessage;
var editMessageChild = editMessage.transform.GetChild(0);
var editMessageChildExitButton = editMessageChild.GetChild(0).GetComponent<Button>();
var editMessageChildSubmitButton = editMessageChild.GetChild(1).GetComponent<Button>();
var editMessageChildOriginalPreview = editMessageChild.GetChild(2).gameObject;
var editMessageChildEditedPreview = editMessageChild.GetChild(3).gameObject;
var editMessageChildNewContentInputBox = editMessageChild.GetChild(4).GetComponent<TMP_InputField>();
editMessageChildNewContentInputBox.onSelect.AddListener((_) => editMessageChildNewContentInputBox.caretPosition = editMessageChildNewContentInputBox.text.Length);
editMessageChildNewContentInputBox.text = selectedMessageForOptions.Content;
editMessageChildExitButton.onClick.AddListener(() => {
editMessagePanelCurrent = null;
Destroy(editMessage);
optionsPanel.SetActive(true); optionsPanel.SetActive(true);
});
editMessageChildSubmitButton.onClick.AddListener(() => {
HandleMessageEdit();
editMessagePanelCurrent = null;
Destroy(editMessage);
selectedMessageForOptions = null;
});
var rowInfo = editMessageChild.GetChild(2);
var usernameText = rowInfo.transform.GetChild(1).GetComponent<TMP_Text>();
var playerIcon = rowInfo.transform.GetChild(2).GetComponent<Image>();
var playerOverlayIcon = playerIcon.transform.GetChild(0).GetComponent<Image>();
var messageText = rowInfo.transform.GetChild(3).GetComponent<TMP_Text>();
usernameText.text = selectedMessageForOptions.Username;
messageText.text = selectedMessageForOptions.Content;
if (selectedMessageForOptions.CustomIcon == null) {
playerIcon.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + selectedMessageForOptions.Icon);
if (selectedMessageForOptions.Icon == 1) playerIcon.sprite = Tools.GetIconForUser(selectedMessageForOptions.UserID);
playerOverlayIcon.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + selectedMessageForOptions.Overlay);
if (selectedMessageForOptions.Overlay != 0) playerOverlayIcon.gameObject.SetActive(true);
if (selectedMessageForOptions.Overlay == 8) playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.56f, 14.81f);
else if (selectedMessageForOptions.Overlay == 11) playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-14.74451f, 20.39122f);
else if (selectedMessageForOptions.Overlay == 13) playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.54019f, 14.70365f);
try {
playerIcon.color = new Color(selectedMessageForOptions.BirdColor[0] / 255f, selectedMessageForOptions.BirdColor[1] / 255f, selectedMessageForOptions.BirdColor[2] / 255f);
playerOverlayIcon.color = new Color(selectedMessageForOptions.OverlayColor[0] / 255f, selectedMessageForOptions.OverlayColor[1] / 255f, selectedMessageForOptions.OverlayColor[2] / 255f);
}
catch {
playerIcon.color = Color.white;
playerOverlayIcon.color = Color.white;
}
} else playerIcon.gameObject.AddComponent<WaitingForCustomIcon>().ID = selectedMessageForOptions.CustomIcon;
rowInfo = editMessageChild.GetChild(3);
usernameText = rowInfo.transform.GetChild(1).GetComponent<TMP_Text>();
playerIcon = rowInfo.transform.GetChild(2).GetComponent<Image>();
playerOverlayIcon = playerIcon.transform.GetChild(0).GetComponent<Image>();
messageText = rowInfo.transform.GetChild(3).GetComponent<TMP_Text>();
usernameText.text = selectedMessageForOptions.Username;
messageText.text = selectedMessageForOptions.Content;
editMessageChildNewContentInputBox.onValueChanged.AddListener((value) => messageText.text = value);
if (selectedMessageForOptions.CustomIcon == null) {
playerIcon.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + selectedMessageForOptions.Icon);
if (selectedMessageForOptions.Icon == 1) playerIcon.sprite = Tools.GetIconForUser(selectedMessageForOptions.UserID);
playerOverlayIcon.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + selectedMessageForOptions.Overlay);
if (selectedMessageForOptions.Overlay != 0) playerOverlayIcon.gameObject.SetActive(true);
if (selectedMessageForOptions.Overlay == 8) playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.56f, 14.81f);
else if (selectedMessageForOptions.Overlay == 11) playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-14.74451f, 20.39122f);
else if (selectedMessageForOptions.Overlay == 13) playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.54019f, 14.70365f);
try {
playerIcon.color = new Color(selectedMessageForOptions.BirdColor[0] / 255f, selectedMessageForOptions.BirdColor[1] / 255f, selectedMessageForOptions.BirdColor[2] / 255f);
playerOverlayIcon.color = new Color(selectedMessageForOptions.OverlayColor[0] / 255f, selectedMessageForOptions.OverlayColor[1] / 255f, selectedMessageForOptions.OverlayColor[2] / 255f);
}
catch {
playerIcon.color = Color.white;
playerOverlayIcon.color = Color.white;
}
} else playerIcon.gameObject.AddComponent<WaitingForCustomIcon>().ID = selectedMessageForOptions.CustomIcon;
optionsPanel.SetActive(false);
editMessage.SetActive(true);
CustomIconLoader.Init(FindObjectsByType<WaitingForCustomIcon>(FindObjectsSortMode.None));
});
optionsPanelReportButton.onClick.AddListener(() => {
reportMessagePanelReportReason.text = "";
optionsPanel.SetActive(false);
reportMessagePanel.SetActive(true);
});
reportMessagePanelExitButton.onClick.AddListener(() => {
editMessagePanelCurrent = null;
reportMessagePanel.SetActive(false);
optionsPanel.SetActive(true);
});
reportMessagePanelSubmitButton.onClick.AddListener(async () => {
reportMessagePanel.SetActive(false);
await HandleMessageReport();
editMessagePanelCurrent = null;
selectedMessageForOptions = null;
});
optionsPanelCopyButton.onClick.AddListener(() => {
if (selectedMessageForOptions != null) GUIUtility.systemCopyBuffer = selectedMessageForOptions.Content;
});
optionsPanelCopyButton.onClick.AddListener(optionsPanelExitButton.onClick.Invoke);
}
void HandleMessageSubmit() {
if (messageInputField.text.Trim() == string.Empty) return;
sendButton.interactable = false;
backButton.interactable = false;
messageInputField.interactable = false;
UploadMessage msg = new() {
kind = "chatroom_message",
data = new JObject() {
["content"] = messageInputField.text,
["auth"] = BazookaManager.Instance.GetAccountSession()
}
};
WebsocketHandler.Instance._Connection.AddOutgoingMessage(JsonConvert.SerializeObject(msg));
sendButton.interactable = true;
backButton.interactable = true;
messageInputField.text = string.Empty;
messageInputField.interactable = true;
StartCoroutine(ScrollToBottom());
}
void HandleMessageDelete() {
DeleteMessage msg = new() {
kind = "chatroom_message",
data = new JObject() {
["id"] = (int)selectedMessageForOptions.ID,
["auth"] = BazookaManager.Instance.GetAccountSession()
}
};
WebsocketHandler.Instance._Connection.AddOutgoingMessage(JsonConvert.SerializeObject(msg));
StartCoroutine(ScrollToBottom());
}
void HandleMessageEdit() {
var newContent = editMessagePanelCurrent.transform.GetChild(0).GetChild(4).GetComponent<TMP_InputField>().text;
selectedMessageForOptions.Content = newContent;
EditMessage msg = new() {
kind = "chatroom_message",
data = new JObject() {
["id"] = (int)selectedMessageForOptions.ID,
["newContent"] = newContent,
["auth"] = BazookaManager.Instance.GetAccountSession()
}
};
WebsocketHandler.Instance._Connection.AddOutgoingMessage(JsonConvert.SerializeObject(msg));
StartCoroutine(ScrollToBottom());
}
async Task HandleMessageReport() {
WWWForm dataForm = new();
dataForm.AddField("id", selectedMessageForOptions.ID.ToString());
dataForm.AddField("reason", reportMessagePanelReportReason.text);
using UnityWebRequest request = UnityWebRequest.Post(Endpoints.CHATROOM_REPORT_MESSAGE_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();
StartCoroutine(ScrollToBottom());
}
async void Update() {
var max = content.GetComponent<RectTransform>().sizeDelta.y;
var current = content.transform.localPosition.y;
downButton.gameObject.SetActive(Mathf.Abs(max - current) > 0.1f * max);
if (Keyboard.current.escapeKey.wasPressedThisFrame && FindFirstObjectByType<ProfileMenu>() == null) {
if (optionsPanel.activeSelf) optionsPanelExitButton.onClick.Invoke();
else if (reportMessagePanel.activeSelf) reportMessagePanelExitButton.onClick.Invoke();
else if (editMessagePanelCurrent != null) editMessagePanelCurrent.transform.GetChild(0).GetChild(0).GetComponent<Button>().onClick.Invoke();
else await SceneManager.LoadSceneAsync("MainMenu");
} }
}
IEnumerator ScrollToBottom() {
yield return new WaitForEndOfFrame();
content.transform.localPosition = new UnityEngine.Vector2(0f, content.GetComponent<RectTransform>().sizeDelta.y);
}
void OptionsButtonClick(ChatroomMessage message, BigInteger localUserId) {
selectedMessageForOptions = message;
optionsPanelDeleteButton.transform.parent.gameObject.SetActive(localUserId != 0 && message.UserID == localUserId);
optionsPanelEditButton.transform.parent.gameObject.SetActive(localUserId != 0 && message.UserID == localUserId);
optionsPanelReportButton.transform.parent.gameObject.SetActive(localUserId != 0 && message.UserID != localUserId);
optionsPanel.SetActive(true);
}
} }
+51 -51
View File
@@ -3,64 +3,64 @@ using UnityEngine.EventSystems;
using UnityEngine.UI; using UnityEngine.UI;
public class ChatroomMenuEntry : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, IPointerClickHandler { public class ChatroomMenuEntry : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, IPointerClickHandler {
private Button optionsButton; private Button optionsButton;
private static ChatroomMenuEntry activeEntry; private static ChatroomMenuEntry activeEntry;
public void Init(Button optionsButtonArg) { public void Init(Button optionsButtonArg) {
optionsButton = optionsButtonArg; optionsButton = optionsButtonArg;
var color = BazookaManager.Instance.GetColorSettingMenuBackground(); var color = BazookaManager.Instance.GetColorSettingMenuBackground();
gameObject.GetComponent<Image>().color = new Color((((float)color[0]) + 24f) / 255f, (((float)color[1]) + 24f) / 255f, (((float)color[2]) + 24f) / 255f); gameObject.GetComponent<Image>().color = new Color((((float)color[0]) + 24f) / 255f, (((float)color[1]) + 24f) / 255f, (((float)color[2]) + 24f) / 255f);
optionsButton.gameObject.SetActive(false); optionsButton.gameObject.SetActive(false);
} }
public void OnPointerEnter(PointerEventData e) { public void OnPointerEnter(PointerEventData e) {
if (!Application.isMobilePlatform) { if (!Application.isMobilePlatform) {
if (activeEntry != null && activeEntry != this) { if (activeEntry != null && activeEntry != this) {
activeEntry.Deactivate(); activeEntry.Deactivate();
} }
if (activeEntry != this) { if (activeEntry != this) {
Activate(); Activate();
} }
}
} }
}
public void OnPointerExit(PointerEventData e) { public void OnPointerExit(PointerEventData e) {
if (!Application.isMobilePlatform) { if (!Application.isMobilePlatform) {
if (activeEntry != null && activeEntry != this) { if (activeEntry != null && activeEntry != this) {
activeEntry.Deactivate(); activeEntry.Deactivate();
} }
if (activeEntry == this) { if (activeEntry == this) {
Deactivate(); Deactivate();
} }
}
} }
}
public void OnPointerClick(PointerEventData e) { public void OnPointerClick(PointerEventData e) {
if (Application.isMobilePlatform) { if (Application.isMobilePlatform) {
if (activeEntry != null && activeEntry != this) { if (activeEntry != null && activeEntry != this) {
activeEntry.Deactivate(); activeEntry.Deactivate();
} }
if (activeEntry == this) { if (activeEntry == this) {
Deactivate(); Deactivate();
} else { } else {
Activate(); Activate();
} }
} else if (e.button == PointerEventData.InputButton.Right) { } else if (e.button == PointerEventData.InputButton.Right) {
optionsButton.onClick?.Invoke(); optionsButton.onClick?.Invoke();
}
} }
}
private void Activate() { private void Activate() {
activeEntry = this; activeEntry = this;
var color = BazookaManager.Instance.GetColorSettingMenuBackground(); var color = BazookaManager.Instance.GetColorSettingMenuBackground();
gameObject.GetComponent<Image>().color = new Color((((float)color[0]) + 36f) / 255f, (((float)color[1]) + 36f) / 255f, (((float)color[2]) + 36f) / 255f); gameObject.GetComponent<Image>().color = new Color((((float)color[0]) + 36f) / 255f, (((float)color[1]) + 36f) / 255f, (((float)color[2]) + 36f) / 255f);
optionsButton.gameObject.SetActive(true); optionsButton.gameObject.SetActive(true);
} }
private void Deactivate() { private void Deactivate() {
var color = BazookaManager.Instance.GetColorSettingMenuBackground(); var color = BazookaManager.Instance.GetColorSettingMenuBackground();
gameObject.GetComponent<Image>().color = new Color((((float)color[0]) + 24f) / 255f, (((float)color[1]) + 24f) / 255f, (((float)color[2]) + 24f) / 255f); gameObject.GetComponent<Image>().color = new Color((((float)color[0]) + 24f) / 255f, (((float)color[1]) + 24f) / 255f, (((float)color[2]) + 24f) / 255f);
optionsButton.gameObject.SetActive(false); optionsButton.gameObject.SetActive(false);
if (activeEntry == this) activeEntry = null; if (activeEntry == this) activeEntry = null;
} }
} }
+43 -43
View File
@@ -2,54 +2,54 @@ using UnityEngine;
[RequireComponent(typeof(AudioSource))] [RequireComponent(typeof(AudioSource))]
public class GameMusicHandler : MonoBehaviour { public class GameMusicHandler : MonoBehaviour {
[SerializeField] private AudioClip[] audioClips; [SerializeField] private AudioClip[] audioClips;
private AudioSource audioSource; private AudioSource audioSource;
private int lastIndex = -1; private int lastIndex = -1;
private int currentIndex = 0; private int currentIndex = 0;
private bool isPaused = false; private bool isPaused = false;
void Start() { void Start() {
audioSource = GetComponent<AudioSource>(); audioSource = GetComponent<AudioSource>();
PlayNextClip(); PlayNextClip();
}
void Update() {
if (!audioSource.isPlaying && !isPaused) PlayNextClip();
}
void PlayNextClip() {
if (audioClips.Length == 0) return;
int index;
if (BazookaManager.Instance.GetSettingRandomMusic()) {
do index = Random.Range(0, audioClips.Length);
while (audioClips.Length > 1 && index == lastIndex);
} else {
index = currentIndex;
currentIndex = (currentIndex + 1) % audioClips.Length;
} }
void Update() { lastIndex = index;
if (!audioSource.isPlaying && !isPaused) PlayNextClip(); audioSource.clip = audioClips[index];
audioSource.Play();
}
public void PauseMusic() {
if (audioSource.isPlaying) {
audioSource.Pause();
isPaused = true;
} }
}
void PlayNextClip() { public void ResumeMusic() {
if (audioClips.Length == 0) return; if (isPaused) {
audioSource.Play();
int index; isPaused = false;
if (BazookaManager.Instance.GetSettingRandomMusic()) {
do index = Random.Range(0, audioClips.Length);
while (audioClips.Length > 1 && index == lastIndex);
} else {
index = currentIndex;
currentIndex = (currentIndex + 1) % audioClips.Length;
}
lastIndex = index;
audioSource.clip = audioClips[index];
audioSource.Play();
} }
}
public void PauseMusic() { public void RestartMusic() {
if (audioSource.isPlaying) { audioSource.Stop();
audioSource.Pause(); audioSource.Play();
isPaused = true; }
}
}
public void ResumeMusic() {
if (isPaused) {
audioSource.Play();
isPaused = false;
}
}
public void RestartMusic() {
audioSource.Stop();
audioSource.Play();
}
} }
File diff suppressed because it is too large. Load diff
@@ -4,137 +4,137 @@ using UnityEngine;
using UnityEngine.UI; using UnityEngine.UI;
public class AutoGamePlayerPauseMenu : MonoBehaviour { public class AutoGamePlayerPauseMenu : MonoBehaviour {
public static AutoGamePlayerPauseMenu Instance; public static AutoGamePlayerPauseMenu Instance;
[SerializeField] private Button backButton; [SerializeField] private Button backButton;
[SerializeField] private Button continueButton; [SerializeField] private Button continueButton;
[SerializeField] private Button statsButton; [SerializeField] private Button statsButton;
[SerializeField] private Button editUiButton; [SerializeField] private Button editUiButton;
[SerializeField] private Button resetUiButton; [SerializeField] private Button resetUiButton;
[SerializeField] private AudioSource songLoop; [SerializeField] private AudioSource songLoop;
[SerializeField] private TMP_Text scoreText; [SerializeField] private TMP_Text scoreText;
[SerializeField] private TMP_Text highScoreText; [SerializeField] private TMP_Text highScoreText;
[SerializeField] private TMP_Text boostText; [SerializeField] private TMP_Text boostText;
[SerializeField] private TMP_Text levelText; [SerializeField] private TMP_Text levelText;
[SerializeField] private Button pauseButton; [SerializeField] private Button pauseButton;
internal bool editingUI = false; internal bool editingUI = false;
public GameObject statsMenu; public GameObject statsMenu;
public Button statsMenuExitButton; public Button statsMenuExitButton;
[SerializeField] private TMP_Text statsText; [SerializeField] private TMP_Text statsText;
[SerializeField] private Toggle settingFullscreenToggle; [SerializeField] private Toggle settingFullscreenToggle;
[SerializeField] private Toggle settingVSyncToggle; [SerializeField] private Toggle settingVSyncToggle;
[SerializeField] private Toggle settingRandomMusicToggle; [SerializeField] private Toggle settingRandomMusicToggle;
[SerializeField] private Slider musicSlider; [SerializeField] private Slider musicSlider;
[SerializeField] private Slider sfxSlider; [SerializeField] private Slider sfxSlider;
[SerializeField] private TMP_Text musicSliderText; [SerializeField] private TMP_Text musicSliderText;
[SerializeField] private TMP_Text sfxSliderText; [SerializeField] private TMP_Text sfxSliderText;
void Awake() { void Awake() {
Instance = this; Instance = this;
continueButton.onClick.AddListener(AutoGamePlayer.Instance.DisablePause); continueButton.onClick.AddListener(AutoGamePlayer.Instance.DisablePause);
musicSlider.onValueChanged.AddListener(value => { musicSlider.onValueChanged.AddListener(value => {
BazookaManager.Instance.SetSettingMusicVolume(value); BazookaManager.Instance.SetSettingMusicVolume(value);
songLoop.volume = value; songLoop.volume = value;
}); });
sfxSlider.onValueChanged.AddListener(value => { sfxSlider.onValueChanged.AddListener(value => {
BazookaManager.Instance.SetSettingSFXVolume(value); BazookaManager.Instance.SetSettingSFXVolume(value);
}); });
editUiButton.onClick.AddListener(() => { editUiButton.onClick.AddListener(() => {
ToggleEditingUI(); ToggleEditingUI();
}); });
resetUiButton.onClick.AddListener(() => { resetUiButton.onClick.AddListener(() => {
scoreText.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(0f, -70f); scoreText.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(0f, -70f);
highScoreText.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(0f, -140f); highScoreText.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(0f, -140f);
boostText.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(0f, -190f); boostText.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(0f, -190f);
levelText.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(-290f, 85f); levelText.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(-290f, 85f);
PlayerPrefs.DeleteKey("DraggedUIScoreText"); PlayerPrefs.DeleteKey("DraggedUIScoreText");
PlayerPrefs.DeleteKey("DraggedUIHighScoreText"); PlayerPrefs.DeleteKey("DraggedUIHighScoreText");
PlayerPrefs.DeleteKey("DraggedUIBoostText"); PlayerPrefs.DeleteKey("DraggedUIBoostText");
PlayerPrefs.DeleteKey("DraggedUICoinsText"); PlayerPrefs.DeleteKey("DraggedUICoinsText");
PlayerPrefs.DeleteKey("DraggedUILevelText"); PlayerPrefs.DeleteKey("DraggedUILevelText");
if (Application.isMobilePlatform) { if (Application.isMobilePlatform) {
pauseButton.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(128f, -128f); pauseButton.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(128f, -128f);
PlayerPrefs.DeleteKey("DraggedUIPauseButton"); PlayerPrefs.DeleteKey("DraggedUIPauseButton");
PlayerPrefs.DeleteKey("DraggedUIRestartButton"); PlayerPrefs.DeleteKey("DraggedUIRestartButton");
PlayerPrefs.DeleteKey("DraggedUIJumpButton"); PlayerPrefs.DeleteKey("DraggedUIJumpButton");
PlayerPrefs.DeleteKey("DraggedUIRightButton"); PlayerPrefs.DeleteKey("DraggedUIRightButton");
PlayerPrefs.DeleteKey("DraggedUILeftButton"); PlayerPrefs.DeleteKey("DraggedUILeftButton");
} }
}); });
statsButton.onClick.AddListener(() => { statsButton.onClick.AddListener(() => {
statsMenu.SetActive(true); statsMenu.SetActive(true);
var text = new StringBuilder(); var text = new StringBuilder();
text.AppendLine("High Score: " + Tools.FormatWithCommas(AutoGamePlayer.Instance.highscore)); text.AppendLine("High Score: " + Tools.FormatWithCommas(AutoGamePlayer.Instance.highscore));
text.AppendLine("Total Normal Berries: " + Tools.FormatWithCommas(AutoGamePlayer.Instance.totalNormalBerries)); text.AppendLine("Total Normal Berries: " + Tools.FormatWithCommas(AutoGamePlayer.Instance.totalNormalBerries));
text.AppendLine("Total Poison Berries: " + Tools.FormatWithCommas(AutoGamePlayer.Instance.totalPoisonBerries)); text.AppendLine("Total Poison Berries: " + Tools.FormatWithCommas(AutoGamePlayer.Instance.totalPoisonBerries));
text.AppendLine("Total Slow Berries: " + Tools.FormatWithCommas(AutoGamePlayer.Instance.totalSlowBerries)); text.AppendLine("Total Slow Berries: " + Tools.FormatWithCommas(AutoGamePlayer.Instance.totalSlowBerries));
text.AppendLine("Total Ultra Berries: " + Tools.FormatWithCommas(AutoGamePlayer.Instance.totalUltraBerries)); text.AppendLine("Total Ultra Berries: " + Tools.FormatWithCommas(AutoGamePlayer.Instance.totalUltraBerries));
text.AppendLine("Total Speedy Berries: " + Tools.FormatWithCommas(AutoGamePlayer.Instance.totalSpeedyBerries)); text.AppendLine("Total Speedy Berries: " + Tools.FormatWithCommas(AutoGamePlayer.Instance.totalSpeedyBerries));
text.AppendLine("Total Random Berries: " + Tools.FormatWithCommas(AutoGamePlayer.Instance.totalRandomBerries)); text.AppendLine("Total Random Berries: " + Tools.FormatWithCommas(AutoGamePlayer.Instance.totalRandomBerries));
text.AppendLine("Total Anti Berries: " + Tools.FormatWithCommas(AutoGamePlayer.Instance.totalAntiBerries)); text.AppendLine("Total Anti Berries: " + Tools.FormatWithCommas(AutoGamePlayer.Instance.totalAntiBerries));
text.AppendLine("Total Golden Berries: " + Tools.FormatWithCommas(AutoGamePlayer.Instance.totalGoldenBerries)); text.AppendLine("Total Golden Berries: " + Tools.FormatWithCommas(AutoGamePlayer.Instance.totalGoldenBerries));
text.AppendLine("Total Attempts: " + Tools.FormatWithCommas(AutoGamePlayer.Instance.totalAttempts)); text.AppendLine("Total Attempts: " + Tools.FormatWithCommas(AutoGamePlayer.Instance.totalAttempts));
text.AppendLine("Note: This is the AI stats"); text.AppendLine("Note: This is the AI stats");
statsText.text = text.ToString(); statsText.text = text.ToString();
}); });
statsMenuExitButton.onClick.AddListener(() => { statsMenuExitButton.onClick.AddListener(() => {
statsMenu.SetActive(false); statsMenu.SetActive(false);
statsText.text = string.Empty; statsText.text = string.Empty;
}); });
musicSlider.value = BazookaManager.Instance.GetSettingMusicVolume(); musicSlider.value = BazookaManager.Instance.GetSettingMusicVolume();
sfxSlider.value = BazookaManager.Instance.GetSettingSFXVolume(); sfxSlider.value = BazookaManager.Instance.GetSettingSFXVolume();
if (!Application.isMobilePlatform) { if (!Application.isMobilePlatform) {
settingFullscreenToggle.isOn = BazookaManager.Instance.GetSettingFullScreen() == true; settingFullscreenToggle.isOn = BazookaManager.Instance.GetSettingFullScreen() == true;
settingVSyncToggle.isOn = BazookaManager.Instance.GetSettingVsync() == true; settingVSyncToggle.isOn = BazookaManager.Instance.GetSettingVsync() == true;
settingRandomMusicToggle.isOn = BazookaManager.Instance.GetSettingRandomMusic() == true; settingRandomMusicToggle.isOn = BazookaManager.Instance.GetSettingRandomMusic() == true;
settingFullscreenToggle.onValueChanged.AddListener(value => { settingFullscreenToggle.onValueChanged.AddListener(value => {
BazookaManager.Instance.SetSettingFullScreen(value); BazookaManager.Instance.SetSettingFullScreen(value);
var width = Display.main.systemWidth; var width = Display.main.systemWidth;
var height = Display.main.systemHeight; var height = Display.main.systemHeight;
Screen.SetResolution(width, height, value); Screen.SetResolution(width, height, value);
}); });
settingVSyncToggle.onValueChanged.AddListener(value => { settingVSyncToggle.onValueChanged.AddListener(value => {
BazookaManager.Instance.SetSettingVsync(value); BazookaManager.Instance.SetSettingVsync(value);
QualitySettings.vSyncCount = value ? 1 : -1; QualitySettings.vSyncCount = value ? 1 : -1;
}); });
} else { } else {
settingFullscreenToggle.interactable = false; settingFullscreenToggle.interactable = false;
settingVSyncToggle.interactable = false; settingVSyncToggle.interactable = false;
settingRandomMusicToggle.isOn = BazookaManager.Instance.GetSettingRandomMusic() == true; settingRandomMusicToggle.isOn = BazookaManager.Instance.GetSettingRandomMusic() == true;
}
settingRandomMusicToggle.onValueChanged.AddListener(value => BazookaManager.Instance.SetSettingRandomMusic(value));
musicSlider.onValueChanged.AddListener(value => {
BazookaManager.Instance.SetSettingMusicVolume(value);
AutoGamePlayer.Instance.backgroundMusic.volume = value;
});
sfxSlider.onValueChanged.AddListener(value => BazookaManager.Instance.SetSettingSFXVolume(value));
} }
settingRandomMusicToggle.onValueChanged.AddListener(value => BazookaManager.Instance.SetSettingRandomMusic(value));
musicSlider.onValueChanged.AddListener(value => {
BazookaManager.Instance.SetSettingMusicVolume(value);
AutoGamePlayer.Instance.backgroundMusic.volume = value;
});
sfxSlider.onValueChanged.AddListener(value => BazookaManager.Instance.SetSettingSFXVolume(value));
}
public void ToggleEditingUI() { public void ToggleEditingUI() {
editingUI = !editingUI; editingUI = !editingUI;
musicSlider.gameObject.SetActive(!musicSlider.gameObject.activeSelf); musicSlider.gameObject.SetActive(!musicSlider.gameObject.activeSelf);
sfxSlider.gameObject.SetActive(!sfxSlider.gameObject.activeSelf); sfxSlider.gameObject.SetActive(!sfxSlider.gameObject.activeSelf);
musicSliderText.gameObject.SetActive(!musicSliderText.gameObject.activeSelf); musicSliderText.gameObject.SetActive(!musicSliderText.gameObject.activeSelf);
sfxSliderText.gameObject.SetActive(!sfxSliderText.gameObject.activeSelf); sfxSliderText.gameObject.SetActive(!sfxSliderText.gameObject.activeSelf);
settingFullscreenToggle.gameObject.SetActive(!settingFullscreenToggle.gameObject.activeSelf); settingFullscreenToggle.gameObject.SetActive(!settingFullscreenToggle.gameObject.activeSelf);
settingVSyncToggle.gameObject.SetActive(!settingVSyncToggle.gameObject.activeSelf); settingVSyncToggle.gameObject.SetActive(!settingVSyncToggle.gameObject.activeSelf);
settingRandomMusicToggle.gameObject.SetActive(!settingRandomMusicToggle.gameObject.activeSelf); settingRandomMusicToggle.gameObject.SetActive(!settingRandomMusicToggle.gameObject.activeSelf);
backButton.gameObject.SetActive(!backButton.gameObject.activeSelf); backButton.gameObject.SetActive(!backButton.gameObject.activeSelf);
continueButton.gameObject.SetActive(!continueButton.gameObject.activeSelf); continueButton.gameObject.SetActive(!continueButton.gameObject.activeSelf);
statsButton.gameObject.SetActive(!statsButton.gameObject.activeSelf); statsButton.gameObject.SetActive(!statsButton.gameObject.activeSelf);
editUiButton.transform.GetChild(0).GetComponent<TMP_Text>().text = editUiButton.transform.GetChild(0).GetComponent<TMP_Text>().text == "Edit UI" ? "Done" : "Edit UI"; editUiButton.transform.GetChild(0).GetComponent<TMP_Text>().text = editUiButton.transform.GetChild(0).GetComponent<TMP_Text>().text == "Edit UI" ? "Done" : "Edit UI";
resetUiButton.gameObject.SetActive(!resetUiButton.gameObject.activeSelf); resetUiButton.gameObject.SetActive(!resetUiButton.gameObject.activeSelf);
scoreText.GetComponent<DraggableUI>().canDrag = !scoreText.GetComponent<DraggableUI>().canDrag; scoreText.GetComponent<DraggableUI>().canDrag = !scoreText.GetComponent<DraggableUI>().canDrag;
highScoreText.GetComponent<DraggableUI>().canDrag = !highScoreText.GetComponent<DraggableUI>().canDrag; highScoreText.GetComponent<DraggableUI>().canDrag = !highScoreText.GetComponent<DraggableUI>().canDrag;
boostText.GetComponent<DraggableUI>().canDrag = !boostText.GetComponent<DraggableUI>().canDrag; boostText.GetComponent<DraggableUI>().canDrag = !boostText.GetComponent<DraggableUI>().canDrag;
levelText.GetComponent<DraggableUI>().canDrag = !levelText.GetComponent<DraggableUI>().canDrag; levelText.GetComponent<DraggableUI>().canDrag = !levelText.GetComponent<DraggableUI>().canDrag;
if (Application.isMobilePlatform) { if (Application.isMobilePlatform) {
var pauseDraggableUI = pauseButton.GetComponent<DraggableUI>(); var pauseDraggableUI = pauseButton.GetComponent<DraggableUI>();
pauseButton.transform.parent.SetSiblingIndex(pauseDraggableUI.canDrag ? 0 : 2); pauseButton.transform.parent.SetSiblingIndex(pauseDraggableUI.canDrag ? 0 : 2);
pauseDraggableUI.canDrag = !pauseDraggableUI.canDrag; pauseDraggableUI.canDrag = !pauseDraggableUI.canDrag;
pauseButton.interactable = !pauseDraggableUI.canDrag; pauseButton.interactable = !pauseDraggableUI.canDrag;
}
} }
}
} }
File diff suppressed because it is too large. Load diff
@@ -3,124 +3,124 @@ using UnityEngine;
using UnityEngine.UI; using UnityEngine.UI;
public class CustomGamePlayerPauseMenu : MonoBehaviour { public class CustomGamePlayerPauseMenu : MonoBehaviour {
public static CustomGamePlayerPauseMenu Instance; public static CustomGamePlayerPauseMenu Instance;
[SerializeField] private Button backButton; [SerializeField] private Button backButton;
[SerializeField] private Button continueButton; [SerializeField] private Button continueButton;
[SerializeField] private Button editUiButton; [SerializeField] private Button editUiButton;
[SerializeField] private Button resetUiButton; [SerializeField] private Button resetUiButton;
[SerializeField] private AudioSource songLoop; [SerializeField] private AudioSource songLoop;
[SerializeField] private TMP_Text scoreText; [SerializeField] private TMP_Text scoreText;
[SerializeField] private TMP_Text boostText; [SerializeField] private TMP_Text boostText;
[SerializeField] private Button pauseButton; [SerializeField] private Button pauseButton;
[SerializeField] private Button restartButton; [SerializeField] private Button restartButton;
[SerializeField] private Button jumpButton; [SerializeField] private Button jumpButton;
[SerializeField] private Button rightButton; [SerializeField] private Button rightButton;
[SerializeField] private Button leftButton; [SerializeField] private Button leftButton;
internal bool editingUI = false; internal bool editingUI = false;
[SerializeField] private Toggle settingFullscreenToggle; [SerializeField] private Toggle settingFullscreenToggle;
[SerializeField] private Toggle settingVSyncToggle; [SerializeField] private Toggle settingVSyncToggle;
[SerializeField] private Toggle settingRandomMusicToggle; [SerializeField] private Toggle settingRandomMusicToggle;
[SerializeField] private Slider musicSlider; [SerializeField] private Slider musicSlider;
[SerializeField] private Slider sfxSlider; [SerializeField] private Slider sfxSlider;
[SerializeField] private TMP_Text musicSliderText; [SerializeField] private TMP_Text musicSliderText;
[SerializeField] private TMP_Text sfxSliderText; [SerializeField] private TMP_Text sfxSliderText;
void Awake() { void Awake() {
Instance = this; Instance = this;
continueButton.onClick.AddListener(CustomGamePlayer.Instance.DisablePause); continueButton.onClick.AddListener(CustomGamePlayer.Instance.DisablePause);
musicSlider.onValueChanged.AddListener(value => { musicSlider.onValueChanged.AddListener(value => {
BazookaManager.Instance.SetSettingMusicVolume(value); BazookaManager.Instance.SetSettingMusicVolume(value);
songLoop.volume = value; songLoop.volume = value;
}); });
sfxSlider.onValueChanged.AddListener(value => { sfxSlider.onValueChanged.AddListener(value => {
BazookaManager.Instance.SetSettingSFXVolume(value); BazookaManager.Instance.SetSettingSFXVolume(value);
}); });
editUiButton.onClick.AddListener(() => { editUiButton.onClick.AddListener(() => {
ToggleEditingUI(); ToggleEditingUI();
}); });
resetUiButton.onClick.AddListener(() => { resetUiButton.onClick.AddListener(() => {
scoreText.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(0f, -70f); scoreText.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(0f, -70f);
boostText.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(0f, -140f); boostText.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(0f, -140f);
PlayerPrefs.DeleteKey("DraggedUIScoreTextCustom"); PlayerPrefs.DeleteKey("DraggedUIScoreTextCustom");
PlayerPrefs.DeleteKey("DraggedUIBoostTextCustom"); PlayerPrefs.DeleteKey("DraggedUIBoostTextCustom");
if (Application.isMobilePlatform) { if (Application.isMobilePlatform) {
pauseButton.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(128f, -128f); pauseButton.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(128f, -128f);
restartButton.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(-128f, -128f); restartButton.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(-128f, -128f);
jumpButton.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(-128f, 288f); jumpButton.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(-128f, 288f);
rightButton.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(-128f, 128f); rightButton.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(-128f, 128f);
leftButton.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(128f, 128f); leftButton.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(128f, 128f);
PlayerPrefs.DeleteKey("DraggedUIPauseButton"); PlayerPrefs.DeleteKey("DraggedUIPauseButton");
PlayerPrefs.DeleteKey("DraggedUIRestartButton"); PlayerPrefs.DeleteKey("DraggedUIRestartButton");
PlayerPrefs.DeleteKey("DraggedUIJumpButton"); PlayerPrefs.DeleteKey("DraggedUIJumpButton");
PlayerPrefs.DeleteKey("DraggedUIRightButton"); PlayerPrefs.DeleteKey("DraggedUIRightButton");
PlayerPrefs.DeleteKey("DraggedUILeftButton"); PlayerPrefs.DeleteKey("DraggedUILeftButton");
} }
}); });
musicSlider.value = BazookaManager.Instance.GetSettingMusicVolume(); musicSlider.value = BazookaManager.Instance.GetSettingMusicVolume();
sfxSlider.value = BazookaManager.Instance.GetSettingSFXVolume(); sfxSlider.value = BazookaManager.Instance.GetSettingSFXVolume();
if (!Application.isMobilePlatform) { if (!Application.isMobilePlatform) {
settingFullscreenToggle.isOn = BazookaManager.Instance.GetSettingFullScreen() == true; settingFullscreenToggle.isOn = BazookaManager.Instance.GetSettingFullScreen() == true;
settingVSyncToggle.isOn = BazookaManager.Instance.GetSettingVsync() == true; settingVSyncToggle.isOn = BazookaManager.Instance.GetSettingVsync() == true;
settingRandomMusicToggle.isOn = BazookaManager.Instance.GetSettingRandomMusic() == true; settingRandomMusicToggle.isOn = BazookaManager.Instance.GetSettingRandomMusic() == true;
settingFullscreenToggle.onValueChanged.AddListener(value => { settingFullscreenToggle.onValueChanged.AddListener(value => {
BazookaManager.Instance.SetSettingFullScreen(value); BazookaManager.Instance.SetSettingFullScreen(value);
var width = Display.main.systemWidth; var width = Display.main.systemWidth;
var height = Display.main.systemHeight; var height = Display.main.systemHeight;
Screen.SetResolution(width, height, value); Screen.SetResolution(width, height, value);
}); });
settingVSyncToggle.onValueChanged.AddListener(value => { settingVSyncToggle.onValueChanged.AddListener(value => {
BazookaManager.Instance.SetSettingVsync(value); BazookaManager.Instance.SetSettingVsync(value);
QualitySettings.vSyncCount = value ? 1 : -1; QualitySettings.vSyncCount = value ? 1 : -1;
}); });
} else { } else {
settingFullscreenToggle.interactable = false; settingFullscreenToggle.interactable = false;
settingVSyncToggle.interactable = false; settingVSyncToggle.interactable = false;
settingRandomMusicToggle.isOn = BazookaManager.Instance.GetSettingRandomMusic() == true; settingRandomMusicToggle.isOn = BazookaManager.Instance.GetSettingRandomMusic() == true;
}
settingRandomMusicToggle.onValueChanged.AddListener(value => BazookaManager.Instance.SetSettingRandomMusic(value));
musicSlider.onValueChanged.AddListener(value => {
BazookaManager.Instance.SetSettingMusicVolume(value);
CustomGamePlayer.Instance.backgroundMusic.volume = value;
});
sfxSlider.onValueChanged.AddListener(value => BazookaManager.Instance.SetSettingSFXVolume(value));
} }
settingRandomMusicToggle.onValueChanged.AddListener(value => BazookaManager.Instance.SetSettingRandomMusic(value));
musicSlider.onValueChanged.AddListener(value => {
BazookaManager.Instance.SetSettingMusicVolume(value);
CustomGamePlayer.Instance.backgroundMusic.volume = value;
});
sfxSlider.onValueChanged.AddListener(value => BazookaManager.Instance.SetSettingSFXVolume(value));
}
public void ToggleEditingUI() { public void ToggleEditingUI() {
editingUI = !editingUI; editingUI = !editingUI;
musicSlider.gameObject.SetActive(!musicSlider.gameObject.activeSelf); musicSlider.gameObject.SetActive(!musicSlider.gameObject.activeSelf);
sfxSlider.gameObject.SetActive(!sfxSlider.gameObject.activeSelf); sfxSlider.gameObject.SetActive(!sfxSlider.gameObject.activeSelf);
musicSliderText.gameObject.SetActive(!musicSliderText.gameObject.activeSelf); musicSliderText.gameObject.SetActive(!musicSliderText.gameObject.activeSelf);
sfxSliderText.gameObject.SetActive(!sfxSliderText.gameObject.activeSelf); sfxSliderText.gameObject.SetActive(!sfxSliderText.gameObject.activeSelf);
settingFullscreenToggle.gameObject.SetActive(!settingFullscreenToggle.gameObject.activeSelf); settingFullscreenToggle.gameObject.SetActive(!settingFullscreenToggle.gameObject.activeSelf);
settingVSyncToggle.gameObject.SetActive(!settingVSyncToggle.gameObject.activeSelf); settingVSyncToggle.gameObject.SetActive(!settingVSyncToggle.gameObject.activeSelf);
settingRandomMusicToggle.gameObject.SetActive(!settingRandomMusicToggle.gameObject.activeSelf); settingRandomMusicToggle.gameObject.SetActive(!settingRandomMusicToggle.gameObject.activeSelf);
backButton.gameObject.SetActive(!backButton.gameObject.activeSelf); backButton.gameObject.SetActive(!backButton.gameObject.activeSelf);
continueButton.gameObject.SetActive(!continueButton.gameObject.activeSelf); continueButton.gameObject.SetActive(!continueButton.gameObject.activeSelf);
editUiButton.transform.GetChild(0).GetComponent<TMP_Text>().text = editUiButton.transform.GetChild(0).GetComponent<TMP_Text>().text == "Edit UI" ? "Done" : "Edit UI"; editUiButton.transform.GetChild(0).GetComponent<TMP_Text>().text = editUiButton.transform.GetChild(0).GetComponent<TMP_Text>().text == "Edit UI" ? "Done" : "Edit UI";
resetUiButton.gameObject.SetActive(!resetUiButton.gameObject.activeSelf); resetUiButton.gameObject.SetActive(!resetUiButton.gameObject.activeSelf);
scoreText.GetComponent<DraggableUI>().canDrag = !scoreText.GetComponent<DraggableUI>().canDrag; scoreText.GetComponent<DraggableUI>().canDrag = !scoreText.GetComponent<DraggableUI>().canDrag;
boostText.GetComponent<DraggableUI>().canDrag = !boostText.GetComponent<DraggableUI>().canDrag; boostText.GetComponent<DraggableUI>().canDrag = !boostText.GetComponent<DraggableUI>().canDrag;
if (Application.isMobilePlatform) { if (Application.isMobilePlatform) {
var pauseDraggableUI = pauseButton.GetComponent<DraggableUI>(); var pauseDraggableUI = pauseButton.GetComponent<DraggableUI>();
var restartDraggableUI = restartButton.GetComponent<DraggableUI>(); var restartDraggableUI = restartButton.GetComponent<DraggableUI>();
var jumpDraggableUI = jumpButton.GetComponent<DraggableUI>(); var jumpDraggableUI = jumpButton.GetComponent<DraggableUI>();
var rightDraggableUI = rightButton.GetComponent<DraggableUI>(); var rightDraggableUI = rightButton.GetComponent<DraggableUI>();
var leftDraggableUI = leftButton.GetComponent<DraggableUI>(); var leftDraggableUI = leftButton.GetComponent<DraggableUI>();
pauseButton.transform.parent.SetSiblingIndex(pauseDraggableUI.canDrag ? 0 : 2); pauseButton.transform.parent.SetSiblingIndex(pauseDraggableUI.canDrag ? 0 : 2);
pauseDraggableUI.canDrag = !pauseDraggableUI.canDrag; pauseDraggableUI.canDrag = !pauseDraggableUI.canDrag;
restartDraggableUI.canDrag = !restartDraggableUI.canDrag; restartDraggableUI.canDrag = !restartDraggableUI.canDrag;
jumpDraggableUI.canDrag = !jumpDraggableUI.canDrag; jumpDraggableUI.canDrag = !jumpDraggableUI.canDrag;
rightDraggableUI.canDrag = !rightDraggableUI.canDrag; rightDraggableUI.canDrag = !rightDraggableUI.canDrag;
leftDraggableUI.canDrag = !leftDraggableUI.canDrag; leftDraggableUI.canDrag = !leftDraggableUI.canDrag;
pauseButton.interactable = !pauseDraggableUI.canDrag; pauseButton.interactable = !pauseDraggableUI.canDrag;
restartButton.interactable = !restartDraggableUI.canDrag; restartButton.interactable = !restartDraggableUI.canDrag;
jumpButton.interactable = !jumpDraggableUI.canDrag; jumpButton.interactable = !jumpDraggableUI.canDrag;
rightButton.interactable = !rightDraggableUI.canDrag; rightButton.interactable = !rightDraggableUI.canDrag;
leftButton.interactable = !leftDraggableUI.canDrag; leftButton.interactable = !leftDraggableUI.canDrag;
jumpButton.transform.GetChild(0).GetComponent<TMP_Text>().color = !jumpDraggableUI.canDrag ? CustomGamePlayer.Instance.IsGrounded() ? Color.white : Color.red : Color.white; jumpButton.transform.GetChild(0).GetComponent<TMP_Text>().color = !jumpDraggableUI.canDrag ? CustomGamePlayer.Instance.IsGrounded() ? Color.white : Color.red : Color.white;
restartButton.interactable = CustomGamePlayer.Instance.score != 0; restartButton.interactable = CustomGamePlayer.Instance.score != 0;
}
} }
}
} }
@@ -1,18 +1,18 @@
using UnityEngine; using UnityEngine;
public class CustomGameTempData : MonoBehaviour { public class CustomGameTempData : MonoBehaviour {
public float normalBerryChance; public float normalBerryChance;
public float poisonBerryChance; public float poisonBerryChance;
public float slowBerryChance; public float slowBerryChance;
public float ultraBerryChance; public float ultraBerryChance;
public float speedyBerryChance; public float speedyBerryChance;
public float randomBerryChance; public float randomBerryChance;
public float antiBerryChance; public float antiBerryChance;
public float goldenBerryChance; public float goldenBerryChance;
public float nothingBerryChance; public float nothingBerryChance;
public bool useAI; public bool useAI;
void Awake() { void Awake() {
DontDestroyOnLoad(gameObject); DontDestroyOnLoad(gameObject);
} }
} }
+476 -475
View File
@@ -8,481 +8,482 @@ using UnityEngine.InputSystem;
using UnityEngine.UI; using UnityEngine.UI;
public class GamePlayer : MonoBehaviour { public class GamePlayer : MonoBehaviour {
public static GamePlayer Instance; public static GamePlayer Instance;
private readonly float spawnRate = 1f; private readonly float spawnRate = 1f;
private float nextSpawnTime; private float nextSpawnTime;
internal BigInteger score; internal BigInteger score;
private BigInteger attempts; private BigInteger attempts;
internal BigInteger highscore; internal BigInteger highscore;
internal BigInteger totalNormalBerries; internal BigInteger totalNormalBerries;
internal BigInteger totalPoisonBerries; internal BigInteger totalPoisonBerries;
internal BigInteger totalSlowBerries; internal BigInteger totalSlowBerries;
internal BigInteger totalUltraBerries; internal BigInteger totalUltraBerries;
internal BigInteger totalSpeedyBerries; internal BigInteger totalSpeedyBerries;
internal BigInteger totalCoinBerries; internal BigInteger totalCoinBerries;
internal BigInteger totalRandomBerries; internal BigInteger totalRandomBerries;
internal BigInteger totalAntiBerries; internal BigInteger totalAntiBerries;
internal BigInteger totalGoldenBerries; internal BigInteger totalGoldenBerries;
internal BigInteger totalAttempts; internal BigInteger totalAttempts;
private BigInteger totalCoins; private BigInteger totalCoins;
private float boostLeft; private float boostLeft;
private float slownessLeft; private float slownessLeft;
private float speedyLeft; private float speedyLeft;
private float antiLeft; private float antiLeft;
private float goldenLeft; private float goldenLeft;
[SerializeField] private TMP_Text scoreText; [SerializeField] private TMP_Text scoreText;
[SerializeField] private TMP_Text highScoreText; [SerializeField] private TMP_Text highScoreText;
[SerializeField] private TMP_Text boostText; [SerializeField] private TMP_Text boostText;
[SerializeField] private TMP_Text coinText; [SerializeField] private TMP_Text coinText;
[SerializeField] private GameObject pausePanel; [SerializeField] private GameObject pausePanel;
[SerializeField] internal AudioSource backgroundMusic; [SerializeField] internal AudioSource backgroundMusic;
[SerializeField] private GameObject berryParent; [SerializeField] private GameObject berryParent;
[SerializeField] private TMP_Text levelText; [SerializeField] private TMP_Text levelText;
[SerializeField] private GameObject mobileButtons; [SerializeField] private GameObject mobileButtons;
[SerializeField] private Button pauseButton; [SerializeField] private Button pauseButton;
[SerializeField] private Button restartButton; [SerializeField] private Button restartButton;
[SerializeField] private Button jumpButton; [SerializeField] private Button jumpButton;
[SerializeField] private Button rightButton; [SerializeField] private Button rightButton;
[SerializeField] private Button leftButton; [SerializeField] private Button leftButton;
[SerializeField] private Image bird; [SerializeField] private Image bird;
[SerializeField] private GameObject berryTemplate; [SerializeField] private GameObject berryTemplate;
[SerializeField] private Rigidbody2D rb; [SerializeField] private Rigidbody2D rb;
[SerializeField] private RectTransform canvasRect; [SerializeField] private RectTransform canvasRect;
[SerializeField] private BoxCollider2D groundCollider; [SerializeField] private BoxCollider2D groundCollider;
private UnityEngine.Vector2 velocityBeforePause = new(); private UnityEngine.Vector2 velocityBeforePause = new();
private readonly List<int> noGravityBerries = new(); private readonly List<int> noGravityBerries = new();
internal bool IsGrounded() => Physics2D.Distance(bird.GetComponent<CircleCollider2D>(), groundCollider).distance <= 0.1f; internal bool IsGrounded() => Physics2D.Distance(bird.GetComponent<CircleCollider2D>(), groundCollider).distance <= 0.1f;
void Awake() { void Awake() {
Instance = this; Instance = this;
}
void Start() {
var backgroundColor = BazookaManager.Instance.GetColorSettingBackground();
Camera.main.backgroundColor = new Color(
int.Parse(backgroundColor[0].ToString()) / 255f,
int.Parse(backgroundColor[1].ToString()) / 255f,
int.Parse(backgroundColor[2].ToString()) / 255f
);
Tools.LoadIcon(
bird,
bird.transform.GetChild(0).GetComponent<Image>(),
BazookaManager.Instance.GetBirdIcon(),
BazookaManager.Instance.GetBirdOverlay(),
BazookaManager.Instance.GetColorSettingIcon(),
BazookaManager.Instance.GetColorSettingOverlay(),
BazookaManager.Instance.GetCustomBirdIconData().Selected,
BazookaManager.Instance.GetAccountID() ?? 0
);
UnityEngine.InputSystem.EnhancedTouch.EnhancedTouchSupport.Enable();
highscore = BazookaManager.Instance.GetGameStoreHighScore();
totalNormalBerries = BazookaManager.Instance.GetGameStoreTotalNormalBerries();
totalPoisonBerries = BazookaManager.Instance.GetGameStoreTotalPoisonBerries();
totalSlowBerries = BazookaManager.Instance.GetGameStoreTotalSlowBerries();
totalUltraBerries = BazookaManager.Instance.GetGameStoreTotalUltraBerries();
totalSpeedyBerries = BazookaManager.Instance.GetGameStoreTotalSpeedyBerries();
totalCoinBerries = BazookaManager.Instance.GetGameStoreTotalCoinBerries();
totalRandomBerries = BazookaManager.Instance.GetGameStoreTotalRandomBerries();
totalAntiBerries = BazookaManager.Instance.GetGameStoreTotalAntiBerries();
totalGoldenBerries = BazookaManager.Instance.GetGameStoreTotalGoldenBerries();
totalAttempts = BazookaManager.Instance.GetGameStoreTotalAttepts();
totalCoins = BazookaManager.Instance.GetCustomBirdIconData().Balance;
Cursor.visible = false;
Cursor.lockState = CursorLockMode.Locked;
backgroundMusic.volume = BazookaManager.Instance.GetSettingMusicVolume();
if (Application.isMobilePlatform) mobileButtons.SetActive(true);
UpdateStats(0, 1);
}
void MoveBird() {
float speedModifier = 1f;
bool doMoveRight = false;
bool doMoveLeft = false;
bool doJump = false;
bool doRestart = false;
bool doBack = false;
if (boostLeft > 0f || speedyLeft > 0f) speedModifier = 1.39f;
else if (slownessLeft > 0f) speedModifier = 0.56f;
bool controllerLeft = Gamepad.current != null && (Gamepad.current.leftStick.left.isPressed || Gamepad.current.dpad.left.isPressed || Gamepad.current.rightStick.left.isPressed);
bool controllerRight = Gamepad.current != null && (Gamepad.current.leftStick.right.isPressed || Gamepad.current.dpad.right.isPressed || Gamepad.current.rightStick.right.isPressed);
bool controllerJump = Gamepad.current != null && (Gamepad.current.leftStick.up.isPressed || Gamepad.current.leftStick.down.isPressed || Gamepad.current.dpad.up.isPressed || Gamepad.current.dpad.down.isPressed || Gamepad.current.rightStick.up.isPressed || Gamepad.current.rightStick.down.isPressed);
if (!Application.isMobilePlatform) {
if (controllerLeft || Keyboard.current.leftArrowKey.isPressed || Keyboard.current.aKey.isPressed || Keyboard.current.jKey.isPressed) {
doMoveLeft = true;
}
if (controllerRight || Keyboard.current.rightArrowKey.isPressed || Keyboard.current.dKey.isPressed || Keyboard.current.lKey.isPressed) {
doMoveRight = true;
}
if (controllerJump || Keyboard.current.spaceKey.isPressed || Keyboard.current.upArrowKey.isPressed || Keyboard.current.wKey.isPressed || Keyboard.current.downArrowKey.isPressed || Keyboard.current.sKey.isPressed || Keyboard.current.kKey.isPressed || Keyboard.current.iKey.isPressed || Mouse.current.leftButton.isPressed || (Gamepad.current != null && Gamepad.current.buttonSouth.isPressed)) {
doJump = true;
}
if (Keyboard.current.rKey.isPressed) {
doRestart = true;
}
} else {
var touches = UnityEngine.InputSystem.EnhancedTouch.Touch.activeTouches;
for (int i = 0; i < touches.Count; i++) {
var pos = touches[i].screenPosition;
UnityEngine.Vector3 clickPosition = Camera.main.ScreenToWorldPoint(new UnityEngine.Vector3(pos.x, pos.y, 0f));
clickPosition.z = 0f;
if (leftButton.GetComponent<HoldableButton>().isPressed) doMoveLeft = true;
if (rightButton.GetComponent<HoldableButton>().isPressed) doMoveRight = true;
if (jumpButton.GetComponent<HoldableButton>().isPressed) doJump = true;
if (restartButton.GetComponent<HoldableButton>().isPressed) doRestart = true;
if (pauseButton.GetComponent<HoldableButton>().isPressed) doBack = true;
}
} }
if (doMoveLeft && !doMoveRight) {
void Start() { bird.transform.position += new UnityEngine.Vector3(-(2.4f * (speedModifier * canvasRect.lossyScale.x)), 0f, 0f);
var backgroundColor = BazookaManager.Instance.GetColorSettingBackground(); ClampPosition(bird);
Camera.main.backgroundColor = new Color( bird.transform.localScale = new UnityEngine.Vector3(1f, 1f, 1f);
int.Parse(backgroundColor[0].ToString()) / 255f,
int.Parse(backgroundColor[1].ToString()) / 255f,
int.Parse(backgroundColor[2].ToString()) / 255f
);
Tools.LoadIcon(
bird,
bird.transform.GetChild(0).GetComponent<Image>(),
BazookaManager.Instance.GetBirdIcon(),
BazookaManager.Instance.GetBirdOverlay(),
BazookaManager.Instance.GetColorSettingIcon(),
BazookaManager.Instance.GetColorSettingOverlay(),
BazookaManager.Instance.GetCustomBirdIconData().Selected,
BazookaManager.Instance.GetAccountID() ?? 0
);
UnityEngine.InputSystem.EnhancedTouch.EnhancedTouchSupport.Enable();
highscore = BazookaManager.Instance.GetGameStoreHighScore();
totalNormalBerries = BazookaManager.Instance.GetGameStoreTotalNormalBerries();
totalPoisonBerries = BazookaManager.Instance.GetGameStoreTotalPoisonBerries();
totalSlowBerries = BazookaManager.Instance.GetGameStoreTotalSlowBerries();
totalUltraBerries = BazookaManager.Instance.GetGameStoreTotalUltraBerries();
totalSpeedyBerries = BazookaManager.Instance.GetGameStoreTotalSpeedyBerries();
totalCoinBerries = BazookaManager.Instance.GetGameStoreTotalCoinBerries();
totalRandomBerries = BazookaManager.Instance.GetGameStoreTotalRandomBerries();
totalAntiBerries = BazookaManager.Instance.GetGameStoreTotalAntiBerries();
totalGoldenBerries = BazookaManager.Instance.GetGameStoreTotalGoldenBerries();
totalAttempts = BazookaManager.Instance.GetGameStoreTotalAttepts();
totalCoins = BazookaManager.Instance.GetCustomBirdIconData().Balance;
Cursor.visible = false;
Cursor.lockState = CursorLockMode.Locked;
backgroundMusic.volume = BazookaManager.Instance.GetSettingMusicVolume();
if (Application.isMobilePlatform) mobileButtons.SetActive(true);
UpdateStats(0, 1);
} }
if (doMoveRight && !doMoveLeft) {
bird.transform.position += new UnityEngine.Vector3(2.4f * (speedModifier * canvasRect.lossyScale.x), 0f, 0f);
ClampPosition(bird);
bird.transform.localScale = new UnityEngine.Vector3(-1f, 1f, 1f);
}
if (doMoveLeft || doMoveRight) groundCollider.transform.position = new(bird.transform.position.x, groundCollider.transform.position.y);
if (doJump && IsGrounded()) {
AudioSource.PlayClipAtPoint(Resources.Load<AudioClip>("Sounds/Jump"), Camera.main.transform.position, 0.75f * BazookaManager.Instance.GetSettingSFXVolume());
if (boostLeft > 0f || speedyLeft > 0f) rb.linearVelocity = new UnityEngine.Vector2(rb.linearVelocity.x, 480f * canvasRect.lossyScale.y);
else if (slownessLeft > 0f) rb.linearVelocity = new UnityEngine.Vector2(rb.linearVelocity.x, 300f * canvasRect.lossyScale.y);
else rb.linearVelocity = new UnityEngine.Vector2(rb.linearVelocity.x, 380f * canvasRect.lossyScale.y);
}
if (doBack) {
TogglePause();
}
if (doRestart) {
if (score != 0) Respawn();
}
if (antiLeft > 0f || goldenLeft > 0f) {
List<string> berryTags = new() { "NormalBerry", "SlowBerry", "UltraBerry", "SpeedyBerry", "CoinBerry", "RandomBerry", "AntiBerry", "GoldenBerry" };
if (antiLeft > 0f) berryTags.Add("PoisonBerry");
void MoveBird() { float scale = (canvasRect.lossyScale.x + canvasRect.lossyScale.y) / 2f;
float speedModifier = 1f; float radius = antiLeft > 0f ? 250f * scale : 325f * scale;
bool doMoveRight = false; float speed = antiLeft > 0f ? 1.25f * scale : -1.75f * scale;
bool doMoveLeft = false;
bool doJump = false; foreach (string tag in berryTags) {
bool doRestart = false; foreach (var berry in GameObject.FindGameObjectsWithTag(tag)) {
bool doBack = false; RectTransform berryRect = berry.GetComponent<RectTransform>();
if (boostLeft > 0f || speedyLeft > 0f) speedModifier = 1.39f; UnityEngine.Vector3 dir = berryRect.position - bird.GetComponent<RectTransform>().position;
else if (slownessLeft > 0f) speedModifier = 0.56f;
bool controllerLeft = Gamepad.current != null && (Gamepad.current.leftStick.left.isPressed || Gamepad.current.dpad.left.isPressed || Gamepad.current.rightStick.left.isPressed); if (dir.magnitude < radius) {
bool controllerRight = Gamepad.current != null && (Gamepad.current.leftStick.right.isPressed || Gamepad.current.dpad.right.isPressed || Gamepad.current.rightStick.right.isPressed); berryRect.position += speed * dir.normalized;
bool controllerJump = Gamepad.current != null && (Gamepad.current.leftStick.up.isPressed || Gamepad.current.leftStick.down.isPressed || Gamepad.current.dpad.up.isPressed || Gamepad.current.dpad.down.isPressed || Gamepad.current.rightStick.up.isPressed || Gamepad.current.rightStick.down.isPressed); ClampPosition(berry.GetComponent<Image>());
if (!Application.isMobilePlatform) { noGravityBerries.Add(berry.GetInstanceID());
if (controllerLeft || Keyboard.current.leftArrowKey.isPressed || Keyboard.current.aKey.isPressed || Keyboard.current.jKey.isPressed) { } else noGravityBerries.Remove(berry.GetInstanceID());
doMoveLeft = true;
}
if (controllerRight || Keyboard.current.rightArrowKey.isPressed || Keyboard.current.dKey.isPressed || Keyboard.current.lKey.isPressed) {
doMoveRight = true;
}
if (controllerJump || Keyboard.current.spaceKey.isPressed || Keyboard.current.upArrowKey.isPressed || Keyboard.current.wKey.isPressed || Keyboard.current.downArrowKey.isPressed || Keyboard.current.sKey.isPressed || Keyboard.current.kKey.isPressed || Keyboard.current.iKey.isPressed || Mouse.current.leftButton.isPressed || (Gamepad.current != null && Gamepad.current.buttonSouth.isPressed)) {
doJump = true;
}
if (Keyboard.current.rKey.isPressed) {
doRestart = true;
}
} else {
var touches = UnityEngine.InputSystem.EnhancedTouch.Touch.activeTouches;
for (int i = 0; i < touches.Count; i++) {
var pos = touches[i].screenPosition;
UnityEngine.Vector3 clickPosition = Camera.main.ScreenToWorldPoint(new UnityEngine.Vector3(pos.x, pos.y, 0f));
clickPosition.z = 0f;
if (leftButton.GetComponent<HoldableButton>().isPressed) doMoveLeft = true;
if (rightButton.GetComponent<HoldableButton>().isPressed) doMoveRight = true;
if (jumpButton.GetComponent<HoldableButton>().isPressed) doJump = true;
if (restartButton.GetComponent<HoldableButton>().isPressed) doRestart = true;
if (pauseButton.GetComponent<HoldableButton>().isPressed) doBack = true;
}
} }
if (doMoveLeft && !doMoveRight) { }
bird.transform.position += new UnityEngine.Vector3(-(2.4f * (speedModifier * canvasRect.lossyScale.x)), 0f, 0f); } else if (noGravityBerries.Count() != 0) noGravityBerries.Clear();
ClampPosition(bird); }
bird.transform.localScale = new UnityEngine.Vector3(1f, 1f, 1f);
void ClampPosition(Image image) {
RectTransform birdRect = image.GetComponent<RectTransform>();
float halfW = canvasRect.rect.width / 2f;
float halfBirdW = birdRect.rect.width / 2f;
UnityEngine.Vector2 pos = birdRect.anchoredPosition;
pos.x = Mathf.Clamp(pos.x, -halfW + halfBirdW, halfW - halfBirdW);
birdRect.anchoredPosition = pos;
}
void FixedUpdate() {
SpawnBerries();
if (!pausePanel.activeSelf) {
MoveBird();
if (boostLeft > 0f) {
boostLeft -= Time.deltaTime;
boostText.text = "Boost expires in " + string.Format("{0:0.0}", boostLeft) + "s";
} else if (slownessLeft > 0f) {
slownessLeft -= Time.deltaTime;
boostText.text = "Slowness expires in " + string.Format("{0:0.0}", slownessLeft) + "s";
} else if (speedyLeft > 0f) {
speedyLeft -= Time.deltaTime;
boostText.text = "Speed expires in " + string.Format("{0:0.0}", speedyLeft) + "s";
} else if (antiLeft > 0f) {
antiLeft -= Time.deltaTime;
boostText.text = "Berry repellent expires in " + string.Format("{0:0.0}", antiLeft) + "s";
} else if (goldenLeft > 0f) {
goldenLeft -= Time.deltaTime;
boostText.text = "Berry magnet expires in " + string.Format("{0:0.0}", goldenLeft) + "s";
} else {
boostText.text = "";
}
}
}
void SpawnBerries() {
if (Time.time < nextSpawnTime) {
return;
}
if (speedyLeft > 0) {
nextSpawnTime = Time.time + 1f / (spawnRate * 1.875f);
} else {
nextSpawnTime = Time.time + 1f / spawnRate;
}
float spawnProbability = UnityEngine.Random.value;
if (!pausePanel.activeSelf) {
Image newBerry = Instantiate(berryTemplate).GetComponent<Image>();
newBerry.transform.SetParent(berryParent.transform, false);
if (spawnProbability <= 0.375f) {
newBerry.sprite = Resources.Load<Sprite>("Berries/Berry");
newBerry.tag = "NormalBerry";
} else if (spawnProbability <= 0.55f) {
newBerry.sprite = Resources.Load<Sprite>("Berries/PoisonBerry");
newBerry.tag = "PoisonBerry";
} else if (spawnProbability <= 0.60f) {
newBerry.sprite = Resources.Load<Sprite>("Berries/SlowBerry");
newBerry.tag = "SlowBerry";
} else if (spawnProbability <= 0.70f) {
newBerry.sprite = Resources.Load<Sprite>("Berries/UltraBerry");
newBerry.tag = "UltraBerry";
} else if (spawnProbability <= 0.80f) {
newBerry.sprite = Resources.Load<Sprite>("Berries/SpeedyBerry");
newBerry.tag = "SpeedyBerry";
} else if (spawnProbability <= 0.85f) {
newBerry.sprite = Resources.Load<Sprite>("Berries/CoinBerry");
newBerry.tag = "CoinBerry";
} else if (spawnProbability <= 0.90f) {
newBerry.sprite = Resources.Load<Sprite>("Berries/BerryNoColor");
newBerry.tag = "RandomBerry";
RainbowImage randomBerryRainbowImage = newBerry.gameObject.AddComponent<RainbowImage>();
randomBerryRainbowImage.frequency = 5f;
} else if (spawnProbability <= 0.95f) {
newBerry.sprite = Resources.Load<Sprite>("Berries/AntiBerry");
newBerry.tag = "AntiBerry";
} else {
newBerry.sprite = Resources.Load<Sprite>("Berries/GoldenBerry");
newBerry.tag = "GoldenBerry";
}
float spawnPositionX = UnityEngine.Random.Range(-(canvasRect.rect.width / 2 - newBerry.rectTransform.rect.width), canvasRect.rect.width / 2 - newBerry.rectTransform.rect.width);
newBerry.transform.localPosition = new UnityEngine.Vector3(spawnPositionX, (canvasRect.rect.height / 2) + newBerry.rectTransform.rect.height, 0f);
newBerry.gameObject.SetActive(true);
}
}
void Update() {
if (!pausePanel.activeSelf && rb.gravityScale != 100f * canvasRect.lossyScale.y) rb.gravityScale = 100f * canvasRect.lossyScale.y;
foreach (AudioSource audio in FindObjectsByType<AudioSource>(FindObjectsSortMode.None)) audio.pitch = speedyLeft > 0f ? 1.3f : 1f;
var allBerries = Tools.GetAllBerries(berryParent.transform);
if (!pausePanel.activeSelf)
foreach (GameObject berry in allBerries) {
if (berry.GetComponent<RectTransform>().anchoredPosition.y < -(canvasRect.rect.height / 2) - berry.GetComponent<RectTransform>().rect.height) {
noGravityBerries.Remove(berry.GetInstanceID());
Destroy(berry);
} else if (Physics2D.Distance(bird.GetComponent<CircleCollider2D>(), berry.GetComponent<CircleCollider2D>()).distance <= 0.1f) {
switch (berry.tag) {
case "NormalBerry":
DoNormalBerry(berry, true);
break;
case "PoisonBerry":
DoPoisonBerry();
break;
case "SlowBerry":
DoSlowBerry(berry, true);
break;
case "UltraBerry":
DoUltraBerry(berry, true);
break;
case "SpeedyBerry":
DoSpeedyBerry(berry, true);
break;
case "CoinBerry":
DoCoinBerry(berry, true);
break;
case "RandomBerry":
DoRandomBerry(berry);
break;
case "AntiBerry":
DoAntiBerry(berry, true);
break;
case "GoldenBerry":
DoGoldenBerry(berry, true);
break;
}
} }
if (doMoveRight && !doMoveLeft) { if (berry != null) berry.GetComponent<Rigidbody2D>().linearVelocity = noGravityBerries.Contains(berry.GetInstanceID()) ? UnityEngine.Vector2.zero : new UnityEngine.Vector2(0f, speedyLeft == 0.0f ? (-300f * canvasRect.lossyScale.y) : (-550f * canvasRect.lossyScale.y));
bird.transform.position += new UnityEngine.Vector3(2.4f * (speedModifier * canvasRect.lossyScale.x), 0f, 0f); }
ClampPosition(bird); else foreach (GameObject berry in allBerries) berry.GetComponent<Rigidbody2D>().linearVelocity = UnityEngine.Vector2.zero;
bird.transform.localScale = new UnityEngine.Vector3(-1f, 1f, 1f); if ((Application.platform == RuntimePlatform.Android && Keyboard.current.escapeKey.wasPressedThisFrame) || !Application.isMobilePlatform && (Keyboard.current.escapeKey.wasPressedThisFrame || (Gamepad.current != null && (Gamepad.current.startButton.wasPressedThisFrame || Gamepad.current.buttonEast.wasPressedThisFrame)))) TogglePause();
} }
if (doMoveLeft || doMoveRight) groundCollider.transform.position = new(bird.transform.position.x, groundCollider.transform.position.y);
if (doJump && IsGrounded()) {
AudioSource.PlayClipAtPoint(Resources.Load<AudioClip>("Sounds/Jump"), Camera.main.transform.position, 0.75f * BazookaManager.Instance.GetSettingSFXVolume());
if (boostLeft > 0f || speedyLeft > 0f) rb.linearVelocity = new UnityEngine.Vector2(rb.linearVelocity.x, 480f * canvasRect.lossyScale.y);
else if (slownessLeft > 0f) rb.linearVelocity = new UnityEngine.Vector2(rb.linearVelocity.x, 300f * canvasRect.lossyScale.y);
else rb.linearVelocity = new UnityEngine.Vector2(rb.linearVelocity.x, 380f * canvasRect.lossyScale.y);
}
if (doBack) {
TogglePause();
}
if (doRestart) {
if (score != 0) Respawn();
}
if (antiLeft > 0f || goldenLeft > 0f) {
List<string> berryTags = new() { "NormalBerry", "SlowBerry", "UltraBerry", "SpeedyBerry", "CoinBerry", "RandomBerry", "AntiBerry", "GoldenBerry" };
if (antiLeft > 0f) berryTags.Add("PoisonBerry");
float scale = (canvasRect.lossyScale.x + canvasRect.lossyScale.y) / 2f; void Respawn() {
float radius = antiLeft > 0f ? 250f * scale : 325f * scale; bird.GetComponent<RectTransform>().anchoredPosition = new UnityEngine.Vector3(0f, 64f, 0f);
float speed = antiLeft > 0f ? 1.25f * scale : -1.75f * scale; groundCollider.GetComponent<RectTransform>().anchoredPosition = new(0f, -2.5f);
bird.transform.localScale = new UnityEngine.Vector3(1f, 1f, 1f);
rb.linearVelocity = new();
score = 0;
boostLeft = 0f;
slownessLeft = 0f;
speedyLeft = 0f;
antiLeft = 0f;
UpdateStats(0, 1);
foreach (string tag in berryTags) { foreach (GameObject berry in Tools.GetAllBerries(berryParent.transform)) Destroy(berry);
foreach (var berry in GameObject.FindGameObjectsWithTag(tag)) { }
RectTransform berryRect = berry.GetComponent<RectTransform>();
UnityEngine.Vector3 dir = berryRect.position - bird.GetComponent<RectTransform>().position;
if (dir.magnitude < radius) { void UpdateStats(BigInteger scoreAddAmount, BigInteger attemptAddAmount) {
berryRect.position += speed * dir.normalized; var levelBefore = Tools.GetLevelInfo().level;
ClampPosition(berry.GetComponent<Image>()); var prefix = "";
noGravityBerries.Add(berry.GetInstanceID()); var suffix = "";
} else noGravityBerries.Remove(berry.GetInstanceID()); score += scoreAddAmount;
} totalAttempts += attemptAddAmount;
} attempts += attemptAddAmount;
} else if (noGravityBerries.Count() != 0) noGravityBerries.Clear(); if (score >= highscore) {
highscore = score;
prefix = "<color=#7FFFD4>";
suffix = "</color>";
} }
BazookaManager.Instance.SetGameStoreHighScore(highscore);
BazookaManager.Instance.SetGameStoreTotalNormalBerries(totalNormalBerries);
BazookaManager.Instance.SetGameStoreTotalPoisonBerries(totalPoisonBerries);
BazookaManager.Instance.SetGameStoreTotalSlowBerries(totalSlowBerries);
BazookaManager.Instance.SetGameStoreTotalUltraBerries(totalUltraBerries);
BazookaManager.Instance.SetGameStoreTotalSpeedyBerries(totalSpeedyBerries);
BazookaManager.Instance.SetGameStoreTotalCoinBerries(totalCoinBerries);
BazookaManager.Instance.SetGameStoreTotalRandomBerries(totalRandomBerries);
BazookaManager.Instance.SetGameStoreTotalAntiBerries(totalAntiBerries);
BazookaManager.Instance.SetGameStoreTotalGoldenBerries(totalGoldenBerries);
BazookaManager.Instance.SetGameStoreTotalAttepts(totalAttempts);
var customBirdIconData = BazookaManager.Instance.GetCustomBirdIconData();
customBirdIconData.Balance = totalCoins;
BazookaManager.Instance.SetCustomBirdIconData(customBirdIconData);
scoreText.text = $"Score: {Tools.FormatWithCommas(score)} \\u2022 Attempts: {Tools.FormatWithCommas(attempts)}";
highScoreText.text = prefix + $"High Score: {Tools.FormatWithCommas(highscore) + suffix} \\u2022 Total Attempts: {Tools.FormatWithCommas(totalAttempts)}";
coinText.text = $"Coins: {Tools.FormatWithCommas(totalCoins)}";
if (Application.isMobilePlatform) restartButton.interactable = score != 0;
if (DiscordRPCHandler.Instance != null)
DiscordRPCHandler.Instance.UpdateRPC("Playing in normal mode", $"Score: {Tools.FormatWithCommas(score)} | High Score: {Tools.FormatWithCommas(highscore)}");
var (_, level, currentXpInLevel, totalXpForLevel, percentDone) = Tools.GetLevelInfo();
levelText.text = $"Level: {Tools.FormatWithCommas(level.ToString())}" + (Application.isMobilePlatform ? " \\u2022 " : "\n") + $"XP: {Tools.FormatWithCommas(currentXpInLevel.ToString())}/{Tools.FormatWithCommas(totalXpForLevel.ToString())} ({Math.Floor(percentDone)}%)";
if (level != levelBefore) AudioSource.PlayClipAtPoint(Resources.Load<AudioClip>("Sounds/Levelup"), Camera.main.transform.position, 1f * BazookaManager.Instance.GetSettingSFXVolume());
}
void ClampPosition(Image image) { internal void TogglePause() {
RectTransform birdRect = image.GetComponent<RectTransform>(); if (pausePanel.activeSelf) DisablePause();
float halfW = canvasRect.rect.width / 2f; else EnablePause();
float halfBirdW = birdRect.rect.width / 2f; }
UnityEngine.Vector2 pos = birdRect.anchoredPosition; internal void EnablePause() {
pos.x = Mathf.Clamp(pos.x, -halfW + halfBirdW, halfW - halfBirdW); velocityBeforePause = rb.linearVelocity;
birdRect.anchoredPosition = pos; rb.linearVelocity = new();
rb.gravityScale = 0f;
Cursor.visible = true;
Cursor.lockState = CursorLockMode.None;
backgroundMusic.GetComponent<GameMusicHandler>().PauseMusic();
pausePanel.SetActive(true);
}
internal void DisablePause() {
rb.gravityScale = 100f * canvasRect.lossyScale.y;
rb.linearVelocity = velocityBeforePause;
velocityBeforePause = new();
if (GamePlayerPauseMenu.Instance.statsMenu.activeSelf) {
GamePlayerPauseMenu.Instance.statsMenuExitButton.onClick.Invoke();
return;
} }
if (GamePlayerPauseMenu.Instance.editingUI == true) {
void FixedUpdate() { GamePlayerPauseMenu.Instance.ToggleEditingUI();
SpawnBerries(); return;
if (!pausePanel.activeSelf) {
MoveBird();
if (boostLeft > 0f) {
boostLeft -= Time.deltaTime;
boostText.text = "Boost expires in " + string.Format("{0:0.0}", boostLeft) + "s";
} else if (slownessLeft > 0f) {
slownessLeft -= Time.deltaTime;
boostText.text = "Slowness expires in " + string.Format("{0:0.0}", slownessLeft) + "s";
} else if (speedyLeft > 0f) {
speedyLeft -= Time.deltaTime;
boostText.text = "Speed expires in " + string.Format("{0:0.0}", speedyLeft) + "s";
} else if (antiLeft > 0f) {
antiLeft -= Time.deltaTime;
boostText.text = "Berry repellent expires in " + string.Format("{0:0.0}", antiLeft) + "s";
} else if (goldenLeft > 0f) {
goldenLeft -= Time.deltaTime;
boostText.text = "Berry magnet expires in " + string.Format("{0:0.0}", goldenLeft) + "s";
} else {
boostText.text = "";
}
}
} }
Cursor.visible = false;
Cursor.lockState = CursorLockMode.Locked;
backgroundMusic.GetComponent<GameMusicHandler>().ResumeMusic();
pausePanel.SetActive(false);
}
void SpawnBerries() { void OnApplicationPause(bool pause) {
if (Time.time < nextSpawnTime) { if (pause) EnablePause();
return; }
}
if (speedyLeft > 0) {
nextSpawnTime = Time.time + 1f / (spawnRate * 1.875f);
} else {
nextSpawnTime = Time.time + 1f / spawnRate;
}
float spawnProbability = UnityEngine.Random.value;
if (!pausePanel.activeSelf) {
Image newBerry = Instantiate(berryTemplate).GetComponent<Image>();
newBerry.transform.SetParent(berryParent.transform, false);
if (spawnProbability <= 0.375f) { void OnApplicationQuit() {
newBerry.sprite = Resources.Load<Sprite>("Berries/Berry"); Cursor.visible = true;
newBerry.tag = "NormalBerry"; Cursor.lockState = CursorLockMode.None;
} else if (spawnProbability <= 0.55f) { }
newBerry.sprite = Resources.Load<Sprite>("Berries/PoisonBerry");
newBerry.tag = "PoisonBerry";
} else if (spawnProbability <= 0.60f) {
newBerry.sprite = Resources.Load<Sprite>("Berries/SlowBerry");
newBerry.tag = "SlowBerry";
} else if (spawnProbability <= 0.70f) {
newBerry.sprite = Resources.Load<Sprite>("Berries/UltraBerry");
newBerry.tag = "UltraBerry";
} else if (spawnProbability <= 0.80f) {
newBerry.sprite = Resources.Load<Sprite>("Berries/SpeedyBerry");
newBerry.tag = "SpeedyBerry";
} else if (spawnProbability <= 0.85f) {
newBerry.sprite = Resources.Load<Sprite>("Berries/CoinBerry");
newBerry.tag = "CoinBerry";
} else if (spawnProbability <= 0.90f) {
newBerry.sprite = Resources.Load<Sprite>("Berries/BerryNoColor");
newBerry.tag = "RandomBerry";
RainbowImage randomBerryRainbowImage = newBerry.gameObject.AddComponent<RainbowImage>();
randomBerryRainbowImage.frequency = 5f;
} else if (spawnProbability <= 0.95f) {
newBerry.sprite = Resources.Load<Sprite>("Berries/AntiBerry");
newBerry.tag = "AntiBerry";
} else {
newBerry.sprite = Resources.Load<Sprite>("Berries/GoldenBerry");
newBerry.tag = "GoldenBerry";
}
float spawnPositionX = UnityEngine.Random.Range(-(canvasRect.rect.width / 2 - newBerry.rectTransform.rect.width), canvasRect.rect.width / 2 - newBerry.rectTransform.rect.width); void DoNormalBerry(GameObject berry, bool increment) {
newBerry.transform.localPosition = new UnityEngine.Vector3(spawnPositionX, (canvasRect.rect.height / 2) + newBerry.rectTransform.rect.height, 0f); if (increment) totalNormalBerries++;
newBerry.gameObject.SetActive(true); AudioSource.PlayClipAtPoint(Resources.Load<AudioClip>("Sounds/Eat"), Camera.main.transform.position, 1.2f * BazookaManager.Instance.GetSettingSFXVolume());
} noGravityBerries.Remove(berry.GetInstanceID());
Destroy(berry);
UpdateStats(1, 0);
}
void DoPoisonBerry() {
totalPoisonBerries++;
AudioSource.PlayClipAtPoint(Resources.Load<AudioClip>("Sounds/Death"), Camera.main.transform.position, 1.2f * BazookaManager.Instance.GetSettingSFXVolume());
Respawn();
UpdateStats(0, 0);
}
void DoSlowBerry(GameObject berry, bool increment) {
if (increment) totalSlowBerries++;
AudioSource.PlayClipAtPoint(Resources.Load<AudioClip>("Sounds/Downgrade"), Camera.main.transform.position, 0.35f * BazookaManager.Instance.GetSettingSFXVolume());
noGravityBerries.Remove(berry.GetInstanceID());
Destroy(berry);
boostLeft = 0f;
slownessLeft = 10f;
speedyLeft = 0f;
antiLeft = 0f;
goldenLeft = 0f;
if (score > 0) {
UpdateStats(-1, 0);
} }
}
void Update() { void DoUltraBerry(GameObject berry, bool increment) {
if (!pausePanel.activeSelf && rb.gravityScale != 100f * canvasRect.lossyScale.y) rb.gravityScale = 100f * canvasRect.lossyScale.y; if (increment) totalUltraBerries++;
foreach (AudioSource audio in FindObjectsByType<AudioSource>(FindObjectsSortMode.None)) audio.pitch = speedyLeft > 0f ? 1.3f : 1f; AudioSource.PlayClipAtPoint(Resources.Load<AudioClip>("Sounds/Powerup"), Camera.main.transform.position, 0.35f * BazookaManager.Instance.GetSettingSFXVolume());
noGravityBerries.Remove(berry.GetInstanceID());
var allBerries = Tools.GetAllBerries(berryParent.transform); Destroy(berry);
speedyLeft = 0f;
if (!pausePanel.activeSelf) foreach (GameObject berry in allBerries) { antiLeft = 0f;
if (berry.GetComponent<RectTransform>().anchoredPosition.y < -(canvasRect.rect.height / 2) - berry.GetComponent<RectTransform>().rect.height) { goldenLeft = 0f;
noGravityBerries.Remove(berry.GetInstanceID()); if (slownessLeft > 0f) {
Destroy(berry); slownessLeft = 0f;
} else if (Physics2D.Distance(bird.GetComponent<CircleCollider2D>(), berry.GetComponent<CircleCollider2D>()).distance <= 0.1f) { UpdateStats(1, 0);
switch (berry.tag) { } else {
case "NormalBerry": boostLeft += 10f;
DoNormalBerry(berry, true); UpdateStats(5, 0);
break;
case "PoisonBerry":
DoPoisonBerry();
break;
case "SlowBerry":
DoSlowBerry(berry, true);
break;
case "UltraBerry":
DoUltraBerry(berry, true);
break;
case "SpeedyBerry":
DoSpeedyBerry(berry, true);
break;
case "CoinBerry":
DoCoinBerry(berry, true);
break;
case "RandomBerry":
DoRandomBerry(berry);
break;
case "AntiBerry":
DoAntiBerry(berry, true);
break;
case "GoldenBerry":
DoGoldenBerry(berry, true);
break;
}
}
if (berry != null) berry.GetComponent<Rigidbody2D>().linearVelocity = noGravityBerries.Contains(berry.GetInstanceID()) ? UnityEngine.Vector2.zero : new UnityEngine.Vector2(0f, speedyLeft == 0.0f ? (-300f * canvasRect.lossyScale.y) : (-550f * canvasRect.lossyScale.y));
}
else foreach (GameObject berry in allBerries) berry.GetComponent<Rigidbody2D>().linearVelocity = UnityEngine.Vector2.zero;
if ((Application.platform == RuntimePlatform.Android && Keyboard.current.escapeKey.wasPressedThisFrame) || !Application.isMobilePlatform && (Keyboard.current.escapeKey.wasPressedThisFrame || (Gamepad.current != null && (Gamepad.current.startButton.wasPressedThisFrame || Gamepad.current.buttonEast.wasPressedThisFrame)))) TogglePause();
} }
}
void Respawn() { void DoSpeedyBerry(GameObject berry, bool increment) {
bird.GetComponent<RectTransform>().anchoredPosition = new UnityEngine.Vector3(0f, 64f, 0f); if (increment) totalSpeedyBerries++;
groundCollider.GetComponent<RectTransform>().anchoredPosition = new(0f, -2.5f); AudioSource.PlayClipAtPoint(Resources.Load<AudioClip>("Sounds/SpeedyPowerup"), Camera.main.transform.position, 0.35f * BazookaManager.Instance.GetSettingSFXVolume());
bird.transform.localScale = new UnityEngine.Vector3(1f, 1f, 1f); noGravityBerries.Remove(berry.GetInstanceID());
rb.linearVelocity = new(); Destroy(berry);
score = 0; boostLeft = 0f;
boostLeft = 0f; slownessLeft = 0f;
slownessLeft = 0f; speedyLeft = 10f;
speedyLeft = 0f; antiLeft = 0f;
antiLeft = 0f; goldenLeft = 0f;
UpdateStats(0, 1); UpdateStats(10, 0);
}
foreach (GameObject berry in Tools.GetAllBerries(berryParent.transform)) Destroy(berry); void DoCoinBerry(GameObject berry, bool increment) {
} if (increment) totalCoinBerries++;
AudioSource.PlayClipAtPoint(Resources.Load<AudioClip>("Sounds/CoinCollect"), Camera.main.transform.position, 0.35f * BazookaManager.Instance.GetSettingSFXVolume());
noGravityBerries.Remove(berry.GetInstanceID());
Destroy(berry);
totalCoins += 10;
UpdateStats(0, 0);
}
void UpdateStats(BigInteger scoreAddAmount, BigInteger attemptAddAmount) { void DoRandomBerry(GameObject berry) {
var levelBefore = Tools.GetLevelInfo().level; totalRandomBerries++;
var prefix = ""; Action[] funcs = {
var suffix = "";
score += scoreAddAmount;
totalAttempts += attemptAddAmount;
attempts += attemptAddAmount;
if (score >= highscore) {
highscore = score;
prefix = "<color=#7FFFD4>";
suffix = "</color>";
}
BazookaManager.Instance.SetGameStoreHighScore(highscore);
BazookaManager.Instance.SetGameStoreTotalNormalBerries(totalNormalBerries);
BazookaManager.Instance.SetGameStoreTotalPoisonBerries(totalPoisonBerries);
BazookaManager.Instance.SetGameStoreTotalSlowBerries(totalSlowBerries);
BazookaManager.Instance.SetGameStoreTotalUltraBerries(totalUltraBerries);
BazookaManager.Instance.SetGameStoreTotalSpeedyBerries(totalSpeedyBerries);
BazookaManager.Instance.SetGameStoreTotalCoinBerries(totalCoinBerries);
BazookaManager.Instance.SetGameStoreTotalRandomBerries(totalRandomBerries);
BazookaManager.Instance.SetGameStoreTotalAntiBerries(totalAntiBerries);
BazookaManager.Instance.SetGameStoreTotalGoldenBerries(totalGoldenBerries);
BazookaManager.Instance.SetGameStoreTotalAttepts(totalAttempts);
var customBirdIconData = BazookaManager.Instance.GetCustomBirdIconData();
customBirdIconData.Balance = totalCoins;
BazookaManager.Instance.SetCustomBirdIconData(customBirdIconData);
scoreText.text = $"Score: {Tools.FormatWithCommas(score)} \\u2022 Attempts: {Tools.FormatWithCommas(attempts)}";
highScoreText.text = prefix + $"High Score: {Tools.FormatWithCommas(highscore) + suffix} \\u2022 Total Attempts: {Tools.FormatWithCommas(totalAttempts)}";
coinText.text = $"Coins: {Tools.FormatWithCommas(totalCoins)}";
if (Application.isMobilePlatform) restartButton.interactable = score != 0;
if (DiscordRPCHandler.Instance != null)
DiscordRPCHandler.Instance.UpdateRPC("Playing in normal mode", $"Score: {Tools.FormatWithCommas(score)} | High Score: {Tools.FormatWithCommas(highscore)}");
var (_, level, currentXpInLevel, totalXpForLevel, percentDone) = Tools.GetLevelInfo();
levelText.text = $"Level: {Tools.FormatWithCommas(level.ToString())}" + (Application.isMobilePlatform ? " \\u2022 " : "\n") + $"XP: {Tools.FormatWithCommas(currentXpInLevel.ToString())}/{Tools.FormatWithCommas(totalXpForLevel.ToString())} ({Math.Floor(percentDone)}%)";
if (level != levelBefore) AudioSource.PlayClipAtPoint(Resources.Load<AudioClip>("Sounds/Levelup"), Camera.main.transform.position, 1f * BazookaManager.Instance.GetSettingSFXVolume());
}
internal void TogglePause() {
if (pausePanel.activeSelf) DisablePause();
else EnablePause();
}
internal void EnablePause() {
velocityBeforePause = rb.linearVelocity;
rb.linearVelocity = new();
rb.gravityScale = 0f;
Cursor.visible = true;
Cursor.lockState = CursorLockMode.None;
backgroundMusic.GetComponent<GameMusicHandler>().PauseMusic();
pausePanel.SetActive(true);
}
internal void DisablePause() {
rb.gravityScale = 100f * canvasRect.lossyScale.y;
rb.linearVelocity = velocityBeforePause;
velocityBeforePause = new();
if (GamePlayerPauseMenu.Instance.statsMenu.activeSelf) {
GamePlayerPauseMenu.Instance.statsMenuExitButton.onClick.Invoke();
return;
}
if (GamePlayerPauseMenu.Instance.editingUI == true) {
GamePlayerPauseMenu.Instance.ToggleEditingUI();
return;
}
Cursor.visible = false;
Cursor.lockState = CursorLockMode.Locked;
backgroundMusic.GetComponent<GameMusicHandler>().ResumeMusic();
pausePanel.SetActive(false);
}
void OnApplicationPause(bool pause) {
if (pause) EnablePause();
}
void OnApplicationQuit() {
Cursor.visible = true;
Cursor.lockState = CursorLockMode.None;
}
void DoNormalBerry(GameObject berry, bool increment) {
if (increment) totalNormalBerries++;
AudioSource.PlayClipAtPoint(Resources.Load<AudioClip>("Sounds/Eat"), Camera.main.transform.position, 1.2f * BazookaManager.Instance.GetSettingSFXVolume());
noGravityBerries.Remove(berry.GetInstanceID());
Destroy(berry);
UpdateStats(1, 0);
}
void DoPoisonBerry() {
totalPoisonBerries++;
AudioSource.PlayClipAtPoint(Resources.Load<AudioClip>("Sounds/Death"), Camera.main.transform.position, 1.2f * BazookaManager.Instance.GetSettingSFXVolume());
Respawn();
UpdateStats(0, 0);
}
void DoSlowBerry(GameObject berry, bool increment) {
if (increment) totalSlowBerries++;
AudioSource.PlayClipAtPoint(Resources.Load<AudioClip>("Sounds/Downgrade"), Camera.main.transform.position, 0.35f * BazookaManager.Instance.GetSettingSFXVolume());
noGravityBerries.Remove(berry.GetInstanceID());
Destroy(berry);
boostLeft = 0f;
slownessLeft = 10f;
speedyLeft = 0f;
antiLeft = 0f;
goldenLeft = 0f;
if (score > 0) {
UpdateStats(-1, 0);
}
}
void DoUltraBerry(GameObject berry, bool increment) {
if (increment) totalUltraBerries++;
AudioSource.PlayClipAtPoint(Resources.Load<AudioClip>("Sounds/Powerup"), Camera.main.transform.position, 0.35f * BazookaManager.Instance.GetSettingSFXVolume());
noGravityBerries.Remove(berry.GetInstanceID());
Destroy(berry);
speedyLeft = 0f;
antiLeft = 0f;
goldenLeft = 0f;
if (slownessLeft > 0f) {
slownessLeft = 0f;
UpdateStats(1, 0);
} else {
boostLeft += 10f;
UpdateStats(5, 0);
}
}
void DoSpeedyBerry(GameObject berry, bool increment) {
if (increment) totalSpeedyBerries++;
AudioSource.PlayClipAtPoint(Resources.Load<AudioClip>("Sounds/SpeedyPowerup"), Camera.main.transform.position, 0.35f * BazookaManager.Instance.GetSettingSFXVolume());
noGravityBerries.Remove(berry.GetInstanceID());
Destroy(berry);
boostLeft = 0f;
slownessLeft = 0f;
speedyLeft = 10f;
antiLeft = 0f;
goldenLeft = 0f;
UpdateStats(10, 0);
}
void DoCoinBerry(GameObject berry, bool increment) {
if (increment) totalCoinBerries++;
AudioSource.PlayClipAtPoint(Resources.Load<AudioClip>("Sounds/CoinCollect"), Camera.main.transform.position, 0.35f * BazookaManager.Instance.GetSettingSFXVolume());
noGravityBerries.Remove(berry.GetInstanceID());
Destroy(berry);
totalCoins += 10;
UpdateStats(0, 0);
}
void DoRandomBerry(GameObject berry) {
totalRandomBerries++;
Action[] funcs = {
() => DoNormalBerry(berry, false), () => DoNormalBerry(berry, false),
() => DoSlowBerry(berry, false), () => DoSlowBerry(berry, false),
() => DoUltraBerry(berry, false), () => DoUltraBerry(berry, false),
@@ -491,32 +492,32 @@ public class GamePlayer : MonoBehaviour {
() => DoAntiBerry(berry, false), () => DoAntiBerry(berry, false),
() => DoGoldenBerry(berry, false) () => DoGoldenBerry(berry, false)
}; };
funcs[UnityEngine.Random.Range(0, funcs.Length)](); funcs[UnityEngine.Random.Range(0, funcs.Length)]();
} }
void DoAntiBerry(GameObject berry, bool increment) { void DoAntiBerry(GameObject berry, bool increment) {
if (increment) totalAntiBerries++; if (increment) totalAntiBerries++;
AudioSource.PlayClipAtPoint(Resources.Load<AudioClip>("Sounds/Downgrade"), Camera.main.transform.position, 0.35f * BazookaManager.Instance.GetSettingSFXVolume()); AudioSource.PlayClipAtPoint(Resources.Load<AudioClip>("Sounds/Downgrade"), Camera.main.transform.position, 0.35f * BazookaManager.Instance.GetSettingSFXVolume());
noGravityBerries.Remove(berry.GetInstanceID()); noGravityBerries.Remove(berry.GetInstanceID());
Destroy(berry); Destroy(berry);
boostLeft = 0f; boostLeft = 0f;
slownessLeft = 0f; slownessLeft = 0f;
speedyLeft = 0f; speedyLeft = 0f;
antiLeft = 10f; antiLeft = 10f;
goldenLeft = 0f; goldenLeft = 0f;
UpdateStats(0, 0); UpdateStats(0, 0);
} }
void DoGoldenBerry(GameObject berry, bool increment) { void DoGoldenBerry(GameObject berry, bool increment) {
if (increment) totalGoldenBerries++; if (increment) totalGoldenBerries++;
AudioSource.PlayClipAtPoint(Resources.Load<AudioClip>("Sounds/Powerup"), Camera.main.transform.position, 0.35f * BazookaManager.Instance.GetSettingSFXVolume()); AudioSource.PlayClipAtPoint(Resources.Load<AudioClip>("Sounds/Powerup"), Camera.main.transform.position, 0.35f * BazookaManager.Instance.GetSettingSFXVolume());
noGravityBerries.Remove(berry.GetInstanceID()); noGravityBerries.Remove(berry.GetInstanceID());
Destroy(berry); Destroy(berry);
boostLeft = 0f; boostLeft = 0f;
slownessLeft = 0f; slownessLeft = 0f;
speedyLeft = 0f; speedyLeft = 0f;
antiLeft = 0f; antiLeft = 0f;
goldenLeft = 10f; goldenLeft = 10f;
UpdateStats(4, 0); UpdateStats(4, 0);
} }
} }
+151 -151
View File
@@ -4,162 +4,162 @@ using UnityEngine;
using UnityEngine.UI; using UnityEngine.UI;
public class GamePlayerPauseMenu : MonoBehaviour { public class GamePlayerPauseMenu : MonoBehaviour {
public static GamePlayerPauseMenu Instance; public static GamePlayerPauseMenu Instance;
[SerializeField] private Button backButton; [SerializeField] private Button backButton;
[SerializeField] private Button continueButton; [SerializeField] private Button continueButton;
[SerializeField] private Button statsButton; [SerializeField] private Button statsButton;
[SerializeField] private Button editUiButton; [SerializeField] private Button editUiButton;
[SerializeField] private Button resetUiButton; [SerializeField] private Button resetUiButton;
[SerializeField] private AudioSource songLoop; [SerializeField] private AudioSource songLoop;
[SerializeField] private TMP_Text scoreText; [SerializeField] private TMP_Text scoreText;
[SerializeField] private TMP_Text highScoreText; [SerializeField] private TMP_Text highScoreText;
[SerializeField] private TMP_Text boostText; [SerializeField] private TMP_Text boostText;
[SerializeField] private TMP_Text coinsText; [SerializeField] private TMP_Text coinsText;
[SerializeField] private TMP_Text levelText; [SerializeField] private TMP_Text levelText;
[SerializeField] private Button pauseButton; [SerializeField] private Button pauseButton;
[SerializeField] private Button restartButton; [SerializeField] private Button restartButton;
[SerializeField] private Button jumpButton; [SerializeField] private Button jumpButton;
[SerializeField] private Button rightButton; [SerializeField] private Button rightButton;
[SerializeField] private Button leftButton; [SerializeField] private Button leftButton;
internal bool editingUI = false; internal bool editingUI = false;
public GameObject statsMenu; public GameObject statsMenu;
public Button statsMenuExitButton; public Button statsMenuExitButton;
[SerializeField] private TMP_Text statsText; [SerializeField] private TMP_Text statsText;
[SerializeField] private Toggle settingFullscreenToggle; [SerializeField] private Toggle settingFullscreenToggle;
[SerializeField] private Toggle settingVSyncToggle; [SerializeField] private Toggle settingVSyncToggle;
[SerializeField] private Toggle settingRandomMusicToggle; [SerializeField] private Toggle settingRandomMusicToggle;
[SerializeField] private Slider musicSlider; [SerializeField] private Slider musicSlider;
[SerializeField] private Slider sfxSlider; [SerializeField] private Slider sfxSlider;
[SerializeField] private TMP_Text musicSliderText; [SerializeField] private TMP_Text musicSliderText;
[SerializeField] private TMP_Text sfxSliderText; [SerializeField] private TMP_Text sfxSliderText;
void Awake() { void Awake() {
Instance = this; Instance = this;
continueButton.onClick.AddListener(GamePlayer.Instance.DisablePause); continueButton.onClick.AddListener(GamePlayer.Instance.DisablePause);
musicSlider.onValueChanged.AddListener(value => { musicSlider.onValueChanged.AddListener(value => {
BazookaManager.Instance.SetSettingMusicVolume(value); BazookaManager.Instance.SetSettingMusicVolume(value);
songLoop.volume = value; songLoop.volume = value;
}); });
sfxSlider.onValueChanged.AddListener(value => { sfxSlider.onValueChanged.AddListener(value => {
BazookaManager.Instance.SetSettingSFXVolume(value); BazookaManager.Instance.SetSettingSFXVolume(value);
}); });
editUiButton.onClick.AddListener(() => { editUiButton.onClick.AddListener(() => {
ToggleEditingUI(); ToggleEditingUI();
}); });
resetUiButton.onClick.AddListener(() => { resetUiButton.onClick.AddListener(() => {
scoreText.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(0f, -70f); scoreText.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(0f, -70f);
highScoreText.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(0f, -140f); highScoreText.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(0f, -140f);
boostText.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(0f, -190f); boostText.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(0f, -190f);
coinsText.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(260f, 47.5f); coinsText.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(260f, 47.5f);
levelText.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(-290f, 85f); levelText.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(-290f, 85f);
PlayerPrefs.DeleteKey("DraggedUIScoreText"); PlayerPrefs.DeleteKey("DraggedUIScoreText");
PlayerPrefs.DeleteKey("DraggedUIHighScoreText"); PlayerPrefs.DeleteKey("DraggedUIHighScoreText");
PlayerPrefs.DeleteKey("DraggedUIBoostText"); PlayerPrefs.DeleteKey("DraggedUIBoostText");
PlayerPrefs.DeleteKey("DraggedUICoinsText"); PlayerPrefs.DeleteKey("DraggedUICoinsText");
PlayerPrefs.DeleteKey("DraggedUILevelText"); PlayerPrefs.DeleteKey("DraggedUILevelText");
if (Application.isMobilePlatform) { if (Application.isMobilePlatform) {
pauseButton.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(128f, -128f); pauseButton.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(128f, -128f);
restartButton.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(-128f, -128f); restartButton.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(-128f, -128f);
jumpButton.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(-128f, 288f); jumpButton.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(-128f, 288f);
rightButton.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(-128f, 128f); rightButton.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(-128f, 128f);
leftButton.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(128f, 128f); leftButton.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(128f, 128f);
PlayerPrefs.DeleteKey("DraggedUIPauseButton"); PlayerPrefs.DeleteKey("DraggedUIPauseButton");
PlayerPrefs.DeleteKey("DraggedUIRestartButton"); PlayerPrefs.DeleteKey("DraggedUIRestartButton");
PlayerPrefs.DeleteKey("DraggedUIJumpButton"); PlayerPrefs.DeleteKey("DraggedUIJumpButton");
PlayerPrefs.DeleteKey("DraggedUIRightButton"); PlayerPrefs.DeleteKey("DraggedUIRightButton");
PlayerPrefs.DeleteKey("DraggedUILeftButton"); PlayerPrefs.DeleteKey("DraggedUILeftButton");
} }
}); });
statsButton.onClick.AddListener(() => { statsButton.onClick.AddListener(() => {
statsMenu.SetActive(true); statsMenu.SetActive(true);
var text = new StringBuilder(); var text = new StringBuilder();
text.AppendLine("High Score: " + Tools.FormatWithCommas(GamePlayer.Instance.highscore)); text.AppendLine("High Score: " + Tools.FormatWithCommas(GamePlayer.Instance.highscore));
text.AppendLine("Total Normal Berries: " + Tools.FormatWithCommas(GamePlayer.Instance.totalNormalBerries)); text.AppendLine("Total Normal Berries: " + Tools.FormatWithCommas(GamePlayer.Instance.totalNormalBerries));
text.AppendLine("Total Poison Berries: " + Tools.FormatWithCommas(GamePlayer.Instance.totalPoisonBerries)); text.AppendLine("Total Poison Berries: " + Tools.FormatWithCommas(GamePlayer.Instance.totalPoisonBerries));
text.AppendLine("Total Slow Berries: " + Tools.FormatWithCommas(GamePlayer.Instance.totalSlowBerries)); text.AppendLine("Total Slow Berries: " + Tools.FormatWithCommas(GamePlayer.Instance.totalSlowBerries));
text.AppendLine("Total Ultra Berries: " + Tools.FormatWithCommas(GamePlayer.Instance.totalUltraBerries)); text.AppendLine("Total Ultra Berries: " + Tools.FormatWithCommas(GamePlayer.Instance.totalUltraBerries));
text.AppendLine("Total Coin Berries: " + Tools.FormatWithCommas(GamePlayer.Instance.totalCoinBerries)); text.AppendLine("Total Coin Berries: " + Tools.FormatWithCommas(GamePlayer.Instance.totalCoinBerries));
text.AppendLine("Total Speedy Berries: " + Tools.FormatWithCommas(GamePlayer.Instance.totalSpeedyBerries)); text.AppendLine("Total Speedy Berries: " + Tools.FormatWithCommas(GamePlayer.Instance.totalSpeedyBerries));
text.AppendLine("Total Random Berries: " + Tools.FormatWithCommas(GamePlayer.Instance.totalRandomBerries)); text.AppendLine("Total Random Berries: " + Tools.FormatWithCommas(GamePlayer.Instance.totalRandomBerries));
text.AppendLine("Total Anti Berries: " + Tools.FormatWithCommas(GamePlayer.Instance.totalAntiBerries)); text.AppendLine("Total Anti Berries: " + Tools.FormatWithCommas(GamePlayer.Instance.totalAntiBerries));
text.AppendLine("Total Golden Berries: " + Tools.FormatWithCommas(GamePlayer.Instance.totalGoldenBerries)); text.AppendLine("Total Golden Berries: " + Tools.FormatWithCommas(GamePlayer.Instance.totalGoldenBerries));
text.AppendLine("Total Attempts: " + Tools.FormatWithCommas(GamePlayer.Instance.totalAttempts)); text.AppendLine("Total Attempts: " + Tools.FormatWithCommas(GamePlayer.Instance.totalAttempts));
statsText.text = text.ToString(); statsText.text = text.ToString();
}); });
statsMenuExitButton.onClick.AddListener(() => { statsMenuExitButton.onClick.AddListener(() => {
statsMenu.SetActive(false); statsMenu.SetActive(false);
statsText.text = string.Empty; statsText.text = string.Empty;
}); });
musicSlider.value = BazookaManager.Instance.GetSettingMusicVolume(); musicSlider.value = BazookaManager.Instance.GetSettingMusicVolume();
sfxSlider.value = BazookaManager.Instance.GetSettingSFXVolume(); sfxSlider.value = BazookaManager.Instance.GetSettingSFXVolume();
if (!Application.isMobilePlatform) { if (!Application.isMobilePlatform) {
settingFullscreenToggle.isOn = BazookaManager.Instance.GetSettingFullScreen() == true; settingFullscreenToggle.isOn = BazookaManager.Instance.GetSettingFullScreen() == true;
settingVSyncToggle.isOn = BazookaManager.Instance.GetSettingVsync() == true; settingVSyncToggle.isOn = BazookaManager.Instance.GetSettingVsync() == true;
settingRandomMusicToggle.isOn = BazookaManager.Instance.GetSettingRandomMusic() == true; settingRandomMusicToggle.isOn = BazookaManager.Instance.GetSettingRandomMusic() == true;
settingFullscreenToggle.onValueChanged.AddListener(value => { settingFullscreenToggle.onValueChanged.AddListener(value => {
BazookaManager.Instance.SetSettingFullScreen(value); BazookaManager.Instance.SetSettingFullScreen(value);
var width = Display.main.systemWidth; var width = Display.main.systemWidth;
var height = Display.main.systemHeight; var height = Display.main.systemHeight;
Screen.SetResolution(width, height, value); Screen.SetResolution(width, height, value);
}); });
settingVSyncToggle.onValueChanged.AddListener(value => { settingVSyncToggle.onValueChanged.AddListener(value => {
BazookaManager.Instance.SetSettingVsync(value); BazookaManager.Instance.SetSettingVsync(value);
QualitySettings.vSyncCount = value ? 1 : -1; QualitySettings.vSyncCount = value ? 1 : -1;
}); });
} else { } else {
settingFullscreenToggle.interactable = false; settingFullscreenToggle.interactable = false;
settingVSyncToggle.interactable = false; settingVSyncToggle.interactable = false;
settingRandomMusicToggle.isOn = BazookaManager.Instance.GetSettingRandomMusic() == true; settingRandomMusicToggle.isOn = BazookaManager.Instance.GetSettingRandomMusic() == true;
}
settingRandomMusicToggle.onValueChanged.AddListener(value => BazookaManager.Instance.SetSettingRandomMusic(value));
musicSlider.onValueChanged.AddListener(value => {
BazookaManager.Instance.SetSettingMusicVolume(value);
GamePlayer.Instance.backgroundMusic.volume = value;
});
sfxSlider.onValueChanged.AddListener(value => BazookaManager.Instance.SetSettingSFXVolume(value));
} }
settingRandomMusicToggle.onValueChanged.AddListener(value => BazookaManager.Instance.SetSettingRandomMusic(value));
musicSlider.onValueChanged.AddListener(value => {
BazookaManager.Instance.SetSettingMusicVolume(value);
GamePlayer.Instance.backgroundMusic.volume = value;
});
sfxSlider.onValueChanged.AddListener(value => BazookaManager.Instance.SetSettingSFXVolume(value));
}
public void ToggleEditingUI() { public void ToggleEditingUI() {
editingUI = !editingUI; editingUI = !editingUI;
musicSlider.gameObject.SetActive(!musicSlider.gameObject.activeSelf); musicSlider.gameObject.SetActive(!musicSlider.gameObject.activeSelf);
sfxSlider.gameObject.SetActive(!sfxSlider.gameObject.activeSelf); sfxSlider.gameObject.SetActive(!sfxSlider.gameObject.activeSelf);
musicSliderText.gameObject.SetActive(!musicSliderText.gameObject.activeSelf); musicSliderText.gameObject.SetActive(!musicSliderText.gameObject.activeSelf);
sfxSliderText.gameObject.SetActive(!sfxSliderText.gameObject.activeSelf); sfxSliderText.gameObject.SetActive(!sfxSliderText.gameObject.activeSelf);
settingFullscreenToggle.gameObject.SetActive(!settingFullscreenToggle.gameObject.activeSelf); settingFullscreenToggle.gameObject.SetActive(!settingFullscreenToggle.gameObject.activeSelf);
settingVSyncToggle.gameObject.SetActive(!settingVSyncToggle.gameObject.activeSelf); settingVSyncToggle.gameObject.SetActive(!settingVSyncToggle.gameObject.activeSelf);
settingRandomMusicToggle.gameObject.SetActive(!settingRandomMusicToggle.gameObject.activeSelf); settingRandomMusicToggle.gameObject.SetActive(!settingRandomMusicToggle.gameObject.activeSelf);
backButton.gameObject.SetActive(!backButton.gameObject.activeSelf); backButton.gameObject.SetActive(!backButton.gameObject.activeSelf);
continueButton.gameObject.SetActive(!continueButton.gameObject.activeSelf); continueButton.gameObject.SetActive(!continueButton.gameObject.activeSelf);
statsButton.gameObject.SetActive(!statsButton.gameObject.activeSelf); statsButton.gameObject.SetActive(!statsButton.gameObject.activeSelf);
editUiButton.transform.GetChild(0).GetComponent<TMP_Text>().text = editUiButton.transform.GetChild(0).GetComponent<TMP_Text>().text == "Edit UI" ? "Done" : "Edit UI"; editUiButton.transform.GetChild(0).GetComponent<TMP_Text>().text = editUiButton.transform.GetChild(0).GetComponent<TMP_Text>().text == "Edit UI" ? "Done" : "Edit UI";
resetUiButton.gameObject.SetActive(!resetUiButton.gameObject.activeSelf); resetUiButton.gameObject.SetActive(!resetUiButton.gameObject.activeSelf);
scoreText.GetComponent<DraggableUI>().canDrag = !scoreText.GetComponent<DraggableUI>().canDrag; scoreText.GetComponent<DraggableUI>().canDrag = !scoreText.GetComponent<DraggableUI>().canDrag;
highScoreText.GetComponent<DraggableUI>().canDrag = !highScoreText.GetComponent<DraggableUI>().canDrag; highScoreText.GetComponent<DraggableUI>().canDrag = !highScoreText.GetComponent<DraggableUI>().canDrag;
boostText.GetComponent<DraggableUI>().canDrag = !boostText.GetComponent<DraggableUI>().canDrag; boostText.GetComponent<DraggableUI>().canDrag = !boostText.GetComponent<DraggableUI>().canDrag;
coinsText.GetComponent<DraggableUI>().canDrag = !coinsText.GetComponent<DraggableUI>().canDrag; coinsText.GetComponent<DraggableUI>().canDrag = !coinsText.GetComponent<DraggableUI>().canDrag;
levelText.GetComponent<DraggableUI>().canDrag = !levelText.GetComponent<DraggableUI>().canDrag; levelText.GetComponent<DraggableUI>().canDrag = !levelText.GetComponent<DraggableUI>().canDrag;
if (Application.isMobilePlatform) { if (Application.isMobilePlatform) {
var pauseDraggableUI = pauseButton.GetComponent<DraggableUI>(); var pauseDraggableUI = pauseButton.GetComponent<DraggableUI>();
var restartDraggableUI = restartButton.GetComponent<DraggableUI>(); var restartDraggableUI = restartButton.GetComponent<DraggableUI>();
var jumpDraggableUI = jumpButton.GetComponent<DraggableUI>(); var jumpDraggableUI = jumpButton.GetComponent<DraggableUI>();
var rightDraggableUI = rightButton.GetComponent<DraggableUI>(); var rightDraggableUI = rightButton.GetComponent<DraggableUI>();
var leftDraggableUI = leftButton.GetComponent<DraggableUI>(); var leftDraggableUI = leftButton.GetComponent<DraggableUI>();
pauseButton.transform.parent.SetSiblingIndex(pauseDraggableUI.canDrag ? 0 : 2); pauseButton.transform.parent.SetSiblingIndex(pauseDraggableUI.canDrag ? 0 : 2);
pauseDraggableUI.canDrag = !pauseDraggableUI.canDrag; pauseDraggableUI.canDrag = !pauseDraggableUI.canDrag;
restartDraggableUI.canDrag = !restartDraggableUI.canDrag; restartDraggableUI.canDrag = !restartDraggableUI.canDrag;
jumpDraggableUI.canDrag = !jumpDraggableUI.canDrag; jumpDraggableUI.canDrag = !jumpDraggableUI.canDrag;
rightDraggableUI.canDrag = !rightDraggableUI.canDrag; rightDraggableUI.canDrag = !rightDraggableUI.canDrag;
leftDraggableUI.canDrag = !leftDraggableUI.canDrag; leftDraggableUI.canDrag = !leftDraggableUI.canDrag;
pauseButton.interactable = !pauseDraggableUI.canDrag; pauseButton.interactable = !pauseDraggableUI.canDrag;
restartButton.interactable = !restartDraggableUI.canDrag; restartButton.interactable = !restartDraggableUI.canDrag;
jumpButton.interactable = !jumpDraggableUI.canDrag; jumpButton.interactable = !jumpDraggableUI.canDrag;
rightButton.interactable = !rightDraggableUI.canDrag; rightButton.interactable = !rightDraggableUI.canDrag;
leftButton.interactable = !leftDraggableUI.canDrag; leftButton.interactable = !leftDraggableUI.canDrag;
jumpButton.transform.GetChild(0).GetComponent<TMP_Text>().color = !jumpDraggableUI.canDrag ? GamePlayer.Instance.IsGrounded() ? Color.white : Color.red : Color.white; jumpButton.transform.GetChild(0).GetComponent<TMP_Text>().color = !jumpDraggableUI.canDrag ? GamePlayer.Instance.IsGrounded() ? Color.white : Color.red : Color.white;
restartButton.interactable = GamePlayer.Instance.score != 0; restartButton.interactable = GamePlayer.Instance.score != 0;
}
} }
}
} }
File diff suppressed because it is too large. Load diff
@@ -3,125 +3,125 @@ using UnityEngine;
using UnityEngine.UI; using UnityEngine.UI;
public class MultiplayerGamePlayerPauseMenu : MonoBehaviour { public class MultiplayerGamePlayerPauseMenu : MonoBehaviour {
public static MultiplayerGamePlayerPauseMenu Instance; public static MultiplayerGamePlayerPauseMenu Instance;
[SerializeField] private Button leaveButton; [SerializeField] private Button leaveButton;
[SerializeField] private Button continueButton; [SerializeField] private Button continueButton;
[SerializeField] private Button editUiButton; [SerializeField] private Button editUiButton;
[SerializeField] private Button resetUiButton; [SerializeField] private Button resetUiButton;
[SerializeField] private AudioSource songLoop; [SerializeField] private AudioSource songLoop;
[SerializeField] private TMP_Text scoreText; [SerializeField] private TMP_Text scoreText;
[SerializeField] private TMP_Text boostText; [SerializeField] private TMP_Text boostText;
[SerializeField] private Button pauseButton; [SerializeField] private Button pauseButton;
[SerializeField] private Button restartButton; [SerializeField] private Button restartButton;
[SerializeField] private Button jumpButton; [SerializeField] private Button jumpButton;
[SerializeField] private Button rightButton; [SerializeField] private Button rightButton;
[SerializeField] private Button leftButton; [SerializeField] private Button leftButton;
internal bool editingUI = false; internal bool editingUI = false;
[SerializeField] private Toggle settingFullscreenToggle; [SerializeField] private Toggle settingFullscreenToggle;
[SerializeField] private Toggle settingVSyncToggle; [SerializeField] private Toggle settingVSyncToggle;
[SerializeField] private Toggle settingRandomMusicToggle; [SerializeField] private Toggle settingRandomMusicToggle;
[SerializeField] private Slider musicSlider; [SerializeField] private Slider musicSlider;
[SerializeField] private Slider sfxSlider; [SerializeField] private Slider sfxSlider;
[SerializeField] private TMP_Text musicSliderText; [SerializeField] private TMP_Text musicSliderText;
[SerializeField] private TMP_Text sfxSliderText; [SerializeField] private TMP_Text sfxSliderText;
void Awake() { void Awake() {
Instance = this; Instance = this;
leaveButton.onClick.AddListener(MultiplayerGamePlayer.Instance.Disconnect); leaveButton.onClick.AddListener(MultiplayerGamePlayer.Instance.Disconnect);
continueButton.onClick.AddListener(MultiplayerGamePlayer.Instance.DisablePause); continueButton.onClick.AddListener(MultiplayerGamePlayer.Instance.DisablePause);
musicSlider.onValueChanged.AddListener(value => { musicSlider.onValueChanged.AddListener(value => {
BazookaManager.Instance.SetSettingMusicVolume(value); BazookaManager.Instance.SetSettingMusicVolume(value);
songLoop.volume = value; songLoop.volume = value;
}); });
sfxSlider.onValueChanged.AddListener(value => { sfxSlider.onValueChanged.AddListener(value => {
BazookaManager.Instance.SetSettingSFXVolume(value); BazookaManager.Instance.SetSettingSFXVolume(value);
}); });
editUiButton.onClick.AddListener(() => { editUiButton.onClick.AddListener(() => {
ToggleEditingUI(); ToggleEditingUI();
}); });
resetUiButton.onClick.AddListener(() => { resetUiButton.onClick.AddListener(() => {
scoreText.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(0f, -70f); scoreText.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(0f, -70f);
boostText.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(0f, -140f); boostText.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(0f, -140f);
PlayerPrefs.DeleteKey("DraggedUIScoreTextCustom"); PlayerPrefs.DeleteKey("DraggedUIScoreTextCustom");
PlayerPrefs.DeleteKey("DraggedUIBoostTextCustom"); PlayerPrefs.DeleteKey("DraggedUIBoostTextCustom");
if (Application.isMobilePlatform) { if (Application.isMobilePlatform) {
pauseButton.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(128f, -128f); pauseButton.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(128f, -128f);
restartButton.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(-128f, -128f); restartButton.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(-128f, -128f);
jumpButton.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(-128f, 288f); jumpButton.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(-128f, 288f);
rightButton.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(-128f, 128f); rightButton.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(-128f, 128f);
leftButton.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(128f, 128f); leftButton.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(128f, 128f);
PlayerPrefs.DeleteKey("DraggedUIPauseButton"); PlayerPrefs.DeleteKey("DraggedUIPauseButton");
PlayerPrefs.DeleteKey("DraggedUIRestartButton"); PlayerPrefs.DeleteKey("DraggedUIRestartButton");
PlayerPrefs.DeleteKey("DraggedUIJumpButton"); PlayerPrefs.DeleteKey("DraggedUIJumpButton");
PlayerPrefs.DeleteKey("DraggedUIRightButton"); PlayerPrefs.DeleteKey("DraggedUIRightButton");
PlayerPrefs.DeleteKey("DraggedUILeftButton"); PlayerPrefs.DeleteKey("DraggedUILeftButton");
} }
}); });
musicSlider.value = BazookaManager.Instance.GetSettingMusicVolume(); musicSlider.value = BazookaManager.Instance.GetSettingMusicVolume();
sfxSlider.value = BazookaManager.Instance.GetSettingSFXVolume(); sfxSlider.value = BazookaManager.Instance.GetSettingSFXVolume();
if (!Application.isMobilePlatform) { if (!Application.isMobilePlatform) {
settingFullscreenToggle.isOn = BazookaManager.Instance.GetSettingFullScreen() == true; settingFullscreenToggle.isOn = BazookaManager.Instance.GetSettingFullScreen() == true;
settingVSyncToggle.isOn = BazookaManager.Instance.GetSettingVsync() == true; settingVSyncToggle.isOn = BazookaManager.Instance.GetSettingVsync() == true;
settingRandomMusicToggle.isOn = BazookaManager.Instance.GetSettingRandomMusic() == true; settingRandomMusicToggle.isOn = BazookaManager.Instance.GetSettingRandomMusic() == true;
settingFullscreenToggle.onValueChanged.AddListener(value => { settingFullscreenToggle.onValueChanged.AddListener(value => {
BazookaManager.Instance.SetSettingFullScreen(value); BazookaManager.Instance.SetSettingFullScreen(value);
var width = Display.main.systemWidth; var width = Display.main.systemWidth;
var height = Display.main.systemHeight; var height = Display.main.systemHeight;
Screen.SetResolution(width, height, value); Screen.SetResolution(width, height, value);
}); });
settingVSyncToggle.onValueChanged.AddListener(value => { settingVSyncToggle.onValueChanged.AddListener(value => {
BazookaManager.Instance.SetSettingVsync(value); BazookaManager.Instance.SetSettingVsync(value);
QualitySettings.vSyncCount = value ? 1 : -1; QualitySettings.vSyncCount = value ? 1 : -1;
}); });
} else { } else {
settingFullscreenToggle.interactable = false; settingFullscreenToggle.interactable = false;
settingVSyncToggle.interactable = false; settingVSyncToggle.interactable = false;
settingRandomMusicToggle.isOn = BazookaManager.Instance.GetSettingRandomMusic() == true; settingRandomMusicToggle.isOn = BazookaManager.Instance.GetSettingRandomMusic() == true;
}
settingRandomMusicToggle.onValueChanged.AddListener(value => BazookaManager.Instance.SetSettingRandomMusic(value));
musicSlider.onValueChanged.AddListener(value => {
BazookaManager.Instance.SetSettingMusicVolume(value);
MultiplayerGamePlayer.Instance.backgroundMusic.volume = value;
});
sfxSlider.onValueChanged.AddListener(value => BazookaManager.Instance.SetSettingSFXVolume(value));
} }
settingRandomMusicToggle.onValueChanged.AddListener(value => BazookaManager.Instance.SetSettingRandomMusic(value));
musicSlider.onValueChanged.AddListener(value => {
BazookaManager.Instance.SetSettingMusicVolume(value);
MultiplayerGamePlayer.Instance.backgroundMusic.volume = value;
});
sfxSlider.onValueChanged.AddListener(value => BazookaManager.Instance.SetSettingSFXVolume(value));
}
public void ToggleEditingUI() { public void ToggleEditingUI() {
editingUI = !editingUI; editingUI = !editingUI;
musicSlider.gameObject.SetActive(!musicSlider.gameObject.activeSelf); musicSlider.gameObject.SetActive(!musicSlider.gameObject.activeSelf);
sfxSlider.gameObject.SetActive(!sfxSlider.gameObject.activeSelf); sfxSlider.gameObject.SetActive(!sfxSlider.gameObject.activeSelf);
musicSliderText.gameObject.SetActive(!musicSliderText.gameObject.activeSelf); musicSliderText.gameObject.SetActive(!musicSliderText.gameObject.activeSelf);
sfxSliderText.gameObject.SetActive(!sfxSliderText.gameObject.activeSelf); sfxSliderText.gameObject.SetActive(!sfxSliderText.gameObject.activeSelf);
settingFullscreenToggle.gameObject.SetActive(!settingFullscreenToggle.gameObject.activeSelf); settingFullscreenToggle.gameObject.SetActive(!settingFullscreenToggle.gameObject.activeSelf);
settingVSyncToggle.gameObject.SetActive(!settingVSyncToggle.gameObject.activeSelf); settingVSyncToggle.gameObject.SetActive(!settingVSyncToggle.gameObject.activeSelf);
settingRandomMusicToggle.gameObject.SetActive(!settingRandomMusicToggle.gameObject.activeSelf); settingRandomMusicToggle.gameObject.SetActive(!settingRandomMusicToggle.gameObject.activeSelf);
leaveButton.gameObject.SetActive(!leaveButton.gameObject.activeSelf); leaveButton.gameObject.SetActive(!leaveButton.gameObject.activeSelf);
continueButton.gameObject.SetActive(!continueButton.gameObject.activeSelf); continueButton.gameObject.SetActive(!continueButton.gameObject.activeSelf);
editUiButton.transform.GetChild(0).GetComponent<TMP_Text>().text = editUiButton.transform.GetChild(0).GetComponent<TMP_Text>().text == "Edit UI" ? "Done" : "Edit UI"; editUiButton.transform.GetChild(0).GetComponent<TMP_Text>().text = editUiButton.transform.GetChild(0).GetComponent<TMP_Text>().text == "Edit UI" ? "Done" : "Edit UI";
resetUiButton.gameObject.SetActive(!resetUiButton.gameObject.activeSelf); resetUiButton.gameObject.SetActive(!resetUiButton.gameObject.activeSelf);
scoreText.GetComponent<DraggableUI>().canDrag = !scoreText.GetComponent<DraggableUI>().canDrag; scoreText.GetComponent<DraggableUI>().canDrag = !scoreText.GetComponent<DraggableUI>().canDrag;
boostText.GetComponent<DraggableUI>().canDrag = !boostText.GetComponent<DraggableUI>().canDrag; boostText.GetComponent<DraggableUI>().canDrag = !boostText.GetComponent<DraggableUI>().canDrag;
if (Application.isMobilePlatform) { if (Application.isMobilePlatform) {
var pauseDraggableUI = pauseButton.GetComponent<DraggableUI>(); var pauseDraggableUI = pauseButton.GetComponent<DraggableUI>();
var restartDraggableUI = restartButton.GetComponent<DraggableUI>(); var restartDraggableUI = restartButton.GetComponent<DraggableUI>();
var jumpDraggableUI = jumpButton.GetComponent<DraggableUI>(); var jumpDraggableUI = jumpButton.GetComponent<DraggableUI>();
var rightDraggableUI = rightButton.GetComponent<DraggableUI>(); var rightDraggableUI = rightButton.GetComponent<DraggableUI>();
var leftDraggableUI = leftButton.GetComponent<DraggableUI>(); var leftDraggableUI = leftButton.GetComponent<DraggableUI>();
pauseButton.transform.parent.SetSiblingIndex(pauseDraggableUI.canDrag ? 0 : 2); pauseButton.transform.parent.SetSiblingIndex(pauseDraggableUI.canDrag ? 0 : 2);
pauseDraggableUI.canDrag = !pauseDraggableUI.canDrag; pauseDraggableUI.canDrag = !pauseDraggableUI.canDrag;
restartDraggableUI.canDrag = !restartDraggableUI.canDrag; restartDraggableUI.canDrag = !restartDraggableUI.canDrag;
jumpDraggableUI.canDrag = !jumpDraggableUI.canDrag; jumpDraggableUI.canDrag = !jumpDraggableUI.canDrag;
rightDraggableUI.canDrag = !rightDraggableUI.canDrag; rightDraggableUI.canDrag = !rightDraggableUI.canDrag;
leftDraggableUI.canDrag = !leftDraggableUI.canDrag; leftDraggableUI.canDrag = !leftDraggableUI.canDrag;
pauseButton.interactable = !pauseDraggableUI.canDrag; pauseButton.interactable = !pauseDraggableUI.canDrag;
restartButton.interactable = !restartDraggableUI.canDrag; restartButton.interactable = !restartDraggableUI.canDrag;
jumpButton.interactable = !jumpDraggableUI.canDrag; jumpButton.interactable = !jumpDraggableUI.canDrag;
rightButton.interactable = !rightDraggableUI.canDrag; rightButton.interactable = !rightDraggableUI.canDrag;
leftButton.interactable = !leftDraggableUI.canDrag; leftButton.interactable = !leftDraggableUI.canDrag;
jumpButton.transform.GetChild(0).GetComponent<TMP_Text>().color = !jumpDraggableUI.canDrag ? MultiplayerGamePlayer.Instance.IsGrounded() ? Color.white : Color.red : Color.white; jumpButton.transform.GetChild(0).GetComponent<TMP_Text>().color = !jumpDraggableUI.canDrag ? MultiplayerGamePlayer.Instance.IsGrounded() ? Color.white : Color.red : Color.white;
restartButton.interactable = MultiplayerGamePlayer.Instance.score != 0; restartButton.interactable = MultiplayerGamePlayer.Instance.score != 0;
}
} }
}
} }
@@ -1,9 +1,9 @@
using UnityEngine; using UnityEngine;
public class MultiplayerGameTempData : MonoBehaviour { public class MultiplayerGameTempData : MonoBehaviour {
public MultiplayerPlayerFromResponse[] players; public MultiplayerPlayerFromResponse[] players;
void Awake() { void Awake() {
DontDestroyOnLoad(gameObject); DontDestroyOnLoad(gameObject);
} }
} }
+25 -25
View File
@@ -3,33 +3,33 @@ using UnityEngine;
[RequireComponent(typeof(TMP_Text))] [RequireComponent(typeof(TMP_Text))]
public class GlobalFPSText : MonoBehaviour { public class GlobalFPSText : MonoBehaviour {
private TMP_Text text; private TMP_Text text;
private float timer; private float timer;
private int frames; private int frames;
private float fps; private float fps;
void Awake() { void Awake() {
if (FindObjectsByType<GlobalFPSText>(FindObjectsSortMode.None).Length > 1) { if (FindObjectsByType<GlobalFPSText>(FindObjectsSortMode.None).Length > 1) {
Destroy(gameObject.transform.parent.gameObject); Destroy(gameObject.transform.parent.gameObject);
return; return;
}
DontDestroyOnLoad(transform.parent.gameObject);
text = GetComponent<TMP_Text>();
} }
DontDestroyOnLoad(transform.parent.gameObject);
text = GetComponent<TMP_Text>();
}
void Update() { void Update() {
var enabled = BazookaManager.Instance.GetSettingShowFPS(); var enabled = BazookaManager.Instance.GetSettingShowFPS();
if (!enabled && text.text != "") { if (!enabled && text.text != "") {
text.text = ""; text.text = "";
return; return;
} else if (!enabled) return; } else if (!enabled) return;
frames++; frames++;
timer += Time.unscaledDeltaTime; timer += Time.unscaledDeltaTime;
if (timer >= 0.25f) { if (timer >= 0.25f) {
fps = frames / timer; fps = frames / timer;
text.text = "FPS: " + Mathf.RoundToInt(fps); text.text = "FPS: " + Mathf.RoundToInt(fps);
frames = 0; frames = 0;
timer = 0; timer = 0;
}
} }
}
} }
@@ -11,273 +11,273 @@ using UnityEngine.Networking;
using UnityEngine.UI; using UnityEngine.UI;
public class IconMarketplaceDownloadIcon : MonoBehaviour { public class IconMarketplaceDownloadIcon : MonoBehaviour {
private readonly static WaitForSeconds _waitForSeconds2 = new(2f); private readonly static WaitForSeconds _waitForSeconds2 = new(2f);
[SerializeField] private IconMarketplaceManager marketplaceManager; [SerializeField] private IconMarketplaceManager marketplaceManager;
[SerializeField] private TMP_Text statusText; [SerializeField] private TMP_Text statusText;
[SerializeField] private TMP_Text balanceText; [SerializeField] private TMP_Text balanceText;
[SerializeField] private Button backButton; [SerializeField] private Button backButton;
public GameObject content; public GameObject content;
[SerializeField] private GameObject sample; [SerializeField] private GameObject sample;
private string statusMessage; private string statusMessage;
private Coroutine statusRoutine; private Coroutine statusRoutine;
public AudioSource iconPurchaseSound; public AudioSource iconPurchaseSound;
[SerializeField] internal Button refreshButton; [SerializeField] internal Button refreshButton;
[SerializeField] private Button optionsButton; [SerializeField] private Button optionsButton;
[SerializeField] internal GameObject optionsPanel; [SerializeField] internal GameObject optionsPanel;
[SerializeField] internal Button optionsPanelSubmitButton; [SerializeField] internal Button optionsPanelSubmitButton;
[SerializeField] private Button optionsPanelResetButton; [SerializeField] private Button optionsPanelResetButton;
public TMP_Dropdown optionsPanelSortByDropdown; public TMP_Dropdown optionsPanelSortByDropdown;
public Toggle optionsPanelPriceRangeToggle; public Toggle optionsPanelPriceRangeToggle;
[SerializeField] private TMP_InputField optionsPanelPriceRangeMinInput; [SerializeField] private TMP_InputField optionsPanelPriceRangeMinInput;
[SerializeField] private TMP_InputField optionsPanelPriceRangeMaxInput; [SerializeField] private TMP_InputField optionsPanelPriceRangeMaxInput;
internal string priceRangeMin = "10"; internal string priceRangeMin = "10";
internal string priceRangeMax = "250"; internal string priceRangeMax = "250";
public Toggle optionsPanelSearchForToggle; public Toggle optionsPanelSearchForToggle;
[SerializeField] private TMP_InputField optionsPanelSearchForInputField; [SerializeField] private TMP_InputField optionsPanelSearchForInputField;
internal string searchForValue = ""; internal string searchForValue = "";
[SerializeField] private Toggle optionsPanelOnlyShowToggle; [SerializeField] private Toggle optionsPanelOnlyShowToggle;
[SerializeField] private TMP_Dropdown optionsPanelOnlyShowDropdown; [SerializeField] private TMP_Dropdown optionsPanelOnlyShowDropdown;
internal bool anyChanges = false; internal bool anyChanges = false;
void Awake() { void Awake() {
optionsPanelPriceRangeMinInput.onSelect.AddListener((_) => optionsPanelPriceRangeMinInput.caretPosition = optionsPanelPriceRangeMinInput.text.Length); optionsPanelPriceRangeMinInput.onSelect.AddListener((_) => optionsPanelPriceRangeMinInput.caretPosition = optionsPanelPriceRangeMinInput.text.Length);
optionsPanelPriceRangeMaxInput.onSelect.AddListener((_) => optionsPanelPriceRangeMaxInput.caretPosition = optionsPanelPriceRangeMaxInput.text.Length); optionsPanelPriceRangeMaxInput.onSelect.AddListener((_) => optionsPanelPriceRangeMaxInput.caretPosition = optionsPanelPriceRangeMaxInput.text.Length);
optionsPanelSearchForInputField.onSelect.AddListener((_) => optionsPanelSearchForInputField.caretPosition = optionsPanelSearchForInputField.text.Length); optionsPanelSearchForInputField.onSelect.AddListener((_) => optionsPanelSearchForInputField.caretPosition = optionsPanelSearchForInputField.text.Length);
backButton.onClick.AddListener(() => marketplaceManager.SwitchPanel(0)); backButton.onClick.AddListener(() => marketplaceManager.SwitchPanel(0));
refreshButton.onClick.AddListener(GetIcons); refreshButton.onClick.AddListener(GetIcons);
optionsButton.onClick.AddListener(() => optionsPanel.SetActive(true)); optionsButton.onClick.AddListener(() => optionsPanel.SetActive(true));
optionsPanelSubmitButton.onClick.AddListener(() => { optionsPanelSubmitButton.onClick.AddListener(() => {
optionsPanel.SetActive(false); optionsPanel.SetActive(false);
if (anyChanges) { if (anyChanges) {
anyChanges = false; anyChanges = false;
GetIcons();
}
});
optionsPanelResetButton.onClick.AddListener(() => {
optionsPanelSortByDropdown.value = 3;
optionsPanelPriceRangeToggle.isOn = false;
optionsPanelSearchForToggle.isOn = false;
optionsPanelOnlyShowToggle.isOn = false;
});
optionsPanelPriceRangeToggle.onValueChanged.AddListener((on) => {
anyChanges = true;
if (!on) {
optionsPanelPriceRangeMinInput.text = "10";
optionsPanelPriceRangeMaxInput.text = "250";
}
optionsPanelPriceRangeMinInput.interactable = on;
optionsPanelPriceRangeMaxInput.interactable = on;
});
optionsPanelSearchForToggle.onValueChanged.AddListener((on) => {
anyChanges = true;
if (!on) optionsPanelSearchForInputField.text = "";
optionsPanelSearchForInputField.interactable = on;
});
optionsPanelOnlyShowToggle.onValueChanged.AddListener((on) => {
anyChanges = true;
if (!on) optionsPanelOnlyShowDropdown.value = 0;
optionsPanelOnlyShowDropdown.interactable = on;
});
optionsPanelSortByDropdown.onValueChanged.AddListener((_) => anyChanges = true);
optionsPanelPriceRangeMinInput.onValueChanged.AddListener((value) => {
anyChanges = true;
priceRangeMin = value;
});
optionsPanelPriceRangeMaxInput.onValueChanged.AddListener((value) => {
anyChanges = true;
priceRangeMax = value;
});
optionsPanelSearchForInputField.onValueChanged.AddListener((value) => {
anyChanges = true;
searchForValue = value;
});
optionsPanelOnlyShowDropdown.onValueChanged.AddListener((_) => anyChanges = true);
}
internal void Load() {
GetIcons(); GetIcons();
balanceText.text = Tools.FormatWithCommas(BazookaManager.Instance.GetCustomBirdIconData().Balance); }
});
optionsPanelResetButton.onClick.AddListener(() => {
optionsPanelSortByDropdown.value = 3;
optionsPanelPriceRangeToggle.isOn = false;
optionsPanelSearchForToggle.isOn = false;
optionsPanelOnlyShowToggle.isOn = false;
});
optionsPanelPriceRangeToggle.onValueChanged.AddListener((on) => {
anyChanges = true;
if (!on) {
optionsPanelPriceRangeMinInput.text = "10";
optionsPanelPriceRangeMaxInput.text = "250";
}
optionsPanelPriceRangeMinInput.interactable = on;
optionsPanelPriceRangeMaxInput.interactable = on;
});
optionsPanelSearchForToggle.onValueChanged.AddListener((on) => {
anyChanges = true;
if (!on) optionsPanelSearchForInputField.text = "";
optionsPanelSearchForInputField.interactable = on;
});
optionsPanelOnlyShowToggle.onValueChanged.AddListener((on) => {
anyChanges = true;
if (!on) optionsPanelOnlyShowDropdown.value = 0;
optionsPanelOnlyShowDropdown.interactable = on;
});
optionsPanelSortByDropdown.onValueChanged.AddListener((_) => anyChanges = true);
optionsPanelPriceRangeMinInput.onValueChanged.AddListener((value) => {
anyChanges = true;
priceRangeMin = value;
});
optionsPanelPriceRangeMaxInput.onValueChanged.AddListener((value) => {
anyChanges = true;
priceRangeMax = value;
});
optionsPanelSearchForInputField.onValueChanged.AddListener((value) => {
anyChanges = true;
searchForValue = value;
});
optionsPanelOnlyShowDropdown.onValueChanged.AddListener((_) => anyChanges = true);
}
internal void Load() {
GetIcons();
balanceText.text = Tools.FormatWithCommas(BazookaManager.Instance.GetCustomBirdIconData().Balance);
}
internal async void GetIcons() {
refreshButton.interactable = false;
optionsButton.interactable = false;
backButton.interactable = false;
foreach (Transform item in content.transform) {
if (item.gameObject.activeSelf) {
Destroy(item.gameObject);
}
}
var currentIcons = new JArray();
foreach (var icon in BazookaManager.Instance.GetCustomBirdIconData().Purchased) {
currentIcons.Add(icon);
}
ShowStatus("Loading...");
WWWForm dataForm = new();
dataForm.AddField("sortBy", optionsPanelSortByDropdown.value.ToString());
dataForm.AddField("priceRangeEnabled", optionsPanelPriceRangeToggle.isOn.ToString());
dataForm.AddField("priceRangeMin", priceRangeMin);
dataForm.AddField("priceRangeMax", priceRangeMax);
dataForm.AddField("searchForEnabled", optionsPanelSearchForToggle.isOn.ToString());
dataForm.AddField("searchForValue", searchForValue);
dataForm.AddField("onlyShowEnabled", optionsPanelOnlyShowToggle.isOn.ToString());
dataForm.AddField("onlyShowValue", optionsPanelOnlyShowDropdown.value.ToString());
dataForm.AddField("currentIcons", Convert.ToBase64String(Encoding.UTF8.GetBytes(currentIcons.ToString(Formatting.None))));
using UnityWebRequest request = UnityWebRequest.Post(Endpoints.ICON_MARKETPLACE_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) {
refreshButton.interactable = true;
optionsButton.interactable = true;
backButton.interactable = true;
ShowStatus("Failed to make HTTP request");
return;
}
ShowStatus(null);
var jsonResponse = JObject.Parse(request.downloadHandler.text);
var icons = JsonConvert.DeserializeObject<MarketplaceTempIcon[]>(jsonResponse["data"].ToString());
var localUserID = BazookaManager.Instance.GetAccountID();
foreach (var entry in icons) {
GameObject newIcon = Instantiate(sample, content.transform);
newIcon.name = "IconEntry";
newIcon.transform.GetChild(0).GetChild(0).gameObject.AddComponent<WaitingForCustomIcon>().ID = entry.ID;
newIcon.transform.GetChild(1).GetComponent<TMP_Text>().text = "Icon Name: " + entry.Name;
newIcon.transform.GetChild(2).GetComponent<TMP_Text>().text = "Price " + Tools.FormatWithCommas(entry.Price) + " coins";
newIcon.transform.GetChild(3).GetComponent<TMP_Text>().text = "Designer Name: " + entry.CreatorUsername;
var BtnGrid = newIcon.transform.GetChild(4);
var buyBtn = BtnGrid.transform.GetChild(0).GetComponent<Button>();
var buyBtnText = buyBtn.transform.GetChild(0).GetComponent<TMP_Text>();
var sellBtn = BtnGrid.transform.GetChild(1).GetComponent<Button>();
var sellBtnText = sellBtn.transform.GetChild(0).GetComponent<TMP_Text>();
sellBtn.onClick.AddListener(() => {
HandleSell(entry, buyBtn, buyBtnText, sellBtn, localUserID);
Tools.RefreshHierarchy(newIcon);
});
buyBtn.onClick.AddListener(() => {
HandlePurchase(entry, buyBtn, sellBtn, localUserID);
Tools.RefreshHierarchy(newIcon);
});
bool alreadyBought = BazookaManager.Instance.GetCustomBirdIconData().Purchased.Any(d => d == entry.ID);
if (alreadyBought) {
buyBtn.interactable = false;
sellBtn.gameObject.SetActive(true);
if (localUserID != entry.CreatorUserID)
buyBtnText.text = "Purchased";
else {
buyBtnText.text = "Claimed";
sellBtnText.text = "Unclaim";
}
} else {
if (localUserID != entry.CreatorUserID) buyBtnText.text = "Purchase";
else buyBtnText.text = "Claim";
}
newIcon.SetActive(true);
Tools.RefreshHierarchy(newIcon);
}
CustomIconLoader.Init(FindObjectsByType<WaitingForCustomIcon>(FindObjectsSortMode.None));
refreshButton.interactable = true;
optionsButton.interactable = true;
backButton.interactable = true;
}
void HandlePurchase(MarketplaceTempIcon data, Button button, Button sellButton, BigInteger? localUserID) {
button.interactable = false;
MarketplaceIconStorageType marketplaceIconStorage = BazookaManager.Instance.GetCustomBirdIconData();
if (localUserID != data.CreatorUserID) {
if (data.Price > marketplaceIconStorage.Balance) {
button.interactable = true;
ShowStatus("You can't afford this icon! You need " + Tools.FormatWithCommas(data.Price - marketplaceIconStorage.Balance) + " more coins");
return;
}
marketplaceIconStorage.Balance -= data.Price;
iconPurchaseSound.Stop();
iconPurchaseSound.Play();
}
marketplaceIconStorage.Purchased.Add(data.ID);
sellButton.gameObject.SetActive(true);
if (localUserID != data.CreatorUserID) {
button.transform.GetChild(0).GetComponent<TMP_Text>().text = "Purchased";
} else {
button.transform.GetChild(0).GetComponent<TMP_Text>().text = "Claimed";
sellButton.transform.GetChild(0).GetComponent<TMP_Text>().text = "Unclaim";
}
balanceText.text = Tools.FormatWithCommas(marketplaceIconStorage.Balance);
BazookaManager.Instance.SetCustomBirdIconData(marketplaceIconStorage);
}
void HandleSell(MarketplaceTempIcon data, Button buyBtn, TMP_Text buyBtnText, Button sellButton, BigInteger? localUserID) {
MarketplaceIconStorageType marketplaceIconStorage = BazookaManager.Instance.GetCustomBirdIconData();
var owned = marketplaceIconStorage.Purchased.Contains(data.ID);
if (owned) {
marketplaceIconStorage.Purchased.Remove(data.ID);
if (data.CreatorUserID != (BazookaManager.Instance.GetAccountID() ?? 0)) {
marketplaceIconStorage.Balance += data.Price;
iconPurchaseSound.Stop();
iconPurchaseSound.Play();
}
if (data.ID == marketplaceIconStorage.Selected) marketplaceIconStorage.Selected = null;
balanceText.text = Tools.FormatWithCommas(marketplaceIconStorage.Balance);
BazookaManager.Instance.SetCustomBirdIconData(marketplaceIconStorage);
if (localUserID != data.CreatorUserID) buyBtnText.text = "Purchase";
else {
buyBtnText.text = "Claim";
buyBtnText.text = "Claim";
}
buyBtn.interactable = true;
sellButton.gameObject.SetActive(false);
}
}
void ShowStatus(string content) {
if (content == null) {
if (statusRoutine != null) StopCoroutine(statusRoutine);
statusText.gameObject.SetActive(false);
statusText.text = "";
}
statusMessage = content;
if (statusRoutine != null) StopCoroutine(statusRoutine);
statusRoutine = StartCoroutine(StatusRoutine());
}
IEnumerator StatusRoutine() {
statusText.gameObject.SetActive(true);
statusText.text = statusMessage;
statusText.color = new Color(statusText.color.r, statusText.color.g, statusText.color.b, 0f);
float t = 0f;
while (t < 0.5f) {
t += Time.deltaTime;
float a = t / 0.5f;
statusText.color = new Color(statusText.color.r, statusText.color.g, statusText.color.b, a);
yield return null;
} }
internal async void GetIcons() { yield return _waitForSeconds2;
refreshButton.interactable = false;
optionsButton.interactable = false;
backButton.interactable = false;
foreach (Transform item in content.transform) {
if (item.gameObject.activeSelf) {
Destroy(item.gameObject);
}
}
var currentIcons = new JArray();
foreach (var icon in BazookaManager.Instance.GetCustomBirdIconData().Purchased) {
currentIcons.Add(icon);
}
ShowStatus("Loading...");
WWWForm dataForm = new();
dataForm.AddField("sortBy", optionsPanelSortByDropdown.value.ToString());
dataForm.AddField("priceRangeEnabled", optionsPanelPriceRangeToggle.isOn.ToString());
dataForm.AddField("priceRangeMin", priceRangeMin);
dataForm.AddField("priceRangeMax", priceRangeMax);
dataForm.AddField("searchForEnabled", optionsPanelSearchForToggle.isOn.ToString());
dataForm.AddField("searchForValue", searchForValue);
dataForm.AddField("onlyShowEnabled", optionsPanelOnlyShowToggle.isOn.ToString());
dataForm.AddField("onlyShowValue", optionsPanelOnlyShowDropdown.value.ToString());
dataForm.AddField("currentIcons", Convert.ToBase64String(Encoding.UTF8.GetBytes(currentIcons.ToString(Formatting.None))));
using UnityWebRequest request = UnityWebRequest.Post(Endpoints.ICON_MARKETPLACE_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) {
refreshButton.interactable = true;
optionsButton.interactable = true;
backButton.interactable = true;
ShowStatus("Failed to make HTTP request");
return;
}
ShowStatus(null);
var jsonResponse = JObject.Parse(request.downloadHandler.text);
var icons = JsonConvert.DeserializeObject<MarketplaceTempIcon[]>(jsonResponse["data"].ToString());
var localUserID = BazookaManager.Instance.GetAccountID();
foreach (var entry in icons) {
GameObject newIcon = Instantiate(sample, content.transform);
newIcon.name = "IconEntry";
newIcon.transform.GetChild(0).GetChild(0).gameObject.AddComponent<WaitingForCustomIcon>().ID = entry.ID;
newIcon.transform.GetChild(1).GetComponent<TMP_Text>().text = "Icon Name: " + entry.Name;
newIcon.transform.GetChild(2).GetComponent<TMP_Text>().text = "Price " + Tools.FormatWithCommas(entry.Price) + " coins";
newIcon.transform.GetChild(3).GetComponent<TMP_Text>().text = "Designer Name: " + entry.CreatorUsername;
var BtnGrid = newIcon.transform.GetChild(4); t = 0f;
var buyBtn = BtnGrid.transform.GetChild(0).GetComponent<Button>(); while (t < 0.5f) {
var buyBtnText = buyBtn.transform.GetChild(0).GetComponent<TMP_Text>(); t += Time.deltaTime;
var sellBtn = BtnGrid.transform.GetChild(1).GetComponent<Button>(); float a = 1f - (t / 0.5f);
var sellBtnText = sellBtn.transform.GetChild(0).GetComponent<TMP_Text>(); statusText.color = new Color(statusText.color.r, statusText.color.g, statusText.color.b, a);
yield return null;
sellBtn.onClick.AddListener(() => {
HandleSell(entry, buyBtn, buyBtnText, sellBtn, localUserID);
Tools.RefreshHierarchy(newIcon);
});
buyBtn.onClick.AddListener(() => {
HandlePurchase(entry, buyBtn, sellBtn, localUserID);
Tools.RefreshHierarchy(newIcon);
});
bool alreadyBought = BazookaManager.Instance.GetCustomBirdIconData().Purchased.Any(d => d == entry.ID);
if (alreadyBought) {
buyBtn.interactable = false;
sellBtn.gameObject.SetActive(true);
if (localUserID != entry.CreatorUserID)
buyBtnText.text = "Purchased";
else {
buyBtnText.text = "Claimed";
sellBtnText.text = "Unclaim";
}
} else {
if (localUserID != entry.CreatorUserID) buyBtnText.text = "Purchase";
else buyBtnText.text = "Claim";
}
newIcon.SetActive(true);
Tools.RefreshHierarchy(newIcon);
}
CustomIconLoader.Init(FindObjectsByType<WaitingForCustomIcon>(FindObjectsSortMode.None));
refreshButton.interactable = true;
optionsButton.interactable = true;
backButton.interactable = true;
} }
void HandlePurchase(MarketplaceTempIcon data, Button button, Button sellButton, BigInteger? localUserID) { statusText.gameObject.SetActive(false);
button.interactable = false; statusText.text = "";
MarketplaceIconStorageType marketplaceIconStorage = BazookaManager.Instance.GetCustomBirdIconData(); statusRoutine = null;
if (localUserID != data.CreatorUserID) { }
if (data.Price > marketplaceIconStorage.Balance) {
button.interactable = true;
ShowStatus("You can't afford this icon! You need " + Tools.FormatWithCommas(data.Price - marketplaceIconStorage.Balance) + " more coins");
return;
}
marketplaceIconStorage.Balance -= data.Price;
iconPurchaseSound.Stop();
iconPurchaseSound.Play();
}
marketplaceIconStorage.Purchased.Add(data.ID);
sellButton.gameObject.SetActive(true);
if (localUserID != data.CreatorUserID) {
button.transform.GetChild(0).GetComponent<TMP_Text>().text = "Purchased";
} else {
button.transform.GetChild(0).GetComponent<TMP_Text>().text = "Claimed";
sellButton.transform.GetChild(0).GetComponent<TMP_Text>().text = "Unclaim";
}
balanceText.text = Tools.FormatWithCommas(marketplaceIconStorage.Balance);
BazookaManager.Instance.SetCustomBirdIconData(marketplaceIconStorage);
}
void HandleSell(MarketplaceTempIcon data, Button buyBtn, TMP_Text buyBtnText, Button sellButton, BigInteger? localUserID) {
MarketplaceIconStorageType marketplaceIconStorage = BazookaManager.Instance.GetCustomBirdIconData();
var owned = marketplaceIconStorage.Purchased.Contains(data.ID);
if (owned) {
marketplaceIconStorage.Purchased.Remove(data.ID);
if (data.CreatorUserID != (BazookaManager.Instance.GetAccountID() ?? 0)) {
marketplaceIconStorage.Balance += data.Price;
iconPurchaseSound.Stop();
iconPurchaseSound.Play();
}
if (data.ID == marketplaceIconStorage.Selected) marketplaceIconStorage.Selected = null;
balanceText.text = Tools.FormatWithCommas(marketplaceIconStorage.Balance);
BazookaManager.Instance.SetCustomBirdIconData(marketplaceIconStorage);
if (localUserID != data.CreatorUserID) buyBtnText.text = "Purchase";
else {
buyBtnText.text = "Claim";
buyBtnText.text = "Claim";
}
buyBtn.interactable = true;
sellButton.gameObject.SetActive(false);
}
}
void ShowStatus(string content) {
if (content == null) {
if (statusRoutine != null) StopCoroutine(statusRoutine);
statusText.gameObject.SetActive(false);
statusText.text = "";
}
statusMessage = content;
if (statusRoutine != null) StopCoroutine(statusRoutine);
statusRoutine = StartCoroutine(StatusRoutine());
}
IEnumerator StatusRoutine() {
statusText.gameObject.SetActive(true);
statusText.text = statusMessage;
statusText.color = new Color(statusText.color.r, statusText.color.g, statusText.color.b, 0f);
float t = 0f;
while (t < 0.5f) {
t += Time.deltaTime;
float a = t / 0.5f;
statusText.color = new Color(statusText.color.r, statusText.color.g, statusText.color.b, a);
yield return null;
}
yield return _waitForSeconds2;
t = 0f;
while (t < 0.5f) {
t += Time.deltaTime;
float a = 1f - (t / 0.5f);
statusText.color = new Color(statusText.color.r, statusText.color.g, statusText.color.b, a);
yield return null;
}
statusText.gameObject.SetActive(false);
statusText.text = "";
statusRoutine = null;
}
} }
@@ -6,72 +6,72 @@ using UnityEngine.SceneManagement;
using UnityEngine.UI; using UnityEngine.UI;
public class IconMarketplaceManager : MonoBehaviour { public class IconMarketplaceManager : MonoBehaviour {
[SerializeField] private GameObject normalPanel; [SerializeField] private GameObject normalPanel;
[SerializeField] private GameObject downloadPanel; [SerializeField] private GameObject downloadPanel;
[SerializeField] private GameObject uploadPanel; [SerializeField] private GameObject uploadPanel;
[SerializeField] private IconMarketplaceUploadIcon uploadPanelScript; [SerializeField] private IconMarketplaceUploadIcon uploadPanelScript;
[SerializeField] private IconMarketplaceDownloadIcon downloadPanelScript; [SerializeField] private IconMarketplaceDownloadIcon downloadPanelScript;
[SerializeField] private Button downloadButton; [SerializeField] private Button downloadButton;
[SerializeField] private Button uploadButton; [SerializeField] private Button uploadButton;
[SerializeField] private TMP_Text coinText; [SerializeField] private TMP_Text coinText;
void Start() { void Start() {
downloadPanelScript.iconPurchaseSound.volume = BazookaManager.Instance.GetSettingSFXVolume(); downloadPanelScript.iconPurchaseSound.volume = BazookaManager.Instance.GetSettingSFXVolume();
downloadButton.onClick.AddListener(() => SwitchPanel(1)); downloadButton.onClick.AddListener(() => SwitchPanel(1));
if (BazookaManager.Instance.GetAccountID() != null && BazookaManager.Instance.GetAccountName() != null && BazookaManager.Instance.GetAccountSession() != null) { if (BazookaManager.Instance.GetAccountID() != null && BazookaManager.Instance.GetAccountName() != null && BazookaManager.Instance.GetAccountSession() != null) {
uploadButton.onClick.AddListener(() => SwitchPanel(2)); uploadButton.onClick.AddListener(() => SwitchPanel(2));
} else { } else {
uploadButton.interactable = false; uploadButton.interactable = false;
uploadButton.transform.GetChild(0).transform.localPosition = new Vector3(0, 10, 0); uploadButton.transform.GetChild(0).transform.localPosition = new Vector3(0, 10, 0);
uploadButton.transform.GetChild(1).GetComponent<TMP_Text>().text = "Not logged in to an account"; uploadButton.transform.GetChild(1).GetComponent<TMP_Text>().text = "Not logged in to an account";
}
SwitchPanel(0);
}
internal void SwitchPanel(int panelIndex) {
downloadPanelScript.iconPurchaseSound.Stop();
downloadPanelScript.anyChanges = false;
downloadPanelScript.optionsPanelSortByDropdown.value = 3;
downloadPanelScript.optionsPanelPriceRangeToggle.isOn = false;
downloadPanelScript.optionsPanelSearchForToggle.isOn = false;
switch (panelIndex) {
case 0:
coinText.text = "You have " + Tools.FormatWithCommas(BazookaManager.Instance.GetCustomBirdIconData().Balance) + " coins";
normalPanel.SetActive(true);
downloadPanel.SetActive(false);
uploadPanel.SetActive(false);
if (DiscordRPCHandler.Instance != null) DiscordRPCHandler.Instance.UpdateRPC("Choosing what to do in the icon marketplace", null);
break;
case 1:
foreach (Transform item in downloadPanelScript.content.transform) {
if (item.gameObject.activeSelf) {
Destroy(item.gameObject);
}
} }
SwitchPanel(0); normalPanel.SetActive(false);
downloadPanel.SetActive(true);
uploadPanel.SetActive(false);
downloadPanelScript.Load();
if (DiscordRPCHandler.Instance != null) DiscordRPCHandler.Instance.UpdateRPC("Browsing the icon marketplace", "They have " + Tools.FormatWithCommas(BazookaManager.Instance.GetCustomBirdIconData().Balance) + " coins");
break;
case 2:
uploadPanelScript.Reset();
normalPanel.SetActive(false);
downloadPanel.SetActive(false);
uploadPanel.SetActive(true);
if (DiscordRPCHandler.Instance != null) DiscordRPCHandler.Instance.UpdateRPC("Uploading an icon to the icon marketplace", null);
break;
} }
}
internal void SwitchPanel(int panelIndex) { async void Update() {
downloadPanelScript.iconPurchaseSound.Stop(); if (Keyboard.current.escapeKey.wasPressedThisFrame) {
downloadPanelScript.anyChanges = false; if (downloadPanelScript.optionsPanel.activeSelf) downloadPanelScript.optionsPanelSubmitButton.onClick.Invoke();
downloadPanelScript.optionsPanelSortByDropdown.value = 3; else if (uploadPanel.activeSelf && FileBrowser.IsOpen) return;
downloadPanelScript.optionsPanelPriceRangeToggle.isOn = false; else if (downloadPanel.activeSelf || uploadPanel.activeSelf) SwitchPanel(0);
downloadPanelScript.optionsPanelSearchForToggle.isOn = false; else await SceneManager.LoadSceneAsync("MainMenu");
switch (panelIndex) { } else if (Keyboard.current.rKey.wasPressedThisFrame && downloadPanel.activeSelf && downloadPanelScript.refreshButton.interactable) downloadPanelScript.GetIcons();
case 0: }
coinText.text = "You have " + Tools.FormatWithCommas(BazookaManager.Instance.GetCustomBirdIconData().Balance) + " coins";
normalPanel.SetActive(true);
downloadPanel.SetActive(false);
uploadPanel.SetActive(false);
if (DiscordRPCHandler.Instance != null) DiscordRPCHandler.Instance.UpdateRPC("Choosing what to do in the icon marketplace", null);
break;
case 1:
foreach (Transform item in downloadPanelScript.content.transform) {
if (item.gameObject.activeSelf) {
Destroy(item.gameObject);
}
}
normalPanel.SetActive(false);
downloadPanel.SetActive(true);
uploadPanel.SetActive(false);
downloadPanelScript.Load();
if (DiscordRPCHandler.Instance != null) DiscordRPCHandler.Instance.UpdateRPC("Browsing the icon marketplace", "They have " + Tools.FormatWithCommas(BazookaManager.Instance.GetCustomBirdIconData().Balance) + " coins");
break;
case 2:
uploadPanelScript.Reset();
normalPanel.SetActive(false);
downloadPanel.SetActive(false);
uploadPanel.SetActive(true);
if (DiscordRPCHandler.Instance != null) DiscordRPCHandler.Instance.UpdateRPC("Uploading an icon to the icon marketplace", null);
break;
}
}
async void Update() {
if (Keyboard.current.escapeKey.wasPressedThisFrame) {
if (downloadPanelScript.optionsPanel.activeSelf) downloadPanelScript.optionsPanelSubmitButton.onClick.Invoke();
else if (uploadPanel.activeSelf && FileBrowser.IsOpen) return;
else if (downloadPanel.activeSelf || uploadPanel.activeSelf) SwitchPanel(0);
else await SceneManager.LoadSceneAsync("MainMenu");
} else if (Keyboard.current.rKey.wasPressedThisFrame && downloadPanel.activeSelf && downloadPanelScript.refreshButton.interactable) downloadPanelScript.GetIcons();
}
} }
@@ -9,110 +9,110 @@ using UnityEngine.Networking;
using UnityEngine.UI; using UnityEngine.UI;
public class IconMarketplaceUploadIcon : MonoBehaviour { public class IconMarketplaceUploadIcon : MonoBehaviour {
[SerializeField] private IconMarketplaceManager marketplaceManager; [SerializeField] private IconMarketplaceManager marketplaceManager;
[SerializeField] private TMP_Text statusText; [SerializeField] private TMP_Text statusText;
[SerializeField] private Button backButton; [SerializeField] private Button backButton;
[SerializeField] private Button uploadButton; [SerializeField] private Button uploadButton;
[SerializeField] private Button selectButton; [SerializeField] private Button selectButton;
[SerializeField] private TMP_InputField verifyCodeInput; [SerializeField] private TMP_InputField verifyCodeInput;
[SerializeField] private TMP_InputField birdPriceInput; [SerializeField] private TMP_InputField birdPriceInput;
[SerializeField] private TMP_InputField birdNameInput; [SerializeField] private TMP_InputField birdNameInput;
[SerializeField] private Image birdImage; [SerializeField] private Image birdImage;
[SerializeField] private GameObject birdImageNone; [SerializeField] private GameObject birdImageNone;
private string birdData = null; private string birdData = null;
void Awake() { void Awake() {
verifyCodeInput.onSelect.AddListener((_) => verifyCodeInput.caretPosition = verifyCodeInput.text.Length); verifyCodeInput.onSelect.AddListener((_) => verifyCodeInput.caretPosition = verifyCodeInput.text.Length);
birdPriceInput.onSelect.AddListener((_) => birdPriceInput.caretPosition = birdPriceInput.text.Length); birdPriceInput.onSelect.AddListener((_) => birdPriceInput.caretPosition = birdPriceInput.text.Length);
birdNameInput.onSelect.AddListener((_) => birdNameInput.caretPosition = birdNameInput.text.Length); birdNameInput.onSelect.AddListener((_) => birdNameInput.caretPosition = birdNameInput.text.Length);
backButton.onClick.AddListener(() => marketplaceManager.SwitchPanel(0)); backButton.onClick.AddListener(() => marketplaceManager.SwitchPanel(0));
uploadButton.onClick.AddListener(() => { uploadButton.onClick.AddListener(() => {
if (birdPriceInput.text.Trim() == string.Empty) { if (birdPriceInput.text.Trim() == string.Empty) {
Tools.UpdateStatusText(statusText, "Bird price can't be empty", Color.red); Tools.UpdateStatusText(statusText, "Bird price can't be empty", Color.red);
} else if (birdNameInput.text.Trim() == string.Empty) { } else if (birdNameInput.text.Trim() == string.Empty) {
Tools.UpdateStatusText(statusText, "Bird name can't be empty", Color.red); Tools.UpdateStatusText(statusText, "Bird name can't be empty", Color.red);
} else if (birdData == null) { } else if (birdData == null) {
Tools.UpdateStatusText(statusText, "You must upload an image", Color.red); Tools.UpdateStatusText(statusText, "You must upload an image", Color.red);
} else { } else {
UploadIcon(); UploadIcon();
} }
}); });
selectButton.onClick.AddListener(async () => { selectButton.onClick.AddListener(async () => {
string path = await OpenFilePicker(); string path = await OpenFilePicker();
if (path == null) return; if (path == null) return;
byte[] fileContent; byte[] fileContent;
try { try {
fileContent = File.ReadAllBytes(path); fileContent = File.ReadAllBytes(path);
if (fileContent.Length > 1024 * 1024) { if (fileContent.Length > 1024 * 1024) {
Tools.UpdateStatusText(statusText, "File size exceeds 1 MB limit", Color.red); Tools.UpdateStatusText(statusText, "File size exceeds 1 MB limit", Color.red);
return; return;
}
birdData = Convert.ToBase64String(fileContent);
birdImage.sprite = Tools.GetSpriteFromBase64(birdData);
birdImageNone.SetActive(false);
birdImage.gameObject.SetActive(true);
}
catch (Exception e) {
Tools.UpdateStatusText(statusText, "Failed to read file: " + e.Message, Color.red);
return;
}
});
}
async Task<string> OpenFilePicker() {
FileBrowser.SetFilters(true, new FileBrowser.Filter("Images", ".png"));
var tcs = new TaskCompletionSource<string>();
FileBrowser.ShowLoadDialog(
(paths) => tcs.SetResult(paths.Length > 0 ? paths[0] : null),
() => tcs.SetResult(null),
FileBrowser.PickMode.Files,
false
);
return await tcs.Task;
}
async void UploadIcon() {
uploadButton.interactable = false;
backButton.interactable = false;
selectButton.interactable = false;
WWWForm dataForm = new();
dataForm.AddField("verifyCode", verifyCodeInput.text);
dataForm.AddField("price", birdPriceInput.text);
dataForm.AddField("name", birdNameInput.text);
dataForm.AddField("fileContent", birdData);
using UnityWebRequest request = UnityWebRequest.Post(Endpoints.ICON_MARKETPLACE_UPLOAD_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) {
uploadButton.interactable = true;
backButton.interactable = true;
selectButton.interactable = true;
Tools.UpdateStatusText(statusText, "Failed to make HTTP request", Color.red);
return;
} }
var jsonResponse = JObject.Parse(request.downloadHandler.text); birdData = Convert.ToBase64String(fileContent);
if ((bool)jsonResponse["success"]) Reset(); birdImage.sprite = Tools.GetSpriteFromBase64(birdData);
Tools.UpdateStatusText(statusText, (string)jsonResponse["message"], (bool)jsonResponse["success"] ? Color.green : Color.red); birdImageNone.SetActive(false);
uploadButton.interactable = true; birdImage.gameObject.SetActive(true);
backButton.interactable = true; }
selectButton.interactable = true; catch (Exception e) {
} Tools.UpdateStatusText(statusText, "Failed to read file: " + e.Message, Color.red);
return;
}
});
}
internal void Reset() { async Task<string> OpenFilePicker() {
birdImage.sprite = null; FileBrowser.SetFilters(true, new FileBrowser.Filter("Images", ".png"));
birdImageNone.SetActive(true);
birdImage.gameObject.SetActive(false); var tcs = new TaskCompletionSource<string>();
birdData = null;
verifyCodeInput.text = string.Empty; FileBrowser.ShowLoadDialog(
birdPriceInput.text = string.Empty; (paths) => tcs.SetResult(paths.Length > 0 ? paths[0] : null),
birdNameInput.text = string.Empty; () => tcs.SetResult(null),
statusText.text = string.Empty; FileBrowser.PickMode.Files,
false
);
return await tcs.Task;
}
async void UploadIcon() {
uploadButton.interactable = false;
backButton.interactable = false;
selectButton.interactable = false;
WWWForm dataForm = new();
dataForm.AddField("verifyCode", verifyCodeInput.text);
dataForm.AddField("price", birdPriceInput.text);
dataForm.AddField("name", birdNameInput.text);
dataForm.AddField("fileContent", birdData);
using UnityWebRequest request = UnityWebRequest.Post(Endpoints.ICON_MARKETPLACE_UPLOAD_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) {
uploadButton.interactable = true;
backButton.interactable = true;
selectButton.interactable = true;
Tools.UpdateStatusText(statusText, "Failed to make HTTP request", Color.red);
return;
} }
var jsonResponse = JObject.Parse(request.downloadHandler.text);
if ((bool)jsonResponse["success"]) Reset();
Tools.UpdateStatusText(statusText, (string)jsonResponse["message"], (bool)jsonResponse["success"] ? Color.green : Color.red);
uploadButton.interactable = true;
backButton.interactable = true;
selectButton.interactable = true;
}
internal void Reset() {
birdImage.sprite = null;
birdImageNone.SetActive(true);
birdImage.gameObject.SetActive(false);
birdData = null;
verifyCodeInput.text = string.Empty;
birdPriceInput.text = string.Empty;
birdNameInput.text = string.Empty;
statusText.text = string.Empty;
}
} }
+188 -188
View File
@@ -8,208 +8,208 @@ using UnityEngine.SceneManagement;
using UnityEngine.UI; using UnityEngine.UI;
public class Iconsmenu : MonoBehaviour { public class Iconsmenu : MonoBehaviour {
[SerializeField] private GameObject iconsPanel; [SerializeField] private GameObject iconsPanel;
[SerializeField] private GameObject overlaysPanel; [SerializeField] private GameObject overlaysPanel;
[SerializeField] private GameObject marketplaceIconsPanel; [SerializeField] private GameObject marketplaceIconsPanel;
[SerializeField] private GameObject marketplaceIconsContent; [SerializeField] private GameObject marketplaceIconsContent;
[SerializeField] private GameObject marketplaceIconsSample; [SerializeField] private GameObject marketplaceIconsSample;
[SerializeField] private Sprite defaultIcon; [SerializeField] private Sprite defaultIcon;
[SerializeField] private Button placeholderButton; [SerializeField] private Button placeholderButton;
[SerializeField] private TMP_Text selectionText; [SerializeField] private TMP_Text selectionText;
[SerializeField] private Image previewBird; [SerializeField] private Image previewBird;
[SerializeField] private Image previewOverlay; [SerializeField] private Image previewOverlay;
[SerializeField] private Button[] icons; [SerializeField] private Button[] icons;
[SerializeField] private Button[] overlays; [SerializeField] private Button[] overlays;
[SerializeField] private GameObject previewBirdObject; [SerializeField] private GameObject previewBirdObject;
[SerializeField] private ColorPanel iconColorPanel; [SerializeField] private ColorPanel iconColorPanel;
[SerializeField] private ColorPanel overlayColorPanel; [SerializeField] private ColorPanel overlayColorPanel;
private readonly Dictionary<string, Button> customIcons = new(); private readonly Dictionary<string, Button> customIcons = new();
private void Start() { private void Start() {
var customIconData = BazookaManager.Instance.GetCustomBirdIconData(); var customIconData = BazookaManager.Instance.GetCustomBirdIconData();
foreach (var icon in customIconData.Purchased) { foreach (var icon in customIconData.Purchased) {
var iconEntry = Instantiate(marketplaceIconsSample, marketplaceIconsContent.transform); var iconEntry = Instantiate(marketplaceIconsSample, marketplaceIconsContent.transform);
iconEntry.name = "MarketplaceIcon"; iconEntry.name = "MarketplaceIcon";
var button = iconEntry.GetComponent<Button>(); var button = iconEntry.GetComponent<Button>();
customIcons[icon] = button; customIcons[icon] = button;
button.onClick.AddListener(() => SelectCustomIcon(icon)); button.onClick.AddListener(() => SelectCustomIcon(icon));
iconEntry.transform.GetChild(0).AddComponent<WaitingForCustomIcon>().ID = icon; iconEntry.transform.GetChild(0).AddComponent<WaitingForCustomIcon>().ID = icon;
iconEntry.SetActive(true); iconEntry.SetActive(true);
}
iconColorPanel.Init(customIconData.Selected == null ? BazookaManager.Instance.GetColorSettingIcon() : JArray.Parse("[255,255,255]"), Color.white);
iconColorPanel.OnColorChanged += color => {
BazookaManager.Instance.SetColorSettingIcon(color);
foreach (var icon in icons)
icon.transform.GetChild(0).GetComponent<Image>().color = new Color(
int.Parse(color[0].ToString()) / 255f,
int.Parse(color[1].ToString()) / 255f,
int.Parse(color[2].ToString()) / 255f
);
};
overlayColorPanel.Init(customIconData.Selected == null ? BazookaManager.Instance.GetColorSettingOverlay() : JArray.Parse("[255,255,255]"), Color.white);
overlayColorPanel.OnColorChanged += color => {
BazookaManager.Instance.SetColorSettingOverlay(color);
foreach (var overlay in overlays) {
var img = overlay.transform.GetChild(0).TryGetComponent<Image>(out var image) ? image : null;
if (img == null) continue;
img.color = new Color(
int.Parse(color[0].ToString()) / 255f,
int.Parse(color[1].ToString()) / 255f,
int.Parse(color[2].ToString()) / 255f
);
}
};
if (customIconData.Selected == null) {
defaultIcon = Tools.GetIconForUser(BazookaManager.Instance.GetAccountID() ?? 0);
icons[0].transform.GetChild(0).GetComponent<Image>().sprite = defaultIcon;
SwitchToIcon();
SelectOverlay(BazookaManager.Instance.GetBirdOverlay());
SelectIcon(BazookaManager.Instance.GetBirdIcon());
if (BazookaManager.Instance.GetBirdIcon() == 7) {
SelectOverlay(0);
placeholderButton.interactable = false;
}
} else SwitchToMarketplaceIcons();
placeholderButton.onClick.AddListener(ToggleKit);
previewBird.GetComponentInParent<Button>().onClick.AddListener(() => {
var scale = previewBird.transform.localScale;
scale.x = scale.x == -1 ? 1 : -1;
previewBird.transform.localScale = scale;
});
for (int i = 0; i < icons.Length; i++) {
int index = i;
icons[i].onClick.AddListener(() => SelectIcon(index + 1));
}
for (int i = 0; i < overlays.Length; i++) {
int index = i;
overlays[i].onClick.AddListener(() => SelectOverlay(index));
}
} }
iconColorPanel.Init(customIconData.Selected == null ? BazookaManager.Instance.GetColorSettingIcon() : JArray.Parse("[255,255,255]"), Color.white);
iconColorPanel.OnColorChanged += color => {
BazookaManager.Instance.SetColorSettingIcon(color);
foreach (var icon in icons)
icon.transform.GetChild(0).GetComponent<Image>().color = new Color(
int.Parse(color[0].ToString()) / 255f,
int.Parse(color[1].ToString()) / 255f,
int.Parse(color[2].ToString()) / 255f
);
};
overlayColorPanel.Init(customIconData.Selected == null ? BazookaManager.Instance.GetColorSettingOverlay() : JArray.Parse("[255,255,255]"), Color.white);
overlayColorPanel.OnColorChanged += color => {
BazookaManager.Instance.SetColorSettingOverlay(color);
foreach (var overlay in overlays) {
var img = overlay.transform.GetChild(0).TryGetComponent<Image>(out var image) ? image : null;
if (img == null) continue;
private void SwitchToIcon() { img.color = new Color(
iconsPanel.SetActive(true); int.Parse(color[0].ToString()) / 255f,
overlaysPanel.SetActive(false); int.Parse(color[1].ToString()) / 255f,
marketplaceIconsPanel.SetActive(false); int.Parse(color[2].ToString()) / 255f
selectionText.text = "Icon selection"; );
placeholderButton.GetComponentInChildren<TMP_Text>().text = "Overlays"; }
iconColorPanel.gameObject.SetActive(true); };
overlayColorPanel.gameObject.SetActive(true);
if (customIconData.Selected == null) {
defaultIcon = Tools.GetIconForUser(BazookaManager.Instance.GetAccountID() ?? 0);
icons[0].transform.GetChild(0).GetComponent<Image>().sprite = defaultIcon;
SwitchToIcon();
SelectOverlay(BazookaManager.Instance.GetBirdOverlay());
SelectIcon(BazookaManager.Instance.GetBirdIcon());
if (BazookaManager.Instance.GetBirdIcon() == 7) {
SelectOverlay(0);
placeholderButton.interactable = false;
}
} else SwitchToMarketplaceIcons();
placeholderButton.onClick.AddListener(ToggleKit);
previewBird.GetComponentInParent<Button>().onClick.AddListener(() => {
var scale = previewBird.transform.localScale;
scale.x = scale.x == -1 ? 1 : -1;
previewBird.transform.localScale = scale;
});
for (int i = 0; i < icons.Length; i++) {
int index = i;
icons[i].onClick.AddListener(() => SelectIcon(index + 1));
} }
for (int i = 0; i < overlays.Length; i++) {
private void SwitchToOverlay() { int index = i;
iconsPanel.SetActive(false); overlays[i].onClick.AddListener(() => SelectOverlay(index));
overlaysPanel.SetActive(true);
marketplaceIconsPanel.SetActive(false);
selectionText.text = "Overlay selection";
placeholderButton.GetComponentInChildren<TMP_Text>().text = "Marketplace";
} }
}
private void SwitchToMarketplaceIcons() { private void SwitchToIcon() {
iconsPanel.SetActive(false); iconsPanel.SetActive(true);
overlaysPanel.SetActive(false); overlaysPanel.SetActive(false);
marketplaceIconsPanel.SetActive(true); marketplaceIconsPanel.SetActive(false);
selectionText.text = "Marketplace Icons selection"; selectionText.text = "Icon selection";
placeholderButton.GetComponentInChildren<TMP_Text>().text = "Icons"; placeholderButton.GetComponentInChildren<TMP_Text>().text = "Overlays";
iconColorPanel.gameObject.SetActive(false); iconColorPanel.gameObject.SetActive(true);
overlayColorPanel.gameObject.SetActive(false); overlayColorPanel.gameObject.SetActive(true);
var customIconData = BazookaManager.Instance.GetCustomBirdIconData(); }
foreach (var btn in customIcons.Values) btn.interactable = true;
if (customIconData.Selected != null)
foreach (var icon in customIconData.Purchased) {
if (icon == customIconData.Selected) SelectCustomIcon(icon, false);
customIcons[icon].interactable = icon != customIconData.Selected;
}
RenderIcons(); private void SwitchToOverlay() {
iconsPanel.SetActive(false);
overlaysPanel.SetActive(true);
marketplaceIconsPanel.SetActive(false);
selectionText.text = "Overlay selection";
placeholderButton.GetComponentInChildren<TMP_Text>().text = "Marketplace";
}
private void SwitchToMarketplaceIcons() {
iconsPanel.SetActive(false);
overlaysPanel.SetActive(false);
marketplaceIconsPanel.SetActive(true);
selectionText.text = "Marketplace Icons selection";
placeholderButton.GetComponentInChildren<TMP_Text>().text = "Icons";
iconColorPanel.gameObject.SetActive(false);
overlayColorPanel.gameObject.SetActive(false);
var customIconData = BazookaManager.Instance.GetCustomBirdIconData();
foreach (var btn in customIcons.Values) btn.interactable = true;
if (customIconData.Selected != null)
foreach (var icon in customIconData.Purchased) {
if (icon == customIconData.Selected) SelectCustomIcon(icon, false);
customIcons[icon].interactable = icon != customIconData.Selected;
}
RenderIcons();
}
private void ToggleKit() {
if (GetCurrentKit() == 1) SwitchToOverlay();
else if (GetCurrentKit() == 2) SwitchToMarketplaceIcons();
else if (GetCurrentKit() == 3) {
defaultIcon = Tools.GetIconForUser(BazookaManager.Instance.GetAccountID() ?? 0);
icons[0].transform.GetChild(0).GetComponent<Image>().sprite = defaultIcon;
SwitchToIcon();
SelectOverlay(BazookaManager.Instance.GetBirdOverlay());
SelectIcon(BazookaManager.Instance.GetBirdIcon());
iconColorPanel.SetColor(BazookaManager.Instance.GetColorSettingIcon());
overlayColorPanel.SetColor(BazookaManager.Instance.GetColorSettingOverlay());
if (BazookaManager.Instance.GetBirdIcon() == 7) {
SelectOverlay(0);
placeholderButton.interactable = false;
}
} }
}
private void ToggleKit() { private int GetCurrentKit() {
if (GetCurrentKit() == 1) SwitchToOverlay(); if (iconsPanel.activeSelf) return 1;
else if (GetCurrentKit() == 2) SwitchToMarketplaceIcons(); else if (overlaysPanel.activeSelf) return 2;
else if (GetCurrentKit() == 3) { else if (marketplaceIconsPanel.activeSelf) return 3;
defaultIcon = Tools.GetIconForUser(BazookaManager.Instance.GetAccountID() ?? 0); return 0;
icons[0].transform.GetChild(0).GetComponent<Image>().sprite = defaultIcon; }
SwitchToIcon(); private void SelectIcon(int iconID) {
SelectOverlay(BazookaManager.Instance.GetBirdOverlay()); var customData = BazookaManager.Instance.GetCustomBirdIconData();
SelectIcon(BazookaManager.Instance.GetBirdIcon()); customData.Selected = null;
iconColorPanel.SetColor(BazookaManager.Instance.GetColorSettingIcon()); BazookaManager.Instance.SetCustomBirdIconData(customData);
overlayColorPanel.SetColor(BazookaManager.Instance.GetColorSettingOverlay()); BazookaManager.Instance.SetBirdIcon(iconID);
for (int i = 0; i < icons.Length; i++)
icons[i].interactable = iconID != i + 1;
previewBird.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + iconID);
if (iconID == 1) previewBird.sprite = defaultIcon;
if (iconID == 7) {
SelectOverlay(0);
placeholderButton.interactable = false;
} else placeholderButton.interactable = true;
}
if (BazookaManager.Instance.GetBirdIcon() == 7) { private void SelectOverlay(int overlayID) {
SelectOverlay(0); var customData = BazookaManager.Instance.GetCustomBirdIconData();
placeholderButton.interactable = false; customData.Selected = null;
} BazookaManager.Instance.SetCustomBirdIconData(customData);
} BazookaManager.Instance.SetBirdOverlay(overlayID);
for (int i = 0; i < overlays.Length; i++) {
overlays[i].interactable = overlayID != i;
} }
previewOverlay.rectTransform.localPosition = new Vector3(-32f, 44.50001f, 0f);
previewOverlay.gameObject.SetActive(true);
if (overlayID == 8) previewOverlay.rectTransform.localPosition = new Vector3(-35.36f, 31.6f, 0f);
else if (overlayID == 11) previewOverlay.rectTransform.localPosition = new Vector3(-31.44f, 43.50004f, 0f);
else if (overlayID == 13) previewOverlay.rectTransform.localPosition = new Vector3(-35.28575f, 31.3667f, 0f);
private int GetCurrentKit() { if (overlayID == 0) {
if (iconsPanel.activeSelf) return 1; previewOverlay.gameObject.SetActive(false);
else if (overlaysPanel.activeSelf) return 2; previewOverlay.sprite = null;
else if (marketplaceIconsPanel.activeSelf) return 3; } else previewOverlay.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + overlayID);
return 0; }
void SelectCustomIcon(string icon, bool renderIcons = true) {
var customData = BazookaManager.Instance.GetCustomBirdIconData();
customData.Selected = icon;
BazookaManager.Instance.SetCustomBirdIconData(customData);
previewBird.AddComponent<WaitingForCustomIcon>().ID = icon;
if (renderIcons) RenderIcons();
previewBird.color = Color.white;
previewOverlay.gameObject.SetActive(false);
previewOverlay.sprite = null;
previewOverlay.color = Color.white;
foreach (var loopIcon in customData.Purchased) {
customIcons[loopIcon].interactable = loopIcon != icon;
} }
}
private void SelectIcon(int iconID) { async void Update() {
var customData = BazookaManager.Instance.GetCustomBirdIconData(); if (Keyboard.current.escapeKey.wasPressedThisFrame) await SceneManager.LoadSceneAsync("MainMenu");
customData.Selected = null; }
BazookaManager.Instance.SetCustomBirdIconData(customData);
BazookaManager.Instance.SetBirdIcon(iconID);
for (int i = 0; i < icons.Length; i++)
icons[i].interactable = iconID != i + 1;
previewBird.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + iconID);
if (iconID == 1) previewBird.sprite = defaultIcon;
if (iconID == 7) {
SelectOverlay(0);
placeholderButton.interactable = false;
} else placeholderButton.interactable = true;
}
private void SelectOverlay(int overlayID) { void RenderIcons() {
var customData = BazookaManager.Instance.GetCustomBirdIconData(); var objects = FindObjectsByType<WaitingForCustomIcon>(FindObjectsSortMode.None);
customData.Selected = null; if (objects.Length != 0) CustomIconLoader.Init(objects);
BazookaManager.Instance.SetCustomBirdIconData(customData); }
BazookaManager.Instance.SetBirdOverlay(overlayID);
for (int i = 0; i < overlays.Length; i++) {
overlays[i].interactable = overlayID != i;
}
previewOverlay.rectTransform.localPosition = new Vector3(-32f, 44.50001f, 0f);
previewOverlay.gameObject.SetActive(true);
if (overlayID == 8) previewOverlay.rectTransform.localPosition = new Vector3(-35.36f, 31.6f, 0f);
else if (overlayID == 11) previewOverlay.rectTransform.localPosition = new Vector3(-31.44f, 43.50004f, 0f);
else if (overlayID == 13) previewOverlay.rectTransform.localPosition = new Vector3(-35.28575f, 31.3667f, 0f);
if (overlayID == 0) {
previewOverlay.gameObject.SetActive(false);
previewOverlay.sprite = null;
} else previewOverlay.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + overlayID);
}
void SelectCustomIcon(string icon, bool renderIcons = true) {
var customData = BazookaManager.Instance.GetCustomBirdIconData();
customData.Selected = icon;
BazookaManager.Instance.SetCustomBirdIconData(customData);
previewBird.AddComponent<WaitingForCustomIcon>().ID = icon;
if (renderIcons) RenderIcons();
previewBird.color = Color.white;
previewOverlay.gameObject.SetActive(false);
previewOverlay.sprite = null;
previewOverlay.color = Color.white;
foreach (var loopIcon in customData.Purchased) {
customIcons[loopIcon].interactable = loopIcon != icon;
}
}
async void Update() {
if (Keyboard.current.escapeKey.wasPressedThisFrame) await SceneManager.LoadSceneAsync("MainMenu");
}
void RenderIcons() {
var objects = FindObjectsByType<WaitingForCustomIcon>(FindObjectsSortMode.None);
if (objects.Length != 0) CustomIconLoader.Init(objects);
}
} }
+207 -207
View File
@@ -8,231 +8,231 @@ using UnityEngine.SceneManagement;
using UnityEngine.UI; using UnityEngine.UI;
public class LeaderboardsMenu : MonoBehaviour { public class LeaderboardsMenu : MonoBehaviour {
[SerializeField] private TMP_Text statusText; [SerializeField] private TMP_Text statusText;
[SerializeField] private Button backButton; [SerializeField] private Button backButton;
[SerializeField] private Button refreshButton; [SerializeField] private Button refreshButton;
[SerializeField] private ProfileMenu profilePrefab; [SerializeField] private ProfileMenu profilePrefab;
[SerializeField] private GameObject selectionPanel; [SerializeField] private GameObject selectionPanel;
[SerializeField] private Button selectionScoreButton; [SerializeField] private Button selectionScoreButton;
[SerializeField] private Button selectionBerryButton; [SerializeField] private Button selectionBerryButton;
[SerializeField] private Button selectionCoinButton; [SerializeField] private Button selectionCoinButton;
[SerializeField] private Button selectionLegacyButton; [SerializeField] private Button selectionLegacyButton;
[SerializeField] private Button selectionLevelButton; [SerializeField] private Button selectionLevelButton;
[SerializeField] private Button selectionTotalXPButton; [SerializeField] private Button selectionTotalXPButton;
[SerializeField] private Button selectionTotalBerriesButton; [SerializeField] private Button selectionTotalBerriesButton;
[SerializeField] private GameObject scoresPanel; [SerializeField] private GameObject scoresPanel;
[SerializeField] private GameObject content; [SerializeField] private GameObject content;
[SerializeField] private GameObject sampleObject; [SerializeField] private GameObject sampleObject;
[SerializeField] private TMP_Dropdown berryShowTypeDropdown; [SerializeField] private TMP_Dropdown berryShowTypeDropdown;
private LeaderboardMode mode = LeaderboardMode.None; private LeaderboardMode mode = LeaderboardMode.None;
private bool changedByCode = false; private bool changedByCode = false;
void Awake() { void Awake() {
selectionScoreButton.onClick.AddListener(() => { mode = LeaderboardMode.Score; SwitchMenu(1); }); selectionScoreButton.onClick.AddListener(() => { mode = LeaderboardMode.Score; SwitchMenu(1); });
selectionBerryButton.onClick.AddListener(() => { mode = LeaderboardMode.Berry; SwitchMenu(1); }); selectionBerryButton.onClick.AddListener(() => { mode = LeaderboardMode.Berry; SwitchMenu(1); });
selectionCoinButton.onClick.AddListener(() => { mode = LeaderboardMode.Coin; SwitchMenu(1); }); selectionCoinButton.onClick.AddListener(() => { mode = LeaderboardMode.Coin; SwitchMenu(1); });
selectionLegacyButton.onClick.AddListener(() => { mode = LeaderboardMode.Legacy; SwitchMenu(1); }); selectionLegacyButton.onClick.AddListener(() => { mode = LeaderboardMode.Legacy; SwitchMenu(1); });
selectionLevelButton.onClick.AddListener(() => { mode = LeaderboardMode.Level; SwitchMenu(1); }); selectionLevelButton.onClick.AddListener(() => { mode = LeaderboardMode.Level; SwitchMenu(1); });
selectionTotalXPButton.onClick.AddListener(() => { mode = LeaderboardMode.TotalXP; SwitchMenu(1); }); selectionTotalXPButton.onClick.AddListener(() => { mode = LeaderboardMode.TotalXP; SwitchMenu(1); });
selectionTotalBerriesButton.onClick.AddListener(() => { mode = LeaderboardMode.TotalBerries; SwitchMenu(1); }); selectionTotalBerriesButton.onClick.AddListener(() => { mode = LeaderboardMode.TotalBerries; SwitchMenu(1); });
berryShowTypeDropdown.onValueChanged.AddListener(_ => GetTopPlayers()); berryShowTypeDropdown.onValueChanged.AddListener(_ => GetTopPlayers());
backButton.onClick.AddListener(async () => { backButton.onClick.AddListener(async () => {
if (selectionPanel.activeSelf) await SceneManager.LoadSceneAsync("MainMenu"); if (selectionPanel.activeSelf) await SceneManager.LoadSceneAsync("MainMenu");
else if (scoresPanel.activeSelf) SwitchMenu(0); else if (scoresPanel.activeSelf) SwitchMenu(0);
}); });
refreshButton.onClick.AddListener(GetTopPlayers); refreshButton.onClick.AddListener(GetTopPlayers);
}
void SwitchMenu(int menu) {
UpdateStatus(false, "");
if (!selectionPanel.activeSelf) {
foreach (Transform item in content.transform) {
if (item.gameObject.activeSelf) {
Destroy(item.gameObject);
}
}
} }
void SwitchMenu(int menu) { if (menu == 0) {
UpdateStatus(false, ""); mode = LeaderboardMode.None;
if (!selectionPanel.activeSelf) { refreshButton.gameObject.SetActive(false);
foreach (Transform item in content.transform) { selectionPanel.SetActive(true);
if (item.gameObject.activeSelf) { scoresPanel.SetActive(false);
Destroy(item.gameObject); } else if (menu == 1) {
} refreshButton.transform.localPosition = mode == LeaderboardMode.Berry ? new Vector2(402.5f, 282.33f) : new Vector2(-402.5f, -282.33f);
refreshButton.gameObject.SetActive(true);
berryShowTypeDropdown.gameObject.SetActive(mode == LeaderboardMode.Berry);
changedByCode = true;
berryShowTypeDropdown.value = 0;
changedByCode = false;
selectionPanel.SetActive(false);
scoresPanel.SetActive(true);
GetTopPlayers();
}
}
async void GetTopPlayers() {
if (changedByCode) return;
backButton.interactable = false;
refreshButton.interactable = false;
foreach (Transform item in content.transform) {
if (item.gameObject.activeSelf) {
Destroy(item.gameObject);
}
}
UpdateStatus(true, "Loading...");
using UnityWebRequest request = UnityWebRequest.Get(mode == LeaderboardMode.Score
? Endpoints.LEADERBOARDS_SCORE_ENDPOINT
: mode == LeaderboardMode.Berry
? Endpoints.LEADERBOARDS_BERRY_ENDPOINT + "?berry=" + berryShowTypeDropdown.value
: mode == LeaderboardMode.Coin
? Endpoints.LEADERBOARDS_COIN_ENDPOINT
: mode == LeaderboardMode.Legacy
? Endpoints.LEADERBOARDS_LEGACY_ENDPOINT
: mode == LeaderboardMode.Level || mode == LeaderboardMode.TotalXP
? Endpoints.BD_ACCOUNT_ENDPOINT + "?username="
: Endpoints.LEADERBOARDS_TOTAL_ENDPOINT);
request.SetRequestHeader("Requester", "BerryDashClient");
request.SetRequestHeader("ClientVersion", Application.version);
request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
await request.SendWebRequest();
if (request.downloadHandler.text == null) {
UpdateStatus(true, "Failed to fetch leaderboard stats");
return;
}
UpdateStatus(false);
var jsonResponse = JObject.Parse(request.downloadHandler.text);
if ((bool)jsonResponse["success"]) {
if (mode != LeaderboardMode.Level && mode != LeaderboardMode.TotalXP) {
var entries = jsonResponse["data"].ToObject<LeaderboardEntry[]>();
for (int i = 0; i < entries.Length; i++) {
var entry = entries[i];
var entryInfo = Instantiate(sampleObject, content.transform);
var usernameText = entryInfo.transform.GetChild(0).GetComponent<TMP_Text>();
var playerIcon = usernameText.transform.GetChild(0).GetComponent<Image>();
var playerIconButton = usernameText.transform.GetChild(0).GetComponent<Button>();
var playerOverlay = playerIcon.transform.GetChild(0).GetComponent<Image>();
var scoreText = entryInfo.transform.GetChild(1).GetComponent<TMP_Text>();
usernameText.text = $"{entry.Username} (#{i + 1})";
scoreText.text = (mode == LeaderboardMode.Berry || mode == LeaderboardMode.TotalBerries ? "Berries: " : mode == LeaderboardMode.Coin ? "Coins: " : "Score: ") + Tools.FormatWithCommas(entry.Value);
if (BazookaManager.Instance.GetAccountID() == entry.UserID) {
usernameText.text = $"<color=#7FFFD4>{usernameText.text}</color>";
scoreText.text = $"<color=#7FFFD4>{scoreText.text}</color>";
}
if (entry.CustomIcon == null) {
playerIcon.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + entry.Icon);
if (entry.Icon == 1) playerIcon.sprite = Tools.GetIconForUser(entry.UserID);
playerOverlay.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + entry.Overlay);
if (entry.Overlay != 0) playerOverlay.gameObject.SetActive(true);
if (entry.Overlay == 8) playerOverlay.transform.localPosition = new Vector2(-16.56f, 14.81f);
else if (entry.Overlay == 11) playerOverlay.transform.localPosition = new Vector2(-14.74451f, 20.39122f);
else if (entry.Overlay == 13) playerOverlay.transform.localPosition = new Vector2(-16.54019f, 14.70365f);
try {
playerIcon.color = new Color(entry.BirdColor[0] / 255f, entry.BirdColor[1] / 255f, entry.BirdColor[2] / 255f);
playerOverlay.color = new Color(entry.BirdColor[0] / 255f, entry.BirdColor[1] / 255f, entry.BirdColor[2] / 255f);
} }
} catch {
playerIcon.color = Color.white;
if (menu == 0) { playerOverlay.color = Color.white;
mode = LeaderboardMode.None;
refreshButton.gameObject.SetActive(false);
selectionPanel.SetActive(true);
scoresPanel.SetActive(false);
} else if (menu == 1) {
refreshButton.transform.localPosition = mode == LeaderboardMode.Berry ? new Vector2(402.5f, 282.33f) : new Vector2(-402.5f, -282.33f);
refreshButton.gameObject.SetActive(true);
berryShowTypeDropdown.gameObject.SetActive(mode == LeaderboardMode.Berry);
changedByCode = true;
berryShowTypeDropdown.value = 0;
changedByCode = false;
selectionPanel.SetActive(false);
scoresPanel.SetActive(true);
GetTopPlayers();
}
}
async void GetTopPlayers() {
if (changedByCode) return;
backButton.interactable = false;
refreshButton.interactable = false;
foreach (Transform item in content.transform) {
if (item.gameObject.activeSelf) {
Destroy(item.gameObject);
} }
} else playerIcon.gameObject.AddComponent<WaitingForCustomIcon>().ID = entry.CustomIcon;
playerIconButton.onClick.AddListener(async () => {
var clone = Instantiate(profilePrefab.gameObject, profilePrefab.gameObject.transform.parent);
clone.SetActive(true);
await clone.GetComponent<ProfileMenu>().Init(entry.UserID);
});
entryInfo.SetActive(true);
} }
UpdateStatus(true, "Loading..."); } else {
using UnityWebRequest request = UnityWebRequest.Get(mode == LeaderboardMode.Score var entries = jsonResponse["data"]
? Endpoints.LEADERBOARDS_SCORE_ENDPOINT .ToObject<Account[]>()
: mode == LeaderboardMode.Berry .Select(entry => {
? Endpoints.LEADERBOARDS_BERRY_ENDPOINT + "?berry=" + berryShowTypeDropdown.value var xp = Tools.CalculateXP(
: mode == LeaderboardMode.Coin entry.Stats.TotalNormalBerries,
? Endpoints.LEADERBOARDS_COIN_ENDPOINT entry.Stats.TotalPoisonBerries,
: mode == LeaderboardMode.Legacy entry.Stats.TotalSlowBerries,
? Endpoints.LEADERBOARDS_LEGACY_ENDPOINT entry.Stats.TotalUltraBerries,
: mode == LeaderboardMode.Level || mode == LeaderboardMode.TotalXP entry.Stats.TotalSpeedyBerries,
? Endpoints.BD_ACCOUNT_ENDPOINT + "?username=" entry.Stats.TotalCoinBerries,
: Endpoints.LEADERBOARDS_TOTAL_ENDPOINT); entry.Stats.TotalRandomBerries,
request.SetRequestHeader("Requester", "BerryDashClient"); entry.Stats.TotalAntiBerries,
request.SetRequestHeader("ClientVersion", Application.version); entry.Stats.TotalGoldenBerries
request.SetRequestHeader("ClientPlatform", Application.platform.ToString()); );
await request.SendWebRequest();
if (request.downloadHandler.text == null) {
UpdateStatus(true, "Failed to fetch leaderboard stats");
return;
}
UpdateStatus(false);
var jsonResponse = JObject.Parse(request.downloadHandler.text);
if ((bool)jsonResponse["success"]) {
if (mode != LeaderboardMode.Level && mode != LeaderboardMode.TotalXP) {
var entries = jsonResponse["data"].ToObject<LeaderboardEntry[]>();
for (int i = 0; i < entries.Length; i++) {
var entry = entries[i];
var entryInfo = Instantiate(sampleObject, content.transform);
var usernameText = entryInfo.transform.GetChild(0).GetComponent<TMP_Text>();
var playerIcon = usernameText.transform.GetChild(0).GetComponent<Image>();
var playerIconButton = usernameText.transform.GetChild(0).GetComponent<Button>();
var playerOverlay = playerIcon.transform.GetChild(0).GetComponent<Image>();
var scoreText = entryInfo.transform.GetChild(1).GetComponent<TMP_Text>();
usernameText.text = $"{entry.Username} (#{i + 1})"; return new {
scoreText.text = (mode == LeaderboardMode.Berry || mode == LeaderboardMode.TotalBerries ? "Berries: " : mode == LeaderboardMode.Coin ? "Coins: " : "Score: ") + Tools.FormatWithCommas(entry.Value); Account = entry,
XP = xp
};
})
.OrderByDescending(x => x.XP)
.ToList();
for (int i = 0; i < entries.Count; i++) {
var entry = entries[i].Account;
var xp = entries[i].XP;
var entryInfo = Instantiate(sampleObject, content.transform);
var usernameText = entryInfo.transform.GetChild(0).GetComponent<TMP_Text>();
var playerIcon = usernameText.transform.GetChild(0).GetComponent<Image>();
var playerIconButton = usernameText.transform.GetChild(0).GetComponent<Button>();
var playerOverlay = playerIcon.transform.GetChild(0).GetComponent<Image>();
var scoreText = entryInfo.transform.GetChild(1).GetComponent<TMP_Text>();
if (BazookaManager.Instance.GetAccountID() == entry.UserID) { usernameText.text = $"{entry.Username} (#{i + 1})";
usernameText.text = $"<color=#7FFFD4>{usernameText.text}</color>"; scoreText.text = (mode == LeaderboardMode.Level ? "Level: " : "XP: ") + Tools.FormatWithCommas(mode == LeaderboardMode.Level ? Tools.GetLevelInfo(xp).level.ToString() : xp.ToString());
scoreText.text = $"<color=#7FFFD4>{scoreText.text}</color>";
}
if (entry.CustomIcon == null) { if (BazookaManager.Instance.GetAccountID() == entry.UserID) {
playerIcon.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + entry.Icon); usernameText.text = $"<color=#7FFFD4>{usernameText.text}</color>";
if (entry.Icon == 1) playerIcon.sprite = Tools.GetIconForUser(entry.UserID); scoreText.text = $"<color=#7FFFD4>{scoreText.text}</color>";
playerOverlay.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + entry.Overlay); }
if (entry.Overlay != 0) playerOverlay.gameObject.SetActive(true);
if (entry.Overlay == 8) playerOverlay.transform.localPosition = new Vector2(-16.56f, 14.81f);
else if (entry.Overlay == 11) playerOverlay.transform.localPosition = new Vector2(-14.74451f, 20.39122f);
else if (entry.Overlay == 13) playerOverlay.transform.localPosition = new Vector2(-16.54019f, 14.70365f);
try {
playerIcon.color = new Color(entry.BirdColor[0] / 255f, entry.BirdColor[1] / 255f, entry.BirdColor[2] / 255f);
playerOverlay.color = new Color(entry.BirdColor[0] / 255f, entry.BirdColor[1] / 255f, entry.BirdColor[2] / 255f);
}
catch {
playerIcon.color = Color.white;
playerOverlay.color = Color.white;
}
} else playerIcon.gameObject.AddComponent<WaitingForCustomIcon>().ID = entry.CustomIcon;
playerIconButton.onClick.AddListener(async () => {
var clone = Instantiate(profilePrefab.gameObject, profilePrefab.gameObject.transform.parent);
clone.SetActive(true);
await clone.GetComponent<ProfileMenu>().Init(entry.UserID);
});
entryInfo.SetActive(true);
}
} else {
var entries = jsonResponse["data"]
.ToObject<Account[]>()
.Select(entry => {
var xp = Tools.CalculateXP(
entry.Stats.TotalNormalBerries,
entry.Stats.TotalPoisonBerries,
entry.Stats.TotalSlowBerries,
entry.Stats.TotalUltraBerries,
entry.Stats.TotalSpeedyBerries,
entry.Stats.TotalCoinBerries,
entry.Stats.TotalRandomBerries,
entry.Stats.TotalAntiBerries,
entry.Stats.TotalGoldenBerries
);
return new { if (entry.CustomIcon == null) {
Account = entry, playerIcon.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + entry.Icon);
XP = xp if (entry.Icon == 1) playerIcon.sprite = Tools.GetIconForUser(entry.UserID);
}; playerOverlay.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + entry.Overlay);
}) if (entry.Overlay != 0) playerOverlay.gameObject.SetActive(true);
.OrderByDescending(x => x.XP) if (entry.Overlay == 8) playerOverlay.transform.localPosition = new Vector2(-16.56f, 14.81f);
.ToList(); else if (entry.Overlay == 11) playerOverlay.transform.localPosition = new Vector2(-14.74451f, 20.39122f);
for (int i = 0; i < entries.Count; i++) { else if (entry.Overlay == 13) playerOverlay.transform.localPosition = new Vector2(-16.54019f, 14.70365f);
var entry = entries[i].Account; try {
var xp = entries[i].XP; playerIcon.color = new Color(entry.BirdColor[0] / 255f, entry.BirdColor[1] / 255f, entry.BirdColor[2] / 255f);
var entryInfo = Instantiate(sampleObject, content.transform); playerOverlay.color = new Color(entry.BirdColor[0] / 255f, entry.BirdColor[1] / 255f, entry.BirdColor[2] / 255f);
var usernameText = entryInfo.transform.GetChild(0).GetComponent<TMP_Text>();
var playerIcon = usernameText.transform.GetChild(0).GetComponent<Image>();
var playerIconButton = usernameText.transform.GetChild(0).GetComponent<Button>();
var playerOverlay = playerIcon.transform.GetChild(0).GetComponent<Image>();
var scoreText = entryInfo.transform.GetChild(1).GetComponent<TMP_Text>();
usernameText.text = $"{entry.Username} (#{i + 1})";
scoreText.text = (mode == LeaderboardMode.Level ? "Level: " : "XP: ") + Tools.FormatWithCommas(mode == LeaderboardMode.Level ? Tools.GetLevelInfo(xp).level.ToString() : xp.ToString());
if (BazookaManager.Instance.GetAccountID() == entry.UserID) {
usernameText.text = $"<color=#7FFFD4>{usernameText.text}</color>";
scoreText.text = $"<color=#7FFFD4>{scoreText.text}</color>";
}
if (entry.CustomIcon == null) {
playerIcon.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + entry.Icon);
if (entry.Icon == 1) playerIcon.sprite = Tools.GetIconForUser(entry.UserID);
playerOverlay.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + entry.Overlay);
if (entry.Overlay != 0) playerOverlay.gameObject.SetActive(true);
if (entry.Overlay == 8) playerOverlay.transform.localPosition = new Vector2(-16.56f, 14.81f);
else if (entry.Overlay == 11) playerOverlay.transform.localPosition = new Vector2(-14.74451f, 20.39122f);
else if (entry.Overlay == 13) playerOverlay.transform.localPosition = new Vector2(-16.54019f, 14.70365f);
try {
playerIcon.color = new Color(entry.BirdColor[0] / 255f, entry.BirdColor[1] / 255f, entry.BirdColor[2] / 255f);
playerOverlay.color = new Color(entry.BirdColor[0] / 255f, entry.BirdColor[1] / 255f, entry.BirdColor[2] / 255f);
}
catch {
playerIcon.color = Color.white;
playerOverlay.color = Color.white;
}
} else playerIcon.gameObject.AddComponent<WaitingForCustomIcon>().ID = entry.CustomIcon;
playerIconButton.onClick.AddListener(async () => {
var clone = Instantiate(profilePrefab.gameObject, profilePrefab.gameObject.transform.parent);
clone.SetActive(true);
await clone.GetComponent<ProfileMenu>().Init(entry.UserID);
});
entryInfo.SetActive(true);
}
} }
CustomIconLoader.Init(FindObjectsByType<WaitingForCustomIcon>(FindObjectsSortMode.None)); catch {
} else { playerIcon.color = Color.white;
UpdateStatus(true, (string)jsonResponse["message"]); playerOverlay.color = Color.white;
}
} else playerIcon.gameObject.AddComponent<WaitingForCustomIcon>().ID = entry.CustomIcon;
playerIconButton.onClick.AddListener(async () => {
var clone = Instantiate(profilePrefab.gameObject, profilePrefab.gameObject.transform.parent);
clone.SetActive(true);
await clone.GetComponent<ProfileMenu>().Init(entry.UserID);
});
entryInfo.SetActive(true);
} }
backButton.interactable = true; }
refreshButton.interactable = true; CustomIconLoader.Init(FindObjectsByType<WaitingForCustomIcon>(FindObjectsSortMode.None));
} else {
UpdateStatus(true, (string)jsonResponse["message"]);
} }
backButton.interactable = true;
refreshButton.interactable = true;
}
private void UpdateStatus(bool enabled, string message = "") { private void UpdateStatus(bool enabled, string message = "") {
statusText.gameObject.SetActive(enabled); statusText.gameObject.SetActive(enabled);
statusText.text = message; statusText.text = message;
} }
async void Update() { async void Update() {
if (Keyboard.current.escapeKey.wasPressedThisFrame && FindFirstObjectByType<ProfileMenu>() == null) { if (Keyboard.current.escapeKey.wasPressedThisFrame && FindFirstObjectByType<ProfileMenu>() == null) {
if (!selectionPanel.activeSelf) SwitchMenu(0); if (!selectionPanel.activeSelf) SwitchMenu(0);
else await SceneManager.LoadSceneAsync("MainMenu"); else await SceneManager.LoadSceneAsync("MainMenu");
}
} }
}
} }
+54 -54
View File
@@ -5,62 +5,62 @@ using UnityEngine.SceneManagement;
using UnityEngine.UI; using UnityEngine.UI;
public class LoadingMenu : MonoBehaviour { public class LoadingMenu : MonoBehaviour {
[SerializeField] private TMP_Text text; [SerializeField] private TMP_Text text;
[SerializeField] private Button updateButton; [SerializeField] private Button updateButton;
[SerializeField] private Button continueButton; [SerializeField] private Button continueButton;
void Start() { void Start() {
if (!Application.isMobilePlatform) { if (!Application.isMobilePlatform) {
var width = Display.main.systemWidth; var width = Display.main.systemWidth;
var height = Display.main.systemHeight; var height = Display.main.systemHeight;
Screen.SetResolution(width, height, BazookaManager.Instance.GetSettingFullScreen()); Screen.SetResolution(width, height, BazookaManager.Instance.GetSettingFullScreen());
QualitySettings.vSyncCount = BazookaManager.Instance.GetSettingVsync() ? 1 : -1; QualitySettings.vSyncCount = BazookaManager.Instance.GetSettingVsync() ? 1 : -1;
} else { } else {
Application.targetFrameRate = 360; Application.targetFrameRate = 360;
QualitySettings.vSyncCount = 0; QualitySettings.vSyncCount = 0;
}
PlayerPrefs.SetString("latestVersion", Application.version);
CheckUpdate();
} }
PlayerPrefs.SetString("latestVersion", Application.version);
CheckUpdate();
}
async void CheckUpdate() { async void CheckUpdate() {
using UnityWebRequest request = UnityWebRequest.Get(Endpoints.CAN_LOAD_CLIENT_ENDPOINT); using UnityWebRequest request = UnityWebRequest.Get(Endpoints.CAN_LOAD_CLIENT_ENDPOINT);
request.SetRequestHeader("Requester", "BerryDashClient"); request.SetRequestHeader("Requester", "BerryDashClient");
request.SetRequestHeader("ClientVersion", Application.version); request.SetRequestHeader("ClientVersion", Application.version);
request.SetRequestHeader("ClientPlatform", Application.platform.ToString()); request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
await request.SendWebRequest(); await request.SendWebRequest();
if (request.downloadHandler.text == null) { if (request.downloadHandler.text == null) {
text.text = "Failed to check version"; text.text = "Failed to check version";
return; return;
}
string response = request.downloadHandler.text;
if (response == "1") {
await SceneManager.LoadSceneAsync("MainMenu");
} else if (response == "2") {
text.text = "Outdated client! You can still play the game and access the servers, but it isn't recommended.";
var updateButtonPos = updateButton.transform.localPosition;
updateButtonPos.x = -135;
updateButton.transform.localPosition = updateButtonPos;
updateButton.gameObject.SetActive(true);
continueButton.gameObject.SetActive(true);
} else if (response == "3") {
text.text = "Outdated client! You can still load into the game, but online features may not be available.";
var updateButtonPos = updateButton.transform.localPosition;
updateButtonPos.x = -135;
updateButton.transform.localPosition = updateButtonPos;
updateButton.gameObject.SetActive(true);
continueButton.gameObject.SetActive(true);
} else if (response == "4") {
text.text = "You are on a beta version of the game. You can still play the game and access the servers, but it is recommended to use the latest stable version.";
continueButton.transform.position = updateButton.transform.position;
continueButton.gameObject.SetActive(true);
} else {
text.text = "Outdated client! Please update your client to play";
updateButton.gameObject.SetActive(true);
}
} }
string response = request.downloadHandler.text;
if (response == "1") {
await SceneManager.LoadSceneAsync("MainMenu");
} else if (response == "2") {
text.text = "Outdated client! You can still play the game and access the servers, but it isn't recommended.";
var updateButtonPos = updateButton.transform.localPosition;
updateButtonPos.x = -135;
updateButton.transform.localPosition = updateButtonPos;
updateButton.gameObject.SetActive(true);
continueButton.gameObject.SetActive(true);
} else if (response == "3") {
text.text = "Outdated client! You can still load into the game, but online features may not be available.";
var updateButtonPos = updateButton.transform.localPosition;
updateButtonPos.x = -135;
updateButton.transform.localPosition = updateButtonPos;
updateButton.gameObject.SetActive(true);
continueButton.gameObject.SetActive(true);
} else if (response == "4") {
text.text = "You are on a beta version of the game. You can still play the game and access the servers, but it is recommended to use the latest stable version.";
continueButton.transform.position = updateButton.transform.position;
continueButton.gameObject.SetActive(true);
} else {
text.text = "Outdated client! Please update your client to play";
updateButton.gameObject.SetActive(true);
}
}
} }
+64 -64
View File
@@ -6,81 +6,81 @@ using UnityEngine.InputSystem;
using UnityEngine.UI; using UnityEngine.UI;
public class MainMenu : MonoBehaviour { public class MainMenu : MonoBehaviour {
[SerializeField] private Button closeButton; [SerializeField] private Button closeButton;
[SerializeField] private TMP_Text updateText; [SerializeField] private TMP_Text updateText;
[SerializeField] private Button updateButton; [SerializeField] private Button updateButton;
[SerializeField] private TMP_Text splashText; [SerializeField] private TMP_Text splashText;
[SerializeField] private Button profileButton; [SerializeField] private Button profileButton;
[SerializeField] private ProfileMenu profilePrefab; [SerializeField] private ProfileMenu profilePrefab;
[SerializeField] private TMP_Text copyrightText; [SerializeField] private TMP_Text copyrightText;
[SerializeField] private GameObject closePopup; [SerializeField] private GameObject closePopup;
[SerializeField] private Button closePopupCancelButton; [SerializeField] private Button closePopupCancelButton;
[SerializeField] private Button closePopupCloseButton; [SerializeField] private Button closePopupCloseButton;
[SerializeField] private Button iconMarketplaceButton; [SerializeField] private Button iconMarketplaceButton;
[SerializeField] private TMP_Text iconMarketplaceButtonText; [SerializeField] private TMP_Text iconMarketplaceButtonText;
void Awake() { void Awake() {
if (PresistentData.latestVersion != null) { if (PresistentData.latestVersion != null) {
if (PresistentData.latestVersion != "-1") { if (PresistentData.latestVersion != "-1") {
updateText.text = "Latest: v" + PresistentData.latestVersion ?? "N/A"; updateText.text = "Latest: v" + PresistentData.latestVersion ?? "N/A";
updateButton.gameObject.SetActive(PresistentData.latestVersion != Application.version); updateButton.gameObject.SetActive(PresistentData.latestVersion != Application.version);
} else { } else {
updateText.text = "Latest: Loading..."; updateText.text = "Latest: Loading...";
} }
} }
if (PresistentData.randomSplashes != null && PresistentData.randomSplashes.Count != 0) if (PresistentData.randomSplashes != null && PresistentData.randomSplashes.Count != 0)
DoSplashText(splashText, PresistentData.randomSplashes[UnityEngine.Random.Range(0, PresistentData.randomSplashes.Count)]); DoSplashText(splashText, PresistentData.randomSplashes[UnityEngine.Random.Range(0, PresistentData.randomSplashes.Count)]);
copyrightText.text = $"\\u00A9 {DateTime.Now.Year} Lncvrt. All rights reserved."; copyrightText.text = $"\\u00A9 {DateTime.Now.Year} Lncvrt. All rights reserved.";
if (!Application.isMobilePlatform && !Application.isEditor) { if (!Application.isMobilePlatform && !Application.isEditor) {
closeButton.gameObject.SetActive(true); closeButton.gameObject.SetActive(true);
closeButton.onClick.AddListener(() => closePopup.SetActive(true)); closeButton.onClick.AddListener(() => closePopup.SetActive(true));
}
closePopupCancelButton.onClick.AddListener(() => closePopup.SetActive(false));
closePopupCloseButton.onClick.AddListener(() => Application.Quit());
} }
void Start() { closePopupCancelButton.onClick.AddListener(() => closePopup.SetActive(false));
if (BazookaManager.Instance.GetAccountID() != null) { closePopupCloseButton.onClick.AddListener(() => Application.Quit());
profileButton.transform.GetChild(0).GetComponent<TMP_Text>().text = BazookaManager.Instance.GetAccountName(); }
profileButton.onClick.AddListener(async () => {
var clone = Instantiate(profilePrefab.gameObject, profilePrefab.gameObject.transform.parent);
clone.SetActive(true);
await clone.GetComponent<ProfileMenu>().Init();
});
profileButton.gameObject.SetActive(true);
}
if (Tools.GetLevelInfo().level < 3) { void Start() {
iconMarketplaceButton.interactable = false; if (BazookaManager.Instance.GetAccountID() != null) {
iconMarketplaceButtonText.text += "\n<size=12>You need level 3 or higher to access this</size>"; profileButton.transform.GetChild(0).GetComponent<TMP_Text>().text = BazookaManager.Instance.GetAccountName();
} profileButton.onClick.AddListener(async () => {
var clone = Instantiate(profilePrefab.gameObject, profilePrefab.gameObject.transform.parent);
clone.SetActive(true);
await clone.GetComponent<ProfileMenu>().Init();
});
profileButton.gameObject.SetActive(true);
} }
void Update() { if (Tools.GetLevelInfo().level < 3) {
if (Keyboard.current.escapeKey.wasPressedThisFrame && !GameObject.Find("ProfilePrefab(Clone)")) closePopup.SetActive(!closePopup.activeSelf); iconMarketplaceButton.interactable = false;
iconMarketplaceButtonText.text += "\n<size=12>You need level 3 or higher to access this</size>";
} }
}
public static void DoSplashText(TMP_Text text, SplashEntry splash) { void Update() {
text.text = splash.Content; if (Keyboard.current.escapeKey.wasPressedThisFrame && !GameObject.Find("ProfilePrefab(Clone)")) closePopup.SetActive(!closePopup.activeSelf);
}
var scale = text.transform.localScale; public static void DoSplashText(TMP_Text text, SplashEntry splash) {
scale.y = splash.Attributes.Flip ? -1 : 1; text.text = splash.Content;
scale.x = (splash.Attributes.Flip == splash.Attributes.Reverse) ? 1 : -1;
text.transform.localScale = scale;
if (splash.Attributes.BounceSpeed != -1) text.GetComponent<BouncyText>().frequency = splash.Attributes.BounceSpeed; var scale = text.transform.localScale;
scale.y = splash.Attributes.Flip ? -1 : 1;
scale.x = (splash.Attributes.Flip == splash.Attributes.Reverse) ? 1 : -1;
text.transform.localScale = scale;
if (splash.Attributes.Color != null) { if (splash.Attributes.BounceSpeed != -1) text.GetComponent<BouncyText>().frequency = splash.Attributes.BounceSpeed;
if (splash.Attributes.Color == "rainbow" && splash.Attributes.RainbowSpeed != -1) {
text.color = Color.white; if (splash.Attributes.Color != null) {
var rainbowText = text.AddComponent<RainbowText>(); if (splash.Attributes.Color == "rainbow" && splash.Attributes.RainbowSpeed != -1) {
rainbowText.frequency = splash.Attributes.RainbowSpeed; text.color = Color.white;
} else if (splash.Attributes.Color.Length == 6) { var rainbowText = text.AddComponent<RainbowText>();
UnityEngine.ColorUtility.TryParseHtmlString("#" + splash.Attributes.Color, out Color splashColor); rainbowText.frequency = splash.Attributes.RainbowSpeed;
text.color = splashColor; } else if (splash.Attributes.Color.Length == 6) {
} UnityEngine.ColorUtility.TryParseHtmlString("#" + splash.Attributes.Color, out Color splashColor);
} text.color = splashColor;
}
} }
}
} }
+17 -17
View File
@@ -2,26 +2,26 @@ using UnityEngine;
using UnityEngine.SceneManagement; using UnityEngine.SceneManagement;
public class MenuMusic : MonoBehaviour { public class MenuMusic : MonoBehaviour {
public static MenuMusic Instance; public static MenuMusic Instance;
void Awake() { void Awake() {
if (Instance == null) { if (Instance == null) {
Instance = this; Instance = this;
DontDestroyOnLoad(gameObject); DontDestroyOnLoad(gameObject);
SceneManager.sceneLoaded += OnSceneLoaded; SceneManager.sceneLoaded += OnSceneLoaded;
} else { } else {
Destroy(gameObject); Destroy(gameObject);
}
} }
}
void Start() { void Start() {
GetComponent<AudioSource>().volume = BazookaManager.Instance.GetSettingMusicVolume(); GetComponent<AudioSource>().volume = BazookaManager.Instance.GetSettingMusicVolume();
} }
void OnSceneLoaded(Scene scene, LoadSceneMode mode) { void OnSceneLoaded(Scene scene, LoadSceneMode mode) {
if (scene.name == "GamePlayer" || scene.name == "CustomGamePlayer" || scene.name == "AutoGamePlayer" || scene.name == "MultiplayerGamePlayer") { if (scene.name == "GamePlayer" || scene.name == "CustomGamePlayer" || scene.name == "AutoGamePlayer" || scene.name == "MultiplayerGamePlayer") {
SceneManager.sceneLoaded -= OnSceneLoaded; SceneManager.sceneLoaded -= OnSceneLoaded;
Destroy(gameObject); Destroy(gameObject);
}
} }
}
} }
File diff suppressed because it is too large. Load diff
+59 -59
View File
@@ -3,71 +3,71 @@ using UnityEngine.EventSystems;
using UnityEngine.InputSystem; using UnityEngine.InputSystem;
public class BouncyButton : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler { public class BouncyButton : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler {
private bool isHovered = false; private bool isHovered = false;
private bool isHeld = false; private bool isHeld = false;
private bool didBounce = false; private bool didBounce = false;
private Vector3 originalScale; private Vector3 originalScale;
private Vector3 finalScale; private Vector3 finalScale;
void Start() { void Start() {
originalScale = transform.localScale; originalScale = transform.localScale;
finalScale = originalScale * 1.1f; finalScale = originalScale * 1.1f;
}
public void OnPointerEnter(PointerEventData eventData) => isHovered = true;
public void OnPointerExit(PointerEventData eventData) {
isHovered = false;
ResetScale();
}
void OnDisable() {
isHovered = false;
ResetScale();
}
void Update() {
if (Application.isMobilePlatform) {
isHeld = Touchscreen.current != null && Touchscreen.current.press.isPressed;
} else {
isHeld = Mouse.current != null && Mouse.current.leftButton.isPressed;
} }
public void OnPointerEnter(PointerEventData eventData) => isHovered = true; if (isHovered && isHeld && !didBounce) {
public void OnPointerExit(PointerEventData eventData) { StartCoroutine(BounceOnce());
isHovered = false; didBounce = true;
ResetScale();
}
void OnDisable() {
isHovered = false;
ResetScale();
} }
void Update() { if ((!isHovered || !isHeld) && didBounce) {
if (Application.isMobilePlatform) { ResetScale();
isHeld = Touchscreen.current != null && Touchscreen.current.press.isPressed;
} else {
isHeld = Mouse.current != null && Mouse.current.leftButton.isPressed;
}
if (isHovered && isHeld && !didBounce) {
StartCoroutine(BounceOnce());
didBounce = true;
}
if ((!isHovered || !isHeld) && didBounce) {
ResetScale();
}
} }
}
void ResetScale() { void ResetScale() {
StopAllCoroutines(); StopAllCoroutines();
transform.localScale = originalScale; transform.localScale = originalScale;
didBounce = false; didBounce = false;
} }
System.Collections.IEnumerator BounceOnce() { System.Collections.IEnumerator BounceOnce() {
float t = 0.125f; float t = 0.125f;
Vector3 s1 = originalScale * 1.12f; Vector3 s1 = originalScale * 1.12f;
Vector3 s2 = originalScale * 1.06f; Vector3 s2 = originalScale * 1.06f;
Vector3 s3 = finalScale; Vector3 s3 = finalScale;
yield return LerpScale(originalScale, s1, t); yield return LerpScale(originalScale, s1, t);
yield return LerpScale(s1, s2, t * 0.5f); yield return LerpScale(s1, s2, t * 0.5f);
yield return LerpScale(s2, s3, t * 0.5f); yield return LerpScale(s2, s3, t * 0.5f);
transform.localScale = s3; transform.localScale = s3;
} }
System.Collections.IEnumerator LerpScale(Vector3 from, Vector3 to, float duration) { System.Collections.IEnumerator LerpScale(Vector3 from, Vector3 to, float duration) {
float elapsed = 0f; float elapsed = 0f;
while (elapsed < duration) { while (elapsed < duration) {
elapsed += Time.deltaTime; elapsed += Time.deltaTime;
float p = elapsed / duration; float p = elapsed / duration;
transform.localScale = Vector3.Lerp(from, to, p); transform.localScale = Vector3.Lerp(from, to, p);
yield return null; yield return null;
}
transform.localScale = to;
} }
transform.localScale = to;
}
} }
+8 -8
View File
@@ -1,13 +1,13 @@
using UnityEngine; using UnityEngine;
public class BouncyPanel : MonoBehaviour { public class BouncyPanel : MonoBehaviour {
public float frequency = 8f; public float frequency = 8f;
public float minSize = 1f; public float minSize = 1f;
public float maxSize = 1.1f; public float maxSize = 1.1f;
void Update() { void Update() {
float newsize = (Mathf.Sin(Time.time * frequency) + 1f) / 2f; float newsize = (Mathf.Sin(Time.time * frequency) + 1f) / 2f;
var size = Mathf.Lerp(minSize, maxSize, newsize); var size = Mathf.Lerp(minSize, maxSize, newsize);
gameObject.transform.localScale = new(size, size, size); gameObject.transform.localScale = new(size, size, size);
} }
} }
+17 -17
View File
@@ -3,24 +3,24 @@ using UnityEngine;
[RequireComponent(typeof(TextMeshProUGUI))] [RequireComponent(typeof(TextMeshProUGUI))]
public class BouncyText : MonoBehaviour { public class BouncyText : MonoBehaviour {
public float frequency = 2f; public float frequency = 2f;
public float minSize = 10f; public float minSize = 10f;
public float maxSize = 12f; public float maxSize = 12f;
public bool add; public bool add;
private TextMeshProUGUI text; private TextMeshProUGUI text;
private float startSize = 0; private float startSize = 0;
void Awake() { void Awake() {
text = GetComponent<TextMeshProUGUI>(); text = GetComponent<TextMeshProUGUI>();
if (add) { if (add) {
text.ForceMeshUpdate(); text.ForceMeshUpdate();
startSize = text.fontSize; startSize = text.fontSize;
text.enableAutoSizing = false; text.enableAutoSizing = false;
}
} }
}
void Update() { void Update() {
float newsize = (Mathf.Sin(Time.time * frequency) + 1f) / 2f; float newsize = (Mathf.Sin(Time.time * frequency) + 1f) / 2f;
text.fontSize = Mathf.Lerp(add ? startSize : minSize, maxSize + (add ? startSize : 0), newsize); text.fontSize = Mathf.Lerp(add ? startSize : minSize, maxSize + (add ? startSize : 0), newsize);
} }
} }
+12 -12
View File
@@ -2,18 +2,18 @@ using TMPro;
using UnityEngine; using UnityEngine;
public class ImageColorSync : MonoBehaviour { public class ImageColorSync : MonoBehaviour {
[SerializeField] private TMP_Text originalText; [SerializeField] private TMP_Text originalText;
[SerializeField] private TMP_Text toSync; [SerializeField] private TMP_Text toSync;
void Update() { void Update() {
Color baseColor = originalText.color; Color baseColor = originalText.color;
Color graphicColor = originalText.canvasRenderer.GetColor(); Color graphicColor = originalText.canvasRenderer.GetColor();
toSync.color = new Color( toSync.color = new Color(
baseColor.r * graphicColor.r, baseColor.r * graphicColor.r,
baseColor.g * graphicColor.g, baseColor.g * graphicColor.g,
baseColor.b * graphicColor.b, baseColor.b * graphicColor.b,
baseColor.a * graphicColor.a baseColor.a * graphicColor.a
); );
} }
} }
+6 -6
View File
@@ -3,11 +3,11 @@ using UnityEngine.SceneManagement;
using UnityEngine.UI; using UnityEngine.UI;
public class ButtonToScene : MonoBehaviour { public class ButtonToScene : MonoBehaviour {
[SerializeField] private string sceneName; [SerializeField] private string sceneName;
void Awake() { void Awake() {
gameObject.GetComponent<Button>().onClick.AddListener(async () => { gameObject.GetComponent<Button>().onClick.AddListener(async () => {
await SceneManager.LoadSceneAsync(sceneName); await SceneManager.LoadSceneAsync(sceneName);
}); });
} }
} }
+6 -6
View File
@@ -2,11 +2,11 @@ using UnityEngine;
using UnityEngine.UI; using UnityEngine.UI;
public class ButtonToURL : MonoBehaviour { public class ButtonToURL : MonoBehaviour {
[SerializeField] private string url; [SerializeField] private string url;
void Awake() { void Awake() {
gameObject.GetComponent<Button>().onClick.AddListener(() => { gameObject.GetComponent<Button>().onClick.AddListener(() => {
Application.OpenURL(url); Application.OpenURL(url);
}); });
} }
} }
+80 -80
View File
@@ -5,94 +5,94 @@ using UnityEngine;
using UnityEngine.UI; using UnityEngine.UI;
public class ColorPanel : MonoBehaviour { public class ColorPanel : MonoBehaviour {
public Slider rSlider; public Slider rSlider;
public Slider gSlider; public Slider gSlider;
public Slider bSlider; public Slider bSlider;
public ColorPickerUI colorPickerUI; public ColorPickerUI colorPickerUI;
public GameObject manualModeUI; public GameObject manualModeUI;
public TMP_InputField hexValue; public TMP_InputField hexValue;
public Image previewImage; public Image previewImage;
public Button resetButton; public Button resetButton;
public Button switchModeButton; public Button switchModeButton;
public event Action<JArray> OnColorChanged; public event Action<JArray> OnColorChanged;
public Color defaultColor; public Color defaultColor;
void Awake() { void Awake() {
hexValue.onSelect.AddListener((_) => hexValue.caretPosition = hexValue.text.Length); hexValue.onSelect.AddListener((_) => hexValue.caretPosition = hexValue.text.Length);
} }
public void Init(Color color, Color defaultColorArg) { public void Init(Color color, Color defaultColorArg) {
defaultColor = defaultColorArg; defaultColor = defaultColorArg;
rSlider.value = color.r * 255f; rSlider.value = color.r * 255f;
gSlider.value = color.g * 255f; gSlider.value = color.g * 255f;
bSlider.value = color.b * 255f; bSlider.value = color.b * 255f;
SyncAll(); SyncAll();
rSlider.onValueChanged.AddListener(_ => SyncAll()); rSlider.onValueChanged.AddListener(_ => SyncAll());
gSlider.onValueChanged.AddListener(_ => SyncAll()); gSlider.onValueChanged.AddListener(_ => SyncAll());
bSlider.onValueChanged.AddListener(_ => SyncAll()); bSlider.onValueChanged.AddListener(_ => SyncAll());
hexValue.onValueChanged.AddListener(value => { hexValue.onValueChanged.AddListener(value => {
var hex = value.StartsWith("#") ? value : "#" + value; var hex = value.StartsWith("#") ? value : "#" + value;
if (hex.Length == 7 && ColorUtility.TryParseHtmlString(hex, out var col)) { if (hex.Length == 7 && ColorUtility.TryParseHtmlString(hex, out var col)) {
rSlider.SetValueWithoutNotify(col.r * 255f);
gSlider.SetValueWithoutNotify(col.g * 255f);
bSlider.SetValueWithoutNotify(col.b * 255f);
SyncAll();
}
});
resetButton.onClick.AddListener(() => {
rSlider.value = defaultColor.r * 255f;
gSlider.value = defaultColor.g * 255f;
bSlider.value = defaultColor.b * 255f;
});
switchModeButton.onClick.AddListener(() => {
bool enableManual = !manualModeUI.activeSelf;
manualModeUI.SetActive(enableManual);
colorPickerUI.gameObject.SetActive(!enableManual);
});
colorPickerUI.OnColorChanged += color => {
rSlider.SetValueWithoutNotify(color.r * 255);
gSlider.SetValueWithoutNotify(color.g * 255);
bSlider.SetValueWithoutNotify(color.b * 255);
SyncAll(fromPicker: true);
};
}
public void Init(JArray color, Color defaultColorArg) {
Init(new Color((int)color[0] / 255f, (int)color[1] / 255f, (int)color[2] / 255f), defaultColorArg);
}
void SyncAll(bool fromPicker = false) {
var col = new Color(rSlider.value / 255f, gSlider.value / 255f, bSlider.value / 255f);
if (!fromPicker) colorPickerUI.SetSelectedColor(rSlider.value, gSlider.value, bSlider.value);
if (previewImage != null) previewImage.color = col;
hexValue.SetTextWithoutNotify("#" + ColorUtility.ToHtmlStringRGB(col));
OnColorChanged?.Invoke(new JArray(
(int)rSlider.value,
(int)gSlider.value,
(int)bSlider.value
));
}
public void SetColor(Color col) {
rSlider.SetValueWithoutNotify(col.r * 255f); rSlider.SetValueWithoutNotify(col.r * 255f);
gSlider.SetValueWithoutNotify(col.g * 255f); gSlider.SetValueWithoutNotify(col.g * 255f);
bSlider.SetValueWithoutNotify(col.b * 255f); bSlider.SetValueWithoutNotify(col.b * 255f);
SyncAll(); SyncAll();
} }
});
public void SetColor(JArray color) { resetButton.onClick.AddListener(() => {
rSlider.SetValueWithoutNotify((int)color[0]); rSlider.value = defaultColor.r * 255f;
gSlider.SetValueWithoutNotify((int)color[1]); gSlider.value = defaultColor.g * 255f;
bSlider.SetValueWithoutNotify((int)color[2]); bSlider.value = defaultColor.b * 255f;
SyncAll(); });
}
switchModeButton.onClick.AddListener(() => {
bool enableManual = !manualModeUI.activeSelf;
manualModeUI.SetActive(enableManual);
colorPickerUI.gameObject.SetActive(!enableManual);
});
colorPickerUI.OnColorChanged += color => {
rSlider.SetValueWithoutNotify(color.r * 255);
gSlider.SetValueWithoutNotify(color.g * 255);
bSlider.SetValueWithoutNotify(color.b * 255);
SyncAll(fromPicker: true);
};
}
public void Init(JArray color, Color defaultColorArg) {
Init(new Color((int)color[0] / 255f, (int)color[1] / 255f, (int)color[2] / 255f), defaultColorArg);
}
void SyncAll(bool fromPicker = false) {
var col = new Color(rSlider.value / 255f, gSlider.value / 255f, bSlider.value / 255f);
if (!fromPicker) colorPickerUI.SetSelectedColor(rSlider.value, gSlider.value, bSlider.value);
if (previewImage != null) previewImage.color = col;
hexValue.SetTextWithoutNotify("#" + ColorUtility.ToHtmlStringRGB(col));
OnColorChanged?.Invoke(new JArray(
(int)rSlider.value,
(int)gSlider.value,
(int)bSlider.value
));
}
public void SetColor(Color col) {
rSlider.SetValueWithoutNotify(col.r * 255f);
gSlider.SetValueWithoutNotify(col.g * 255f);
bSlider.SetValueWithoutNotify(col.b * 255f);
SyncAll();
}
public void SetColor(JArray color) {
rSlider.SetValueWithoutNotify((int)color[0]);
gSlider.SetValueWithoutNotify((int)color[1]);
bSlider.SetValueWithoutNotify((int)color[2]);
SyncAll();
}
} }
+150 -150
View File
@@ -4,165 +4,165 @@ using UnityEngine.InputSystem;
using UnityEngine.UI; using UnityEngine.UI;
public class ColorPickerUI : MonoBehaviour { public class ColorPickerUI : MonoBehaviour {
public RawImage hueImage; public RawImage hueImage;
public RawImage svImage; public RawImage svImage;
public RectTransform svCursor; public RectTransform svCursor;
public RectTransform hueCursor; public RectTransform hueCursor;
public event Action<Color> OnColorChanged; public event Action<Color> OnColorChanged;
private Texture2D hueTexture; private Texture2D hueTexture;
private Texture2D svTexture; private Texture2D svTexture;
private const int hueHeight = 256; private const int hueHeight = 256;
private const int svSize = 256; private const int svSize = 256;
private float selectedHue = 0f; private float selectedHue = 0f;
private float selectedS = 1f; private float selectedS = 1f;
private float selectedV = 1f; private float selectedV = 1f;
private enum DragTarget { None, Hue, SV } private enum DragTarget { None, Hue, SV }
private DragTarget currentDrag = DragTarget.None; private DragTarget currentDrag = DragTarget.None;
private Color lastColor; private Color lastColor;
void Start() { void Start() {
GenerateHueBar(); GenerateHueBar();
GenerateSVBox(selectedHue);
UpdateSVCursor();
UpdateHueCursor();
lastColor = GetSelectedColor();
OnColorChanged?.Invoke(lastColor);
}
void Update() {
if (Pointer.current == null)
return;
bool pressed = Pointer.current.press.isPressed;
Vector2 mousePos = Pointer.current.position.ReadValue();
if (pressed && currentDrag == DragTarget.None) {
if (RectTransformUtility.RectangleContainsScreenPoint(hueImage.rectTransform, mousePos, null))
currentDrag = DragTarget.Hue;
else if (RectTransformUtility.RectangleContainsScreenPoint(svImage.rectTransform, mousePos, null))
currentDrag = DragTarget.SV;
}
if (!pressed) {
currentDrag = DragTarget.None;
return;
}
bool colorChanged = false;
if (currentDrag == DragTarget.Hue) {
RectTransformUtility.ScreenPointToLocalPointInRectangle(hueImage.rectTransform, mousePos, null, out Vector2 localPoint);
float y = Mathf.Clamp01((localPoint.y + hueImage.rectTransform.rect.height / 2f) / hueImage.rectTransform.rect.height);
float newHue = 1f - y;
if (!Mathf.Approximately(newHue, selectedHue)) {
selectedHue = newHue;
GenerateSVBox(selectedHue); GenerateSVBox(selectedHue);
UpdateSVCursor(); UpdateSVCursor();
UpdateHueCursor(); UpdateHueCursor();
lastColor = GetSelectedColor(); colorChanged = true;
OnColorChanged?.Invoke(lastColor); }
} } else if (currentDrag == DragTarget.SV) {
RectTransformUtility.ScreenPointToLocalPointInRectangle(svImage.rectTransform, mousePos, null, out Vector2 localPoint);
void Update() { float rectWidth = svImage.rectTransform.rect.width;
if (Pointer.current == null) float rectHeight = svImage.rectTransform.rect.height;
return; float x = (localPoint.x + rectWidth / 2f) / rectWidth;
float y = (localPoint.y + rectHeight / 2f) / rectHeight;
bool pressed = Pointer.current.press.isPressed; float newS = Mathf.Clamp01(x);
Vector2 mousePos = Pointer.current.position.ReadValue(); float newV = Mathf.Clamp01(y);
if (!Mathf.Approximately(newS, selectedS) || !Mathf.Approximately(newV, selectedV)) {
if (pressed && currentDrag == DragTarget.None) { selectedS = newS;
if (RectTransformUtility.RectangleContainsScreenPoint(hueImage.rectTransform, mousePos, null)) selectedV = newV;
currentDrag = DragTarget.Hue;
else if (RectTransformUtility.RectangleContainsScreenPoint(svImage.rectTransform, mousePos, null))
currentDrag = DragTarget.SV;
}
if (!pressed) {
currentDrag = DragTarget.None;
return;
}
bool colorChanged = false;
if (currentDrag == DragTarget.Hue) {
RectTransformUtility.ScreenPointToLocalPointInRectangle(hueImage.rectTransform, mousePos, null, out Vector2 localPoint);
float y = Mathf.Clamp01((localPoint.y + hueImage.rectTransform.rect.height / 2f) / hueImage.rectTransform.rect.height);
float newHue = 1f - y;
if (!Mathf.Approximately(newHue, selectedHue)) {
selectedHue = newHue;
GenerateSVBox(selectedHue);
UpdateSVCursor();
UpdateHueCursor();
colorChanged = true;
}
} else if (currentDrag == DragTarget.SV) {
RectTransformUtility.ScreenPointToLocalPointInRectangle(svImage.rectTransform, mousePos, null, out Vector2 localPoint);
float rectWidth = svImage.rectTransform.rect.width;
float rectHeight = svImage.rectTransform.rect.height;
float x = (localPoint.x + rectWidth / 2f) / rectWidth;
float y = (localPoint.y + rectHeight / 2f) / rectHeight;
float newS = Mathf.Clamp01(x);
float newV = Mathf.Clamp01(y);
if (!Mathf.Approximately(newS, selectedS) || !Mathf.Approximately(newV, selectedV)) {
selectedS = newS;
selectedV = newV;
UpdateSVCursor();
colorChanged = true;
}
}
if (colorChanged) {
Color currentColor = GetSelectedColor();
if (currentColor != lastColor) {
lastColor = currentColor;
OnColorChanged?.Invoke(currentColor);
}
}
}
void UpdateSVCursor() {
if (svCursor == null) return;
Rect rect = svImage.rectTransform.rect;
float x = selectedS * rect.width;
float y = selectedV * rect.height;
x = Mathf.Clamp(x, 0, rect.width);
y = Mathf.Clamp(y, 0, rect.height);
Vector2 clampedPos = new Vector2(x - rect.width / 2f, y - rect.height / 2f);
svCursor.anchoredPosition = clampedPos;
}
void UpdateHueCursor() {
if (hueCursor == null) return;
Rect rect = hueImage.rectTransform.rect;
float y = (1f - selectedHue) * rect.height;
y = Mathf.Clamp(y, 0, rect.height);
Vector2 pos = new Vector2(0, y - rect.height / 2f);
hueCursor.anchoredPosition = pos;
}
void GenerateHueBar() {
hueTexture = new Texture2D(1, hueHeight);
hueTexture.wrapMode = TextureWrapMode.Clamp;
for (int y = 0; y < hueHeight; y++) {
float h = 1f - (float)y / (hueHeight - 1);
Color color = Color.HSVToRGB(h, 1f, 1f);
hueTexture.SetPixel(0, y, color);
}
hueTexture.Apply();
hueImage.texture = hueTexture;
}
void GenerateSVBox(float hue) {
svTexture = new Texture2D(svSize, svSize);
svTexture.wrapMode = TextureWrapMode.Clamp;
for (int y = 0; y < svSize; y++) {
float v = (float)y / (svSize - 1);
for (int x = 0; x < svSize; x++) {
float s = (float)x / (svSize - 1);
Color color = Color.HSVToRGB(hue, s, v);
svTexture.SetPixel(x, y, color);
}
}
svTexture.Apply();
svImage.texture = svTexture;
}
public Color GetSelectedColor() {
return Color.HSVToRGB(selectedHue, selectedS, selectedV);
}
public void SetSelectedColor(float r, float g, float b) {
Color32 color = new((byte)r, (byte)g, (byte)b, 255);
if (color.r == 0 && color.g == 0 && color.b == 0) {
selectedS = 0;
selectedV = 0;
} else {
Color.RGBToHSV(color, out float h, out float s, out float v);
selectedHue = h;
selectedS = s;
selectedV = v;
}
GenerateSVBox(selectedHue);
UpdateSVCursor(); UpdateSVCursor();
UpdateHueCursor(); colorChanged = true;
}
var current = GetSelectedColor();
if (current != lastColor) {
lastColor = current;
OnColorChanged?.Invoke(current);
}
} }
if (colorChanged) {
Color currentColor = GetSelectedColor();
if (currentColor != lastColor) {
lastColor = currentColor;
OnColorChanged?.Invoke(currentColor);
}
}
}
void UpdateSVCursor() {
if (svCursor == null) return;
Rect rect = svImage.rectTransform.rect;
float x = selectedS * rect.width;
float y = selectedV * rect.height;
x = Mathf.Clamp(x, 0, rect.width);
y = Mathf.Clamp(y, 0, rect.height);
Vector2 clampedPos = new Vector2(x - rect.width / 2f, y - rect.height / 2f);
svCursor.anchoredPosition = clampedPos;
}
void UpdateHueCursor() {
if (hueCursor == null) return;
Rect rect = hueImage.rectTransform.rect;
float y = (1f - selectedHue) * rect.height;
y = Mathf.Clamp(y, 0, rect.height);
Vector2 pos = new Vector2(0, y - rect.height / 2f);
hueCursor.anchoredPosition = pos;
}
void GenerateHueBar() {
hueTexture = new Texture2D(1, hueHeight);
hueTexture.wrapMode = TextureWrapMode.Clamp;
for (int y = 0; y < hueHeight; y++) {
float h = 1f - (float)y / (hueHeight - 1);
Color color = Color.HSVToRGB(h, 1f, 1f);
hueTexture.SetPixel(0, y, color);
}
hueTexture.Apply();
hueImage.texture = hueTexture;
}
void GenerateSVBox(float hue) {
svTexture = new Texture2D(svSize, svSize);
svTexture.wrapMode = TextureWrapMode.Clamp;
for (int y = 0; y < svSize; y++) {
float v = (float)y / (svSize - 1);
for (int x = 0; x < svSize; x++) {
float s = (float)x / (svSize - 1);
Color color = Color.HSVToRGB(hue, s, v);
svTexture.SetPixel(x, y, color);
}
}
svTexture.Apply();
svImage.texture = svTexture;
}
public Color GetSelectedColor() {
return Color.HSVToRGB(selectedHue, selectedS, selectedV);
}
public void SetSelectedColor(float r, float g, float b) {
Color32 color = new((byte)r, (byte)g, (byte)b, 255);
if (color.r == 0 && color.g == 0 && color.b == 0) {
selectedS = 0;
selectedV = 0;
} else {
Color.RGBToHSV(color, out float h, out float s, out float v);
selectedHue = h;
selectedS = s;
selectedV = v;
}
GenerateSVBox(selectedHue);
UpdateSVCursor();
UpdateHueCursor();
var current = GetSelectedColor();
if (current != lastColor) {
lastColor = current;
OnColorChanged?.Invoke(current);
}
}
} }
+136 -136
View File
@@ -4,147 +4,147 @@ using UnityEngine;
using UnityEngine.UI; using UnityEngine.UI;
public class CustomColorObject : MonoBehaviour { public class CustomColorObject : MonoBehaviour {
[SerializeField] private ColorObjectType type; [SerializeField] private ColorObjectType type;
[SerializeField] private bool invert; [SerializeField] private bool invert;
[SerializeField] private Color addMore; [SerializeField] private Color addMore;
[SerializeField] private bool reverseAdd; [SerializeField] private bool reverseAdd;
Color ApplyModifiers(Color baseColor) { Color ApplyModifiers(Color baseColor) {
if (invert) baseColor = new(1f - baseColor.r, 1f - baseColor.g, 1f - baseColor.b); if (invert) baseColor = new(1f - baseColor.r, 1f - baseColor.g, 1f - baseColor.b);
if (reverseAdd) { if (reverseAdd) {
baseColor.r = Mathf.Clamp01(baseColor.r - addMore.r); baseColor.r = Mathf.Clamp01(baseColor.r - addMore.r);
baseColor.g = Mathf.Clamp01(baseColor.g - addMore.g); baseColor.g = Mathf.Clamp01(baseColor.g - addMore.g);
baseColor.b = Mathf.Clamp01(baseColor.b - addMore.b); baseColor.b = Mathf.Clamp01(baseColor.b - addMore.b);
} else { } else {
baseColor.r = Mathf.Clamp01(baseColor.r + addMore.r); baseColor.r = Mathf.Clamp01(baseColor.r + addMore.r);
baseColor.g = Mathf.Clamp01(baseColor.g + addMore.g); baseColor.g = Mathf.Clamp01(baseColor.g + addMore.g);
baseColor.b = Mathf.Clamp01(baseColor.b + addMore.b); baseColor.b = Mathf.Clamp01(baseColor.b + addMore.b);
}
return baseColor;
} }
public void SetColor() { return baseColor;
JArray color = null; }
Color colorType = Color.white;
Color currentColor = Color.white;
switch (type) { public void SetColor() {
case ColorObjectType.InGameBackgroundColor: JArray color = null;
color = BazookaManager.Instance.GetColorSettingBackground(); Color colorType = Color.white;
colorType = new((int)color[0] / 255f, (int)color[1] / 255f, (int)color[2] / 255f); Color currentColor = Color.white;
colorType = ApplyModifiers(colorType);
var obj = gameObject.GetComponent<Camera>();
currentColor = obj.backgroundColor;
currentColor.r = colorType.r;
currentColor.g = colorType.g;
currentColor.b = colorType.b;
obj.backgroundColor = currentColor;
break;
case ColorObjectType.MenuBackgroundColor:
color = BazookaManager.Instance.GetColorSettingMenuBackground();
colorType = new((int)color[0] / 255f, (int)color[1] / 255f, (int)color[2] / 255f);
colorType = ApplyModifiers(colorType);
obj = gameObject.GetComponent<Camera>();
currentColor = obj.backgroundColor;
currentColor.r = colorType.r;
currentColor.g = colorType.g;
currentColor.b = colorType.b;
obj.backgroundColor = currentColor;
break;
case ColorObjectType.MenuBackgroundColorImage:
color = BazookaManager.Instance.GetColorSettingMenuBackground();
colorType = new((int)color[0] / 255f, (int)color[1] / 255f, (int)color[2] / 255f);
colorType = ApplyModifiers(colorType);
var obj2 = gameObject.GetComponent<Image>();
currentColor = obj2.color;
currentColor.r = colorType.r;
currentColor.g = colorType.g;
currentColor.b = colorType.b;
obj2.color = currentColor;
break;
case ColorObjectType.MenuBackgroundColorText:
color = BazookaManager.Instance.GetColorSettingMenuBackground();
colorType = new((int)color[0] / 255f, (int)color[1] / 255f, (int)color[2] / 255f);
colorType = ApplyModifiers(colorType);
var obj3 = gameObject.GetComponent<TMP_Text>();
currentColor = obj3.color;
currentColor.r = colorType.r;
currentColor.g = colorType.g;
currentColor.b = colorType.b;
obj3.color = currentColor;
break;
case ColorObjectType.ButtonColor:
color = BazookaManager.Instance.GetColorSettingButton();
colorType = new((int)color[0] / 255f, (int)color[1] / 255f, (int)color[2] / 255f);
colorType = ApplyModifiers(colorType);
obj2 = gameObject.GetComponent<Image>();
currentColor = obj2.color;
currentColor.r = colorType.r;
currentColor.g = colorType.g;
currentColor.b = colorType.b;
obj2.color = currentColor;
break;
case ColorObjectType.ButtonColorText:
color = BazookaManager.Instance.GetColorSettingButton();
colorType = new((int)color[0] / 255f, (int)color[1] / 255f, (int)color[2] / 255f);
colorType = ApplyModifiers(colorType);
obj3 = gameObject.GetComponent<TMP_Text>();
currentColor = obj3.color;
currentColor.r = colorType.r;
currentColor.g = colorType.g;
currentColor.b = colorType.b;
obj3.color = currentColor;
break;
case ColorObjectType.TextColor:
color = BazookaManager.Instance.GetColorSettingText();
colorType = new((int)color[0] / 255f, (int)color[1] / 255f, (int)color[2] / 255f);
colorType = ApplyModifiers(colorType);
obj3 = gameObject.GetComponent<TMP_Text>();
currentColor = obj3.color;
currentColor.r = colorType.r;
currentColor.g = colorType.g;
currentColor.b = colorType.b;
obj3.color = currentColor;
break;
case ColorObjectType.TextColorImage:
color = BazookaManager.Instance.GetColorSettingText();
colorType = new((int)color[0] / 255f, (int)color[1] / 255f, (int)color[2] / 255f);
colorType = ApplyModifiers(colorType);
obj2 = gameObject.GetComponent<Image>();
currentColor = obj2.color;
currentColor.r = colorType.r;
currentColor.g = colorType.g;
currentColor.b = colorType.b;
obj2.color = currentColor;
break;
case ColorObjectType.ButtonContentColorImage:
color = BazookaManager.Instance.GetColorSettingButtonContent();
colorType = new((int)color[0] / 255f, (int)color[1] / 255f, (int)color[2] / 255f);
colorType = ApplyModifiers(colorType);
obj2 = gameObject.GetComponent<Image>();
currentColor = obj2.color;
currentColor.r = colorType.r;
currentColor.g = colorType.g;
currentColor.b = colorType.b;
obj2.color = currentColor;
break;
case ColorObjectType.ButtonContentColorText:
color = BazookaManager.Instance.GetColorSettingButtonContent();
colorType = new((int)color[0] / 255f, (int)color[1] / 255f, (int)color[2] / 255f);
colorType = ApplyModifiers(colorType);
obj3 = gameObject.GetComponent<TMP_Text>();
currentColor = obj3.color;
currentColor.r = colorType.r;
currentColor.g = colorType.g;
currentColor.b = colorType.b;
obj3.color = currentColor;
break;
}
}
void Start() { switch (type) {
SetColor(); case ColorObjectType.InGameBackgroundColor:
color = BazookaManager.Instance.GetColorSettingBackground();
colorType = new((int)color[0] / 255f, (int)color[1] / 255f, (int)color[2] / 255f);
colorType = ApplyModifiers(colorType);
var obj = gameObject.GetComponent<Camera>();
currentColor = obj.backgroundColor;
currentColor.r = colorType.r;
currentColor.g = colorType.g;
currentColor.b = colorType.b;
obj.backgroundColor = currentColor;
break;
case ColorObjectType.MenuBackgroundColor:
color = BazookaManager.Instance.GetColorSettingMenuBackground();
colorType = new((int)color[0] / 255f, (int)color[1] / 255f, (int)color[2] / 255f);
colorType = ApplyModifiers(colorType);
obj = gameObject.GetComponent<Camera>();
currentColor = obj.backgroundColor;
currentColor.r = colorType.r;
currentColor.g = colorType.g;
currentColor.b = colorType.b;
obj.backgroundColor = currentColor;
break;
case ColorObjectType.MenuBackgroundColorImage:
color = BazookaManager.Instance.GetColorSettingMenuBackground();
colorType = new((int)color[0] / 255f, (int)color[1] / 255f, (int)color[2] / 255f);
colorType = ApplyModifiers(colorType);
var obj2 = gameObject.GetComponent<Image>();
currentColor = obj2.color;
currentColor.r = colorType.r;
currentColor.g = colorType.g;
currentColor.b = colorType.b;
obj2.color = currentColor;
break;
case ColorObjectType.MenuBackgroundColorText:
color = BazookaManager.Instance.GetColorSettingMenuBackground();
colorType = new((int)color[0] / 255f, (int)color[1] / 255f, (int)color[2] / 255f);
colorType = ApplyModifiers(colorType);
var obj3 = gameObject.GetComponent<TMP_Text>();
currentColor = obj3.color;
currentColor.r = colorType.r;
currentColor.g = colorType.g;
currentColor.b = colorType.b;
obj3.color = currentColor;
break;
case ColorObjectType.ButtonColor:
color = BazookaManager.Instance.GetColorSettingButton();
colorType = new((int)color[0] / 255f, (int)color[1] / 255f, (int)color[2] / 255f);
colorType = ApplyModifiers(colorType);
obj2 = gameObject.GetComponent<Image>();
currentColor = obj2.color;
currentColor.r = colorType.r;
currentColor.g = colorType.g;
currentColor.b = colorType.b;
obj2.color = currentColor;
break;
case ColorObjectType.ButtonColorText:
color = BazookaManager.Instance.GetColorSettingButton();
colorType = new((int)color[0] / 255f, (int)color[1] / 255f, (int)color[2] / 255f);
colorType = ApplyModifiers(colorType);
obj3 = gameObject.GetComponent<TMP_Text>();
currentColor = obj3.color;
currentColor.r = colorType.r;
currentColor.g = colorType.g;
currentColor.b = colorType.b;
obj3.color = currentColor;
break;
case ColorObjectType.TextColor:
color = BazookaManager.Instance.GetColorSettingText();
colorType = new((int)color[0] / 255f, (int)color[1] / 255f, (int)color[2] / 255f);
colorType = ApplyModifiers(colorType);
obj3 = gameObject.GetComponent<TMP_Text>();
currentColor = obj3.color;
currentColor.r = colorType.r;
currentColor.g = colorType.g;
currentColor.b = colorType.b;
obj3.color = currentColor;
break;
case ColorObjectType.TextColorImage:
color = BazookaManager.Instance.GetColorSettingText();
colorType = new((int)color[0] / 255f, (int)color[1] / 255f, (int)color[2] / 255f);
colorType = ApplyModifiers(colorType);
obj2 = gameObject.GetComponent<Image>();
currentColor = obj2.color;
currentColor.r = colorType.r;
currentColor.g = colorType.g;
currentColor.b = colorType.b;
obj2.color = currentColor;
break;
case ColorObjectType.ButtonContentColorImage:
color = BazookaManager.Instance.GetColorSettingButtonContent();
colorType = new((int)color[0] / 255f, (int)color[1] / 255f, (int)color[2] / 255f);
colorType = ApplyModifiers(colorType);
obj2 = gameObject.GetComponent<Image>();
currentColor = obj2.color;
currentColor.r = colorType.r;
currentColor.g = colorType.g;
currentColor.b = colorType.b;
obj2.color = currentColor;
break;
case ColorObjectType.ButtonContentColorText:
color = BazookaManager.Instance.GetColorSettingButtonContent();
colorType = new((int)color[0] / 255f, (int)color[1] / 255f, (int)color[2] / 255f);
colorType = ApplyModifiers(colorType);
obj3 = gameObject.GetComponent<TMP_Text>();
currentColor = obj3.color;
currentColor.r = colorType.r;
currentColor.g = colorType.g;
currentColor.b = colorType.b;
obj3.color = currentColor;
break;
} }
}
void Start() {
SetColor();
}
} }
+33 -33
View File
@@ -6,39 +6,39 @@ using UnityEngine.Networking;
using UnityEngine.UI; using UnityEngine.UI;
public class CustomIconLoader : MonoBehaviour { public class CustomIconLoader : MonoBehaviour {
public static async void Init(WaitingForCustomIcon[] objects) { public static async void Init(WaitingForCustomIcon[] objects) {
var iconsToDownload = new HashSet<string>(); var iconsToDownload = new HashSet<string>();
foreach (var obj in objects) foreach (var obj in objects)
if (!BazookaManager.Instance.iconCache.Any(icon => icon.ID == obj.ID)) if (!BazookaManager.Instance.iconCache.Any(icon => icon.ID == obj.ID))
iconsToDownload.Add(obj.ID); iconsToDownload.Add(obj.ID);
if (iconsToDownload.Count != 0) { if (iconsToDownload.Count != 0) {
var ids = string.Join(",", iconsToDownload.Select(id => $"\"{id}\"")); var ids = string.Join(",", iconsToDownload.Select(id => $"\"{id}\""));
using UnityWebRequest request = UnityWebRequest.Get(Endpoints.ICON_MARKETPLACE_ICON_ENDPOINT + $"?ids=[{ids}]"); using UnityWebRequest request = UnityWebRequest.Get(Endpoints.ICON_MARKETPLACE_ICON_ENDPOINT + $"?ids=[{ids}]");
request.SetRequestHeader("Requester", "BerryDashClient"); request.SetRequestHeader("Requester", "BerryDashClient");
request.SetRequestHeader("ClientVersion", Application.version); request.SetRequestHeader("ClientVersion", Application.version);
request.SetRequestHeader("ClientPlatform", Application.platform.ToString()); request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
await request.SendWebRequest(); await request.SendWebRequest();
if (request.downloadHandler.text == null) { if (request.downloadHandler.text == null) {
return; return;
} }
var jsonResponse = JObject.Parse(request.downloadHandler.text); var jsonResponse = JObject.Parse(request.downloadHandler.text);
if ((bool)jsonResponse["success"]) { if ((bool)jsonResponse["success"]) {
var icons = jsonResponse["data"].ToObject<MarketplaceIconWithData[]>(); var icons = jsonResponse["data"].ToObject<MarketplaceIconWithData[]>();
foreach (var icon in icons) BazookaManager.Instance.iconCache.Add(new MarketplaceIcon { ID = icon.ID, Data = icon.Data }); foreach (var icon in icons) BazookaManager.Instance.iconCache.Add(new MarketplaceIcon { ID = icon.ID, Data = icon.Data });
} }
Debug.Log($"Downloaded {iconsToDownload.Count} custom icons"); Debug.Log($"Downloaded {iconsToDownload.Count} custom icons");
}
foreach (var obj in objects) {
var cachedIcon = BazookaManager.Instance.iconCache.FirstOrDefault(icon => icon.ID == obj.ID);
if (cachedIcon != null) {
if (obj.TryGetComponent<Image>(out var image))
image.sprite = Tools.GetSpriteFromBase64(cachedIcon.Data);
else if (obj.TryGetComponent<SpriteRenderer>(out var spriteRenderer))
spriteRenderer.sprite = Tools.GetSpriteFromBase64(cachedIcon.Data);
}
Destroy(obj);
}
} }
foreach (var obj in objects) {
var cachedIcon = BazookaManager.Instance.iconCache.FirstOrDefault(icon => icon.ID == obj.ID);
if (cachedIcon != null) {
if (obj.TryGetComponent<Image>(out var image))
image.sprite = Tools.GetSpriteFromBase64(cachedIcon.Data);
else if (obj.TryGetComponent<SpriteRenderer>(out var spriteRenderer))
spriteRenderer.sprite = Tools.GetSpriteFromBase64(cachedIcon.Data);
}
Destroy(obj);
}
}
} }
+55 -55
View File
@@ -2,69 +2,69 @@ using DiscordRPC;
using UnityEngine; using UnityEngine;
public class DiscordRPCHandler : MonoBehaviour { public class DiscordRPCHandler : MonoBehaviour {
public static DiscordRPCHandler Instance; public static DiscordRPCHandler Instance;
public DiscordRpcClient client; public DiscordRpcClient client;
private readonly Timestamps timestamp = Timestamps.Now; private readonly Timestamps timestamp = Timestamps.Now;
private bool isIdle = false; private bool isIdle = false;
private string savedDetails; private string savedDetails;
private string savedState; private string savedState;
void Awake() { void Awake() {
if (Application.isMobilePlatform || Instance != null) { if (Application.isMobilePlatform || Instance != null) {
Destroy(gameObject); Destroy(gameObject);
return; return;
}
Instance = this;
DontDestroyOnLoad(gameObject);
client = new DiscordRpcClient("1421877993176961155");
client.Initialize();
} }
void OnDestroy() { Instance = this;
client?.Dispose(); DontDestroyOnLoad(gameObject);
client = new DiscordRpcClient("1421877993176961155");
client.Initialize();
}
void OnDestroy() {
client?.Dispose();
}
void OnApplicationQuit() {
client?.Dispose();
}
void OnApplicationPause(bool pause) {
isIdle = pause;
if (pause) {
UpdateRPC("Idle", null, true);
} else {
UpdateRPC(savedDetails, savedState, true);
}
}
public void UpdateRPC(string details, string state, bool force = false) {
if (!force && isIdle) {
savedDetails = details;
savedState = state;
return;
} }
void OnApplicationQuit() { client.SetPresence(new RichPresence {
client?.Dispose(); Details = details,
} State = state,
Assets = new Assets {
void OnApplicationPause(bool pause) { LargeImageKey = "https://games-r2.lncvrt.xyz/icons/berry-dash.png",
isIdle = pause; LargeImageText = "Berry Dash",
if (pause) { SmallImageKey = "https://cdn.lncvrt.xyz/pfp.png",
UpdateRPC("Idle", null, true); SmallImageText = "Made by Lncvrt!"
} else { },
UpdateRPC(savedDetails, savedState, true); Buttons = new[]
} {
}
public void UpdateRPC(string details, string state, bool force = false) {
if (!force && isIdle) {
savedDetails = details;
savedState = state;
return;
}
client.SetPresence(new RichPresence {
Details = details,
State = state,
Assets = new Assets {
LargeImageKey = "https://games-r2.lncvrt.xyz/icons/berry-dash.png",
LargeImageText = "Berry Dash",
SmallImageKey = "https://cdn.lncvrt.xyz/pfp.png",
SmallImageText = "Made by Lncvrt!"
},
Buttons = new[]
{
new Button { Label = "Website / Download", Url = "https://games.lncvrt.xyz/game/berry-dash" }, new Button { Label = "Website / Download", Url = "https://games.lncvrt.xyz/game/berry-dash" },
new Button { Label = "Lncvrt Games", Url = "https://games.lncvrt.xyz" } new Button { Label = "Lncvrt Games", Url = "https://games.lncvrt.xyz" }
}, },
Timestamps = timestamp Timestamps = timestamp
}); });
savedDetails = details; savedDetails = details;
savedState = state; savedState = state;
} }
} }
+5 -5
View File
@@ -1,10 +1,10 @@
using UnityEngine; using UnityEngine;
public class DiscordRPCUpdater : MonoBehaviour { public class DiscordRPCUpdater : MonoBehaviour {
public string details; public string details;
public string state; public string state;
void Awake() { void Awake() {
if (DiscordRPCHandler.Instance != null) DiscordRPCHandler.Instance.UpdateRPC(details, state); if (DiscordRPCHandler.Instance != null) DiscordRPCHandler.Instance.UpdateRPC(details, state);
} }
} }
+84 -84
View File
@@ -4,92 +4,92 @@ using UnityEngine.EventSystems;
using UnityEngine.UI; using UnityEngine.UI;
public class DraggableUI : MonoBehaviour, IDragHandler, IBeginDragHandler { public class DraggableUI : MonoBehaviour, IDragHandler, IBeginDragHandler {
public static DraggableUI Instance; public static DraggableUI Instance;
private Vector2 offset; private Vector2 offset;
[SerializeField] private string uiName; [SerializeField] private string uiName;
public bool canDrag = false; public bool canDrag = false;
private readonly List<GameObject> outlineSides = new(); private readonly List<GameObject> outlineSides = new();
void CreateOutline() { void CreateOutline() {
var color = BazookaManager.Instance.GetColorSettingButton(); var color = BazookaManager.Instance.GetColorSettingButton();
Color borderColor = new(((float)color[0]) / 255f, ((float)color[1]) / 255f, ((float)color[2]) / 255f); Color borderColor = new(((float)color[0]) / 255f, ((float)color[1]) / 255f, ((float)color[2]) / 255f);
float thickness = 2f; float thickness = 2f;
CreateSide("Top", new Vector2(0, 1), new Vector2(1, 1), new Vector2(0, thickness), borderColor); CreateSide("Top", new Vector2(0, 1), new Vector2(1, 1), new Vector2(0, thickness), borderColor);
CreateSide("Bottom", new Vector2(0, 0), new Vector2(1, 0), new Vector2(0, thickness), borderColor); CreateSide("Bottom", new Vector2(0, 0), new Vector2(1, 0), new Vector2(0, thickness), borderColor);
CreateSide("Left", new Vector2(0, 0), new Vector2(0, 1), new Vector2(thickness, 0), borderColor); CreateSide("Left", new Vector2(0, 0), new Vector2(0, 1), new Vector2(thickness, 0), borderColor);
CreateSide("Right", new Vector2(1, 0), new Vector2(1, 1), new Vector2(thickness, 0), borderColor); CreateSide("Right", new Vector2(1, 0), new Vector2(1, 1), new Vector2(thickness, 0), borderColor);
} }
void CreateSide(string name, Vector2 anchorMin, Vector2 anchorMax, Vector2 size, Color color) { void CreateSide(string name, Vector2 anchorMin, Vector2 anchorMax, Vector2 size, Color color) {
var go = new GameObject(name, typeof(Image)); var go = new GameObject(name, typeof(Image));
go.transform.SetParent(transform, false); go.transform.SetParent(transform, false);
var rt = go.GetComponent<RectTransform>(); var rt = go.GetComponent<RectTransform>();
var img = go.GetComponent<Image>(); var img = go.GetComponent<Image>();
img.color = color; img.color = color;
img.raycastTarget = false; img.raycastTarget = false;
rt.anchorMin = anchorMin; rt.anchorMin = anchorMin;
rt.anchorMax = anchorMax; rt.anchorMax = anchorMax;
rt.sizeDelta = size; rt.sizeDelta = size;
rt.anchoredPosition = Vector2.zero; rt.anchoredPosition = Vector2.zero;
outlineSides.Add(go); outlineSides.Add(go);
} }
void Awake() { void Awake() {
Instance = this; Instance = this;
} }
void Start() { void Start() {
CreateOutline(); CreateOutline();
} }
void OnEnable() { void OnEnable() {
string key = "DraggedUI" + uiName; string key = "DraggedUI" + uiName;
if (PlayerPrefs.HasKey(key) && TryParseVector3(PlayerPrefs.GetString(key), out Vector3 savedPos)) transform.localPosition = savedPos; if (PlayerPrefs.HasKey(key) && TryParseVector3(PlayerPrefs.GetString(key), out Vector3 savedPos)) transform.localPosition = savedPos;
} }
void Update() { void Update() {
foreach (var side in outlineSides) foreach (var side in outlineSides)
side.SetActive(canDrag); side.SetActive(canDrag);
} }
public void OnBeginDrag(PointerEventData eventData) { public void OnBeginDrag(PointerEventData eventData) {
if (!canDrag) return; if (!canDrag) return;
RectTransformUtility.ScreenPointToLocalPointInRectangle( RectTransformUtility.ScreenPointToLocalPointInRectangle(
(RectTransform)transform.parent, (RectTransform)transform.parent,
eventData.position, eventData.position,
eventData.pressEventCamera, eventData.pressEventCamera,
out offset out offset
); );
offset = (Vector2)transform.localPosition - offset; offset = (Vector2)transform.localPosition - offset;
PlayerPrefs.SetString("DraggedUI" + uiName, transform.localPosition.ToString()); PlayerPrefs.SetString("DraggedUI" + uiName, transform.localPosition.ToString());
} }
public void OnDrag(PointerEventData eventData) { public void OnDrag(PointerEventData eventData) {
if (!canDrag) return; if (!canDrag) return;
if (RectTransformUtility.ScreenPointToLocalPointInRectangle( if (RectTransformUtility.ScreenPointToLocalPointInRectangle(
(RectTransform)transform.parent, (RectTransform)transform.parent,
eventData.position, eventData.position,
eventData.pressEventCamera, eventData.pressEventCamera,
out Vector2 localPoint out Vector2 localPoint
)) transform.localPosition = localPoint + offset; )) transform.localPosition = localPoint + offset;
PlayerPrefs.SetString("DraggedUI" + uiName, transform.localPosition.ToString()); PlayerPrefs.SetString("DraggedUI" + uiName, transform.localPosition.ToString());
} }
private bool TryParseVector3(string s, out Vector3 result) { private bool TryParseVector3(string s, out Vector3 result) {
s = s.Trim('(', ')'); s = s.Trim('(', ')');
string[] parts = s.Split(','); string[] parts = s.Split(',');
if (parts.Length == 3 && if (parts.Length == 3 &&
float.TryParse(parts[0], out float x) && float.TryParse(parts[0], out float x) &&
float.TryParse(parts[1], out float y) && float.TryParse(parts[1], out float y) &&
float.TryParse(parts[2], out float z)) { float.TryParse(parts[2], out float z)) {
result = new Vector3(x, y, z); result = new Vector3(x, y, z);
return true; return true;
}
result = Vector3.zero;
return false;
} }
result = Vector3.zero;
return false;
}
} }
+27 -27
View File
@@ -1,29 +1,29 @@
public class Endpoints { public class Endpoints {
private const string HOST = "games.lncvrt.xyz"; private const string HOST = "games.lncvrt.xyz";
public const string BASE_URL = "https://" + HOST + "/api"; public const string BASE_URL = "https://" + HOST + "/api";
public const string BERRYDASH_ENDPOINT = BASE_URL + "/berrydash"; public const string BERRYDASH_ENDPOINT = BASE_URL + "/berrydash";
public const string WS_ENDPOINT = "wss://" + HOST + "/api/ws"; public const string WS_ENDPOINT = "wss://" + HOST + "/api/ws";
public const string CAN_LOAD_CLIENT_ENDPOINT = BASE_URL + "/can-load-client"; public const string CAN_LOAD_CLIENT_ENDPOINT = BASE_URL + "/can-load-client";
public const string LATEST_VERSION_ENDPOINT = BERRYDASH_ENDPOINT + "/latest-version"; public const string LATEST_VERSION_ENDPOINT = BERRYDASH_ENDPOINT + "/latest-version";
public const string RANDOM_SPLASHES_ENDPOINT = BERRYDASH_ENDPOINT + "/splash-text"; public const string RANDOM_SPLASHES_ENDPOINT = BERRYDASH_ENDPOINT + "/splash-text";
public const string LEADERBOARDS_ENDPOINT = BERRYDASH_ENDPOINT + "/leaderboards"; public const string LEADERBOARDS_ENDPOINT = BERRYDASH_ENDPOINT + "/leaderboards";
public const string LEADERBOARDS_SCORE_ENDPOINT = LEADERBOARDS_ENDPOINT + "/score"; public const string LEADERBOARDS_SCORE_ENDPOINT = LEADERBOARDS_ENDPOINT + "/score";
public const string LEADERBOARDS_BERRY_ENDPOINT = LEADERBOARDS_ENDPOINT + "/berry"; public const string LEADERBOARDS_BERRY_ENDPOINT = LEADERBOARDS_ENDPOINT + "/berry";
public const string LEADERBOARDS_COIN_ENDPOINT = LEADERBOARDS_ENDPOINT + "/coin"; public const string LEADERBOARDS_COIN_ENDPOINT = LEADERBOARDS_ENDPOINT + "/coin";
public const string LEADERBOARDS_LEGACY_ENDPOINT = LEADERBOARDS_ENDPOINT + "/legacy"; public const string LEADERBOARDS_LEGACY_ENDPOINT = LEADERBOARDS_ENDPOINT + "/legacy";
public const string LEADERBOARDS_TOTAL_ENDPOINT = LEADERBOARDS_ENDPOINT + "/total"; public const string LEADERBOARDS_TOTAL_ENDPOINT = LEADERBOARDS_ENDPOINT + "/total";
public const string PROFILE_POSTS_ENDPOINT = BERRYDASH_ENDPOINT + "/profile/posts"; public const string PROFILE_POSTS_ENDPOINT = BERRYDASH_ENDPOINT + "/profile/posts";
public const string ICON_MARKETPLACE_ENDPOINT = BERRYDASH_ENDPOINT + "/icon-marketplace"; public const string ICON_MARKETPLACE_ENDPOINT = BERRYDASH_ENDPOINT + "/icon-marketplace";
public const string ICON_MARKETPLACE_UPLOAD_ENDPOINT = ICON_MARKETPLACE_ENDPOINT + "/upload"; public const string ICON_MARKETPLACE_UPLOAD_ENDPOINT = ICON_MARKETPLACE_ENDPOINT + "/upload";
public const string ICON_MARKETPLACE_ICON_ENDPOINT = ICON_MARKETPLACE_ENDPOINT + "/icon"; public const string ICON_MARKETPLACE_ICON_ENDPOINT = ICON_MARKETPLACE_ENDPOINT + "/icon";
public const string BD_ACCOUNT_ENDPOINT = BERRYDASH_ENDPOINT + "/account"; public const string BD_ACCOUNT_ENDPOINT = BERRYDASH_ENDPOINT + "/account";
public const string LG_ACCOUNT_ENDPOINT = BASE_URL + "/account"; public const string LG_ACCOUNT_ENDPOINT = BASE_URL + "/account";
public const string ACCOUNT_LOGIN_ENDPOINT = LG_ACCOUNT_ENDPOINT + "/login"; public const string ACCOUNT_LOGIN_ENDPOINT = LG_ACCOUNT_ENDPOINT + "/login";
public const string ACCOUNT_REGISTER_ENDPOINT = LG_ACCOUNT_ENDPOINT + "/register"; public const string ACCOUNT_REGISTER_ENDPOINT = LG_ACCOUNT_ENDPOINT + "/register";
public const string ACCOUNT_SAVE_ENDPOINT = BD_ACCOUNT_ENDPOINT + "/save"; public const string ACCOUNT_SAVE_ENDPOINT = BD_ACCOUNT_ENDPOINT + "/save";
public const string ACCOUNT_CHANGE_USERNAME_ENDPOINT = LG_ACCOUNT_ENDPOINT + "/change-username"; public const string ACCOUNT_CHANGE_USERNAME_ENDPOINT = LG_ACCOUNT_ENDPOINT + "/change-username";
public const string ACCOUNT_CHANGE_PASSWORD_ENDPOINT = LG_ACCOUNT_ENDPOINT + "/change-password"; public const string ACCOUNT_CHANGE_PASSWORD_ENDPOINT = LG_ACCOUNT_ENDPOINT + "/change-password";
public const string ACCOUNT_FORGOT_USERNAME_ENDPOINT = BASE_URL + "/account/forgot-username"; public const string ACCOUNT_FORGOT_USERNAME_ENDPOINT = BASE_URL + "/account/forgot-username";
public const string ACCOUNT_FORGOT_PASSWORD_ENDPOINT = BASE_URL + "/account/forgot-password"; public const string ACCOUNT_FORGOT_PASSWORD_ENDPOINT = BASE_URL + "/account/forgot-password";
public const string CHATROOM_REPORT_MESSAGE_ENDPOINT = BERRYDASH_ENDPOINT + "/chatroom/report"; public const string CHATROOM_REPORT_MESSAGE_ENDPOINT = BERRYDASH_ENDPOINT + "/chatroom/report";
} }
+16 -16
View File
@@ -1,22 +1,22 @@
using UnityEngine; using UnityEngine;
public class HideIfSettingFalse : MonoBehaviour { public class HideIfSettingFalse : MonoBehaviour {
[SerializeField] private SettingTypes setting; [SerializeField] private SettingTypes setting;
[SerializeField] private bool reverse; [SerializeField] private bool reverse;
void Start() { void Start() {
bool value = GetSettingValue(setting); bool value = GetSettingValue(setting);
gameObject.SetActive(value == !reverse); gameObject.SetActive(value == !reverse);
} }
bool GetSettingValue(SettingTypes s) { bool GetSettingValue(SettingTypes s) {
var b = BazookaManager.Instance; var b = BazookaManager.Instance;
return s switch { return s switch {
SettingTypes.FullScreen => b.GetSettingFullScreen(), SettingTypes.FullScreen => b.GetSettingFullScreen(),
SettingTypes.ShowFPS => b.GetSettingShowFPS(), SettingTypes.ShowFPS => b.GetSettingShowFPS(),
SettingTypes.Vsync => b.GetSettingVsync(), SettingTypes.Vsync => b.GetSettingVsync(),
SettingTypes.HideSocials => b.GetSettingHideSocials() ?? false, SettingTypes.HideSocials => b.GetSettingHideSocials() ?? false,
_ => false _ => false
}; };
} }
} }
+7 -7
View File
@@ -2,13 +2,13 @@ using UnityEngine;
using UnityEngine.EventSystems; using UnityEngine.EventSystems;
public class HoldableButton : MonoBehaviour, IPointerDownHandler, IPointerUpHandler { public class HoldableButton : MonoBehaviour, IPointerDownHandler, IPointerUpHandler {
public bool isPressed; public bool isPressed;
public void OnPointerDown(PointerEventData eventData) { public void OnPointerDown(PointerEventData eventData) {
isPressed = true; isPressed = true;
} }
public void OnPointerUp(PointerEventData eventData) { public void OnPointerUp(PointerEventData eventData) {
isPressed = false; isPressed = false;
} }
} }
+1 -1
View File
@@ -1,5 +1,5 @@
using UnityEngine; using UnityEngine;
public class IgnoreRaycast : MonoBehaviour, ICanvasRaycastFilter { public class IgnoreRaycast : MonoBehaviour, ICanvasRaycastFilter {
public bool IsRaycastLocationValid(Vector2 sp, Camera eventCamera) => GetComponent<DraggableUI>() != null && GetComponent<DraggableUI>().canDrag; public bool IsRaycastLocationValid(Vector2 sp, Camera eventCamera) => GetComponent<DraggableUI>() != null && GetComponent<DraggableUI>().canDrag;
} }
+18 -18
View File
@@ -1,26 +1,26 @@
using UnityEngine; using UnityEngine;
public class ObjectSpinner : MonoBehaviour { public class ObjectSpinner : MonoBehaviour {
[SerializeField] private float frequency = 1f; [SerializeField] private float frequency = 1f;
[SerializeField] private bool spinX = false; [SerializeField] private bool spinX = false;
[SerializeField] private bool spinY = true; [SerializeField] private bool spinY = true;
[SerializeField] private bool spinZ = false; [SerializeField] private bool spinZ = false;
[SerializeField] private bool useLocalSpace = true; [SerializeField] private bool useLocalSpace = true;
[SerializeField] private bool reverseDirection = false; [SerializeField] private bool reverseDirection = false;
private float DegreesPerSecond => frequency * 360f; private float DegreesPerSecond => frequency * 360f;
void Update() { void Update() {
float direction = reverseDirection ? -1f : 1f; float direction = reverseDirection ? -1f : 1f;
float delta = DegreesPerSecond * direction * Time.deltaTime; float delta = DegreesPerSecond * direction * Time.deltaTime;
Vector3 rotationAxis = new( Vector3 rotationAxis = new(
spinX ? delta : 0f, spinX ? delta : 0f,
spinY ? delta : 0f, spinY ? delta : 0f,
spinZ ? delta : 0f spinZ ? delta : 0f
); );
if (useLocalSpace) transform.Rotate(rotationAxis, Space.Self); if (useLocalSpace) transform.Rotate(rotationAxis, Space.Self);
else transform.Rotate(rotationAxis, Space.World); else transform.Rotate(rotationAxis, Space.World);
} }
} }
+26 -26
View File
@@ -5,32 +5,32 @@ using System.Text;
using UnityEngine; using UnityEngine;
public class OldSavefileEncryption { public class OldSavefileEncryption {
public const string BAZOOKA_MANAGER_KEY = "5de0d5798d4eb751e13b668c1fc5297d"; public const string BAZOOKA_MANAGER_KEY = "5de0d5798d4eb751e13b668c1fc5297d";
public const string BAZOOKA_MANAGER_FILE_KEY = "e74af7ba21b8b4edd0e3f1d572d63c67"; public const string BAZOOKA_MANAGER_FILE_KEY = "e74af7ba21b8b4edd0e3f1d572d63c67";
public static string DecryptRaw(byte[] data) { public static string DecryptRaw(byte[] data) {
if (BAZOOKA_MANAGER_KEY.Trim() == string.Empty) { if (BAZOOKA_MANAGER_KEY.Trim() == string.Empty) {
Debug.LogError("Failed to decrypt: Encryption/Decryption keys not present"); Debug.LogError("Failed to decrypt: Encryption/Decryption keys not present");
return null; return null;
}
try {
using Aes aes = Aes.Create();
aes.Key = Encoding.UTF8.GetBytes(BAZOOKA_MANAGER_KEY);
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
byte[] iv = new byte[16];
Array.Copy(data, 0, iv, 0, iv.Length);
aes.IV = iv;
using MemoryStream ms = new(data, iv.Length, data.Length - iv.Length);
using var cryptoStream = new CryptoStream(ms, aes.CreateDecryptor(), CryptoStreamMode.Read);
using StreamReader reader = new(cryptoStream);
return reader.ReadToEnd();
}
catch {
return null;
}
} }
try {
using Aes aes = Aes.Create();
aes.Key = Encoding.UTF8.GetBytes(BAZOOKA_MANAGER_KEY);
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
byte[] iv = new byte[16];
Array.Copy(data, 0, iv, 0, iv.Length);
aes.IV = iv;
using MemoryStream ms = new(data, iv.Length, data.Length - iv.Length);
using var cryptoStream = new CryptoStream(ms, aes.CreateDecryptor(), CryptoStreamMode.Read);
using StreamReader reader = new(cryptoStream);
return reader.ReadToEnd();
}
catch {
return null;
}
}
} }
+10 -10
View File
@@ -1,15 +1,15 @@
using UnityEngine; using UnityEngine;
public class RainbowCamera : MonoBehaviour { public class RainbowCamera : MonoBehaviour {
public float frequency = 1f; public float frequency = 1f;
[Range(0, 255)] [Range(0, 255)]
public int brightness = 255; public int brightness = 255;
void Update() { void Update() {
float t = Time.time * frequency; float t = Time.time * frequency;
float r = (Mathf.Sin(t) * 0.5f + 0.5f) * (brightness / 255f); float r = (Mathf.Sin(t) * 0.5f + 0.5f) * (brightness / 255f);
float g = (Mathf.Sin(t + 2f) * 0.5f + 0.5f) * (brightness / 255f); float g = (Mathf.Sin(t + 2f) * 0.5f + 0.5f) * (brightness / 255f);
float b = (Mathf.Sin(t + 4f) * 0.5f + 0.5f) * (brightness / 255f); float b = (Mathf.Sin(t + 4f) * 0.5f + 0.5f) * (brightness / 255f);
Camera.main.backgroundColor = new Color(r, g, b); Camera.main.backgroundColor = new Color(r, g, b);
} }
} }
+12 -12
View File
@@ -2,18 +2,18 @@ using UnityEngine;
using UnityEngine.UI; using UnityEngine.UI;
public class RainbowImage : MonoBehaviour { public class RainbowImage : MonoBehaviour {
public float frequency = 1f; public float frequency = 1f;
private Image targetImage; private Image targetImage;
void Awake() { void Awake() {
targetImage = gameObject.GetComponent<Image>(); targetImage = gameObject.GetComponent<Image>();
} }
void Update() { void Update() {
float t = Time.time * frequency; float t = Time.time * frequency;
float r = Mathf.Sin(t) * 0.5f + 0.5f; float r = Mathf.Sin(t) * 0.5f + 0.5f;
float g = Mathf.Sin(t + 2f) * 0.5f + 0.5f; float g = Mathf.Sin(t + 2f) * 0.5f + 0.5f;
float b = Mathf.Sin(t + 4f) * 0.5f + 0.5f; float b = Mathf.Sin(t + 4f) * 0.5f + 0.5f;
targetImage.color = new Color(r, g, b); targetImage.color = new Color(r, g, b);
} }
} }
+12 -12
View File
@@ -1,18 +1,18 @@
using UnityEngine; using UnityEngine;
public class RainbowSpriteRender : MonoBehaviour { public class RainbowSpriteRender : MonoBehaviour {
public float frequency = 1f; public float frequency = 1f;
private SpriteRenderer targetImage; private SpriteRenderer targetImage;
void Awake() { void Awake() {
targetImage = gameObject.GetComponent<SpriteRenderer>(); targetImage = gameObject.GetComponent<SpriteRenderer>();
} }
void Update() { void Update() {
float t = Time.time * frequency; float t = Time.time * frequency;
float r = Mathf.Sin(t) * 0.5f + 0.5f; float r = Mathf.Sin(t) * 0.5f + 0.5f;
float g = Mathf.Sin(t + 2f) * 0.5f + 0.5f; float g = Mathf.Sin(t + 2f) * 0.5f + 0.5f;
float b = Mathf.Sin(t + 4f) * 0.5f + 0.5f; float b = Mathf.Sin(t + 4f) * 0.5f + 0.5f;
targetImage.color = new Color(r, g, b); targetImage.color = new Color(r, g, b);
} }
} }
+12 -12
View File
@@ -2,18 +2,18 @@ using TMPro;
using UnityEngine; using UnityEngine;
public class RainbowText : MonoBehaviour { public class RainbowText : MonoBehaviour {
public float frequency = 1f; public float frequency = 1f;
private TMP_Text targetImage; private TMP_Text targetImage;
void Awake() { void Awake() {
targetImage = gameObject.GetComponent<TMP_Text>(); targetImage = gameObject.GetComponent<TMP_Text>();
} }
void Update() { void Update() {
float t = Time.time * frequency; float t = Time.time * frequency;
float r = Mathf.Sin(t) * 0.5f + 0.5f; float r = Mathf.Sin(t) * 0.5f + 0.5f;
float g = Mathf.Sin(t + 2f) * 0.5f + 0.5f; float g = Mathf.Sin(t + 2f) * 0.5f + 0.5f;
float b = Mathf.Sin(t + 4f) * 0.5f + 0.5f; float b = Mathf.Sin(t + 4f) * 0.5f + 0.5f;
targetImage.color = new Color(r, g, b); targetImage.color = new Color(r, g, b);
} }
} }
+137 -137
View File
@@ -8,157 +8,157 @@ using UnityEngine;
using UnityEngine.UI; using UnityEngine.UI;
public static class Tools { public static class Tools {
public static Sprite GetIconForUser(BigInteger user) { public static Sprite GetIconForUser(BigInteger user) {
if (user == 1) return Resources.Load<Sprite>("Icons/Icons/bird_-1"); if (user == 1) return Resources.Load<Sprite>("Icons/Icons/bird_-1");
else if (user == 2) return Resources.Load<Sprite>("Icons/Icons/bird_-2"); else if (user == 2) return Resources.Load<Sprite>("Icons/Icons/bird_-2");
else if (user == 4) return Resources.Load<Sprite>("Icons/Icons/bird_-3"); else if (user == 4) return Resources.Load<Sprite>("Icons/Icons/bird_-3");
else if (user == 3) return Resources.Load<Sprite>("Icons/Icons/bird_-4"); else if (user == 3) return Resources.Load<Sprite>("Icons/Icons/bird_-4");
else return Resources.Load<Sprite>("Icons/Icons/bird_1"); else return Resources.Load<Sprite>("Icons/Icons/bird_1");
} }
public static string FormatWithCommas(string number) { public static string FormatWithCommas(string number) {
try { return FormatWithCommas(BigInteger.Parse(number)); } try { return FormatWithCommas(BigInteger.Parse(number)); }
catch { return number; } catch { return number; }
} }
public static string FormatWithCommas(BigInteger number) { public static string FormatWithCommas(BigInteger number) {
return string.Format("{0:N0}", number); return string.Format("{0:N0}", number);
} }
public static void UpdateStatusText(TMP_Text statusText, string message, Color color) { public static void UpdateStatusText(TMP_Text statusText, string message, Color color) {
statusText.text = message; statusText.text = message;
statusText.color = color; statusText.color = color;
} }
public static Sprite GetSpriteFromBase64(string base64) { public static Sprite GetSpriteFromBase64(string base64) {
byte[] imageData = Convert.FromBase64String(base64); byte[] imageData = Convert.FromBase64String(base64);
Texture2D tex = new(2, 2, TextureFormat.ARGB32, false); Texture2D tex = new(2, 2, TextureFormat.ARGB32, false);
if (!tex.LoadImage(imageData)) return null; if (!tex.LoadImage(imageData)) return null;
tex.filterMode = FilterMode.Point; tex.filterMode = FilterMode.Point;
tex.Apply(false, false); tex.Apply(false, false);
return Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), new UnityEngine.Vector2(0.5f, 0.5f)); return Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), new UnityEngine.Vector2(0.5f, 0.5f));
} }
public static void RefreshHierarchy(GameObject root) { public static void RefreshHierarchy(GameObject root) {
foreach (Transform child in root.transform) RefreshHierarchy(child.gameObject); foreach (Transform child in root.transform) RefreshHierarchy(child.gameObject);
if (root.TryGetComponent<RectTransform>(out var rect)) LayoutRebuilder.ForceRebuildLayoutImmediate(rect); if (root.TryGetComponent<RectTransform>(out var rect)) LayoutRebuilder.ForceRebuildLayoutImmediate(rect);
} }
public static string Sha512Sum(byte[] data) { public static string Sha512Sum(byte[] data) {
using var sha512 = SHA512.Create(); using var sha512 = SHA512.Create();
var hash = sha512.ComputeHash(data); var hash = sha512.ComputeHash(data);
var sb = new StringBuilder(hash.Length * 2); var sb = new StringBuilder(hash.Length * 2);
foreach (var b in hash) foreach (var b in hash)
sb.Append(b.ToString("x2")); sb.Append(b.ToString("x2"));
return sb.ToString(); return sb.ToString();
} }
public static BigInteger CalculateXP(BigInteger normalBerries, BigInteger poisonBerries, BigInteger slowBerries, BigInteger ultraBerries, BigInteger speedyBerries, BigInteger coinBerries, BigInteger randomBerries, BigInteger antiBerries, BigInteger goldenBerries) { public static BigInteger CalculateXP(BigInteger normalBerries, BigInteger poisonBerries, BigInteger slowBerries, BigInteger ultraBerries, BigInteger speedyBerries, BigInteger coinBerries, BigInteger randomBerries, BigInteger antiBerries, BigInteger goldenBerries) {
BigInteger totalXp = 0; BigInteger totalXp = 0;
totalXp += normalBerries; totalXp += normalBerries;
totalXp -= poisonBerries; totalXp -= poisonBerries;
totalXp -= slowBerries; totalXp -= slowBerries;
totalXp += ultraBerries * 5; totalXp += ultraBerries * 5;
totalXp += speedyBerries * 10; totalXp += speedyBerries * 10;
totalXp += coinBerries * 10; totalXp += coinBerries * 10;
totalXp += randomBerries; totalXp += randomBerries;
totalXp -= antiBerries; totalXp -= antiBerries;
totalXp += goldenBerries * 4; totalXp += goldenBerries * 4;
if (totalXp < 0) totalXp = 0; if (totalXp < 0) totalXp = 0;
return totalXp; return totalXp;
} }
public static BigInteger CalculateXP() { public static BigInteger CalculateXP() {
return CalculateXP( return CalculateXP(
BazookaManager.Instance.GetGameStoreTotalNormalBerries(), BazookaManager.Instance.GetGameStoreTotalNormalBerries(),
BazookaManager.Instance.GetGameStoreTotalPoisonBerries(), BazookaManager.Instance.GetGameStoreTotalPoisonBerries(),
BazookaManager.Instance.GetGameStoreTotalSlowBerries(), BazookaManager.Instance.GetGameStoreTotalSlowBerries(),
BazookaManager.Instance.GetGameStoreTotalUltraBerries(), BazookaManager.Instance.GetGameStoreTotalUltraBerries(),
BazookaManager.Instance.GetGameStoreTotalSpeedyBerries(), BazookaManager.Instance.GetGameStoreTotalSpeedyBerries(),
BazookaManager.Instance.GetGameStoreTotalCoinBerries(), BazookaManager.Instance.GetGameStoreTotalCoinBerries(),
BazookaManager.Instance.GetGameStoreTotalRandomBerries(), BazookaManager.Instance.GetGameStoreTotalRandomBerries(),
BazookaManager.Instance.GetGameStoreTotalAntiBerries(), BazookaManager.Instance.GetGameStoreTotalAntiBerries(),
BazookaManager.Instance.GetGameStoreTotalGoldenBerries() BazookaManager.Instance.GetGameStoreTotalGoldenBerries()
);
}
public static (BigInteger totalXp, double level, BigInteger currentXpInLevel, BigInteger totalXpForLevel, double percentDone) GetLevelInfo(BigInteger xp) {
double levelDivisor = 50.0;
double discriminant = 95 * 95 + levelDivisor * 2 * (double)xp;
double level = (-95 + Math.Sqrt(discriminant)) / levelDivisor;
double flooredLevel = Math.Floor(level);
BigInteger xpAtStartOfLevel = (BigInteger)(levelDivisor / 2 * flooredLevel * flooredLevel + 95 * flooredLevel);
double nextLevel = flooredLevel + 1;
BigInteger xpAtNextLevel = (BigInteger)(levelDivisor / 2 * nextLevel * nextLevel + 95 * nextLevel);
BigInteger totalXpForLevel = xpAtNextLevel - xpAtStartOfLevel;
BigInteger currentXpInLevel = xp - xpAtStartOfLevel;
double percentDone = totalXpForLevel == 0 ? 0.0 : (double)currentXpInLevel / (double)totalXpForLevel * 100.0;
return (xp, flooredLevel + 1, currentXpInLevel, totalXpForLevel, percentDone);
}
public static (BigInteger totalXp, double level, BigInteger currentXpInLevel, BigInteger totalXpForLevel, double percentDone) GetLevelInfo() {
var (totalXp, level, currentXpInLevel, totalXpForLevel, percentDone) = GetLevelInfo(CalculateXP());
return (totalXp, level, currentXpInLevel, totalXpForLevel, percentDone);
}
public static string FormatHumanTime(long unixTimestamp) {
DateTime date = DateTimeOffset.FromUnixTimeSeconds(unixTimestamp).LocalDateTime;
DateTime now = DateTime.Now;
bool isToday = date.Year == now.Year && date.Month == now.Month && date.Day == now.Day;
DateTime yesterday = now.AddDays(-1);
bool isYesterday = date.Year == yesterday.Year && date.Month == yesterday.Month && date.Day == yesterday.Day;
string timeStr = date.ToString("t");
if (isToday) return timeStr;
if (isYesterday) return $"Yesterday at {timeStr}";
string dateStr = date.ToShortDateString();
return $"{dateStr}, {timeStr}";
}
public static Color JArayToColor(JArray data) {
return new Color(
int.Parse(data[0].ToString()) / 255f,
int.Parse(data[1].ToString()) / 255f,
int.Parse(data[2].ToString()) / 255f
); );
}
public static void LoadIcon(Image icon, Image overlay, int iconId, int overlayId, JArray iconColor, JArray overlayColor, string customIcon, BigInteger userId) {
if (customIcon == null || customIcon.Trim() == string.Empty) {
icon.color = JArayToColor(iconColor);
overlay.color = JArayToColor(overlayColor);
if (iconId == 1) icon.sprite = GetIconForUser(userId);
else icon.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + iconId);
if (overlayId != 0) {
overlay.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + overlayId);
overlay.gameObject.SetActive(true);
}
} else {
var waitingForCustomIcon = icon.gameObject.AddComponent<WaitingForCustomIcon>();
waitingForCustomIcon.ID = customIcon;
CustomIconLoader.Init(new[] { waitingForCustomIcon });
} }
}
public static (BigInteger totalXp, double level, BigInteger currentXpInLevel, BigInteger totalXpForLevel, double percentDone) GetLevelInfo(BigInteger xp) { public static GameObject[] GetAllBerries(Transform berryParent) {
double levelDivisor = 50.0; GameObject[] children = new GameObject[berryParent.childCount];
for (int i = 0; i < berryParent.childCount; i++) {
double discriminant = 95 * 95 + levelDivisor * 2 * (double)xp; children[i] = berryParent.GetChild(i).gameObject;
double level = (-95 + Math.Sqrt(discriminant)) / levelDivisor;
double flooredLevel = Math.Floor(level);
BigInteger xpAtStartOfLevel = (BigInteger)(levelDivisor / 2 * flooredLevel * flooredLevel + 95 * flooredLevel);
double nextLevel = flooredLevel + 1;
BigInteger xpAtNextLevel = (BigInteger)(levelDivisor / 2 * nextLevel * nextLevel + 95 * nextLevel);
BigInteger totalXpForLevel = xpAtNextLevel - xpAtStartOfLevel;
BigInteger currentXpInLevel = xp - xpAtStartOfLevel;
double percentDone = totalXpForLevel == 0 ? 0.0 : (double)currentXpInLevel / (double)totalXpForLevel * 100.0;
return (xp, flooredLevel + 1, currentXpInLevel, totalXpForLevel, percentDone);
}
public static (BigInteger totalXp, double level, BigInteger currentXpInLevel, BigInteger totalXpForLevel, double percentDone) GetLevelInfo() {
var (totalXp, level, currentXpInLevel, totalXpForLevel, percentDone) = GetLevelInfo(CalculateXP());
return (totalXp, level, currentXpInLevel, totalXpForLevel, percentDone);
}
public static string FormatHumanTime(long unixTimestamp) {
DateTime date = DateTimeOffset.FromUnixTimeSeconds(unixTimestamp).LocalDateTime;
DateTime now = DateTime.Now;
bool isToday = date.Year == now.Year && date.Month == now.Month && date.Day == now.Day;
DateTime yesterday = now.AddDays(-1);
bool isYesterday = date.Year == yesterday.Year && date.Month == yesterday.Month && date.Day == yesterday.Day;
string timeStr = date.ToString("t");
if (isToday) return timeStr;
if (isYesterday) return $"Yesterday at {timeStr}";
string dateStr = date.ToShortDateString();
return $"{dateStr}, {timeStr}";
}
public static Color JArayToColor(JArray data) {
return new Color(
int.Parse(data[0].ToString()) / 255f,
int.Parse(data[1].ToString()) / 255f,
int.Parse(data[2].ToString()) / 255f
);
}
public static void LoadIcon(Image icon, Image overlay, int iconId, int overlayId, JArray iconColor, JArray overlayColor, string customIcon, BigInteger userId) {
if (customIcon == null || customIcon.Trim() == string.Empty) {
icon.color = JArayToColor(iconColor);
overlay.color = JArayToColor(overlayColor);
if (iconId == 1) icon.sprite = GetIconForUser(userId);
else icon.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + iconId);
if (overlayId != 0) {
overlay.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + overlayId);
overlay.gameObject.SetActive(true);
}
} else {
var waitingForCustomIcon = icon.gameObject.AddComponent<WaitingForCustomIcon>();
waitingForCustomIcon.ID = customIcon;
CustomIconLoader.Init(new[] { waitingForCustomIcon });
}
}
public static GameObject[] GetAllBerries(Transform berryParent) {
GameObject[] children = new GameObject[berryParent.childCount];
for (int i = 0; i < berryParent.childCount; i++) {
children[i] = berryParent.GetChild(i).gameObject;
}
return children;
} }
return children;
}
} }
+1 -1
View File
@@ -1,5 +1,5 @@
using UnityEngine; using UnityEngine;
public class WaitingForCustomIcon : MonoBehaviour { public class WaitingForCustomIcon : MonoBehaviour {
public string ID; public string ID;
} }
+82 -82
View File
@@ -5,102 +5,102 @@ using UnityEngine.SceneManagement;
using System; using System;
public class WebsocketHandler : MonoBehaviour { public class WebsocketHandler : MonoBehaviour {
public static WebsocketHandler Instance; public static WebsocketHandler Instance;
public WebSocketConnection _Connection; public WebSocketConnection _Connection;
private bool isReconnecting = false; private bool isReconnecting = false;
private bool intentionalDisconnect = false; private bool intentionalDisconnect = false;
private static readonly WaitForSeconds _waitForSeconds2 = new(2f); private static readonly WaitForSeconds _waitForSeconds2 = new(2f);
private string lastSceneName = null; private string lastSceneName = null;
private float _lastPingMs = -1f; private float _lastPingMs = -1f;
private void Awake() { private void Awake() {
if (Instance != null) { if (Instance != null) {
Destroy(gameObject); Destroy(gameObject);
return; return;
}
Instance = this;
DontDestroyOnLoad(gameObject);
_Connection = gameObject.AddComponent<WebSocketConnection>();
_Connection.DesiredConfig = new WebSocketConfig {
MaxReceiveBytes = 10 * 1024 * 1024,
PingInterval = TimeSpan.FromSeconds(5),
PingMessage = new WebSocketMessage("ping"),
ShouldPingWaitForPong = true,
};
_Connection.StateChanged += OnStateChanged;
_Connection.ErrorMessageReceived += OnErrorMessageReceived;
_Connection.PongReceived += OnPongReceived;
SceneManager.sceneLoaded += OnSceneLoaded;
Connect();
} }
private void OnDestroy() { Instance = this;
if (_Connection != null) { DontDestroyOnLoad(gameObject);
_Connection.StateChanged -= OnStateChanged;
_Connection.ErrorMessageReceived -= OnErrorMessageReceived; _Connection = gameObject.AddComponent<WebSocketConnection>();
} _Connection.DesiredConfig = new WebSocketConfig {
MaxReceiveBytes = 10 * 1024 * 1024,
PingInterval = TimeSpan.FromSeconds(5),
PingMessage = new WebSocketMessage("ping"),
ShouldPingWaitForPong = true,
};
_Connection.StateChanged += OnStateChanged;
_Connection.ErrorMessageReceived += OnErrorMessageReceived;
_Connection.PongReceived += OnPongReceived;
SceneManager.sceneLoaded += OnSceneLoaded;
Connect();
}
private void OnDestroy() {
if (_Connection != null) {
_Connection.StateChanged -= OnStateChanged;
_Connection.ErrorMessageReceived -= OnErrorMessageReceived;
} }
}
public void Connect() { public void Connect() {
intentionalDisconnect = false; intentionalDisconnect = false;
if (_Connection.State == WebSocketState.Connected || _Connection.State == WebSocketState.Connecting) return; if (_Connection.State == WebSocketState.Connected || _Connection.State == WebSocketState.Connecting) return;
_Connection.Connect(Endpoints.WS_ENDPOINT); _Connection.Connect(Endpoints.WS_ENDPOINT);
}
public void Disconnect() {
intentionalDisconnect = true;
_Connection.Disconnect();
}
private void OnStateChanged(WebSocketConnection connection, WebSocketState oldState, WebSocketState newState) {
Debug.Log($"WS state changed from \"{oldState}\" to \"{newState}\"");
if (newState == WebSocketState.Disconnected && !intentionalDisconnect && !isReconnecting) {
StartCoroutine(ReconnectWithDelay());
} }
if (newState == WebSocketState.Connected) {
public void Disconnect() { var currentSceneName = SceneManager.GetActiveScene().name;
intentionalDisconnect = true; ConnectedWithCurrentSceneMessage msg = new() {
_Connection.Disconnect(); sceneName = currentSceneName
};
_Connection.AddOutgoingMessage(JsonUtility.ToJson(msg));
} }
}
private void OnStateChanged(WebSocketConnection connection, WebSocketState oldState, WebSocketState newState) { private void OnErrorMessageReceived(WebSocketConnection connection, string errorMessage) {
Debug.Log($"WS state changed from \"{oldState}\" to \"{newState}\""); Debug.LogError($"WS error {errorMessage}");
if (newState == WebSocketState.Disconnected && !intentionalDisconnect && !isReconnecting) { }
StartCoroutine(ReconnectWithDelay());
} private IEnumerator ReconnectWithDelay() {
if (newState == WebSocketState.Connected) { isReconnecting = true;
var currentSceneName = SceneManager.GetActiveScene().name; yield return _waitForSeconds2;
ConnectedWithCurrentSceneMessage msg = new() { isReconnecting = false;
sceneName = currentSceneName Debug.Log("Trying to connect again");
}; Connect();
_Connection.AddOutgoingMessage(JsonUtility.ToJson(msg)); }
}
private void OnSceneLoaded(Scene scene, LoadSceneMode mode) {
if (_Connection.State == WebSocketState.Connected) {
SceneChangeMessage msg = new() {
to = scene.name,
from = lastSceneName
};
_Connection.AddOutgoingMessage(JsonUtility.ToJson(msg));
} }
lastSceneName = scene.name;
}
private void OnErrorMessageReceived(WebSocketConnection connection, string errorMessage) { public float GetPing() => _lastPingMs;
Debug.LogError($"WS error {errorMessage}");
}
private IEnumerator ReconnectWithDelay() { private void OnPongReceived(WebSocketConnection connection, DateTime timestamp) {
isReconnecting = true; _lastPingMs = (float)connection.LastPingPongInterval.TotalMilliseconds;
yield return _waitForSeconds2; }
isReconnecting = false;
Debug.Log("Trying to connect again");
Connect();
}
private void OnSceneLoaded(Scene scene, LoadSceneMode mode) {
if (_Connection.State == WebSocketState.Connected) {
SceneChangeMessage msg = new() {
to = scene.name,
from = lastSceneName
};
_Connection.AddOutgoingMessage(JsonUtility.ToJson(msg));
}
lastSceneName = scene.name;
}
public float GetPing() => _lastPingMs;
private void OnPongReceived(WebSocketConnection connection, DateTime timestamp) {
_lastPingMs = (float)connection.LastPingPongInterval.TotalMilliseconds;
}
} }
+333 -333
View File
@@ -8,373 +8,373 @@ using UnityEngine.SceneManagement;
using UnityEngine.UI; using UnityEngine.UI;
public class PlayMenu : MonoBehaviour { public class PlayMenu : MonoBehaviour {
[SerializeField] private GameObject selectionMenu; [SerializeField] private GameObject selectionMenu;
[SerializeField] private GameObject customMenu; [SerializeField] private GameObject customMenu;
[SerializeField] private GameObject autoWarningMenu; [SerializeField] private GameObject autoWarningMenu;
[SerializeField] private Button customButton; [SerializeField] private Button customButton;
[SerializeField] private Button customBackButton; [SerializeField] private Button customBackButton;
[SerializeField] private Button customPlayButton; [SerializeField] private Button customPlayButton;
[SerializeField] private Button customNormalizeButton; [SerializeField] private Button customNormalizeButton;
[SerializeField] private Button multiplayerButton; [SerializeField] private Button multiplayerButton;
[SerializeField] private GameObject multiplayerJoinStatusPanel; [SerializeField] private GameObject multiplayerJoinStatusPanel;
[SerializeField] private GameObject multiplayerJoiningPanel; [SerializeField] private GameObject multiplayerJoiningPanel;
[SerializeField] private GameObject multiplayerDeniedPanel; [SerializeField] private GameObject multiplayerDeniedPanel;
[SerializeField] private Button multiplayerDeniedBackButton; [SerializeField] private Button multiplayerDeniedBackButton;
[SerializeField] private TMP_Text multiplayerDeniedReasonText; [SerializeField] private TMP_Text multiplayerDeniedReasonText;
[SerializeField] private Button autoButton; [SerializeField] private Button autoButton;
[SerializeField] private Button autoBackButton; [SerializeField] private Button autoBackButton;
[SerializeField] private Button autoPlayButton; [SerializeField] private Button autoPlayButton;
[SerializeField] private TMP_InputField normalBerryChance; [SerializeField] private TMP_InputField normalBerryChance;
[SerializeField] private TMP_InputField poisonBerryChance; [SerializeField] private TMP_InputField poisonBerryChance;
[SerializeField] private TMP_InputField slowBerryChance; [SerializeField] private TMP_InputField slowBerryChance;
[SerializeField] private TMP_InputField ultraBerryChance; [SerializeField] private TMP_InputField ultraBerryChance;
[SerializeField] private TMP_InputField speedyBerryChance; [SerializeField] private TMP_InputField speedyBerryChance;
[SerializeField] private TMP_InputField randomBerryChance; [SerializeField] private TMP_InputField randomBerryChance;
[SerializeField] private TMP_InputField antiBerryChance; [SerializeField] private TMP_InputField antiBerryChance;
[SerializeField] private TMP_InputField goldenBerryChance; [SerializeField] private TMP_InputField goldenBerryChance;
[SerializeField] private TMP_InputField nothingBerryChance; [SerializeField] private TMP_InputField nothingBerryChance;
[SerializeField] private Toggle useAiToggle; [SerializeField] private Toggle useAiToggle;
[SerializeField] private TMP_Text validateTotalText; [SerializeField] private TMP_Text validateTotalText;
private readonly float defaultNormalBerryChance = 42.5f; private readonly float defaultNormalBerryChance = 42.5f;
private readonly float defaultPoisonBerryChance = 12.5f; private readonly float defaultPoisonBerryChance = 12.5f;
private readonly float defaultSlowBerryChance = 10f; private readonly float defaultSlowBerryChance = 10f;
private readonly float defaultUltraBerryChance = 10f; private readonly float defaultUltraBerryChance = 10f;
private readonly float defaultSpeedyBerryChance = 10f; private readonly float defaultSpeedyBerryChance = 10f;
private readonly float defaultRandomBerryChance = 5f; private readonly float defaultRandomBerryChance = 5f;
private readonly float defaultAntiBerryChance = 5f; private readonly float defaultAntiBerryChance = 5f;
private readonly float defaultGoldenBerryChance = 5f; private readonly float defaultGoldenBerryChance = 5f;
private readonly float defaultNothingBerryChance = 0f; private readonly float defaultNothingBerryChance = 0f;
void Awake() { void Awake() {
customButton.onClick.AddListener(() => { customButton.onClick.AddListener(() => {
selectionMenu.SetActive(false); selectionMenu.SetActive(false);
customMenu.SetActive(true); customMenu.SetActive(true);
if (DiscordRPCHandler.Instance != null) if (DiscordRPCHandler.Instance != null)
DiscordRPCHandler.Instance.UpdateRPC("Customizing to play the custom mode", ""); DiscordRPCHandler.Instance.UpdateRPC("Customizing to play the custom mode", "");
}); });
customBackButton.onClick.AddListener(() => { customBackButton.onClick.AddListener(() => {
customMenu.SetActive(false); customMenu.SetActive(false);
selectionMenu.SetActive(true); selectionMenu.SetActive(true);
normalBerryChance.text = defaultNormalBerryChance.ToString() + "%"; normalBerryChance.text = defaultNormalBerryChance.ToString() + "%";
poisonBerryChance.text = defaultPoisonBerryChance.ToString() + "%"; poisonBerryChance.text = defaultPoisonBerryChance.ToString() + "%";
slowBerryChance.text = defaultSlowBerryChance.ToString() + "%"; slowBerryChance.text = defaultSlowBerryChance.ToString() + "%";
ultraBerryChance.text = defaultUltraBerryChance.ToString() + "%"; ultraBerryChance.text = defaultUltraBerryChance.ToString() + "%";
speedyBerryChance.text = defaultSpeedyBerryChance.ToString() + "%"; speedyBerryChance.text = defaultSpeedyBerryChance.ToString() + "%";
randomBerryChance.text = defaultRandomBerryChance.ToString() + "%"; randomBerryChance.text = defaultRandomBerryChance.ToString() + "%";
antiBerryChance.text = defaultAntiBerryChance.ToString() + "%"; antiBerryChance.text = defaultAntiBerryChance.ToString() + "%";
goldenBerryChance.text = defaultGoldenBerryChance.ToString() + "%"; goldenBerryChance.text = defaultGoldenBerryChance.ToString() + "%";
nothingBerryChance.text = defaultNothingBerryChance.ToString() + "%"; nothingBerryChance.text = defaultNothingBerryChance.ToString() + "%";
useAiToggle.isOn = false; useAiToggle.isOn = false;
ValidateTotal(); ValidateTotal();
if (DiscordRPCHandler.Instance != null) if (DiscordRPCHandler.Instance != null)
DiscordRPCHandler.Instance.UpdateRPC("Picking what mode they want to play", ""); DiscordRPCHandler.Instance.UpdateRPC("Picking what mode they want to play", "");
}); });
customNormalizeButton.onClick.AddListener(() => { customNormalizeButton.onClick.AddListener(() => {
float normalBerry = GetValueFrom(normalBerryChance); float normalBerry = GetValueFrom(normalBerryChance);
float poisonBerry = GetValueFrom(poisonBerryChance); float poisonBerry = GetValueFrom(poisonBerryChance);
float slowBerry = GetValueFrom(slowBerryChance); float slowBerry = GetValueFrom(slowBerryChance);
float ultraBerry = GetValueFrom(ultraBerryChance); float ultraBerry = GetValueFrom(ultraBerryChance);
float speedyBerry = GetValueFrom(speedyBerryChance); float speedyBerry = GetValueFrom(speedyBerryChance);
float randomBerry = GetValueFrom(randomBerryChance); float randomBerry = GetValueFrom(randomBerryChance);
float antiBerry = GetValueFrom(antiBerryChance); float antiBerry = GetValueFrom(antiBerryChance);
float goldenBerry = GetValueFrom(goldenBerryChance); float goldenBerry = GetValueFrom(goldenBerryChance);
float nothingBerry = GetValueFrom(nothingBerryChance); float nothingBerry = GetValueFrom(nothingBerryChance);
int divideBy = 0; int divideBy = 0;
divideBy += normalBerry > 0 ? 1 : 0; divideBy += normalBerry > 0 ? 1 : 0;
divideBy += poisonBerry > 0 ? 1 : 0; divideBy += poisonBerry > 0 ? 1 : 0;
divideBy += slowBerry > 0 ? 1 : 0; divideBy += slowBerry > 0 ? 1 : 0;
divideBy += ultraBerry > 0 ? 1 : 0; divideBy += ultraBerry > 0 ? 1 : 0;
divideBy += speedyBerry > 0 ? 1 : 0; divideBy += speedyBerry > 0 ? 1 : 0;
divideBy += randomBerry > 0 ? 1 : 0; divideBy += randomBerry > 0 ? 1 : 0;
divideBy += antiBerry > 0 ? 1 : 0; divideBy += antiBerry > 0 ? 1 : 0;
divideBy += goldenBerry > 0 ? 1 : 0; divideBy += goldenBerry > 0 ? 1 : 0;
divideBy += nothingBerry > 0 ? 1 : 0; divideBy += nothingBerry > 0 ? 1 : 0;
float addedChances = normalBerry + poisonBerry + slowBerry + ultraBerry + speedyBerry + randomBerry + antiBerry + goldenBerry + nothingBerry; float addedChances = normalBerry + poisonBerry + slowBerry + ultraBerry + speedyBerry + randomBerry + antiBerry + goldenBerry + nothingBerry;
float difference = addedChances - 100f; float difference = addedChances - 100f;
if (normalBerry > 0) NormalizeOne(normalBerryChance, normalBerry, divideBy, difference); if (normalBerry > 0) NormalizeOne(normalBerryChance, normalBerry, divideBy, difference);
if (poisonBerry > 0) NormalizeOne(poisonBerryChance, poisonBerry, divideBy, difference); if (poisonBerry > 0) NormalizeOne(poisonBerryChance, poisonBerry, divideBy, difference);
if (slowBerry > 0) NormalizeOne(slowBerryChance, slowBerry, divideBy, difference); if (slowBerry > 0) NormalizeOne(slowBerryChance, slowBerry, divideBy, difference);
if (ultraBerry > 0) NormalizeOne(ultraBerryChance, ultraBerry, divideBy, difference); if (ultraBerry > 0) NormalizeOne(ultraBerryChance, ultraBerry, divideBy, difference);
if (speedyBerry > 0) NormalizeOne(speedyBerryChance, speedyBerry, divideBy, difference); if (speedyBerry > 0) NormalizeOne(speedyBerryChance, speedyBerry, divideBy, difference);
if (randomBerry > 0) NormalizeOne(randomBerryChance, randomBerry, divideBy, difference); if (randomBerry > 0) NormalizeOne(randomBerryChance, randomBerry, divideBy, difference);
if (antiBerry > 0) NormalizeOne(antiBerryChance, antiBerry, divideBy, difference); if (antiBerry > 0) NormalizeOne(antiBerryChance, antiBerry, divideBy, difference);
if (goldenBerry > 0) NormalizeOne(goldenBerryChance, goldenBerry, divideBy, difference); if (goldenBerry > 0) NormalizeOne(goldenBerryChance, goldenBerry, divideBy, difference);
if (nothingBerry > 0) NormalizeOne(nothingBerryChance, nothingBerry, divideBy, difference); if (nothingBerry > 0) NormalizeOne(nothingBerryChance, nothingBerry, divideBy, difference);
normalBerry = GetValueFrom(normalBerryChance); normalBerry = GetValueFrom(normalBerryChance);
poisonBerry = GetValueFrom(poisonBerryChance); poisonBerry = GetValueFrom(poisonBerryChance);
slowBerry = GetValueFrom(slowBerryChance); slowBerry = GetValueFrom(slowBerryChance);
ultraBerry = GetValueFrom(ultraBerryChance); ultraBerry = GetValueFrom(ultraBerryChance);
speedyBerry = GetValueFrom(speedyBerryChance); speedyBerry = GetValueFrom(speedyBerryChance);
randomBerry = GetValueFrom(randomBerryChance); randomBerry = GetValueFrom(randomBerryChance);
antiBerry = GetValueFrom(antiBerryChance); antiBerry = GetValueFrom(antiBerryChance);
goldenBerry = GetValueFrom(goldenBerryChance); goldenBerry = GetValueFrom(goldenBerryChance);
nothingBerry = GetValueFrom(nothingBerryChance); nothingBerry = GetValueFrom(nothingBerryChance);
if (normalBerry > 0) normalBerry = (float)Math.Floor(normalBerry); if (normalBerry > 0) normalBerry = (float)Math.Floor(normalBerry);
if (poisonBerry > 0) poisonBerry = (float)Math.Floor(poisonBerry); if (poisonBerry > 0) poisonBerry = (float)Math.Floor(poisonBerry);
if (slowBerry > 0) slowBerry = (float)Math.Floor(slowBerry); if (slowBerry > 0) slowBerry = (float)Math.Floor(slowBerry);
if (ultraBerry > 0) ultraBerry = (float)Math.Floor(ultraBerry); if (ultraBerry > 0) ultraBerry = (float)Math.Floor(ultraBerry);
if (speedyBerry > 0) speedyBerry = (float)Math.Floor(speedyBerry); if (speedyBerry > 0) speedyBerry = (float)Math.Floor(speedyBerry);
if (randomBerry > 0) randomBerry = (float)Math.Floor(randomBerry); if (randomBerry > 0) randomBerry = (float)Math.Floor(randomBerry);
if (antiBerry > 0) antiBerry = (float)Math.Floor(antiBerry); if (antiBerry > 0) antiBerry = (float)Math.Floor(antiBerry);
if (goldenBerry > 0) goldenBerry = (float)Math.Floor(goldenBerry); if (goldenBerry > 0) goldenBerry = (float)Math.Floor(goldenBerry);
if (nothingBerry > 0) nothingBerry = (float)Math.Floor(nothingBerry); if (nothingBerry > 0) nothingBerry = (float)Math.Floor(nothingBerry);
float addedChances2 = normalBerry + poisonBerry + slowBerry + ultraBerry + speedyBerry + randomBerry + antiBerry + goldenBerry + nothingBerry; float addedChances2 = normalBerry + poisonBerry + slowBerry + ultraBerry + speedyBerry + randomBerry + antiBerry + goldenBerry + nothingBerry;
float difference2 = addedChances2 - 100f; float difference2 = addedChances2 - 100f;
bool fixedValues = false; bool fixedValues = false;
if (normalBerry > 0) { if (normalBerry > 0) {
NormalizeTwo(normalBerryChance, fixedValues, normalBerry, difference2); NormalizeTwo(normalBerryChance, fixedValues, normalBerry, difference2);
fixedValues = true; fixedValues = true;
} }
if (poisonBerry > 0) { if (poisonBerry > 0) {
NormalizeTwo(poisonBerryChance, fixedValues, poisonBerry, difference2); NormalizeTwo(poisonBerryChance, fixedValues, poisonBerry, difference2);
fixedValues = true; fixedValues = true;
} }
if (slowBerry > 0) { if (slowBerry > 0) {
NormalizeTwo(slowBerryChance, fixedValues, slowBerry, difference2); NormalizeTwo(slowBerryChance, fixedValues, slowBerry, difference2);
fixedValues = true; fixedValues = true;
} }
if (ultraBerry > 0) { if (ultraBerry > 0) {
NormalizeTwo(ultraBerryChance, fixedValues, ultraBerry, difference2); NormalizeTwo(ultraBerryChance, fixedValues, ultraBerry, difference2);
fixedValues = true; fixedValues = true;
} }
if (speedyBerry > 0) { if (speedyBerry > 0) {
NormalizeTwo(speedyBerryChance, fixedValues, speedyBerry, difference2); NormalizeTwo(speedyBerryChance, fixedValues, speedyBerry, difference2);
fixedValues = true; fixedValues = true;
} }
if (randomBerry > 0) { if (randomBerry > 0) {
NormalizeTwo(randomBerryChance, fixedValues, randomBerry, difference2); NormalizeTwo(randomBerryChance, fixedValues, randomBerry, difference2);
fixedValues = true; fixedValues = true;
} }
if (antiBerry > 0) { if (antiBerry > 0) {
NormalizeTwo(antiBerryChance, fixedValues, antiBerry, difference2); NormalizeTwo(antiBerryChance, fixedValues, antiBerry, difference2);
fixedValues = true; fixedValues = true;
} }
if (goldenBerry > 0) { if (goldenBerry > 0) {
NormalizeTwo(goldenBerryChance, fixedValues, goldenBerry, difference2); NormalizeTwo(goldenBerryChance, fixedValues, goldenBerry, difference2);
fixedValues = true; fixedValues = true;
} }
if (nothingBerry > 0) { if (nothingBerry > 0) {
NormalizeTwo(nothingBerryChance, fixedValues, nothingBerry, difference2); NormalizeTwo(nothingBerryChance, fixedValues, nothingBerry, difference2);
fixedValues = true; fixedValues = true;
} }
ValidateTotal(); ValidateTotal();
}); });
customPlayButton.onClick.AddListener(async () => { customPlayButton.onClick.AddListener(async () => {
GameObject obj = new("CustomGameTempData"); GameObject obj = new("CustomGameTempData");
obj.AddComponent<CustomGameTempData>(); obj.AddComponent<CustomGameTempData>();
CustomGameTempData customGameTempData = obj.GetComponent<CustomGameTempData>(); CustomGameTempData customGameTempData = obj.GetComponent<CustomGameTempData>();
customGameTempData.normalBerryChance = GetValueFrom(normalBerryChance); customGameTempData.normalBerryChance = GetValueFrom(normalBerryChance);
customGameTempData.poisonBerryChance = GetValueFrom(poisonBerryChance); customGameTempData.poisonBerryChance = GetValueFrom(poisonBerryChance);
customGameTempData.slowBerryChance = GetValueFrom(slowBerryChance); customGameTempData.slowBerryChance = GetValueFrom(slowBerryChance);
customGameTempData.ultraBerryChance = GetValueFrom(ultraBerryChance); customGameTempData.ultraBerryChance = GetValueFrom(ultraBerryChance);
customGameTempData.speedyBerryChance = GetValueFrom(speedyBerryChance); customGameTempData.speedyBerryChance = GetValueFrom(speedyBerryChance);
customGameTempData.randomBerryChance = GetValueFrom(randomBerryChance); customGameTempData.randomBerryChance = GetValueFrom(randomBerryChance);
customGameTempData.antiBerryChance = GetValueFrom(antiBerryChance); customGameTempData.antiBerryChance = GetValueFrom(antiBerryChance);
customGameTempData.goldenBerryChance = GetValueFrom(goldenBerryChance); customGameTempData.goldenBerryChance = GetValueFrom(goldenBerryChance);
customGameTempData.nothingBerryChance = GetValueFrom(nothingBerryChance); customGameTempData.nothingBerryChance = GetValueFrom(nothingBerryChance);
customGameTempData.useAI = useAiToggle.isOn; customGameTempData.useAI = useAiToggle.isOn;
await SceneManager.LoadSceneAsync("CustomGamePlayer"); await SceneManager.LoadSceneAsync("CustomGamePlayer");
}); });
multiplayerButton.onClick.AddListener(() => { multiplayerButton.onClick.AddListener(() => {
selectionMenu.SetActive(false); selectionMenu.SetActive(false);
multiplayerJoinStatusPanel.SetActive(true); multiplayerJoinStatusPanel.SetActive(true);
multiplayerJoiningPanel.SetActive(true); multiplayerJoiningPanel.SetActive(true);
MultiplayerJoinRequestMessage msg = new() { MultiplayerJoinRequestMessage msg = new() {
auth = BazookaManager.Instance.GetAccountSession() auth = BazookaManager.Instance.GetAccountSession()
}; };
WebsocketHandler.Instance._Connection.AddOutgoingMessage(JsonUtility.ToJson(msg)); WebsocketHandler.Instance._Connection.AddOutgoingMessage(JsonUtility.ToJson(msg));
}); });
multiplayerDeniedBackButton.onClick.AddListener(() => { multiplayerDeniedBackButton.onClick.AddListener(() => {
multiplayerDeniedReasonText.text = ""; multiplayerDeniedReasonText.text = "";
multiplayerDeniedPanel.SetActive(false); multiplayerDeniedPanel.SetActive(false);
multiplayerJoinStatusPanel.SetActive(false); multiplayerJoinStatusPanel.SetActive(false);
selectionMenu.SetActive(true); selectionMenu.SetActive(true);
}); });
autoButton.onClick.AddListener(async () => { autoButton.onClick.AddListener(async () => {
if (BazookaManager.Instance.GetReadAutoWarning() == true) { if (BazookaManager.Instance.GetReadAutoWarning() == true) {
await SceneManager.LoadSceneAsync("AutoGamePlayer"); await SceneManager.LoadSceneAsync("AutoGamePlayer");
return; return;
} }
selectionMenu.SetActive(false); selectionMenu.SetActive(false);
autoWarningMenu.SetActive(true); autoWarningMenu.SetActive(true);
}); });
autoBackButton.onClick.AddListener(() => { autoBackButton.onClick.AddListener(() => {
selectionMenu.SetActive(true); selectionMenu.SetActive(true);
autoWarningMenu.SetActive(false); autoWarningMenu.SetActive(false);
}); });
autoPlayButton.onClick.AddListener(async () => { autoPlayButton.onClick.AddListener(async () => {
BazookaManager.Instance.SetReadAutoWarning(true); BazookaManager.Instance.SetReadAutoWarning(true);
await SceneManager.LoadSceneAsync("AutoGamePlayer"); await SceneManager.LoadSceneAsync("AutoGamePlayer");
}); });
normalBerryChance.onSelect.AddListener((value) => OnSelect(value, normalBerryChance)); normalBerryChance.onSelect.AddListener((value) => OnSelect(value, normalBerryChance));
normalBerryChance.onDeselect.AddListener((value) => OnDeselect(value, normalBerryChance)); normalBerryChance.onDeselect.AddListener((value) => OnDeselect(value, normalBerryChance));
poisonBerryChance.onSelect.AddListener((value) => OnSelect(value, poisonBerryChance)); poisonBerryChance.onSelect.AddListener((value) => OnSelect(value, poisonBerryChance));
poisonBerryChance.onDeselect.AddListener((value) => OnDeselect(value, poisonBerryChance)); poisonBerryChance.onDeselect.AddListener((value) => OnDeselect(value, poisonBerryChance));
slowBerryChance.onSelect.AddListener((value) => OnSelect(value, slowBerryChance)); slowBerryChance.onSelect.AddListener((value) => OnSelect(value, slowBerryChance));
slowBerryChance.onDeselect.AddListener((value) => OnDeselect(value, slowBerryChance)); slowBerryChance.onDeselect.AddListener((value) => OnDeselect(value, slowBerryChance));
ultraBerryChance.onSelect.AddListener((value) => OnSelect(value, ultraBerryChance)); ultraBerryChance.onSelect.AddListener((value) => OnSelect(value, ultraBerryChance));
ultraBerryChance.onDeselect.AddListener((value) => OnDeselect(value, ultraBerryChance)); ultraBerryChance.onDeselect.AddListener((value) => OnDeselect(value, ultraBerryChance));
speedyBerryChance.onSelect.AddListener((value) => OnSelect(value, speedyBerryChance)); speedyBerryChance.onSelect.AddListener((value) => OnSelect(value, speedyBerryChance));
speedyBerryChance.onDeselect.AddListener((value) => OnDeselect(value, speedyBerryChance)); speedyBerryChance.onDeselect.AddListener((value) => OnDeselect(value, speedyBerryChance));
randomBerryChance.onSelect.AddListener((value) => OnSelect(value, randomBerryChance)); randomBerryChance.onSelect.AddListener((value) => OnSelect(value, randomBerryChance));
randomBerryChance.onDeselect.AddListener((value) => OnDeselect(value, randomBerryChance)); randomBerryChance.onDeselect.AddListener((value) => OnDeselect(value, randomBerryChance));
antiBerryChance.onSelect.AddListener((value) => OnSelect(value, antiBerryChance)); antiBerryChance.onSelect.AddListener((value) => OnSelect(value, antiBerryChance));
antiBerryChance.onDeselect.AddListener((value) => OnDeselect(value, antiBerryChance)); antiBerryChance.onDeselect.AddListener((value) => OnDeselect(value, antiBerryChance));
goldenBerryChance.onSelect.AddListener((value) => OnSelect(value, goldenBerryChance)); goldenBerryChance.onSelect.AddListener((value) => OnSelect(value, goldenBerryChance));
goldenBerryChance.onDeselect.AddListener((value) => OnDeselect(value, goldenBerryChance)); goldenBerryChance.onDeselect.AddListener((value) => OnDeselect(value, goldenBerryChance));
nothingBerryChance.onSelect.AddListener((value) => OnSelect(value, nothingBerryChance)); nothingBerryChance.onSelect.AddListener((value) => OnSelect(value, nothingBerryChance));
nothingBerryChance.onDeselect.AddListener((value) => OnDeselect(value, nothingBerryChance)); nothingBerryChance.onDeselect.AddListener((value) => OnDeselect(value, nothingBerryChance));
WebsocketHandler.Instance._Connection.MessageReceived += OnMessageReceived; WebsocketHandler.Instance._Connection.MessageReceived += OnMessageReceived;
} }
private void OnMessageReceived(WebSocketConnection connection, WebSocketMessage message) { private void OnMessageReceived(WebSocketConnection connection, WebSocketMessage message) {
if (message.String != null && connection.State == WebSocketState.Connected) { if (message.String != null && connection.State == WebSocketState.Connected) {
JToken data = JToken.Parse(message.String); JToken data = JToken.Parse(message.String);
if (data["type"] != null) { if (data["type"] != null) {
if (data["type"].ToString() == "multiplayer_join_response") { if (data["type"].ToString() == "multiplayer_join_response") {
bool accepted = bool.Parse(data["accepted"].ToString()); bool accepted = bool.Parse(data["accepted"].ToString());
string denyReason = data["denyReason"].ToString(); string denyReason = data["denyReason"].ToString();
MultiplayerPlayerFromResponse[] players = data["players"].ToObject<MultiplayerPlayerFromResponse[]>(); MultiplayerPlayerFromResponse[] players = data["players"].ToObject<MultiplayerPlayerFromResponse[]>();
if (accepted) { if (accepted) {
GameObject obj = new("MultiplayerGameTempData"); GameObject obj = new("MultiplayerGameTempData");
obj.AddComponent<MultiplayerGameTempData>(); obj.AddComponent<MultiplayerGameTempData>();
MultiplayerGameTempData multiplayerGameTempData = obj.GetComponent<MultiplayerGameTempData>(); MultiplayerGameTempData multiplayerGameTempData = obj.GetComponent<MultiplayerGameTempData>();
multiplayerGameTempData.players = players; multiplayerGameTempData.players = players;
SceneManager.LoadScene("MultiplayerGamePlayer"); SceneManager.LoadScene("MultiplayerGamePlayer");
} else { } else {
multiplayerJoiningPanel.SetActive(false); multiplayerJoiningPanel.SetActive(false);
multiplayerDeniedPanel.SetActive(true); multiplayerDeniedPanel.SetActive(true);
multiplayerDeniedReasonText.text = denyReason; multiplayerDeniedReasonText.text = denyReason;
} }
}
}
} }
}
} }
}
void Start() { void Start() {
if (DiscordRPCHandler.Instance != null) if (DiscordRPCHandler.Instance != null)
DiscordRPCHandler.Instance.UpdateRPC("Picking what mode they want to play", ""); DiscordRPCHandler.Instance.UpdateRPC("Picking what mode they want to play", "");
if (Tools.GetLevelInfo().level < 5) { if (Tools.GetLevelInfo().level < 5) {
useAiToggle.gameObject.SetActive(false); useAiToggle.gameObject.SetActive(false);
customButton.interactable = 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>"; 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>";
}
} }
if (Tools.GetLevelInfo().level < 3) {
void OnDestroy() { autoButton.interactable = false;
WebsocketHandler.Instance._Connection.MessageReceived -= OnMessageReceived; 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) {
void ValidateTotal() { multiplayerButton.gameObject.SetActive(false);
customBackButton.interactable = false; var pos = autoButton.transform.localPosition;
customPlayButton.interactable = false; pos.x = 0;
customNormalizeButton.interactable = false; autoButton.transform.localPosition = pos;
float total = 0f; } else if (BazookaManager.Instance.GetAccountID() == null || BazookaManager.Instance.GetAccountName() == null || BazookaManager.Instance.GetAccountSession() == null) {
total += GetValueFrom(normalBerryChance); multiplayerButton.interactable = false;
total += GetValueFrom(poisonBerryChance); multiplayerButton.transform.GetChild(0).GetComponent<TMP_Text>().text += "\n<size=12>You must be logged to access this</size>";
total += GetValueFrom(slowBerryChance); } else if (Tools.GetLevelInfo().level < 10) {
total += GetValueFrom(ultraBerryChance); multiplayerButton.interactable = false;
total += GetValueFrom(speedyBerryChance); multiplayerButton.transform.GetChild(0).GetComponent<TMP_Text>().text += "\n<size=12>You need level 10 or higher to access this</size>";
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) { void OnDestroy() {
return GetValueFroText(inputField.text); WebsocketHandler.Instance._Connection.MessageReceived -= OnMessageReceived;
} }
private float GetValueFroText(string text) { void ValidateTotal() {
try { customBackButton.interactable = false;
return float.Parse(text.Replace("%", "").Trim()); customPlayButton.interactable = false;
} customNormalizeButton.interactable = false;
catch { float total = 0f;
return 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);
} }
}
void OnSelect(string value, TMP_InputField inputField) { private float GetValueFrom(TMP_InputField inputField) {
validateTotalText.gameObject.SetActive(false); return GetValueFroText(inputField.text);
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) { private float GetValueFroText(string text) {
if (float.TryParse(value, out var value2) && value2 < 0f) { try {
value = "0"; return float.Parse(text.Replace("%", "").Trim());
}
inputField.text = value + "%";
ValidateTotal();
} }
catch {
return 0f;
}
}
void NormalizeOne(TMP_InputField inputField, float berryChance, int divideBy, float difference) { void OnSelect(string value, TMP_InputField inputField) {
inputField.text = (berryChance - (difference / divideBy)).ToString() + "%"; validateTotalText.gameObject.SetActive(false);
inputField.stringPosition = inputField.text.Length; customBackButton.interactable = false;
} customPlayButton.interactable = false;
customNormalizeButton.interactable = false;
inputField.text = value.Replace("%", "");
inputField.stringPosition = inputField.text.Length;
}
void NormalizeTwo(TMP_InputField inputField, bool fixedValues, float berryChance, float difference2) { void OnDeselect(string value, TMP_InputField inputField) {
if (!fixedValues) { if (float.TryParse(value, out var value2) && value2 < 0f) {
inputField.text = (berryChance - difference2).ToString() + "%"; value = "0";
inputField.stringPosition = inputField.text.Length;
} else {
inputField.text = berryChance.ToString() + "%";
inputField.stringPosition = inputField.text.Length;
}
} }
inputField.text = value + "%";
ValidateTotal();
}
async void Update() { void NormalizeOne(TMP_InputField inputField, float berryChance, int divideBy, float difference) {
if (Keyboard.current.escapeKey.wasPressedThisFrame && customBackButton.interactable) { inputField.text = (berryChance - (difference / divideBy)).ToString() + "%";
if (customMenu.activeSelf) customBackButton.onClick.Invoke(); inputField.stringPosition = inputField.text.Length;
else if (autoWarningMenu.activeSelf) autoBackButton.onClick.Invoke(); }
else if (multiplayerJoinStatusPanel.activeSelf) {
if (multiplayerDeniedPanel.activeSelf) multiplayerDeniedBackButton.onClick.Invoke(); void NormalizeTwo(TMP_InputField inputField, bool fixedValues, float berryChance, float difference2) {
} else await SceneManager.LoadSceneAsync("MainMenu"); if (!fixedValues) {
} inputField.text = (berryChance - difference2).ToString() + "%";
inputField.stringPosition = inputField.text.Length;
} else {
inputField.text = berryChance.ToString() + "%";
inputField.stringPosition = inputField.text.Length;
} }
}
async 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 await SceneManager.LoadSceneAsync("MainMenu");
}
}
} }
+45 -45
View File
@@ -7,55 +7,55 @@ using UnityEngine.Networking;
using UnityEngine.SceneManagement; using UnityEngine.SceneManagement;
public class PresistentData : MonoBehaviour { public class PresistentData : MonoBehaviour {
public static PresistentData Instance; public static PresistentData Instance;
private bool loadingDone = false; private bool loadingDone = false;
public static string latestVersion = null; public static string latestVersion = null;
public static List<SplashEntry> randomSplashes = new(); public static List<SplashEntry> randomSplashes = new();
private async void Awake() { private async void Awake() {
if (Instance != null && Instance != this) { if (Instance != null && Instance != this) {
Destroy(gameObject); Destroy(gameObject);
return; return;
}
Instance = this;
DontDestroyOnLoad(gameObject);
if (!loadingDone) {
loadingDone = true;
await GetLatestVersion();
await GetRandomSplashes();
}
} }
private async static Task GetLatestVersion() { Instance = this;
using UnityWebRequest request = UnityWebRequest.Get(Endpoints.LATEST_VERSION_ENDPOINT); DontDestroyOnLoad(gameObject);
request.SetRequestHeader("Requester", "BerryDashClient"); if (!loadingDone) {
request.SetRequestHeader("ClientVersion", Application.version); loadingDone = true;
request.SetRequestHeader("ClientPlatform", Application.platform.ToString()); await GetLatestVersion();
await request.SendWebRequest(); await GetRandomSplashes();
latestVersion = request.downloadHandler.text ?? "-1";
if (
SceneManager.GetActiveScene().name == "MainMenu" &&
latestVersion != "-1" &&
GameObject.Find("Canvas/LatestVersionText").TryGetComponent<TextMeshProUGUI>(out var text)
) {
text.text = "Latest: v" + latestVersion ?? "N/A";
text.transform.GetChild(0).gameObject.SetActive(latestVersion != Application.version);
}
} }
}
private async static Task GetRandomSplashes() { private async static Task GetLatestVersion() {
using UnityWebRequest request = UnityWebRequest.Get(Endpoints.RANDOM_SPLASHES_ENDPOINT); using UnityWebRequest request = UnityWebRequest.Get(Endpoints.LATEST_VERSION_ENDPOINT);
request.SetRequestHeader("Requester", "BerryDashClient"); request.SetRequestHeader("Requester", "BerryDashClient");
request.SetRequestHeader("ClientVersion", Application.version); request.SetRequestHeader("ClientVersion", Application.version);
request.SetRequestHeader("ClientPlatform", Application.platform.ToString()); request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
await request.SendWebRequest(); await request.SendWebRequest();
randomSplashes = JsonConvert.DeserializeObject<List<SplashEntry>>(request.downloadHandler.text); latestVersion = request.downloadHandler.text ?? "-1";
if ( if (
SceneManager.GetActiveScene().name == "MainMenu" && SceneManager.GetActiveScene().name == "MainMenu" &&
randomSplashes != null && latestVersion != "-1" &&
GameObject.Find("Canvas/SplashText").TryGetComponent<TextMeshProUGUI>(out var splashText) && GameObject.Find("Canvas/LatestVersionText").TryGetComponent<TextMeshProUGUI>(out var text)
randomSplashes.Count != 0 ) {
) MainMenu.DoSplashText(splashText, randomSplashes[Random.Range(0, randomSplashes.Count)]); text.text = "Latest: v" + latestVersion ?? "N/A";
text.transform.GetChild(0).gameObject.SetActive(latestVersion != Application.version);
} }
}
private async static Task GetRandomSplashes() {
using UnityWebRequest request = UnityWebRequest.Get(Endpoints.RANDOM_SPLASHES_ENDPOINT);
request.SetRequestHeader("Requester", "BerryDashClient");
request.SetRequestHeader("ClientVersion", Application.version);
request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
await request.SendWebRequest();
randomSplashes = JsonConvert.DeserializeObject<List<SplashEntry>>(request.downloadHandler.text);
if (
SceneManager.GetActiveScene().name == "MainMenu" &&
randomSplashes != null &&
GameObject.Find("Canvas/SplashText").TryGetComponent<TextMeshProUGUI>(out var splashText) &&
randomSplashes.Count != 0
) MainMenu.DoSplashText(splashText, randomSplashes[Random.Range(0, randomSplashes.Count)]);
}
} }
+301 -301
View File
@@ -10,336 +10,336 @@ using UnityEngine.Networking;
using UnityEngine.UI; using UnityEngine.UI;
public class ProfileMenu : MonoBehaviour { public class ProfileMenu : MonoBehaviour {
[SerializeField] private Button exitButton; [SerializeField] private Button exitButton;
[SerializeField] private Button refreshButton; [SerializeField] private Button refreshButton;
[SerializeField] private Button postButton; [SerializeField] private Button postButton;
[SerializeField] private GameObject contentPanel; [SerializeField] private GameObject contentPanel;
[SerializeField] private TMP_Text loadingText; [SerializeField] private TMP_Text loadingText;
[SerializeField] private GameObject voteOverlay; [SerializeField] private GameObject voteOverlay;
[SerializeField] private GameObject postOverlay; [SerializeField] private GameObject postOverlay;
[SerializeField] private TMP_Text normalBerryStat; [SerializeField] private TMP_Text normalBerryStat;
[SerializeField] private TMP_Text poisonBerryStat; [SerializeField] private TMP_Text poisonBerryStat;
[SerializeField] private TMP_Text slowBerryStat; [SerializeField] private TMP_Text slowBerryStat;
[SerializeField] private TMP_Text ultraBerryStat; [SerializeField] private TMP_Text ultraBerryStat;
[SerializeField] private TMP_Text speedyBerryStat; [SerializeField] private TMP_Text speedyBerryStat;
[SerializeField] private TMP_Text coinBerryStat; [SerializeField] private TMP_Text coinBerryStat;
[SerializeField] private TMP_Text randomBerryStat; [SerializeField] private TMP_Text randomBerryStat;
[SerializeField] private TMP_Text antiBerryStat; [SerializeField] private TMP_Text antiBerryStat;
[SerializeField] private TMP_Text goldenBerryStat; [SerializeField] private TMP_Text goldenBerryStat;
[SerializeField] private TMP_Text coinStat; [SerializeField] private TMP_Text coinStat;
[SerializeField] private TMP_Text playerLevelAndXPStat; [SerializeField] private TMP_Text playerLevelAndXPStat;
[SerializeField] private TMP_Text playerNameText; [SerializeField] private TMP_Text playerNameText;
[SerializeField] private Image playerIconImage; [SerializeField] private Image playerIconImage;
[SerializeField] private Image playerOverlayImage; [SerializeField] private Image playerOverlayImage;
[SerializeField] private GameObject postSample; [SerializeField] private GameObject postSample;
[SerializeField] private bool canVote = true; [SerializeField] private bool canVote = true;
private GameObject popupObject; private GameObject popupObject;
void Awake() { void Awake() {
exitButton.onClick.AddListener(() => Destroy(gameObject)); 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);
} }
public async Task Init( contentPanel.SetActive(true);
string normalBerries, loadingText.gameObject.SetActive(false);
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); Tools.RefreshHierarchy(gameObject);
poisonBerryStat.text = Tools.FormatWithCommas(poisonBerries); refreshButton.onClick.AddListener(async () => await RefreshPosts(playerID, playerName));
slowBerryStat.text = Tools.FormatWithCommas(slowBerries); await RefreshPosts(playerID, playerName);
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) { public async Task Init(BigInteger playerID) {
playerIconImage.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + playerIcon); if (BazookaManager.Instance.GetAccountID() == playerID) { await Init(); return; }
if (playerIcon == 1) playerIconImage.sprite = Tools.GetIconForUser(playerID); using UnityWebRequest request = UnityWebRequest.Get(Endpoints.BD_ACCOUNT_ENDPOINT + "?id=" + playerID.ToString() + "&exact=true");
playerOverlayImage.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + playerOverlay); request.SetRequestHeader("Requester", "BerryDashClient");
if (playerOverlay != 0) playerOverlayImage.gameObject.SetActive(true); request.SetRequestHeader("ClientVersion", Application.version);
if (playerOverlay == 8) playerOverlayImage.transform.localPosition = new UnityEngine.Vector2(-16.56f, 14.81f); request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
else if (playerOverlay == 11) playerOverlayImage.transform.localPosition = new UnityEngine.Vector2(-14.74451f, 20.39122f); await request.SendWebRequest();
else if (playerOverlay == 13) playerOverlayImage.transform.localPosition = new UnityEngine.Vector2(-16.54019f, 14.70365f); if (request.downloadHandler.text == null) {
playerIconImage.color = playerIconColor; Destroy(gameObject);
playerOverlayImage.color = playerOverlayColor; return;
} 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);
} }
string response = request.downloadHandler.text;
try {
var jsonResponse = JObject.Parse(response);
if ((bool)jsonResponse["success"]) {
public async Task Init(BigInteger playerID) { var data = jsonResponse["data"].ToObject<Account>();
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 iconColorArray = data.BirdColor; var iconColor = new Color(iconColorArray[0] / 255f, iconColorArray[1] / 255f, iconColorArray[2] / 255f);
var overlayColorArray = data.OverlayColor; var overlayColor = new Color(overlayColorArray[0] / 255f, overlayColorArray[1] / 255f, overlayColorArray[2] / 255f);
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( await Init(
BazookaManager.Instance.GetGameStoreTotalNormalBerries().ToString(), data.Stats.TotalNormalBerries.ToString(),
BazookaManager.Instance.GetGameStoreTotalPoisonBerries().ToString(), data.Stats.TotalPoisonBerries.ToString(),
BazookaManager.Instance.GetGameStoreTotalSlowBerries().ToString(), data.Stats.TotalSlowBerries.ToString(),
BazookaManager.Instance.GetGameStoreTotalUltraBerries().ToString(), data.Stats.TotalUltraBerries.ToString(),
BazookaManager.Instance.GetGameStoreTotalSpeedyBerries().ToString(), data.Stats.TotalSpeedyBerries.ToString(),
BazookaManager.Instance.GetGameStoreTotalCoinBerries().ToString(), data.Stats.TotalCoinBerries.ToString(),
BazookaManager.Instance.GetGameStoreTotalRandomBerries().ToString(), data.Stats.TotalRandomBerries.ToString(),
BazookaManager.Instance.GetGameStoreTotalAntiBerries().ToString(), data.Stats.TotalAntiBerries.ToString(),
BazookaManager.Instance.GetGameStoreTotalGoldenBerries().ToString(), data.Stats.TotalGoldenBerries.ToString(),
customIconData.Balance.ToString(), data.Stats.Coins.ToString(),
BazookaManager.Instance.GetAccountName().ToString(), data.Username,
BazookaManager.Instance.GetAccountID() ?? 0, playerID,
customIconData.Selected == null ? BazookaManager.Instance.GetBirdIcon() : null, data.Icon,
customIconData.Selected == null ? BazookaManager.Instance.GetBirdOverlay() : null, data.Overlay,
customIconData.Selected == null ? new Color((int)iconColor[0] / 255f, (int)iconColor[1] / 255f, (int)iconColor[2] / 255f) : Color.white, iconColor,
customIconData.Selected == null ? new Color((int)overlayColor[0] / 255f, (int)overlayColor[1] / 255f, (int)overlayColor[2] / 255f) : Color.white, overlayColor,
customIconData.Selected data.CustomIcon
); );
} else {
Destroy(gameObject);
}
} }
catch {
Destroy(gameObject);
}
}
async Task RefreshPosts(BigInteger playerID, string playerName) { public async Task Init() {
exitButton.interactable = false; var customIconData = BazookaManager.Instance.GetCustomBirdIconData();
refreshButton.interactable = false; var iconColor = customIconData.Selected == null ? BazookaManager.Instance.GetColorSettingIcon() : null;
postButton.interactable = false; var overlayColor = customIconData.Selected == null ? BazookaManager.Instance.GetColorSettingOverlay() : null;
foreach (Transform post in postSample.transform.parent) { await Init(
if (post.gameObject.activeSelf) { BazookaManager.Instance.GetGameStoreTotalNormalBerries().ToString(),
Destroy(post.gameObject); 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);
} }
using UnityWebRequest request = UnityWebRequest.Get(Endpoints.PROFILE_POSTS_ENDPOINT + "?userId=" + playerID.ToString()); });
request.SetRequestHeader("Requester", "BerryDashClient"); entryMessage.text = post.Content;
request.SetRequestHeader("ClientVersion", Application.version); entryTimestamp.text = post.Timestamp.ToString();
request.SetRequestHeader("ClientPlatform", Application.platform.ToString()); if (BazookaManager.Instance.GetAccountID() == playerID) {
await request.SendWebRequest(); entryDeleteButton.gameObject.SetActive(true);
if (request.downloadHandler.text == null) { entryDeleteButton.onClick.AddListener(async () => await DeletePost(entry, post.ID));
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; entry.name = "PostEntry_" + post.ID;
entryLikesTexture.text = post.Likes < 0 ? "\\uf165" : "\\uf164"; entry.SetActive(true);
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; Tools.RefreshHierarchy(entry);
entry.SetActive(true);
Tools.RefreshHierarchy(entry);
}
exitButton.interactable = true;
refreshButton.interactable = true;
postButton.interactable = true;
} }
exitButton.interactable = true;
refreshButton.interactable = true;
postButton.interactable = true;
}
void VotePost(BigInteger postId, TMP_Text entryLikesCount, TMP_Text entryLikesTexture) { void VotePost(BigInteger postId, TMP_Text entryLikesCount, TMP_Text entryLikesTexture) {
var popup = Instantiate(voteOverlay, voteOverlay.transform.parent); var popup = Instantiate(voteOverlay, voteOverlay.transform.parent);
popupObject = popup; popupObject = popup;
popup.SetActive(true); popup.SetActive(true);
var exitButton = popup.transform.GetChild(0).GetChild(0).GetComponent<Button>(); var exitButton = popup.transform.GetChild(0).GetChild(0).GetComponent<Button>();
var likeButton = popup.transform.GetChild(0).GetChild(2).GetComponent<Button>(); var likeButton = popup.transform.GetChild(0).GetChild(2).GetComponent<Button>();
var dislikeButton = popup.transform.GetChild(0).GetChild(3).GetComponent<Button>(); var dislikeButton = popup.transform.GetChild(0).GetChild(3).GetComponent<Button>();
exitButton.onClick.AddListener(() => Destroy(popup)); exitButton.onClick.AddListener(() => Destroy(popup));
likeButton.onClick.AddListener(async () => { likeButton.onClick.AddListener(async () => {
canVote = false; canVote = false;
popupObject = null; popupObject = null;
Destroy(popup); Destroy(popup);
await SendPostVote(postId, true, entryLikesCount, entryLikesTexture); await SendPostVote(postId, true, entryLikesCount, entryLikesTexture);
canVote = true; canVote = true;
}); });
dislikeButton.onClick.AddListener(async () => { dislikeButton.onClick.AddListener(async () => {
canVote = false; canVote = false;
popupObject = null; popupObject = null;
Destroy(popup); Destroy(popup);
await SendPostVote(postId, false, entryLikesCount, entryLikesTexture); await SendPostVote(postId, false, entryLikesCount, entryLikesTexture);
canVote = true; canVote = true;
}); });
} }
async Task SendPostVote(BigInteger postId, bool liked, TMP_Text entryLikesCount, TMP_Text entryLikesTexture) { 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); using UnityWebRequest request = UnityWebRequest.Put(Endpoints.PROFILE_POSTS_ENDPOINT + $"?id={postId}&liked={liked}", new WWWForm().data);
request.SetRequestHeader("Authorization", BazookaManager.Instance.GetAccountSession()); request.SetRequestHeader("Authorization", BazookaManager.Instance.GetAccountSession());
request.SetRequestHeader("Requester", "BerryDashClient"); request.SetRequestHeader("Requester", "BerryDashClient");
request.SetRequestHeader("ClientVersion", Application.version); request.SetRequestHeader("ClientVersion", Application.version);
request.SetRequestHeader("ClientPlatform", Application.platform.ToString()); request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
await request.SendWebRequest(); await request.SendWebRequest();
if (request.downloadHandler.text == null) return; if (request.downloadHandler.text == null) return;
var jsonResponse = JObject.Parse(request.downloadHandler.text); var jsonResponse = JObject.Parse(request.downloadHandler.text);
if ((bool)jsonResponse["success"]) { if ((bool)jsonResponse["success"]) {
BigInteger likes = BigInteger.Parse((string)jsonResponse["data"]["likes"]); BigInteger likes = BigInteger.Parse((string)jsonResponse["data"]["likes"]);
entryLikesCount.text = Tools.FormatWithCommas(likes); entryLikesCount.text = Tools.FormatWithCommas(likes);
entryLikesTexture.text = likes < 0 ? "\\uf165" : "\\uf164"; entryLikesTexture.text = likes < 0 ? "\\uf165" : "\\uf164";
entryLikesTexture.color = likes < 0 ? new Color(1f, 0f, 0.5f) : new Color(1f, 1f, 0f); entryLikesTexture.color = likes < 0 ? new Color(1f, 0f, 0.5f) : new Color(1f, 1f, 0f);
var likedPosts = BazookaManager.Instance.GetLikedPosts(); var likedPosts = BazookaManager.Instance.GetLikedPosts();
likedPosts.Add(postId.ToString()); likedPosts.Add(postId.ToString());
BazookaManager.Instance.SetLikedPosts(likedPosts); BazookaManager.Instance.SetLikedPosts(likedPosts);
}
} }
}
void UploadPostPopup() { void UploadPostPopup() {
var popup = Instantiate(postOverlay, postOverlay.transform.parent); var popup = Instantiate(postOverlay, postOverlay.transform.parent);
popupObject = popup; popupObject = popup;
popup.SetActive(true); popup.SetActive(true);
var inputBox = popup.transform.GetChild(0).GetChild(1).GetComponent<TMP_InputField>(); var inputBox = popup.transform.GetChild(0).GetChild(1).GetComponent<TMP_InputField>();
inputBox.onSelect.AddListener((_) => inputBox.caretPosition = inputBox.text.Length); inputBox.onSelect.AddListener((_) => inputBox.caretPosition = inputBox.text.Length);
var cancelButton = popup.transform.GetChild(0).GetChild(2).GetComponent<Button>(); var cancelButton = popup.transform.GetChild(0).GetChild(2).GetComponent<Button>();
var submitButton = popup.transform.GetChild(0).GetChild(3).GetComponent<Button>(); var submitButton = popup.transform.GetChild(0).GetChild(3).GetComponent<Button>();
cancelButton.onClick.AddListener(() => { cancelButton.onClick.AddListener(() => {
Destroy(popup); Destroy(popup);
popupObject = null; popupObject = null;
}); });
submitButton.onClick.AddListener(async () => { submitButton.onClick.AddListener(async () => {
if (inputBox.text.Trim().Length == 0) return; if (inputBox.text.Trim().Length == 0) return;
popupObject = null; popupObject = null;
Destroy(popup); Destroy(popup);
await UploadPost(inputBox.text); await UploadPost(inputBox.text);
}); });
} }
async Task UploadPost(string message) { async Task UploadPost(string message) {
WWWForm dataForm = new(); WWWForm dataForm = new();
dataForm.AddField("content", message); dataForm.AddField("content", message);
using UnityWebRequest request = UnityWebRequest.Post(Endpoints.PROFILE_POSTS_ENDPOINT, dataForm); using UnityWebRequest request = UnityWebRequest.Post(Endpoints.PROFILE_POSTS_ENDPOINT, dataForm);
request.SetRequestHeader("Authorization", BazookaManager.Instance.GetAccountSession()); request.SetRequestHeader("Authorization", BazookaManager.Instance.GetAccountSession());
request.SetRequestHeader("Requester", "BerryDashClient"); request.SetRequestHeader("Requester", "BerryDashClient");
request.SetRequestHeader("ClientVersion", Application.version); request.SetRequestHeader("ClientVersion", Application.version);
request.SetRequestHeader("ClientPlatform", Application.platform.ToString()); request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
await request.SendWebRequest(); await request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success && request.responseCode == 200) { if (request.result == UnityWebRequest.Result.Success && request.responseCode == 200) {
await RefreshPosts(BazookaManager.Instance.GetAccountID() ?? 0, BazookaManager.Instance.GetAccountName()); await RefreshPosts(BazookaManager.Instance.GetAccountID() ?? 0, BazookaManager.Instance.GetAccountName());
}
} }
}
async Task DeletePost(GameObject entryObject, BigInteger targetId) { async Task DeletePost(GameObject entryObject, BigInteger targetId) {
using UnityWebRequest request = UnityWebRequest.Delete(Endpoints.PROFILE_POSTS_ENDPOINT + "?id=" + targetId.ToString()); using UnityWebRequest request = UnityWebRequest.Delete(Endpoints.PROFILE_POSTS_ENDPOINT + "?id=" + targetId.ToString());
request.SetRequestHeader("Authorization", BazookaManager.Instance.GetAccountSession()); request.SetRequestHeader("Authorization", BazookaManager.Instance.GetAccountSession());
request.SetRequestHeader("Requester", "BerryDashClient"); request.SetRequestHeader("Requester", "BerryDashClient");
request.SetRequestHeader("ClientVersion", Application.version); request.SetRequestHeader("ClientVersion", Application.version);
request.SetRequestHeader("ClientPlatform", Application.platform.ToString()); request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
await request.SendWebRequest(); await request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success && request.responseCode == 200) { if (request.result == UnityWebRequest.Result.Success && request.responseCode == 200) {
Destroy(entryObject); Destroy(entryObject);
}
} }
}
void Update() { void Update() {
if (Keyboard.current.escapeKey.wasPressedThisFrame) { if (Keyboard.current.escapeKey.wasPressedThisFrame) {
if (popupObject != null) { if (popupObject != null) {
if (!canVote) canVote = true; if (!canVote) canVote = true;
Destroy(popupObject); Destroy(popupObject);
} else Destroy(gameObject); } else Destroy(gameObject);
}
} }
}
} }
+113 -113
View File
@@ -6,128 +6,128 @@ using UnityEngine.SceneManagement;
using UnityEngine.UI; using UnityEngine.UI;
public class SettingsMenu : MonoBehaviour { public class SettingsMenu : MonoBehaviour {
[SerializeField] private GameObject settingsMenu; [SerializeField] private GameObject settingsMenu;
[SerializeField] private ColorPanel colorMenu; [SerializeField] private ColorPanel colorMenu;
[SerializeField] private Button toggleButton; [SerializeField] private Button toggleButton;
[SerializeField] private Toggle setting1toggle; [SerializeField] private Toggle setting1toggle;
[SerializeField] private Toggle setting2toggle; [SerializeField] private Toggle setting2toggle;
[SerializeField] private Toggle setting3toggle; [SerializeField] private Toggle setting3toggle;
[SerializeField] private Toggle setting4toggle; [SerializeField] private Toggle setting4toggle;
[SerializeField] private Toggle setting5toggle; [SerializeField] private Toggle setting5toggle;
[SerializeField] private Slider musicSlider; [SerializeField] private Slider musicSlider;
[SerializeField] private Slider sfxSlider; [SerializeField] private Slider sfxSlider;
[SerializeField] private GameObject settingsUI; [SerializeField] private GameObject settingsUI;
[SerializeField] private Button switchColorTypeButton; [SerializeField] private Button switchColorTypeButton;
[SerializeField] private int colorType = 0; [SerializeField] private int colorType = 0;
[SerializeField] private bool colorCanSave = true; [SerializeField] private bool colorCanSave = true;
private void Start() { private void Start() {
colorMenu.Init(Color.white, Color.white); colorMenu.Init(Color.white, Color.white);
colorMenu.OnColorChanged += color => { colorMenu.OnColorChanged += color => {
if (!colorCanSave) return; if (!colorCanSave) return;
if (colorType == 0) BazookaManager.Instance.SetColorSettingBackground(color); if (colorType == 0) BazookaManager.Instance.SetColorSettingBackground(color);
else if (colorType == 1) BazookaManager.Instance.SetColorSettingMenuBackground(color); else if (colorType == 1) BazookaManager.Instance.SetColorSettingMenuBackground(color);
else if (colorType == 2) BazookaManager.Instance.SetColorSettingButton(color); else if (colorType == 2) BazookaManager.Instance.SetColorSettingButton(color);
else if (colorType == 3) BazookaManager.Instance.SetColorSettingButtonContent(color); else if (colorType == 3) BazookaManager.Instance.SetColorSettingButtonContent(color);
else if (colorType == 4) BazookaManager.Instance.SetColorSettingText(color); else if (colorType == 4) BazookaManager.Instance.SetColorSettingText(color);
foreach (CustomColorObject customColorObject in FindObjectsByType<CustomColorObject>(FindObjectsSortMode.None)) customColorObject.SetColor(); foreach (CustomColorObject customColorObject in FindObjectsByType<CustomColorObject>(FindObjectsSortMode.None)) customColorObject.SetColor();
}; };
toggleButton.onClick.AddListener(() => { toggleButton.onClick.AddListener(() => {
settingsMenu.SetActive(!settingsMenu.activeSelf); settingsMenu.SetActive(!settingsMenu.activeSelf);
colorMenu.gameObject.SetActive(!colorMenu.gameObject.activeSelf); colorMenu.gameObject.SetActive(!colorMenu.gameObject.activeSelf);
toggleButton.transform.GetChild(0).GetComponent<TMP_Text>().text = settingsMenu.activeSelf ? "Colors" : "Settings"; toggleButton.transform.GetChild(0).GetComponent<TMP_Text>().text = settingsMenu.activeSelf ? "Colors" : "Settings";
SwitchColorType(4); SwitchColorType(4);
foreach (CustomColorObject customColorObject in FindObjectsByType<CustomColorObject>(FindObjectsSortMode.None)) customColorObject.SetColor(); foreach (CustomColorObject customColorObject in FindObjectsByType<CustomColorObject>(FindObjectsSortMode.None)) customColorObject.SetColor();
}); });
switchColorTypeButton.onClick.AddListener(() => SwitchColorType()); switchColorTypeButton.onClick.AddListener(() => SwitchColorType());
musicSlider.value = BazookaManager.Instance.GetSettingMusicVolume(); musicSlider.value = BazookaManager.Instance.GetSettingMusicVolume();
sfxSlider.value = BazookaManager.Instance.GetSettingSFXVolume(); sfxSlider.value = BazookaManager.Instance.GetSettingSFXVolume();
if (!Application.isMobilePlatform) { if (!Application.isMobilePlatform) {
setting1toggle.isOn = BazookaManager.Instance.GetSettingFullScreen() == true; setting1toggle.isOn = BazookaManager.Instance.GetSettingFullScreen() == true;
setting2toggle.isOn = BazookaManager.Instance.GetSettingShowFPS() == true; setting2toggle.isOn = BazookaManager.Instance.GetSettingShowFPS() == true;
setting3toggle.isOn = BazookaManager.Instance.GetSettingVsync() == true; setting3toggle.isOn = BazookaManager.Instance.GetSettingVsync() == true;
setting4toggle.isOn = BazookaManager.Instance.GetSettingHideSocials() == true; setting4toggle.isOn = BazookaManager.Instance.GetSettingHideSocials() == true;
setting5toggle.isOn = BazookaManager.Instance.GetSettingRandomMusic() == true; setting5toggle.isOn = BazookaManager.Instance.GetSettingRandomMusic() == true;
setting1toggle.onValueChanged.AddListener(value => { setting1toggle.onValueChanged.AddListener(value => {
BazookaManager.Instance.SetSettingFullScreen(value); BazookaManager.Instance.SetSettingFullScreen(value);
var width = Display.main.systemWidth; var width = Display.main.systemWidth;
var height = Display.main.systemHeight; var height = Display.main.systemHeight;
Screen.SetResolution(width, height, value); Screen.SetResolution(width, height, value);
}); });
setting3toggle.onValueChanged.AddListener(value => { setting3toggle.onValueChanged.AddListener(value => {
BazookaManager.Instance.SetSettingVsync(value); BazookaManager.Instance.SetSettingVsync(value);
QualitySettings.vSyncCount = value ? 1 : -1; QualitySettings.vSyncCount = value ? 1 : -1;
}); });
} else { } else {
setting1toggle.gameObject.SetActive(false); setting1toggle.gameObject.SetActive(false);
setting2toggle.isOn = BazookaManager.Instance.GetSettingShowFPS() == true; setting2toggle.isOn = BazookaManager.Instance.GetSettingShowFPS() == true;
setting3toggle.gameObject.SetActive(false); setting3toggle.gameObject.SetActive(false);
setting4toggle.isOn = BazookaManager.Instance.GetSettingHideSocials() == true; setting4toggle.isOn = BazookaManager.Instance.GetSettingHideSocials() == true;
setting5toggle.isOn = BazookaManager.Instance.GetSettingRandomMusic() == true; setting5toggle.isOn = BazookaManager.Instance.GetSettingRandomMusic() == true;
}
setting2toggle.onValueChanged.AddListener(value => {
BazookaManager.Instance.SetSettingShowFPS(value);
});
setting4toggle.onValueChanged.AddListener(value => BazookaManager.Instance.SetSettingHideSocials(value));
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);
} }
setting2toggle.onValueChanged.AddListener(value => {
BazookaManager.Instance.SetSettingShowFPS(value);
});
setting4toggle.onValueChanged.AddListener(value => BazookaManager.Instance.SetSettingHideSocials(value));
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) { void SwitchColorType(int color = -1) {
var type = color == -1 ? colorType : color; var type = color == -1 ? colorType : color;
var text = colorMenu.transform.GetChild(0).GetComponent<TMP_Text>(); var text = colorMenu.transform.GetChild(0).GetComponent<TMP_Text>();
var colorToSet = new JArray(255, 255, 255); var colorToSet = new JArray(255, 255, 255);
switch (type) { switch (type) {
case 0: //IGBGColor case 0: //IGBGColor
text.text = "Menu background color"; text.text = "Menu background color";
colorType = 1; colorType = 1;
colorToSet = BazookaManager.Instance.GetColorSettingMenuBackground(); colorToSet = BazookaManager.Instance.GetColorSettingMenuBackground();
colorMenu.defaultColor = new(24f / 255f, 24f / 255f, 24f / 255f); colorMenu.defaultColor = new(24f / 255f, 24f / 255f, 24f / 255f);
break; break;
case 1: //MBGColor case 1: //MBGColor
text.text = "Button color"; text.text = "Button color";
colorType = 2; colorType = 2;
colorToSet = BazookaManager.Instance.GetColorSettingButton(); colorToSet = BazookaManager.Instance.GetColorSettingButton();
colorMenu.defaultColor = new(1f, 1f, 1f); colorMenu.defaultColor = new(1f, 1f, 1f);
break; break;
case 2: //BCColor case 2: //BCColor
text.text = "Button content color"; text.text = "Button content color";
colorType = 3; colorType = 3;
colorToSet = BazookaManager.Instance.GetColorSettingButtonContent(); colorToSet = BazookaManager.Instance.GetColorSettingButtonContent();
colorMenu.defaultColor = new(0f, 0f, 0f); colorMenu.defaultColor = new(0f, 0f, 0f);
break; break;
case 3: //TColor case 3: //TColor
text.text = "Text color"; text.text = "Text color";
colorType = 4; colorType = 4;
colorToSet = BazookaManager.Instance.GetColorSettingText(); colorToSet = BazookaManager.Instance.GetColorSettingText();
colorMenu.defaultColor = new(1f, 1f, 1f); colorMenu.defaultColor = new(1f, 1f, 1f);
break; break;
case 4: //IGColor case 4: //IGColor
text.text = "In game background color"; text.text = "In game background color";
colorType = 0; colorType = 0;
colorToSet = BazookaManager.Instance.GetColorSettingBackground(); colorToSet = BazookaManager.Instance.GetColorSettingBackground();
colorMenu.defaultColor = new(58f / 255f, 58f / 255f, 58f / 255f); colorMenu.defaultColor = new(58f / 255f, 58f / 255f, 58f / 255f);
break; break;
}
colorCanSave = false;
colorMenu.SetColor(new Color((int)colorToSet[0] / 255f, (int)colorToSet[1] / 255f, (int)colorToSet[2] / 255f));
colorCanSave = true;
} }
colorCanSave = false;
colorMenu.SetColor(new Color((int)colorToSet[0] / 255f, (int)colorToSet[1] / 255f, (int)colorToSet[2] / 255f));
colorCanSave = true;
}
async void Update() { async void Update() {
if (Keyboard.current.escapeKey.wasPressedThisFrame) { if (Keyboard.current.escapeKey.wasPressedThisFrame) {
if (colorMenu.gameObject.activeSelf) toggleButton.onClick.Invoke(); if (colorMenu.gameObject.activeSelf) toggleButton.onClick.Invoke();
else await SceneManager.LoadSceneAsync("MainMenu"); else await SceneManager.LoadSceneAsync("MainMenu");
}
} }
}
} }
+78 -78
View File
@@ -6,91 +6,91 @@ using UnityEngine.SceneManagement;
using UnityEngine.UI; using UnityEngine.UI;
public class StatsMenu : MonoBehaviour { public class StatsMenu : MonoBehaviour {
[SerializeField] private GameObject panel; [SerializeField] private GameObject panel;
[SerializeField] private TMP_Text normalBerryStat; [SerializeField] private TMP_Text normalBerryStat;
[SerializeField] private TMP_Text poisonBerryStat; [SerializeField] private TMP_Text poisonBerryStat;
[SerializeField] private TMP_Text slowBerryStat; [SerializeField] private TMP_Text slowBerryStat;
[SerializeField] private TMP_Text ultraBerryStat; [SerializeField] private TMP_Text ultraBerryStat;
[SerializeField] private TMP_Text speedyBerryStat; [SerializeField] private TMP_Text speedyBerryStat;
[SerializeField] private TMP_Text coinBerryStat; [SerializeField] private TMP_Text coinBerryStat;
[SerializeField] private TMP_Text randomBerryStat; [SerializeField] private TMP_Text randomBerryStat;
[SerializeField] private TMP_Text antiBerryStat; [SerializeField] private TMP_Text antiBerryStat;
[SerializeField] private TMP_Text goldenBerryStat; [SerializeField] private TMP_Text goldenBerryStat;
[SerializeField] private TMP_Text coinStat; [SerializeField] private TMP_Text coinStat;
[SerializeField] private Image playerIcon; [SerializeField] private Image playerIcon;
[SerializeField] private Image playerOverlay; [SerializeField] private Image playerOverlay;
[SerializeField] private TMP_Text xpUsernameText; [SerializeField] private TMP_Text xpUsernameText;
[SerializeField] private TMP_Text xpText; [SerializeField] private TMP_Text xpText;
[SerializeField] private TMP_Text xpLevelText; [SerializeField] private TMP_Text xpLevelText;
[SerializeField] private RectTransform progressFilledRect; [SerializeField] private RectTransform progressFilledRect;
void Start() { void Start() {
normalBerryStat.text = Tools.FormatWithCommas(BazookaManager.Instance.GetGameStoreTotalNormalBerries()); normalBerryStat.text = Tools.FormatWithCommas(BazookaManager.Instance.GetGameStoreTotalNormalBerries());
poisonBerryStat.text = Tools.FormatWithCommas(BazookaManager.Instance.GetGameStoreTotalPoisonBerries()); poisonBerryStat.text = Tools.FormatWithCommas(BazookaManager.Instance.GetGameStoreTotalPoisonBerries());
slowBerryStat.text = Tools.FormatWithCommas(BazookaManager.Instance.GetGameStoreTotalSlowBerries()); slowBerryStat.text = Tools.FormatWithCommas(BazookaManager.Instance.GetGameStoreTotalSlowBerries());
ultraBerryStat.text = Tools.FormatWithCommas(BazookaManager.Instance.GetGameStoreTotalUltraBerries()); ultraBerryStat.text = Tools.FormatWithCommas(BazookaManager.Instance.GetGameStoreTotalUltraBerries());
speedyBerryStat.text = Tools.FormatWithCommas(BazookaManager.Instance.GetGameStoreTotalSpeedyBerries()); speedyBerryStat.text = Tools.FormatWithCommas(BazookaManager.Instance.GetGameStoreTotalSpeedyBerries());
coinBerryStat.text = Tools.FormatWithCommas(BazookaManager.Instance.GetGameStoreTotalCoinBerries()); coinBerryStat.text = Tools.FormatWithCommas(BazookaManager.Instance.GetGameStoreTotalCoinBerries());
randomBerryStat.text = Tools.FormatWithCommas(BazookaManager.Instance.GetGameStoreTotalRandomBerries()); randomBerryStat.text = Tools.FormatWithCommas(BazookaManager.Instance.GetGameStoreTotalRandomBerries());
antiBerryStat.text = Tools.FormatWithCommas(BazookaManager.Instance.GetGameStoreTotalAntiBerries()); antiBerryStat.text = Tools.FormatWithCommas(BazookaManager.Instance.GetGameStoreTotalAntiBerries());
goldenBerryStat.text = Tools.FormatWithCommas(BazookaManager.Instance.GetGameStoreTotalGoldenBerries()); goldenBerryStat.text = Tools.FormatWithCommas(BazookaManager.Instance.GetGameStoreTotalGoldenBerries());
coinStat.text = Tools.FormatWithCommas(BazookaManager.Instance.GetCustomBirdIconData().Balance); coinStat.text = Tools.FormatWithCommas(BazookaManager.Instance.GetCustomBirdIconData().Balance);
var customIcon = BazookaManager.Instance.GetCustomBirdIconData().Selected; var customIcon = BazookaManager.Instance.GetCustomBirdIconData().Selected;
if (customIcon == null) { if (customIcon == null) {
int icon = BazookaManager.Instance.GetBirdIcon(); int icon = BazookaManager.Instance.GetBirdIcon();
int overlay = BazookaManager.Instance.GetBirdOverlay(); int overlay = BazookaManager.Instance.GetBirdOverlay();
var iconColor = BazookaManager.Instance.GetColorSettingIcon(); var iconColor = BazookaManager.Instance.GetColorSettingIcon();
var overlayColor = BazookaManager.Instance.GetColorSettingOverlay(); var overlayColor = BazookaManager.Instance.GetColorSettingOverlay();
playerIcon.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + icon); playerIcon.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + icon);
if (icon == 1) playerIcon.sprite = Tools.GetIconForUser(BazookaManager.Instance.GetAccountID() ?? 0); if (icon == 1) playerIcon.sprite = Tools.GetIconForUser(BazookaManager.Instance.GetAccountID() ?? 0);
playerOverlay.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + overlay); playerOverlay.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + overlay);
if (overlay != 0) playerOverlay.gameObject.SetActive(true); if (overlay != 0) playerOverlay.gameObject.SetActive(true);
if (overlay == 8) playerOverlay.rectTransform.localPosition = new Vector3(-27.6232f, 23.42824f, 0f); 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 == 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); else if (overlay == 13) playerOverlay.rectTransform.localPosition = new Vector3(-27.56624f, 23.25544f, 0f);
try { try {
playerIcon.color = new Color( playerIcon.color = new Color(
int.Parse(iconColor[0].ToString()) / 255f, int.Parse(iconColor[0].ToString()) / 255f,
int.Parse(iconColor[1].ToString()) / 255f, int.Parse(iconColor[1].ToString()) / 255f,
int.Parse(iconColor[2].ToString()) / 255f int.Parse(iconColor[2].ToString()) / 255f
); );
playerOverlay.color = new Color( playerOverlay.color = new Color(
int.Parse(overlayColor[0].ToString()) / 255f, int.Parse(overlayColor[0].ToString()) / 255f,
int.Parse(overlayColor[1].ToString()) / 255f, int.Parse(overlayColor[1].ToString()) / 255f,
int.Parse(overlayColor[2].ToString()) / 255f int.Parse(overlayColor[2].ToString()) / 255f
); );
} }
catch { catch {
playerIcon.color = Color.white; playerIcon.color = Color.white;
playerOverlay.color = Color.white; playerOverlay.color = Color.white;
} }
} else { } else {
var waitingForCustomIcon = playerIcon.gameObject.AddComponent<WaitingForCustomIcon>(); var waitingForCustomIcon = playerIcon.gameObject.AddComponent<WaitingForCustomIcon>();
waitingForCustomIcon.ID = customIcon; waitingForCustomIcon.ID = customIcon;
CustomIconLoader.Init(new[] { waitingForCustomIcon }); 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);
} }
async void Update() { var (_, level, currentXpInLevel, totalXpForLevel, percentDone) = Tools.GetLevelInfo();
if (Keyboard.current.escapeKey.wasPressedThisFrame) await SceneManager.LoadSceneAsync("MainMenu"); 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);
void SetXPProgressFilled(int progress) { Tools.RefreshHierarchy(panel);
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); async void Update() {
} if (Keyboard.current.escapeKey.wasPressedThisFrame) await SceneManager.LoadSceneAsync("MainMenu");
}
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);
}
} }
+24 -24
View File
@@ -4,35 +4,35 @@ using UnityEngine.Scripting;
[Preserve] [Preserve]
public class Account { public class Account {
[Preserve] [Preserve]
[JsonProperty("id")] [JsonProperty("id")]
public BigInteger UserID { get; set; } public BigInteger UserID { get; set; }
[Preserve] [Preserve]
[JsonProperty("username")] [JsonProperty("username")]
public string Username { get; set; } public string Username { get; set; }
[Preserve] [Preserve]
[JsonProperty("icon")] [JsonProperty("icon")]
public int Icon { get; set; } public int Icon { get; set; }
[Preserve] [Preserve]
[JsonProperty("overlay")] [JsonProperty("overlay")]
public int Overlay { get; set; } public int Overlay { get; set; }
[Preserve] [Preserve]
[JsonProperty("birdColor")] [JsonProperty("birdColor")]
public int[] BirdColor { get; set; } public int[] BirdColor { get; set; }
[Preserve] [Preserve]
[JsonProperty("overlayColor")] [JsonProperty("overlayColor")]
public int[] OverlayColor { get; set; } public int[] OverlayColor { get; set; }
[Preserve] [Preserve]
[JsonProperty("customIcon")] [JsonProperty("customIcon")]
public string CustomIcon { get; set; } public string CustomIcon { get; set; }
[Preserve] [Preserve]
[JsonProperty("stats")] [JsonProperty("stats")]
public Stats Stats { get; set; } public Stats Stats { get; set; }
} }
+33 -33
View File
@@ -4,47 +4,47 @@ using UnityEngine.Scripting;
[Preserve] [Preserve]
public class ChatroomMessage { public class ChatroomMessage {
[Preserve] [Preserve]
[JsonProperty("username")] [JsonProperty("username")]
public string Username { get; set; } public string Username { get; set; }
[Preserve] [Preserve]
[JsonProperty("userId")] [JsonProperty("userId")]
public BigInteger UserID { get; set; } public BigInteger UserID { get; set; }
[Preserve] [Preserve]
[JsonProperty("content")] [JsonProperty("content")]
public string Content { get; set; } public string Content { get; set; }
[Preserve] [Preserve]
[JsonProperty("id")] [JsonProperty("id")]
public BigInteger ID { get; set; } public BigInteger ID { get; set; }
[Preserve] [Preserve]
[JsonProperty("icon")] [JsonProperty("icon")]
public int Icon { get; set; } public int Icon { get; set; }
[Preserve] [Preserve]
[JsonProperty("overlay")] [JsonProperty("overlay")]
public int Overlay { get; set; } public int Overlay { get; set; }
[Preserve] [Preserve]
[JsonProperty("birdColor")] [JsonProperty("birdColor")]
public int[] BirdColor { get; set; } public int[] BirdColor { get; set; }
[Preserve] [Preserve]
[JsonProperty("overlayColor")] [JsonProperty("overlayColor")]
public int[] OverlayColor { get; set; } public int[] OverlayColor { get; set; }
[Preserve] [Preserve]
[JsonProperty("customIcon")] [JsonProperty("customIcon")]
public string CustomIcon { get; set; } public string CustomIcon { get; set; }
[Preserve] [Preserve]
[JsonProperty("timestamp")] [JsonProperty("timestamp")]
public long Timestamp { get; set; } public long Timestamp { get; set; }
[Preserve] [Preserve]
[JsonProperty("editedAt")] [JsonProperty("editedAt")]
public long EditedAt { get; set; } public long EditedAt { get; set; }
} }
+10 -10
View File
@@ -1,12 +1,12 @@
public enum ColorObjectType { public enum ColorObjectType {
InGameBackgroundColor, InGameBackgroundColor,
MenuBackgroundColor, MenuBackgroundColor,
ButtonColor, ButtonColor,
ButtonColorText, ButtonColorText,
TextColor, TextColor,
TextColorImage, TextColorImage,
MenuBackgroundColorImage, MenuBackgroundColorImage,
MenuBackgroundColorText, MenuBackgroundColorText,
ButtonContentColorImage, ButtonContentColorImage,
ButtonContentColorText ButtonContentColorText
} }
+24 -24
View File
@@ -4,35 +4,35 @@ using UnityEngine.Scripting;
[Preserve] [Preserve]
public class LeaderboardEntry { public class LeaderboardEntry {
[Preserve] [Preserve]
[JsonProperty("id")] [JsonProperty("id")]
public BigInteger UserID { get; set; } public BigInteger UserID { get; set; }
[Preserve] [Preserve]
[JsonProperty("username")] [JsonProperty("username")]
public string Username { get; set; } public string Username { get; set; }
[Preserve] [Preserve]
[JsonProperty("value")] [JsonProperty("value")]
public BigInteger Value { get; set; } public BigInteger Value { get; set; }
[Preserve] [Preserve]
[JsonProperty("icon")] [JsonProperty("icon")]
public int Icon { get; set; } public int Icon { get; set; }
[Preserve] [Preserve]
[JsonProperty("overlay")] [JsonProperty("overlay")]
public int Overlay { get; set; } public int Overlay { get; set; }
[Preserve] [Preserve]
[JsonProperty("birdColor")] [JsonProperty("birdColor")]
public int[] BirdColor { get; set; } public int[] BirdColor { get; set; }
[Preserve] [Preserve]
[JsonProperty("overlayColor")] [JsonProperty("overlayColor")]
public int[] OverlayColor { get; set; } public int[] OverlayColor { get; set; }
[Preserve] [Preserve]
[JsonProperty("customIcon")] [JsonProperty("customIcon")]
public string CustomIcon { get; set; } public string CustomIcon { get; set; }
} }
+8 -8
View File
@@ -1,10 +1,10 @@
public enum LeaderboardMode { public enum LeaderboardMode {
None, None,
Score, Score,
Berry, Berry,
Coin, Coin,
Legacy, Legacy,
Level, Level,
TotalXP, TotalXP,
TotalBerries TotalBerries
} }
+6 -6
View File
@@ -3,11 +3,11 @@ using UnityEngine.Scripting;
[Preserve] [Preserve]
public class MarketplaceIcon { public class MarketplaceIcon {
[Preserve] [Preserve]
[JsonProperty("data")] [JsonProperty("data")]
public string Data { get; set; } public string Data { get; set; }
[Preserve] [Preserve]
[JsonProperty("id")] [JsonProperty("id")]
public string ID { get; set; } public string ID { get; set; }
} }
@@ -3,10 +3,10 @@ using System.Numerics;
using Newtonsoft.Json; using Newtonsoft.Json;
public class MarketplaceIconStorageType { public class MarketplaceIconStorageType {
[JsonProperty("selected")] [JsonProperty("selected")]
public string Selected { get; set; } = null; public string Selected { get; set; } = null;
[JsonProperty("balance")] [JsonProperty("balance")]
public BigInteger Balance { get; set; } = 0; public BigInteger Balance { get; set; } = 0;
[JsonProperty("purchased")] [JsonProperty("purchased")]
public List<string> Purchased { get; set; } = new(); public List<string> Purchased { get; set; } = new();
} }
+21 -21
View File
@@ -4,31 +4,31 @@ using UnityEngine.Scripting;
[Preserve] [Preserve]
public class MarketplaceIconWithData { public class MarketplaceIconWithData {
[Preserve] [Preserve]
[JsonProperty("username")] [JsonProperty("username")]
public string CreatorUsername { get; set; } public string CreatorUsername { get; set; }
[Preserve] [Preserve]
[JsonProperty("userid")] [JsonProperty("userid")]
public BigInteger CreatorUserID { get; set; } public BigInteger CreatorUserID { get; set; }
[Preserve] [Preserve]
[JsonProperty("data")] [JsonProperty("data")]
public string Data { get; set; } public string Data { get; set; }
[Preserve] [Preserve]
[JsonProperty("hash")] [JsonProperty("hash")]
public string Hash { get; set; } public string Hash { get; set; }
[Preserve] [Preserve]
[JsonProperty("id")] [JsonProperty("id")]
public string ID { get; set; } public string ID { get; set; }
[Preserve] [Preserve]
[JsonProperty("price")] [JsonProperty("price")]
public BigInteger Price { get; set; } public BigInteger Price { get; set; }
[Preserve] [Preserve]
[JsonProperty("name")] [JsonProperty("name")]
public string Name { get; set; } public string Name { get; set; }
} }
+15 -15
View File
@@ -4,23 +4,23 @@ using UnityEngine.Scripting;
[Preserve] [Preserve]
public class MarketplaceTempIcon { public class MarketplaceTempIcon {
[Preserve] [Preserve]
[JsonProperty("username")] [JsonProperty("username")]
public string CreatorUsername { get; set; } public string CreatorUsername { get; set; }
[Preserve] [Preserve]
[JsonProperty("userid")] [JsonProperty("userid")]
public BigInteger CreatorUserID { get; set; } public BigInteger CreatorUserID { get; set; }
[Preserve] [Preserve]
[JsonProperty("id")] [JsonProperty("id")]
public string ID { get; set; } public string ID { get; set; }
[Preserve] [Preserve]
[JsonProperty("price")] [JsonProperty("price")]
public BigInteger Price { get; set; } public BigInteger Price { get; set; }
[Preserve] [Preserve]
[JsonProperty("name")] [JsonProperty("name")]
public string Name { get; set; } public string Name { get; set; }
} }
+5 -5
View File
@@ -1,7 +1,7 @@
public class MultiplayerBerry { public class MultiplayerBerry {
public string ID { get; set; } public string ID { get; set; }
public string Type { get; set; } public string Type { get; set; }
public float PosX { get; set; } public float PosX { get; set; }
public long Timestamp { get; set; } public long Timestamp { get; set; }
public bool Spawned { get; set; } public bool Spawned { get; set; }
} }
@@ -5,48 +5,48 @@ using UnityEngine.Scripting;
[Preserve] [Preserve]
public class MultiplayerPlayerIconData { public class MultiplayerPlayerIconData {
[Preserve] [Preserve]
[JsonProperty("icon")] [JsonProperty("icon")]
public int Icon { get; set; } public int Icon { get; set; }
[Preserve] [Preserve]
[JsonProperty("overlay")] [JsonProperty("overlay")]
public int Overlay { get; set; } public int Overlay { get; set; }
[Preserve] [Preserve]
[JsonProperty("iconColor")] [JsonProperty("iconColor")]
public JArray IconColor { get; set; } public JArray IconColor { get; set; }
[Preserve] [Preserve]
[JsonProperty("overlayColor")] [JsonProperty("overlayColor")]
public JArray OverlayColor { get; set; } public JArray OverlayColor { get; set; }
[Preserve] [Preserve]
[JsonProperty("customIcon")] [JsonProperty("customIcon")]
public string CustomIcon { get; set; } public string CustomIcon { get; set; }
} }
public class MultiplayerPlayerFromResponse { public class MultiplayerPlayerFromResponse {
[Preserve] [Preserve]
[JsonProperty("id")] [JsonProperty("id")]
public string ID { get; set; } public string ID { get; set; }
[Preserve] [Preserve]
[JsonProperty("userId")] [JsonProperty("userId")]
public BigInteger UserID { get; set; } public BigInteger UserID { get; set; }
[Preserve] [Preserve]
[JsonProperty("username")] [JsonProperty("username")]
public string Username { get; set; } public string Username { get; set; }
[Preserve] [Preserve]
[JsonProperty("admin")] [JsonProperty("admin")]
public bool Admin { get; set; } public bool Admin { get; set; }
[Preserve] [Preserve]
[JsonProperty("timestamp")] [JsonProperty("timestamp")]
public long JoinedAt { get; set; } public long JoinedAt { get; set; }
[Preserve] [Preserve]
[JsonProperty("iconData")] [JsonProperty("iconData")]
public MultiplayerPlayerIconData IconData { get; set; } public MultiplayerPlayerIconData IconData { get; set; }
} }
+4 -4
View File
@@ -1,6 +1,6 @@
public class MultiplayerUser { public class MultiplayerUser {
public string ID { get; set; } public string ID { get; set; }
public string Username { get; set; } public string Username { get; set; }
public bool Admin { get; set; } public bool Admin { get; set; }
public long JoinedAt { get; set; } public long JoinedAt { get; set; }
} }
+12 -12
View File
@@ -4,19 +4,19 @@ using UnityEngine.Scripting;
[Preserve] [Preserve]
public class ProfileMessageResponse { public class ProfileMessageResponse {
[Preserve] [Preserve]
[JsonProperty("id")] [JsonProperty("id")]
public BigInteger ID { get; set; } public BigInteger ID { get; set; }
[Preserve] [Preserve]
[JsonProperty("content")] [JsonProperty("content")]
public string Content { get; set; } public string Content { get; set; }
[Preserve] [Preserve]
[JsonProperty("timestamp")] [JsonProperty("timestamp")]
public string Timestamp { get; set; } public string Timestamp { get; set; }
[Preserve] [Preserve]
[JsonProperty("likes")] [JsonProperty("likes")]
public BigInteger Likes { get; set; } public BigInteger Likes { get; set; }
} }
+4 -4
View File
@@ -1,6 +1,6 @@
public enum SettingTypes { public enum SettingTypes {
FullScreen, FullScreen,
ShowFPS, ShowFPS,
Vsync, Vsync,
HideSocials HideSocials
} }
+21 -21
View File
@@ -3,34 +3,34 @@ using UnityEngine.Scripting;
[Preserve] [Preserve]
public class SplashEntry { public class SplashEntry {
[Preserve] [Preserve]
[JsonProperty("content")] [JsonProperty("content")]
public string Content { get; set; } public string Content { get; set; }
[Preserve] [Preserve]
[JsonProperty("attributes")] [JsonProperty("attributes")]
public SplashAttributes Attributes { get; set; } = new SplashAttributes(); public SplashAttributes Attributes { get; set; } = new SplashAttributes();
} }
[Preserve] [Preserve]
public class SplashAttributes { public class SplashAttributes {
[Preserve] [Preserve]
[JsonProperty("flip")] [JsonProperty("flip")]
public bool Flip { get; set; } = false; public bool Flip { get; set; } = false;
[Preserve] [Preserve]
[JsonProperty("reverse")] [JsonProperty("reverse")]
public bool Reverse { get; set; } = false; public bool Reverse { get; set; } = false;
[Preserve] [Preserve]
[JsonProperty("bounceSpeed")] [JsonProperty("bounceSpeed")]
public int BounceSpeed { get; set; } = -1; public int BounceSpeed { get; set; } = -1;
[Preserve] [Preserve]
[JsonProperty("color")] [JsonProperty("color")]
public string Color { get; set; } = null; public string Color { get; set; } = null;
[Preserve] [Preserve]
[JsonProperty("rainbowSpeed")] [JsonProperty("rainbowSpeed")]
public int RainbowSpeed { get; set; } = -1; public int RainbowSpeed { get; set; } = -1;
} }
+33 -33
View File
@@ -4,47 +4,47 @@ using UnityEngine.Scripting;
[Preserve] [Preserve]
public class Stats { public class Stats {
[Preserve] [Preserve]
[JsonProperty("highScore")] [JsonProperty("highScore")]
public BigInteger HighScore { get; set; } public BigInteger HighScore { get; set; }
[Preserve] [Preserve]
[JsonProperty("totalNormalBerries")] [JsonProperty("totalNormalBerries")]
public BigInteger TotalNormalBerries { get; set; } public BigInteger TotalNormalBerries { get; set; }
[Preserve] [Preserve]
[JsonProperty("totalPoisonBerries")] [JsonProperty("totalPoisonBerries")]
public BigInteger TotalPoisonBerries { get; set; } public BigInteger TotalPoisonBerries { get; set; }
[Preserve] [Preserve]
[JsonProperty("totalSlowBerries")] [JsonProperty("totalSlowBerries")]
public BigInteger TotalSlowBerries { get; set; } public BigInteger TotalSlowBerries { get; set; }
[Preserve] [Preserve]
[JsonProperty("totalUltraBerries")] [JsonProperty("totalUltraBerries")]
public BigInteger TotalUltraBerries { get; set; } public BigInteger TotalUltraBerries { get; set; }
[Preserve] [Preserve]
[JsonProperty("totalSpeedyBerries")] [JsonProperty("totalSpeedyBerries")]
public BigInteger TotalSpeedyBerries { get; set; } public BigInteger TotalSpeedyBerries { get; set; }
[Preserve] [Preserve]
[JsonProperty("totalCoinBerries")] [JsonProperty("totalCoinBerries")]
public BigInteger TotalCoinBerries { get; set; } public BigInteger TotalCoinBerries { get; set; }
[Preserve] [Preserve]
[JsonProperty("totalRandomBerries")] [JsonProperty("totalRandomBerries")]
public BigInteger TotalRandomBerries { get; set; } public BigInteger TotalRandomBerries { get; set; }
[Preserve] [Preserve]
[JsonProperty("totalAntiBerries")] [JsonProperty("totalAntiBerries")]
public BigInteger TotalAntiBerries { get; set; } public BigInteger TotalAntiBerries { get; set; }
[Preserve] [Preserve]
[JsonProperty("totalGoldenBerries")] [JsonProperty("totalGoldenBerries")]
public BigInteger TotalGoldenBerries { get; set; } public BigInteger TotalGoldenBerries { get; set; }
[Preserve] [Preserve]
[JsonProperty("coins")] [JsonProperty("coins")]
public BigInteger Coins { get; set; } public BigInteger Coins { get; set; }
} }
+75 -75
View File
@@ -7,86 +7,86 @@ using UnityEngine.SceneManagement;
using UnityEngine.UI; using UnityEngine.UI;
public class UserSearchMenu : MonoBehaviour { public class UserSearchMenu : MonoBehaviour {
[SerializeField] private GameObject content; [SerializeField] private GameObject content;
[SerializeField] private GameObject sampleObject; [SerializeField] private GameObject sampleObject;
[SerializeField] private Button searchButton; [SerializeField] private Button searchButton;
[SerializeField] private TMP_InputField usernameInput; [SerializeField] private TMP_InputField usernameInput;
[SerializeField] private TMP_Text statusText; [SerializeField] private TMP_Text statusText;
[SerializeField] private ProfileMenu profilePrefab; [SerializeField] private ProfileMenu profilePrefab;
void Awake() { void Awake() {
usernameInput.onSelect.AddListener((_) => usernameInput.caretPosition = usernameInput.text.Length); usernameInput.onSelect.AddListener((_) => usernameInput.caretPosition = usernameInput.text.Length);
searchButton.onClick.AddListener(Search); searchButton.onClick.AddListener(Search);
Search(); Search();
}
async void Search() {
searchButton.interactable = false;
foreach (Transform item in content.transform)
if (item.gameObject.activeSelf)
Destroy(item.gameObject);
using UnityWebRequest request = UnityWebRequest.Get(Endpoints.BD_ACCOUNT_ENDPOINT + "?username=" + usernameInput.text);
request.SetRequestHeader("Requester", "BerryDashClient");
request.SetRequestHeader("ClientVersion", Application.version);
request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
await request.SendWebRequest();
if (request.downloadHandler.text == null) {
searchButton.interactable = true;
UpdateStatus(true, "Failed to get a list of users");
return;
} }
UpdateStatus(false);
var jsonResponse = JObject.Parse(request.downloadHandler.text);
if ((bool)jsonResponse["success"]) {
foreach (var entry in jsonResponse["data"].ToObject<Account[]>()) {
if (entry.UserID == BazookaManager.Instance.GetAccountID()) continue;
var entryInfo = Instantiate(sampleObject, content.transform);
var playerIcon = entryInfo.transform.GetChild(0).GetComponent<Image>();
var playerOverlay = playerIcon.transform.GetChild(0).GetComponent<Image>();
var usernameText = entryInfo.transform.GetChild(1).GetComponent<TMP_Text>();
var playerIconButton = playerIcon.GetComponent<Button>();
var highScoreText = entryInfo.transform.GetChild(2).GetComponent<TMP_Text>();
async void Search() { usernameText.text = entry.Username;
searchButton.interactable = false; highScoreText.text += Tools.FormatWithCommas(entry.Stats.HighScore);
foreach (Transform item in content.transform)
if (item.gameObject.activeSelf)
Destroy(item.gameObject);
using UnityWebRequest request = UnityWebRequest.Get(Endpoints.BD_ACCOUNT_ENDPOINT + "?username=" + usernameInput.text);
request.SetRequestHeader("Requester", "BerryDashClient");
request.SetRequestHeader("ClientVersion", Application.version);
request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
await request.SendWebRequest();
if (request.downloadHandler.text == null) {
searchButton.interactable = true;
UpdateStatus(true, "Failed to get a list of users");
return;
}
UpdateStatus(false);
var jsonResponse = JObject.Parse(request.downloadHandler.text);
if ((bool)jsonResponse["success"]) {
foreach (var entry in jsonResponse["data"].ToObject<Account[]>()) {
if (entry.UserID == BazookaManager.Instance.GetAccountID()) continue;
var entryInfo = Instantiate(sampleObject, content.transform);
var playerIcon = entryInfo.transform.GetChild(0).GetComponent<Image>();
var playerOverlay = playerIcon.transform.GetChild(0).GetComponent<Image>();
var usernameText = entryInfo.transform.GetChild(1).GetComponent<TMP_Text>();
var playerIconButton = playerIcon.GetComponent<Button>();
var highScoreText = entryInfo.transform.GetChild(2).GetComponent<TMP_Text>();
usernameText.text = entry.Username; if (entry.CustomIcon == null) {
highScoreText.text += Tools.FormatWithCommas(entry.Stats.HighScore); playerIcon.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + entry.Icon);
if (entry.Icon == 1) playerIcon.sprite = Tools.GetIconForUser(entry.UserID);
if (entry.CustomIcon == null) { playerOverlay.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + entry.Overlay);
playerIcon.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + entry.Icon); if (entry.Overlay != 0) playerOverlay.gameObject.SetActive(true);
if (entry.Icon == 1) playerIcon.sprite = Tools.GetIconForUser(entry.UserID); if (entry.Overlay == 8) playerOverlay.transform.localPosition = new Vector2(-16.56f, 14.81f);
playerOverlay.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + entry.Overlay); else if (entry.Overlay == 11) playerOverlay.transform.localPosition = new Vector2(-14.74451f, 20.39122f);
if (entry.Overlay != 0) playerOverlay.gameObject.SetActive(true); else if (entry.Overlay == 13) playerOverlay.transform.localPosition = new Vector2(-16.54019f, 14.70365f);
if (entry.Overlay == 8) playerOverlay.transform.localPosition = new Vector2(-16.56f, 14.81f); try {
else if (entry.Overlay == 11) playerOverlay.transform.localPosition = new Vector2(-14.74451f, 20.39122f); playerIcon.color = new Color(entry.BirdColor[0] / 255f, entry.BirdColor[1] / 255f, entry.BirdColor[2] / 255f);
else if (entry.Overlay == 13) playerOverlay.transform.localPosition = new Vector2(-16.54019f, 14.70365f); playerOverlay.color = new Color(entry.BirdColor[0] / 255f, entry.BirdColor[1] / 255f, entry.BirdColor[2] / 255f);
try { }
playerIcon.color = new Color(entry.BirdColor[0] / 255f, entry.BirdColor[1] / 255f, entry.BirdColor[2] / 255f); catch {
playerOverlay.color = new Color(entry.BirdColor[0] / 255f, entry.BirdColor[1] / 255f, entry.BirdColor[2] / 255f); playerIcon.color = Color.white;
} playerOverlay.color = Color.white;
catch { }
playerIcon.color = Color.white; } else playerIcon.gameObject.AddComponent<WaitingForCustomIcon>().ID = entry.CustomIcon;
playerOverlay.color = Color.white; playerIconButton.onClick.AddListener(async () => {
} var clone = Instantiate(profilePrefab.gameObject, profilePrefab.gameObject.transform.parent);
} else playerIcon.gameObject.AddComponent<WaitingForCustomIcon>().ID = entry.CustomIcon; clone.SetActive(true);
playerIconButton.onClick.AddListener(async () => { await clone.GetComponent<ProfileMenu>().Init(entry.UserID);
var clone = Instantiate(profilePrefab.gameObject, profilePrefab.gameObject.transform.parent); });
clone.SetActive(true); entryInfo.SetActive(true);
await clone.GetComponent<ProfileMenu>().Init(entry.UserID); }
}); CustomIconLoader.Init(FindObjectsByType<WaitingForCustomIcon>(FindObjectsSortMode.None));
entryInfo.SetActive(true); } else {
} UpdateStatus(true, (string)jsonResponse["message"]);
CustomIconLoader.Init(FindObjectsByType<WaitingForCustomIcon>(FindObjectsSortMode.None));
} else {
UpdateStatus(true, (string)jsonResponse["message"]);
}
searchButton.interactable = true;
} }
searchButton.interactable = true;
}
async void Update() { async void Update() {
if (Keyboard.current.escapeKey.wasPressedThisFrame && !GameObject.Find("ProfilePrefab(Clone)")) await SceneManager.LoadSceneAsync("MainMenu"); if (Keyboard.current.escapeKey.wasPressedThisFrame && !GameObject.Find("ProfilePrefab(Clone)")) await SceneManager.LoadSceneAsync("MainMenu");
} }
private void UpdateStatus(bool enabled, string message = "") { private void UpdateStatus(bool enabled, string message = "") {
statusText.gameObject.SetActive(enabled); statusText.gameObject.SetActive(enabled);
statusText.text = message; statusText.text = message;
} }
} }
+5 -5
View File
@@ -2,9 +2,9 @@ using TMPro;
using UnityEngine; using UnityEngine;
public class VersionText : MonoBehaviour { public class VersionText : MonoBehaviour {
private TMP_Text text; private TMP_Text text;
void Awake() { void Awake() {
text = gameObject.GetComponent<TMP_Text>(); text = gameObject.GetComponent<TMP_Text>();
text.text = "Current: v" + Application.version; text.text = "Current: v" + Application.version;
} }
} }
@@ -3,10 +3,10 @@ using UnityEngine;
[Serializable] [Serializable]
public class ConnectedWithCurrentSceneMessage { public class ConnectedWithCurrentSceneMessage {
public string type = "connected_with_current_scene"; public string type = "connected_with_current_scene";
public string sceneName; public string sceneName;
public string Requester = "BerryDashClient"; public string Requester = "BerryDashClient";
public string ClientVersion = Application.version; public string ClientVersion = Application.version;
public string ClientPlatform = Application.platform.ToString(); public string ClientPlatform = Application.platform.ToString();
public long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); public long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
} }
+4 -4
View File
@@ -3,8 +3,8 @@ using Newtonsoft.Json.Linq;
[Serializable] [Serializable]
public class DeleteMessage { public class DeleteMessage {
public string type = "delete"; public string type = "delete";
public string kind; public string kind;
public JObject data; public JObject data;
public long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); public long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
} }
+4 -4
View File
@@ -3,8 +3,8 @@ using Newtonsoft.Json.Linq;
[Serializable] [Serializable]
public class EditMessage { public class EditMessage {
public string type = "edit"; public string type = "edit";
public string kind; public string kind;
public JObject data; public JObject data;
public long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); public long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
} }
@@ -2,7 +2,7 @@ using System;
[Serializable] [Serializable]
public class MultiplayerJoinRequestMessage { public class MultiplayerJoinRequestMessage {
public string type = "multiplayer_join_request"; public string type = "multiplayer_join_request";
public string auth; public string auth;
public long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); public long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
} }
@@ -2,6 +2,6 @@ using System;
[Serializable] [Serializable]
public class MultiplayerLeaveMessage { public class MultiplayerLeaveMessage {
public string type = "multiplayer_leave"; public string type = "multiplayer_leave";
public long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); public long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
} }
@@ -2,9 +2,9 @@ using System;
[Serializable] [Serializable]
public class MultiplayerPlayerMove { public class MultiplayerPlayerMove {
public string type = "multiplayer_player_move"; public string type = "multiplayer_player_move";
public float x; public float x;
public float y; public float y;
public bool f; public bool f;
public long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); public long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
} }
@@ -2,6 +2,6 @@ using System;
[Serializable] [Serializable]
public class MultiplayerPlayerPause { public class MultiplayerPlayerPause {
public string type = "multiplayer_player_pause"; public string type = "multiplayer_player_pause";
public long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); public long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
} }
@@ -2,6 +2,6 @@ using System;
[Serializable] [Serializable]
public class MultiplayerPlayerUnPause { public class MultiplayerPlayerUnPause {
public string type = "multiplayer_player_unpause"; public string type = "multiplayer_player_unpause";
public long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); public long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
} }
@@ -2,7 +2,7 @@ using System;
[Serializable] [Serializable]
public class RequestInfoMessage { public class RequestInfoMessage {
public string type = "info_request"; public string type = "info_request";
public string kind; public string kind;
public long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); public long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
} }
@@ -2,8 +2,8 @@ using System;
[Serializable] [Serializable]
public class SceneChangeMessage { public class SceneChangeMessage {
public string type = "scene_change"; public string type = "scene_change";
public string to; public string to;
public string from; public string from;
public long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); public long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
} }
+4 -4
View File
@@ -3,8 +3,8 @@ using Newtonsoft.Json.Linq;
[Serializable] [Serializable]
public class UploadMessage { public class UploadMessage {
public string type = "upload"; public string type = "upload";
public string kind; public string kind;
public JObject data; public JObject data;
public long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); public long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
} }