using Godot; using GodotHostTest.GodotDI; using GodotHostTest.Helpers; using GodotHostTest.Interfaces; using R3; namespace GodotHostTest.Game; public partial class Score : Control, IScore { [Inject] private readonly IValueGetter _targetSpawner = null!; [Export] private AnimationPlayer _animationPlayer = null!; [Export] private Label _label = null!; private int _score; int IScore.Score => _score; public override void _Ready() { _targetSpawner.Value.TargetSpawned.Subscribe(OnTargetSpawned).AddTo(this); base._Ready(); } private void OnTargetSpawned(ITarget target) { _animationPlayer.Play("wiggle"); target.Hit.Select(_ => 20).Merge(target.TimedOut.Select(_ => -5)).SubscribeOnce(delta => { _score += delta; UpdateScore(); }).AddTo(this); } private void UpdateScore() { _label.Text = $"Score: {_score}"; } }