metahunt/Assets/Scripts/UIManager.cs
2024-02-15 00:15:22 +05:30

340 lines
12 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using Photon.Pun;
using TMPro;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class UIManager : MonoBehaviour
{
public GameObject loadingPanel;
public TMP_Text loadingText;
public static UIManager instance;
public Text UsernameTxt;
public TMP_Text PickupText;
public TMP_Text EnemyPopupText;
public Image OnScreenDamageFx;
public float OnScreenDmgFxFadeoutTime = 0.1f;
public Image Healthbar;
public Image ShieldBar;
public Text HealthTxt;
public Image StaminaBar;
public CanvasGroup DamageDirectionIndicator;
public float DamageDirectionIndicatorOffset = 90;
public Image weaponSlot1, weaponSlot2, pistolSlot;
public Image throwableSlot;
public TMP_Text weaponSlot1Ammo, weaponSlot2Ammo, pistolSlotAmmo;
public TMP_Text throwableSlotAmount;
public GameObject Crosshair;
public CrosshairsScriptable crosshairs;
public RectTransform rectParent;
public GameObject pauseMenuPanel;
[Header("Inventory")]
public GameObject inventoryPanel;
public Transform inventoryGridParent;
public GameObject inventoryGridItemPrefab;
public Image weaponSlot1Inventory, weaponSlot2Inventory, pistolSlotInventory, throwableSlotInventory;
[Header("Deathmatch")]
public TMP_Text TimerTxt;
public TMP_Text LastChampTxt;
public double StartTime = 0;
public float RoundLength;
public GameObject DeathmatchPanel;
public TMP_Text DeathmatchPositionTxt;
public TMP_Text DeathmatchWinnerTxt;
public TMP_Text DeathmatchAutoRestartTxt;
public float timer => (StartTime<=0) ? RoundLength : RoundLength - (float)(PhotonNetwork.Time - StartTime);
private void Awake()
{
instance = this;
PickupText.text = "";
EnemyPopupText.text = "";
SetCroshair(false);
loadingPanel.SetActive(true);
SetStatusText("Connecting");
}
void Start(){
OnSettingsChanged();
SettingsManager.instance.OnSettingsChanged.AddListener(OnSettingsChanged);
StartCoroutine(Coroutine_UpdateLastChampTxt());
}
IEnumerator Coroutine_UpdateLastChampTxt(){
WWW req= new WWW(UserDataManager.GetApiUrl("get_last_champ"));
yield return req;
LastChampTxt.text = $"Last session Champion: {req.text}";
}
public void OnSettingsChanged(){
Crosshair.GetComponent<Image>().sprite = crosshairs.crosshairs[PlayerPrefs.GetInt(SettingsManager.CROSSHAIR_PREF_KEY)];
Crosshair.GetComponent<Image>().color = new Color(1,1,1, PlayerPrefs.GetFloat(SettingsManager.CROSSHAIR_OPACITY_PREF_KEY));
}
public static void WaitingForPlayers(){
instance.loadingPanel.SetActive(false);
SetStatusText("Waiting For Players");
}
public static void SetStatusText(string txt){
instance.loadingText.text = txt;
}
public static bool isPaused => instance.pauseMenuPanel.activeSelf;
private void Update()
{
if(Input.GetKeyUp(KeyCode.Escape) && !SettingsManager.isShowing){
TogglePauseMenu();
}
if (OnScreenDamageFx.color.a > 0)
{
OnScreenDamageFx.color = new UnityEngine.Color(1, 1, 1, OnScreenDamageFx.color.a - (OnScreenDmgFxFadeoutTime * Time.deltaTime));
}
if(DamageDirectionIndicator.alpha > 0)
{
DamageDirectionIndicator.alpha -= Time.deltaTime;
}
inventoryPanel.SetActive(Input.GetKey(KeyCode.I));
if(timer >0){
TimerTxt.text = Helpers.secondsToTimerString(timer);
}
}
public void TogglePauseMenu(){
pauseMenuPanel.SetActive(!pauseMenuPanel.activeSelf);
if(pauseMenuPanel.activeSelf){
Cursor.visible=true;
Cursor.lockState = CursorLockMode.None;
}else{
Cursor.visible=false;
Cursor.lockState = CursorLockMode.Locked;
}
}
public static void ShowDeathmatchFinishScreen(int position, string winnerName){
instance.m_ShowDeathmatchFinishScreen(position, winnerName);
}
public static void ShowTDMFinishScreen(string winnerName){
instance.m_ShowTDMFinishScreen(winnerName);
}
void m_ShowTDMFinishScreen(string winnerName){
DeathmatchPanel.SetActive(true);
// DeathmatchPositionTxt.text = $"You finished {Helpers.numberToPosition(position+1)}";
DeathmatchWinnerTxt.text = $"The Winner is {winnerName}";
StartCoroutine(StartDeathmatchRestartCountdown());
}
void m_ShowDeathmatchFinishScreen(int position, string winnerName){
DeathmatchPanel.SetActive(true);
DeathmatchPositionTxt.text = $"You finished {Helpers.numberToPosition(position+1)}";
if(position==0){
DeathmatchWinnerTxt.text = "Well Played!";
}else{
DeathmatchWinnerTxt.text = $"The Winner is {winnerName}";
}
StartCoroutine(StartDeathmatchRestartCountdown());
}
IEnumerator StartDeathmatchRestartCountdown(){
int t = 10;
while(t > 0){
DeathmatchAutoRestartTxt.text = $"Restarting in {t} seconds";
t--;
yield return new WaitForSecondsRealtime(1f);
}
}
public void SetTimer(double startTime, float roundLength){
StartTime=startTime;
RoundLength = roundLength;
}
public static void SetCroshair(bool value)
{
//instance.Crosshair.SetActive(value);
}
public static void OnRespawn(){
instance.OnScreenDamageFx.color = new UnityEngine.Color(1, 1, 1, 0);
}
public static void SetHealth(float health,float shield)
{
instance.Healthbar.fillAmount = health / 100f;
instance.ShieldBar.fillAmount = shield /100f;
instance.HealthTxt.text = health.ToString("n0") + " / 100";
}
public static void SetStamina(float stamina, float maxStamina){
instance.StaminaBar.fillAmount = stamina / maxStamina;
}
public static void SetUsername(string username)
{
instance.UsernameTxt.text= username;
}
public static void SetDamageDirection(float angle)
{
instance.DamageDirectionIndicator.transform.rotation = Quaternion.Euler(0, 0, instance.DamageDirectionIndicatorOffset -angle);
instance.DamageDirectionIndicator.alpha = 1;
}
public static void SetWeaponSlot1(LootItemScriptableObject type)
{
if (type == null) { } else
{
instance.weaponSlot1.sprite = type.UIImage;
instance.weaponSlot1Inventory.sprite = type.UIImage;
}
instance.weaponSlot1Inventory.enabled = type != null;
instance.weaponSlot1.enabled = type != null;
}
public static void SetWeaponSlot2(LootItemScriptableObject type)
{
if(type == null) {} else
{
instance.weaponSlot2.sprite = type.UIImage;
instance.weaponSlot2Inventory.sprite = type.UIImage;
}
instance.weaponSlot2Inventory.enabled = type != null;
instance.weaponSlot2.enabled = type != null;
}
public static void SetThrowableSlot(LootItemScriptableObject type)
{
instance.throwableSlotInventory.enabled = type != null;
instance.throwableSlot.enabled = type != null;
if (type != null)
{
instance.throwableSlotInventory.sprite = type.UIImage;
instance.throwableSlot.sprite = type.UIImage;
}
}
public static void SetPrimarySlot(LootItemScriptableObject type)
{
instance.pistolSlotInventory.enabled = type != null;
instance.pistolSlot.enabled = type != null;
if (type != null)
{
instance.pistolSlotInventory.sprite = type.UIImage;
instance.pistolSlot.sprite = type.UIImage;
}
}
public static void SetWeaponSlot(int i)
{
float activeOpacity =0.8f;
float inactiveOpacity = 0.4f;
if(i == 0)
{
Image img1 = instance.weaponSlot1.transform.parent.GetComponent<Image>();
img1.color = new Color(img1.color.r, img1.color.g, img1.color.b, activeOpacity);
Image img2 = instance.weaponSlot2.transform.parent.GetComponent<Image>();
img2.color = new Color(img2.color.r, img2.color.g, img2.color.b, inactiveOpacity);
Image img3 = instance.pistolSlot.transform.parent.GetComponent<Image>();
img3.color = new Color(img3.color.r,img3.color.g, img3.color.b, inactiveOpacity);
}else if(i == 1)
{
Image img1 = instance.weaponSlot1.transform.parent.GetComponent<Image>();
img1.color = new Color(img1.color.r, img1.color.g, img1.color.b, inactiveOpacity);
Image img2 = instance.weaponSlot2.transform.parent.GetComponent<Image>();
img2.color = new Color(img2.color.r, img2.color.g, img2.color.b, activeOpacity);
Image img3 = instance.pistolSlot.transform.parent.GetComponent<Image>();
img3.color = new Color(img3.color.r,img3.color.g, img3.color.b, inactiveOpacity);
}else if(i == 2){
Image img1 = instance.weaponSlot1.transform.parent.GetComponent<Image>();
img1.color = new Color(img1.color.r, img1.color.g, img1.color.b, inactiveOpacity);
Image img2 = instance.weaponSlot2.transform.parent.GetComponent<Image>();
img2.color = new Color(img2.color.r, img2.color.g, img2.color.b, inactiveOpacity);
Image img3 = instance.pistolSlot.transform.parent.GetComponent<Image>();
img3.color = new Color(img3.color.r,img3.color.g, img3.color.b, activeOpacity);
}
else
{
Image img1 = instance.weaponSlot1.transform.parent.GetComponent<Image>();
img1.color = new Color(img1.color.r, img1.color.g, img1.color.b, inactiveOpacity);
Image img2 = instance.weaponSlot2.transform.parent.GetComponent<Image>();
img2.color = new Color(img2.color.r, img2.color.g, img2.color.b, inactiveOpacity);
Image img3 = instance.pistolSlot.transform.parent.GetComponent<Image>();
img3.color = new Color(img3.color.r,img3.color.g, img3.color.b, inactiveOpacity);
}
}
public static void OnDeath(){
}
public static void UpdateInventory(InventoryManager inventory)
{
//PURGE
for (int i = 0; i < instance.inventoryGridParent.childCount; i++)
{
Destroy(instance.inventoryGridParent.GetChild(i).gameObject);
}
foreach (KeyValuePair<LootItemScriptableObject, int> keyValuePair in InventoryManager.instance.Stock)
{
if(keyValuePair.Value <= 0) { continue; }
GameObject newItem = Instantiate(instance.inventoryGridItemPrefab, instance.inventoryGridParent);
newItem.transform.GetChild(0).GetComponent<Image>().sprite = keyValuePair.Key.UIImage;
newItem.transform.GetChild(1).GetComponent<TMP_Text>().text = keyValuePair.Key.displayName;
newItem.transform.GetChild(2).GetComponent<TMP_Text>().text = keyValuePair.Value.ToString();
}
// instance.throwableSlot.sprite = inventory.EquippedThrowable.UIImage;
SetWeaponSlot1(inventory.FirstWeapon);
SetWeaponSlot2(inventory.SecondWeapon);
SetThrowableSlot(inventory.EquippedThrowable);
SetPrimarySlot(inventory.PrimaryWeapon);
instance.weaponSlot1Ammo.text = inventory.FirstWeapon == null ? "" : (inventory.loadedRounds1 + " / " + inventory.getStock(inventory.FirstWeapon.ammo));
instance.weaponSlot2Ammo.text = inventory.SecondWeapon == null ? "" : (inventory.loadedRounds2 + " / " + inventory.getStock(inventory.SecondWeapon.ammo));
instance.pistolSlotAmmo.text = inventory.PrimaryWeapon == null ? "" : (inventory.loadedRoundsPrimary + " / " + inventory.getStock(inventory.PrimaryWeapon.ammo));
instance.throwableSlotAmount.text = inventory.EquippedThrowable == null ? "" : (inventory.Stock.GetValueOrDefault(inventory.EquippedThrowable, 0).ToString("n0"));
}
public void LoadMainMenu(){
SceneManager.LoadScene("MainMenu");
}
}