From e94e76791237dc8d7605c384dac300c2c6c493ed Mon Sep 17 00:00:00 2001 From: VladimirPirozhenko Date: Wed, 24 Aug 2022 00:13:44 +0300 Subject: [PATCH] Updated scoreboard system to show list of records via PlayerPrefs --- Assets/Scripts/GameSession/GameSession.cs | 8 ++++++- Assets/Scripts/Player/Player.cs | 3 ++- Assets/Scripts/Player/States/DeadState.cs | 1 + Assets/Scripts/Player/Statistics.cs | 10 ++++----- Assets/Scripts/Scoreboard/Scoreboard.cs | 6 ++++-- Assets/Scripts/UI/Views/ScoreboardView.cs | 26 +++++++++++------------ 6 files changed, 32 insertions(+), 22 deletions(-) diff --git a/Assets/Scripts/GameSession/GameSession.cs b/Assets/Scripts/GameSession/GameSession.cs index a4a65be..3a4e98a 100644 --- a/Assets/Scripts/GameSession/GameSession.cs +++ b/Assets/Scripts/GameSession/GameSession.cs @@ -7,6 +7,7 @@ using UnityEngine.SceneManagement; public class GameSession : MonoBehaviour,IResettable { [SerializeField] private Player currentPlayer; + [SerializeField] private Scoreboard scoreboard; public static GameSession Instance { get; private set; } public WorldCurver Curver { get; private set; } private IInputTranslator inputTranslator; @@ -34,7 +35,7 @@ public class GameSession : MonoBehaviour,IResettable Curver.Tick(); // curver.SinCurveX(); // Curver.SinCurveY(); - Curver.TurnWorldToLeft(); + //Curver.TurnWorldToLeft(); } private void Init() @@ -83,6 +84,11 @@ public class GameSession : MonoBehaviour,IResettable inputTranslator.RestictTranslation(commands, isRestricted); } + public void UpdateScoreboard(ScoreboardEntry entry) + { + scoreboard.AddScoreboardEntry(entry); + } + public void RestartSession() { SceneManager.LoadScene("GameScene", LoadSceneMode.Single); diff --git a/Assets/Scripts/Player/Player.cs b/Assets/Scripts/Player/Player.cs index f71b37c..828912b 100644 --- a/Assets/Scripts/Player/Player.cs +++ b/Assets/Scripts/Player/Player.cs @@ -107,7 +107,8 @@ public class Player : MonoBehaviour,IResettable, ICommandTranslator private void Die() { - PlayerStateMachine.SetState(PlayerStateMachine.PlayerDeadState); + PlayerStateMachine.SetState(PlayerStateMachine.PlayerDeadState); + GameSession.Instance.UpdateScoreboard(new ScoreboardEntry(name,PlayerStatictics.Score)); } public IEnumerator GrantInvincibility() diff --git a/Assets/Scripts/Player/States/DeadState.cs b/Assets/Scripts/Player/States/DeadState.cs index e389ee8..f9c5765 100644 --- a/Assets/Scripts/Player/States/DeadState.cs +++ b/Assets/Scripts/Player/States/DeadState.cs @@ -13,6 +13,7 @@ public class DeadState : PlayerState playerSM.VerticalDeltaPosition = 0; playerSM.HorizontalDeltaPosition = Vector3.zero; GameSession.Instance.RestrictInputs(InputConstants.InGameCommands, true); + //Session.ShowGameOverPopUp(true); // Session.SetGameOverState(); // Stats.CalculateScore(); diff --git a/Assets/Scripts/Player/Statistics.cs b/Assets/Scripts/Player/Statistics.cs index b9aa1f6..a328db9 100644 --- a/Assets/Scripts/Player/Statistics.cs +++ b/Assets/Scripts/Player/Statistics.cs @@ -8,7 +8,7 @@ public class Statistics : MonoBehaviour,IResettable private float distance; private int coinCount; private int coinMultiplier; - private int score; + public int Score { get; private set; } public event Action OnCoinCountChanged = delegate { }; public event Action OnDistanceChanged = delegate { }; public event Action OnScoreCalculated = delegate { }; @@ -41,15 +41,15 @@ public class Statistics : MonoBehaviour,IResettable } public void CalculateScore() { - score = Mathf.FloorToInt(coinCount * coinMultiplier + distance); - OnScoreCalculated?.Invoke(score); - PlayerHUD.UpdateScore(score.ToString()); + Score = Mathf.FloorToInt(coinCount * coinMultiplier + distance); + OnScoreCalculated?.Invoke(Score); + PlayerHUD.UpdateScore(Score.ToString()); } public void ResetToDefault() { distance = 0; - score = 0; + Score = 0; coinCount = 0; coinMultiplier = 1; //gameOverPopUp.gameObject.SetActive(false); diff --git a/Assets/Scripts/Scoreboard/Scoreboard.cs b/Assets/Scripts/Scoreboard/Scoreboard.cs index 321df76..8a6dfce 100644 --- a/Assets/Scripts/Scoreboard/Scoreboard.cs +++ b/Assets/Scripts/Scoreboard/Scoreboard.cs @@ -21,7 +21,7 @@ public class Scoreboard : MonoBehaviour, ICommandTranslator private void Start() { GameSession.Instance.AddCommandTranslator(this); - string jsonScoreboardEntries = PlayerPrefs.GetString("ScoreboardEntriesTableT1"); //Binary file + string jsonScoreboardEntries = PlayerPrefs.GetString("ScoreboardEntriesTableTest"); //Binary file ScoreboardEntriesTable entriesTable = JsonUtility.FromJson(jsonScoreboardEntries); if (entriesTable == null) return; @@ -47,12 +47,14 @@ public class Scoreboard : MonoBehaviour, ICommandTranslator { entries.Add(entry); OnEntryAdded?.Invoke(entry); + SaveScoreboardEntriesTable(); } + public void SaveScoreboardEntriesTable() { ScoreboardEntriesTable scoreboardEntriesTable = new ScoreboardEntriesTable(entries); string jsonScoreboardEntries = JsonUtility.ToJson(scoreboardEntriesTable); - PlayerPrefs.SetString("ScoreboardEntriesTableT1", jsonScoreboardEntries); + PlayerPrefs.SetString("ScoreboardEntriesTableTest", jsonScoreboardEntries); PlayerPrefs.Save(); } diff --git a/Assets/Scripts/UI/Views/ScoreboardView.cs b/Assets/Scripts/UI/Views/ScoreboardView.cs index 24fb7d6..5a98d43 100644 --- a/Assets/Scripts/UI/Views/ScoreboardView.cs +++ b/Assets/Scripts/UI/Views/ScoreboardView.cs @@ -7,8 +7,8 @@ public class ScoreboardView : BaseView [SerializeField] private Button backButton; [SerializeField] private PlayerScoreboardCard cardPrefab; private VerticalLayoutGroup layoutGroup; - private readonly Dictionary playerCards = new Dictionary(); - + //private readonly Dictionary playerCards = new Dictionary(); + private readonly List playerCards = new List(); public override void Init() { base.Init(); @@ -29,27 +29,27 @@ public class ScoreboardView : BaseView private void AddPlayerCard(PlayerScoreboardCardData cardData) { - if (playerCards.ContainsKey(cardData.playerName)) - return; + //if (playerCards.ContainsKey(cardData.playerName)) + // return; PlayerScoreboardCard playerScoreboardCard = Instantiate(cardPrefab); playerScoreboardCard.transform.SetParent(layoutGroup.transform, false); playerScoreboardCard.UpdateCard(cardData); - playerCards.Add(cardData.playerName, playerScoreboardCard); + playerCards.Add(playerScoreboardCard); } public void RemovePlayerCard(string cardTag) { - if (playerCards.ContainsKey(cardTag)) - { - playerCards.TryGetValue(cardTag, out PlayerScoreboardCard playerScoreboardCard); - playerScoreboardCard.gameObject.SetActive(false); //TODO: Pooling - playerCards.Remove(cardTag); - } + //if (playerCards.ContainsKey(cardTag)) + //{ + //playerCards.TryGetValue(cardTag, out PlayerScoreboardCard playerScoreboardCard); + //playerScoreboardCard.gameObject.SetActive(false); //TODO: Pooling + //playerCards.Remove(cardTag); + //} } public void RefreshPlayerCard(PlayerScoreboardCardData cardData) { - if (playerCards.TryGetValue(cardData.playerName, out PlayerScoreboardCard card)) - card.UpdateCard(cardData); + //if (playerCards.TryGetValue(cardData.playerName, out PlayerScoreboardCard card)) + // card.UpdateCard(cardData); } }