Scripts/Managers/IdleManager.cs
using System;
using Milaine.Interfaces;
using Milaine.Room;
namespace Milaine.Managers;
public sealed class IdleManager : Component, IManager {
public const int DEFAULT_POINT = 1;
[Property, Title("DayNightManager")]
[Feature("Managers")]
public DayNightManager DayNightManagerInstance { get; set; }
[Property]
[Feature("General")]
public bool IsDayEnded { get; set; } = false;
[Property, Group("ClickableButton")]
[Feature("General")]
public ClickableButton ClickableButtonInstance { get; set; }
[Property, Group("Goals")]
[Feature("Milaine")]
public int Goal { get; set; } = 1_000_000;
private int dollars = 0;
private int point = DEFAULT_POINT;
private float acc = 0f;
private bool isActivedPasiveDollar = false;
private int pasiveDollarsAmount = 0;
private int dollarsSpent = 0;
public Action<int, int> OnChange { get; set; }
public Action OnDeposit { get; set; }
public int Dollars {
get => dollars;
set {
dollars = value;
OnChange?.Invoke(dollars, point);
}
}
public int DollarsSpent {
get => dollarsSpent;
set {
dollarsSpent = value;
}
}
public int Point {
get => point;
}
protected override void OnAwake() {
DayNightManagerInstance.OnStartDay += DayStartSubscription;
DayNightManagerInstance.OnEndDay += DayNightSubscription;
ClickableButtonInstance.OnPressed += GenerateDollar;
}
protected override void OnUpdate() {
if (IsDayEnded) {
return;
}
acc += Time.Delta;
if (acc >= 1.0f) {
if (isActivedPasiveDollar) {
dollars += pasiveDollarsAmount;
OnChange?.Invoke(dollars, pasiveDollarsAmount);
}
acc = 0;
}
}
protected override void OnDestroy() {
DayNightManagerInstance.OnStartDay -= DayStartSubscription;
DayNightManagerInstance.OnEndDay -= DayNightSubscription;
ClickableButtonInstance.OnPressed -= GenerateDollar;
}
private void DayNightSubscription() {
IsDayEnded = true;
}
private void DayStartSubscription() {
IsDayEnded = false;
dollarsSpent = 0;
}
public void GenerateDollar() {
dollars += point;
OnChange?.Invoke(dollars, point);
}
public void Deposit() {
dollars = 0;
OnDeposit?.Invoke();
}
public void ImprovePasiveDollar(float amount) {
if (!isActivedPasiveDollar) {
isActivedPasiveDollar = true;
}
ImprovePasiveDollar((int)amount);
}
private void ImprovePasiveDollar(int amount) {
pasiveDollarsAmount = amount;
}
public void ImprovePoint(float amount) {
ImprovePoint((int)amount);
}
private void ImprovePoint(int amount) {
point += amount;
}
public void ImproveDollars(float amount) {
ImproveDollars((int)amount);
}
private void ImproveDollars(int amount) {
dollars += amount;
}
public void Restart() {
point = DEFAULT_POINT;
isActivedPasiveDollar = false;
dollars = 0;
dollarsSpent = 0;
}
}