Files
parasitic-god/Scenes/Main/Main.cs

75 lines
2.6 KiB
C#

using Godot;
using ParasiticGod.Scripts.Core;
using ParasiticGod.Scripts.Singletons;
namespace ParasiticGod.Scenes.Main;
public partial class Main : Node
{
[Export] private Label _faithLabel;
[Export] private Label _followersLabel;
[Export] private Label _corruptionLabel;
[Export] private Label _productionLabel;
[Export] private MiraclePanel _miraclePanel;
[Export] private Sprite2D _worldSprite;
[Export] private Color _deadWorldColor = new("#581845");
public override void _Ready()
{
GameBus.Instance.SubscribeToStat(Stat.Faith, UpdateFaithLabel);
GameBus.Instance.SubscribeToStat(Stat.Followers, UpdateFollowersLabel);
GameBus.Instance.SubscribeToStat(Stat.Corruption, UpdateCorruptionLabel);
GameBus.Instance.SubscribeToStat(Stat.Production, UpdateProductionLabel);
_miraclePanel.PopulateInitialButtons(GameBus.Instance.AllMiracles);
GameBus.Instance.StateChanged += OnStateChanged;
UpdateFaithLabel(GameBus.Instance.CurrentState.Get(Stat.Faith));
UpdateFollowersLabel(GameBus.Instance.CurrentState.Get(Stat.Followers));
UpdateCorruptionLabel(GameBus.Instance.CurrentState.Get(Stat.Corruption));
UpdateProductionLabel(GameBus.Instance.CurrentState.Get(Stat.Production));
}
public override void _ExitTree()
{
GameBus.Instance.UnsubscribeFromStat(Stat.Faith, UpdateFaithLabel);
GameBus.Instance.UnsubscribeFromStat(Stat.Followers, UpdateFollowersLabel);
GameBus.Instance.UnsubscribeFromStat(Stat.Corruption, UpdateCorruptionLabel);
GameBus.Instance.UnsubscribeFromStat(Stat.Production, UpdateProductionLabel);
GameBus.Instance.StateChanged -= OnStateChanged;
}
private void OnStateChanged(GameState newState)
{
UpdateWorldVisuals(newState.Get(Stat.Corruption));
}
private void UpdateWorldVisuals(double corruption)
{
if (_worldSprite.Material is not ShaderMaterial shaderMaterial) return;
var ratio = (float)corruption / 100.0f;
shaderMaterial.SetShaderParameter("corruption_level", ratio);
}
private void UpdateFaithLabel(double newValue)
{
_faithLabel.Text = $"Faith: {newValue:F0}";
}
private void UpdateFollowersLabel(double newValue)
{
_followersLabel.Text = $"Followers: {newValue:F0}";
}
private void UpdateCorruptionLabel(double newValue)
{
_corruptionLabel.Text = $"Corruption: {newValue:F0}%";
}
private void UpdateProductionLabel(double production)
{
_productionLabel.Text = $"Production: {production:F0}";
}
}