Updated scoreboard system to show list of records via PlayerPrefs

This commit is contained in:
VladimirPirozhenko 2022-08-24 00:13:44 +03:00
parent 388791ecd2
commit e94e767912
6 changed files with 32 additions and 22 deletions

View File

@ -7,6 +7,7 @@ using UnityEngine.SceneManagement;
public class GameSession : MonoBehaviour,IResettable public class GameSession : MonoBehaviour,IResettable
{ {
[SerializeField] private Player currentPlayer; [SerializeField] private Player currentPlayer;
[SerializeField] private Scoreboard scoreboard;
public static GameSession Instance { get; private set; } public static GameSession Instance { get; private set; }
public WorldCurver Curver { get; private set; } public WorldCurver Curver { get; private set; }
private IInputTranslator inputTranslator; private IInputTranslator inputTranslator;
@ -34,7 +35,7 @@ public class GameSession : MonoBehaviour,IResettable
Curver.Tick(); Curver.Tick();
// curver.SinCurveX(); // curver.SinCurveX();
// Curver.SinCurveY(); // Curver.SinCurveY();
Curver.TurnWorldToLeft(); //Curver.TurnWorldToLeft();
} }
private void Init() private void Init()
@ -83,6 +84,11 @@ public class GameSession : MonoBehaviour,IResettable
inputTranslator.RestictTranslation(commands, isRestricted); inputTranslator.RestictTranslation(commands, isRestricted);
} }
public void UpdateScoreboard(ScoreboardEntry entry)
{
scoreboard.AddScoreboardEntry(entry);
}
public void RestartSession() public void RestartSession()
{ {
SceneManager.LoadScene("GameScene", LoadSceneMode.Single); SceneManager.LoadScene("GameScene", LoadSceneMode.Single);

View File

@ -108,6 +108,7 @@ public class Player : MonoBehaviour,IResettable, ICommandTranslator
private void Die() private void Die()
{ {
PlayerStateMachine.SetState(PlayerStateMachine.PlayerDeadState); PlayerStateMachine.SetState(PlayerStateMachine.PlayerDeadState);
GameSession.Instance.UpdateScoreboard(new ScoreboardEntry(name,PlayerStatictics.Score));
} }
public IEnumerator GrantInvincibility() public IEnumerator GrantInvincibility()

View File

@ -13,6 +13,7 @@ public class DeadState : PlayerState
playerSM.VerticalDeltaPosition = 0; playerSM.VerticalDeltaPosition = 0;
playerSM.HorizontalDeltaPosition = Vector3.zero; playerSM.HorizontalDeltaPosition = Vector3.zero;
GameSession.Instance.RestrictInputs(InputConstants.InGameCommands, true); GameSession.Instance.RestrictInputs(InputConstants.InGameCommands, true);
//Session.ShowGameOverPopUp(true); //Session.ShowGameOverPopUp(true);
// Session.SetGameOverState(); // Session.SetGameOverState();
// Stats.CalculateScore(); // Stats.CalculateScore();

View File

@ -8,7 +8,7 @@ public class Statistics : MonoBehaviour,IResettable
private float distance; private float distance;
private int coinCount; private int coinCount;
private int coinMultiplier; private int coinMultiplier;
private int score; public int Score { get; private set; }
public event Action<int> OnCoinCountChanged = delegate { }; public event Action<int> OnCoinCountChanged = delegate { };
public event Action<float> OnDistanceChanged = delegate { }; public event Action<float> OnDistanceChanged = delegate { };
public event Action<int> OnScoreCalculated = delegate { }; public event Action<int> OnScoreCalculated = delegate { };
@ -41,15 +41,15 @@ public class Statistics : MonoBehaviour,IResettable
} }
public void CalculateScore() public void CalculateScore()
{ {
score = Mathf.FloorToInt(coinCount * coinMultiplier + distance); Score = Mathf.FloorToInt(coinCount * coinMultiplier + distance);
OnScoreCalculated?.Invoke(score); OnScoreCalculated?.Invoke(Score);
PlayerHUD.UpdateScore(score.ToString()); PlayerHUD.UpdateScore(Score.ToString());
} }
public void ResetToDefault() public void ResetToDefault()
{ {
distance = 0; distance = 0;
score = 0; Score = 0;
coinCount = 0; coinCount = 0;
coinMultiplier = 1; coinMultiplier = 1;
//gameOverPopUp.gameObject.SetActive(false); //gameOverPopUp.gameObject.SetActive(false);

View File

@ -21,7 +21,7 @@ public class Scoreboard : MonoBehaviour, ICommandTranslator
private void Start() private void Start()
{ {
GameSession.Instance.AddCommandTranslator(this); GameSession.Instance.AddCommandTranslator(this);
string jsonScoreboardEntries = PlayerPrefs.GetString("ScoreboardEntriesTableT1"); //Binary file string jsonScoreboardEntries = PlayerPrefs.GetString("ScoreboardEntriesTableTest"); //Binary file
ScoreboardEntriesTable entriesTable = JsonUtility.FromJson<ScoreboardEntriesTable>(jsonScoreboardEntries); ScoreboardEntriesTable entriesTable = JsonUtility.FromJson<ScoreboardEntriesTable>(jsonScoreboardEntries);
if (entriesTable == null) if (entriesTable == null)
return; return;
@ -47,12 +47,14 @@ public class Scoreboard : MonoBehaviour, ICommandTranslator
{ {
entries.Add(entry); entries.Add(entry);
OnEntryAdded?.Invoke(entry); OnEntryAdded?.Invoke(entry);
SaveScoreboardEntriesTable();
} }
public void SaveScoreboardEntriesTable() public void SaveScoreboardEntriesTable()
{ {
ScoreboardEntriesTable scoreboardEntriesTable = new ScoreboardEntriesTable(entries); ScoreboardEntriesTable scoreboardEntriesTable = new ScoreboardEntriesTable(entries);
string jsonScoreboardEntries = JsonUtility.ToJson(scoreboardEntriesTable); string jsonScoreboardEntries = JsonUtility.ToJson(scoreboardEntriesTable);
PlayerPrefs.SetString("ScoreboardEntriesTableT1", jsonScoreboardEntries); PlayerPrefs.SetString("ScoreboardEntriesTableTest", jsonScoreboardEntries);
PlayerPrefs.Save(); PlayerPrefs.Save();
} }

View File

@ -7,8 +7,8 @@ public class ScoreboardView : BaseView
[SerializeField] private Button backButton; [SerializeField] private Button backButton;
[SerializeField] private PlayerScoreboardCard cardPrefab; [SerializeField] private PlayerScoreboardCard cardPrefab;
private VerticalLayoutGroup layoutGroup; private VerticalLayoutGroup layoutGroup;
private readonly Dictionary<string,PlayerScoreboardCard> playerCards = new Dictionary<string, PlayerScoreboardCard>(); //private readonly Dictionary<string,PlayerScoreboardCard> playerCards = new Dictionary<string, PlayerScoreboardCard>();
private readonly List<PlayerScoreboardCard> playerCards = new List<PlayerScoreboardCard>();
public override void Init() public override void Init()
{ {
base.Init(); base.Init();
@ -29,27 +29,27 @@ public class ScoreboardView : BaseView
private void AddPlayerCard(PlayerScoreboardCardData cardData) private void AddPlayerCard(PlayerScoreboardCardData cardData)
{ {
if (playerCards.ContainsKey(cardData.playerName)) //if (playerCards.ContainsKey(cardData.playerName))
return; // return;
PlayerScoreboardCard playerScoreboardCard = Instantiate(cardPrefab); PlayerScoreboardCard playerScoreboardCard = Instantiate(cardPrefab);
playerScoreboardCard.transform.SetParent(layoutGroup.transform, false); playerScoreboardCard.transform.SetParent(layoutGroup.transform, false);
playerScoreboardCard.UpdateCard(cardData); playerScoreboardCard.UpdateCard(cardData);
playerCards.Add(cardData.playerName, playerScoreboardCard); playerCards.Add(playerScoreboardCard);
} }
public void RemovePlayerCard(string cardTag) public void RemovePlayerCard(string cardTag)
{ {
if (playerCards.ContainsKey(cardTag)) //if (playerCards.ContainsKey(cardTag))
{ //{
playerCards.TryGetValue(cardTag, out PlayerScoreboardCard playerScoreboardCard); //playerCards.TryGetValue(cardTag, out PlayerScoreboardCard playerScoreboardCard);
playerScoreboardCard.gameObject.SetActive(false); //TODO: Pooling //playerScoreboardCard.gameObject.SetActive(false); //TODO: Pooling
playerCards.Remove(cardTag); //playerCards.Remove(cardTag);
} //}
} }
public void RefreshPlayerCard(PlayerScoreboardCardData cardData) public void RefreshPlayerCard(PlayerScoreboardCardData cardData)
{ {
if (playerCards.TryGetValue(cardData.playerName, out PlayerScoreboardCard card)) //if (playerCards.TryGetValue(cardData.playerName, out PlayerScoreboardCard card))
card.UpdateCard(cardData); // card.UpdateCard(cardData);
} }
} }