2025-05-13 19:22:01 +08:00

97 lines
2.7 KiB
C#

using System.Collections.Generic;
using System.ComponentModel;
using Godot;
using Godot.Bridge;
using Godot.NativeInterop;
[ScriptPath("res://Scripts/Bullets/FoxBombs.cs")]
public partial class FoxBombs : Node2D
{
[Export(PropertyHint.None, "")]
private Node2D[] bullets;
[Export(PropertyHint.None, "")]
private float cooldown = 45f;
[Export(PropertyHint.None, "")]
private float variance;
[Export(PropertyHint.None, "")]
private float height = 20f;
[Export(PropertyHint.None, "")]
private float fallSpeed = 0.025f;
[Export(PropertyHint.None, "")]
private AudioStream bellNoise;
[Export(PropertyHint.None, "")]
private AudioStream explosion;
private List<Node2D> bells = new List<Node2D>();
private List<float> speed = new List<float>();
private float cd;
private float floor;
public override void _EnterTree()
{
if (BattleDR.current.enemies[0].HPPercent() < 0.6f || BattleDR.current.enemies[0].spare > 50)
{
cooldown *= 0.5f;
}
floor = BattleDR.current.activeBoard.boardSize.Y / 2f - 5f;
}
public override void _Process(double delta)
{
if (cd <= 0f)
{
bells.Add((Node2D)bullets[0].Duplicate());
speed.Add(0f);
cd = cooldown + Main.RandomRange(0f - variance, variance);
Audio.PlaySound(bellNoise);
List<Node2D> list = bells;
AddChild(list[list.Count - 1], forceReadableName: false, InternalMode.Disabled);
List<Node2D> list2 = bells;
list2[list2.Count - 1].Modulate = Main.colorClear;
List<Node2D> list3 = bells;
list3[list3.Count - 1].ProcessMode = ProcessModeEnum.Inherit;
List<Node2D> list4 = bells;
list4[list4.Count - 1].Position = new Vector2(Main.RandomRange((0f - BattleDR.current.activeBoard.boardSize.X) / 2f, BattleDR.current.activeBoard.boardSize.X / 2f) * 0.9f, (0f - BattleDR.current.activeBoard.boardSize.Y) / 2f - height);
}
else
{
cd -= Main.deltaTime;
}
if (bells.Count <= 0)
{
return;
}
for (int num = bells.Count - 1; num >= 0; num--)
{
speed[num] += fallSpeed * Main.deltaTime;
bells[num].Position += Vector2.Down * speed[num];
bells[num].Modulate = bells[num].Modulate.Lerp(Main.colorWhite, Main.deltaTime * 0.15f);
if (bells[num].Position.Y > floor)
{
CameraController.Shake(10f, 2f);
Audio.PlaySound(explosion);
Node2D node2D;
AddChild(node2D = (Node2D)bullets[1].Duplicate(), forceReadableName: false, InternalMode.Disabled);
node2D.Position = bells[num].Position;
node2D.ProcessMode = ProcessModeEnum.Inherit;
AddChild(node2D = (Node2D)bullets[2].Duplicate(), forceReadableName: false, InternalMode.Disabled);
node2D.Position = bells[num].Position;
node2D.ProcessMode = ProcessModeEnum.Inherit;
bells[num].QueueFree();
bells.RemoveAt(num);
speed.RemoveAt(num);
}
}
}
}