using Kryz.CharacterStats.Examples; using Photon.Pun; using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI; public class ExperienceBarUI : MonoBehaviour { [Header("Components:")] [SerializeField] private TMP_Text level; [SerializeField] private TMP_Text nextLevel; [SerializeField] private TMP_Text experienceBar; [SerializeField] private Image experienceBarFill; [Header("Listeners:")] [SerializeField] private GameEventListener_PhotonView onPlayerSpawned; PlayerCharacterStats player; float startingWidth; float currentFill; RectTransform rectFill; RectMask2D mask; Vector4 sizeFill = new Vector4(); private void Awake() { onPlayerSpawned.Response.AddListener(DependancyInjection); rectFill = experienceBarFill.GetComponent(); mask = experienceBarFill.GetComponent(); startingWidth = rectFill.rect.width; } private void DependancyInjection(PhotonView spawnedPlayer) { if (!spawnedPlayer.IsMine) return; player = ((RiftPlayer)spawnedPlayer.Owner.TagObject).GetComponent(); player.level.OnLevelUpEvent.AddListener(UpdateLevelText); player.level.OnExperienceChanged.AddListener(UpdateLevelText); UpdateLevelText(); } public void UpdateLevelText() { level.text = player.level.currentLevel.ToString(); nextLevel.text = (player.level.currentLevel + 1).ToString(); experienceBar.text = $"{player.level.GetCurrentExperience().ToString("F1")}/{player.level.FinalExperienceThreshold.ToString("F1")}"; SetCurrentFill(); } private void SetCurrentFill() { currentFill = player.level.GetCurrentExperience() / player.level.FinalExperienceThreshold; sizeFill.x = 0; sizeFill.y = 0; sizeFill.z = startingWidth - (currentFill * startingWidth); sizeFill.w = 0; mask.padding = sizeFill; } }