75 lines
2.6 KiB
C#
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}";
|
|
}
|
|
} |