chunk 1: core gameplay scripts scenes runtime assets
This commit is contained in:
32
Assets/Scripts/Rewards/RankIconManager.cs
Normal file
32
Assets/Scripts/Rewards/RankIconManager.cs
Normal file
@@ -0,0 +1,32 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class RankIconManager : MonoBehaviour
|
||||
{
|
||||
public Sprite[] rankIcons;
|
||||
|
||||
// Function to return a sprite, based on rank and rank level parameters
|
||||
public Sprite rankSprite(string rank, int rank_level) {
|
||||
string ranklevel = $"{rank}{rank_level}";
|
||||
|
||||
foreach (Sprite spr in rankIcons){
|
||||
if (spr.name == ranklevel){
|
||||
return spr;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// Start is called before the first frame update
|
||||
void Start()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
11
Assets/Scripts/Rewards/RankIconManager.cs.meta
Normal file
11
Assets/Scripts/Rewards/RankIconManager.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 90baa44578ce8cf41a1b9653aa3f7b0d
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
206
Assets/Scripts/Rewards/RewardsManager.cs
Normal file
206
Assets/Scripts/Rewards/RewardsManager.cs
Normal file
@@ -0,0 +1,206 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using TMPro;
|
||||
using System;
|
||||
|
||||
|
||||
public class RewardsManager : MonoBehaviour {
|
||||
public Slider levelBar; //Slider showing the level based on XP
|
||||
public TMP_Text XP_show; // Reference to the XP TextMeshPro component
|
||||
public TMP_Text level_value; // Reference to the level TextMeshPro component
|
||||
public TMP_Text rank_value; // Reference to the rank TextMeshPro component
|
||||
public TMP_Text rank_level_UI; // Reference to the InputField component
|
||||
|
||||
int current_level;
|
||||
int x_value;
|
||||
|
||||
// References to PLAYERPREFS Key for the Player's Rewards Data
|
||||
private const string player_RewardsData = "Player_RewardsData";
|
||||
|
||||
private PlayerData playerData; // List of character information
|
||||
|
||||
|
||||
//Loads and updates XP at component creation.
|
||||
private void Awake(){
|
||||
// Load player data and update text field immediately upon component creation
|
||||
LoadAndUpdateXP();
|
||||
}
|
||||
|
||||
//Loads and updates XP when component becomes enabled.
|
||||
private void OnEnable(){
|
||||
// Load player data and update text field when component becomes enabled
|
||||
LoadAndUpdateXP();
|
||||
}
|
||||
|
||||
//Loads PlayerData and updates the XP text field.
|
||||
private void LoadAndUpdateXP(){
|
||||
// Load player data
|
||||
PlayerData retrieved_playerData = LoadPlayerData();
|
||||
int player_xp = retrieved_playerData.xp;
|
||||
|
||||
if (player_xp < 0){
|
||||
player_xp = 0;
|
||||
retrieved_playerData.xp = 0;
|
||||
SavePlayerData(retrieved_playerData);
|
||||
}
|
||||
|
||||
// Update the text field
|
||||
UpdateTextMeshProValue(player_xp.ToString());
|
||||
}
|
||||
|
||||
|
||||
//Initializes PlayerData, sets up UI text, and subscribes to InputField change events.
|
||||
private void Start(){
|
||||
|
||||
// If already there's rewards data saved
|
||||
if (PlayerPrefs.HasKey(player_RewardsData)){
|
||||
playerData = LoadPlayerData();
|
||||
|
||||
}else{ //no rewards data saved, start somewhere, save and load
|
||||
playerData = new PlayerData { xp = 0, rank = "Bronze", prevRank = "Bronze", overall_matches = 0, win_streak = 0, loss_streak = 0, overall_wins = 0, overall_losses = 0, rank_level = 1, prevrank_level = 1,
|
||||
rank_game = 0, eliminations = 0, deaths = 0, revives = 0 };
|
||||
|
||||
SavePlayerData(playerData); //Saves the player's mission_progress data
|
||||
playerData = LoadPlayerData();
|
||||
}
|
||||
|
||||
if (playerData.rank != playerData.prevRank){
|
||||
Debug.Log("There has been change in the Rank");
|
||||
}
|
||||
|
||||
rank_level_UI.text = "Level " + playerData.rank_level;
|
||||
rank_value.text = playerData.rank;
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Function called whenever the value of the InputField changes
|
||||
private void UpdateTextMeshProValue(string newValue){
|
||||
// Update the TextMeshPro text with the new value
|
||||
if (int.Parse(newValue) != 0){
|
||||
StartCoroutine(AnimateTextMeshProValue(newValue));
|
||||
}else{
|
||||
XP_show.text = newValue;
|
||||
}
|
||||
|
||||
//There is an alternative way of doing this
|
||||
int intValue = int.Parse(newValue);
|
||||
|
||||
// Define level ranges
|
||||
int[] levelRanges = { 100, 2650, 3900, 4750, 5600, 6350, 7100, 7850, 8150, 8600, 9050, 9500, 9950, 10400, 10850,
|
||||
11300, 11750, 12200, 12350, 12500, 12650, 12800, 12950, 13100, 13250, 13400, 13550, 13700, 13850, 14000,
|
||||
14150, 14300, 14450, 14600, 14750, 14900, 15050, 15200, 15350, 15500, 15650, 15800, 15950, 16100, 16250,
|
||||
16400, 16550, 16700, 16850, 17000, 17150, 17300, 17450, 17600, 17750, 17900, 18000 };
|
||||
|
||||
for (int i = 0; i < levelRanges.Length; i++){
|
||||
if (intValue <= levelRanges[i]){
|
||||
if (intValue < 100){
|
||||
current_level = i + 1;
|
||||
}
|
||||
|
||||
// if (intValue == levelRanges[i]){
|
||||
if (intValue == levelRanges[i]){
|
||||
current_level = i + 1;
|
||||
}
|
||||
|
||||
if ((intValue != levelRanges[i]) && !(intValue < 100)){
|
||||
current_level = i;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (current_level != 1){
|
||||
//Create animation
|
||||
StartCoroutine(Animate_LevelValue(current_level.ToString()));
|
||||
}else{
|
||||
level_value.text = current_level.ToString();
|
||||
}
|
||||
|
||||
x_value = Mathf.Clamp(current_level, 1, 58);
|
||||
float normalizedValue = Mathf.Clamp01((float)x_value / 58f);
|
||||
|
||||
// Set the normalized value to the Slider
|
||||
if (current_level != 0){
|
||||
levelBar.StartCoroutine(AnimateSliderValue(normalizedValue));
|
||||
}else{
|
||||
levelBar.value = normalizedValue;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Create Slider animation coroutine
|
||||
private IEnumerator AnimateSliderValue(float targetValue){
|
||||
float animationDuration = 1.0f; // You can adjust the duration of the animation
|
||||
float startValue = 0;
|
||||
|
||||
for (float t = 0f; t < 1.0f; t += Time.deltaTime / animationDuration)
|
||||
{
|
||||
float animatedValue = Mathf.Lerp(startValue, targetValue, t);
|
||||
levelBar.value = animatedValue;
|
||||
yield return null;
|
||||
}
|
||||
|
||||
levelBar.value = targetValue;
|
||||
}
|
||||
|
||||
|
||||
// Create XP text Animation
|
||||
private IEnumerator AnimateTextMeshProValue(string targetValue){
|
||||
int targetIntValue = int.Parse(targetValue);
|
||||
float animationDuration = 1.0f; // You can adjust the duration of the animation
|
||||
|
||||
for (float t = 0f; t < 1.0f; t += Time.deltaTime / animationDuration){
|
||||
int animatedValue = Mathf.RoundToInt(Mathf.Lerp(0, targetIntValue, t));
|
||||
XP_show.text = animatedValue.ToString();
|
||||
yield return null;
|
||||
}
|
||||
|
||||
XP_show.text = targetValue;
|
||||
|
||||
// The rest of your original code
|
||||
int intValue = targetIntValue;
|
||||
|
||||
int[] levelRanges = { /* your level ranges here */ };
|
||||
|
||||
for (int i = 0; i < levelRanges.Length; i++){
|
||||
// Your existing level calculation logic here
|
||||
}
|
||||
|
||||
level_value.text = current_level.ToString();
|
||||
}
|
||||
|
||||
|
||||
// Animates changing Level value
|
||||
private IEnumerator Animate_LevelValue(string targetValue){
|
||||
int targetIntValue = int.Parse(targetValue);
|
||||
float animationDuration = 1.0f; // You can adjust the duration of the animation
|
||||
|
||||
for (float t = 0f; t < 1.0f; t += Time.deltaTime / animationDuration){
|
||||
int animatedValue = Mathf.RoundToInt(Mathf.Lerp(0, targetIntValue, t));
|
||||
level_value.text = animatedValue.ToString();
|
||||
yield return null;
|
||||
}
|
||||
|
||||
level_value.text = targetValue;
|
||||
|
||||
}
|
||||
|
||||
|
||||
// ** PLAYERPREFS used in this script
|
||||
//Saves PlayerData to PlayerPrefs.
|
||||
private void SavePlayerData(PlayerData data){
|
||||
string jsonData = JsonUtility.ToJson(data);
|
||||
PlayerPrefs.SetString(player_RewardsData, jsonData); // Details stored as "PlayerData"
|
||||
PlayerPrefs.Save();
|
||||
}
|
||||
|
||||
//Load player data from PlayerPrefs
|
||||
PlayerData LoadPlayerData(){
|
||||
string jsonData = PlayerPrefs.GetString(player_RewardsData, "{}"); // Details were stored as "PlayerData"
|
||||
return JsonUtility.FromJson<PlayerData>(jsonData);
|
||||
}
|
||||
|
||||
}
|
||||
11
Assets/Scripts/Rewards/RewardsManager.cs.meta
Normal file
11
Assets/Scripts/Rewards/RewardsManager.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6d3e40a740a379747aed18f8a34d17d2
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user