feat: load system

This commit is contained in:
Gerard Gascón 2024-04-17 00:37:39 +02:00
parent 5d470a57af
commit 60d20bfe4e
20 changed files with 421 additions and 67 deletions

View file

@ -15,15 +15,23 @@
GrowIterations = growIterations;
}
public void SetFromOtherScore(Score other) {
Value = other.Value;
UpdateGrowPercentage();
}
public void Add() {
Value++;
UpdateGrowPercentage();
}
if (Value % GrowIterations == 0) {
float relativeScore = Value % (GrowIterations * SpawnRate);
if (relativeScore == 0 && Value != 0)
relativeScore = GrowIterations * SpawnRate;
GrowPercentage = relativeScore / (SpawnRate * GrowIterations);
}
private void UpdateGrowPercentage() {
int value = Value % GrowIterations == 0 ? Value : Value / GrowIterations * GrowIterations;
float relativeScore = value % (GrowIterations * SpawnRate);
if (relativeScore == 0 && value != 0)
relativeScore = GrowIterations * SpawnRate;
GrowPercentage = relativeScore / (SpawnRate * GrowIterations);
}
}
}

View file

@ -16,7 +16,7 @@ namespace Presenter {
public void Execute() {
_score.Add();
_view.UpdateView(_score.Value);
_view.UpdateView(_score.Value, _score.GrowPercentage);
if (CanSpawn)
_spawner.SpawnRose();

View file

@ -1,5 +1,5 @@
namespace Presenter {
public interface IExpressionInput {
void UpdateView(int score);
void UpdateView(int score, float growPercentage);
}
}

View file

@ -0,0 +1,16 @@
using Domain;
using Presenter.SaveSystem;
using UnityEngine;
namespace Presenter {
public class PlayerPrefsRepository : IGameRepository {
public void SaveScore(Score score) {
PlayerPrefs.SetInt("Score", score.Value);
}
public Score LoadScore() {
int score = PlayerPrefs.GetInt("Score", 0);
return new Score(score, 0, 0);
}
}
}

View file

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 8dce8a5ed9294a1283494fef143729a4
timeCreated: 1713305716

View file

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: f18e98c111ab4c0fa067e9a5039254a7
timeCreated: 1713304989

View file

@ -0,0 +1,8 @@
using Domain;
namespace Presenter.SaveSystem {
public interface IGameRepository {
void SaveScore(Score score);
Score LoadScore();
}
}

View file

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 66c3464d602142f5813956378a7071bb
timeCreated: 1713305003

View file

@ -0,0 +1,21 @@
using Domain;
namespace Presenter.SaveSystem {
public class LoadGame {
private readonly IGameRepository _repository;
private readonly Score _score;
private readonly IExpressionInput _expressionInput;
public LoadGame(IGameRepository repository, Score score, IExpressionInput expressionInput) {
_repository = repository;
_score = score;
_expressionInput = expressionInput;
}
public void Run() {
Score newScore = _repository.LoadScore();
_score.SetFromOtherScore(newScore);
_expressionInput.UpdateView(_score.Value, _score.GrowPercentage);
}
}
}

View file

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 3e87dd4026b94e5e90ce9d2163026446
timeCreated: 1713305374

View file

@ -0,0 +1,17 @@
using Domain;
namespace Presenter.SaveSystem {
public class SaveGame {
private readonly IGameRepository _repository;
private readonly Score _score;
public SaveGame(IGameRepository repository, Score score) {
_repository = repository;
_score = score;
}
public void Run() {
_repository.SaveScore(_score);
}
}
}

View file

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: c1e36f7baa3d4eccb7073f6b4b803621
timeCreated: 1713305232

View file

@ -1,6 +1,7 @@
using System;
using Domain;
using Presenter;
using Presenter.SaveSystem;
using UnityEngine;
using View.UI;
@ -10,6 +11,9 @@ namespace View {
public Score Score { private set; get; }
public CustomInput CustomInput { private set; get; }
public SaveGame Saver { private set; get; }
public LoadGame Loader { private set; get; }
private void Awake() {
Score = new Score(20, 5);
@ -22,6 +26,10 @@ namespace View {
ExpressionClick = new ExpressionClick(Score, inputCollections, spawner);
CustomInput = new CustomInput();
PlayerPrefsRepository repository = new();
Saver = new SaveGame(repository, Score);
Loader = new LoadGame(repository, Score, inputCollections);
}
}
}

View file

@ -8,9 +8,9 @@ namespace View {
_inputs = inputs;
}
public void UpdateView(int score) {
public void UpdateView(int score, float growPercentage) {
foreach (IExpressionInput input in _inputs)
input.UpdateView(score);
input.UpdateView(score, growPercentage);
}
}
}

View file

@ -0,0 +1,12 @@
using UnityEngine;
namespace View {
public class SaveLoad : MonoBehaviour {
private void Start() => LoadGame();
private void LoadGame() => FindObjectOfType<Dependencies>().Loader.Run();
private void SaveGame() => FindObjectOfType<Dependencies>().Saver.Run();
private void OnApplicationQuit() => SaveGame();
}
}

View file

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 3c6dab5fe816434381b975fd75b667fc
timeCreated: 1713306082

View file

@ -11,13 +11,10 @@ namespace View.UI {
private ExpressionClick _click;
private CustomInput _customInput;
private Score _score;
[SerializeField] private FramedAnimator.FramedAnimator animator;
private void Start() {
_score = FindObjectOfType<Dependencies>().Score;
_click = FindObjectOfType<Dependencies>().ExpressionClick;
_customInput = FindObjectOfType<Dependencies>().CustomInput;
}
@ -26,8 +23,8 @@ namespace View.UI {
CheckInput();
}
public void UpdateView(int score) {
animator.PlayUntil(_score.GrowPercentage);
public void UpdateView(int score, float growPercentage) {
animator.PlayUntil(growPercentage);
text.text = score.ToString();
}

View file

@ -31,7 +31,7 @@ namespace View.UI {
}
}
public void UpdateView(int score) {
public void UpdateView(int score, float growPercentage) {
if (!_titleVisible) return;
_titleVisible = false;