newlon/scripts/projectiles/Sun.cs
2025-07-28 05:33:09 +05:00

61 lines
1.7 KiB
C#

using Godot;
using Newlon.Components.GUI;
using Newlon.Components.Level;
namespace Newlon.Projectiles;
public partial class Sun : Area2D
{
[Export] public int amount = 25;
[Export] private Timer _deathTimer;
[Export] private AnimationPlayer _rotation;
[Export] private AnimationPlayer _fade;
private bool scoring;
public override void _Ready()
{
_rotation.SpeedScale = 1.0f + GD.Randf() / 2.0f;
}
public override void _InputEvent(Viewport viewport, InputEvent @event, int shapeIdx)
{
if (Settings.SunClick == false || scoring) return;
if (@event.IsActionPressed("primary_action"))
{
GetViewport().SetInputAsHandled();
ScoreSun();
}
}
public override void _Process(double delta)
{
if (scoring) return;
if (_deathTimer.TimeLeft / _deathTimer.WaitTime <= 0.25)
{
_fade.Play("main");
}
}
public override void _MouseEnter()
{
if (Settings.SunClick || scoring) return;
ScoreSun();
}
private void ScoreSun()
{
_fade.Stop();
scoring = true;
RuntimeLevelData.Instance.AddSun(amount,false);
GetNode<ChannelPlayer>("SunPlayer").Play();
var tween = CreateTween();
tween.TweenProperty(this, "global_position", GetCanvasTransform().AffineInverse() * (SunCounter.Instance.sunImage.GlobalPosition + SunCounter.Instance.sunImage.PivotOffset), 0.5).SetTrans(Tween.TransitionType.Cubic).SetEase(Tween.EaseType.Out);
tween.TweenCallback(Callable.From(() =>
{
SunCounter.Update();
QueueFree();
}));
}
}