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

File diff suppressed because one or more lines are too long

View file

@ -2392,6 +2392,50 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1488567635} m_GameObject: {fileID: 1488567635}
m_CullTransparentMesh: 1 m_CullTransparentMesh: 1
--- !u!1 &1524010032
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1524010034}
- component: {fileID: 1524010033}
m_Layer: 0
m_Name: SaveLoad
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &1524010033
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1524010032}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3c6dab5fe816434381b975fd75b667fc, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!4 &1524010034
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1524010032}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1631011313 --- !u!1 &1631011313
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -3418,3 +3462,4 @@ SceneRoots:
- {fileID: 1652443528} - {fileID: 1652443528}
- {fileID: 902566663} - {fileID: 902566663}
- {fileID: 4783506} - {fileID: 4783506}
- {fileID: 1524010034}

View file

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

View file

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

View file

@ -1,5 +1,5 @@
namespace Presenter { namespace Presenter {
public interface IExpressionInput { 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 System;
using Domain; using Domain;
using Presenter; using Presenter;
using Presenter.SaveSystem;
using UnityEngine; using UnityEngine;
using View.UI; using View.UI;
@ -10,6 +11,9 @@ namespace View {
public Score Score { private set; get; } public Score Score { private set; get; }
public CustomInput CustomInput { private set; get; } public CustomInput CustomInput { private set; get; }
public SaveGame Saver { private set; get; }
public LoadGame Loader { private set; get; }
private void Awake() { private void Awake() {
Score = new Score(20, 5); Score = new Score(20, 5);
@ -22,6 +26,10 @@ namespace View {
ExpressionClick = new ExpressionClick(Score, inputCollections, spawner); ExpressionClick = new ExpressionClick(Score, inputCollections, spawner);
CustomInput = new CustomInput(); 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; _inputs = inputs;
} }
public void UpdateView(int score) { public void UpdateView(int score, float growPercentage) {
foreach (IExpressionInput input in _inputs) 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 ExpressionClick _click;
private CustomInput _customInput; private CustomInput _customInput;
private Score _score;
[SerializeField] private FramedAnimator.FramedAnimator animator; [SerializeField] private FramedAnimator.FramedAnimator animator;
private void Start() { private void Start() {
_score = FindObjectOfType<Dependencies>().Score;
_click = FindObjectOfType<Dependencies>().ExpressionClick; _click = FindObjectOfType<Dependencies>().ExpressionClick;
_customInput = FindObjectOfType<Dependencies>().CustomInput; _customInput = FindObjectOfType<Dependencies>().CustomInput;
} }
@ -26,8 +23,8 @@ namespace View.UI {
CheckInput(); CheckInput();
} }
public void UpdateView(int score) { public void UpdateView(int score, float growPercentage) {
animator.PlayUntil(_score.GrowPercentage); animator.PlayUntil(growPercentage);
text.text = score.ToString(); 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; if (!_titleVisible) return;
_titleVisible = false; _titleVisible = false;