using System.Collections.Generic; using System.Linq; using Cirno.Scripts.Components; using Godot; using Godot.Collections; namespace Cirno.Scripts.Resources; [GlobalClass] public partial class WeaponResource : Resource { [Export] public string Name { get; set; } [Export] public PackedScene BulletScene { get; set; } [Export] public double RateOfFire = 0.4f; [Export] public int BulletCapacity = 20; [Export] public double ReloadTime = 1.0f; [Export] public bool AutoReload = true; [Export] public bool InfiniteAmmo = true; [Export] public int BulletsPerShot = 1; [Export] public float SpreadAngle = 0f; [Export] public float RandomSpread = 0f; #region Bullet spawn data [Export] public string AmmoKey; [Export] public float BulletSpeed = 100f; [Export] public float BulletDamage = 1; [Export] public float LifeTime = 10f; [Export] private float _rotationOffset = 0f; [Export] private BulletOwner owner = BulletOwner.None; [Export] private DamageType _damageType = DamageType.Neutral; [Export] private Resource _modifier; [Export] private Array _timeModifiers; #endregion public BulletInfo MakeBullet(Vector2 position) { return new BulletInfo() { Position = position, Direction = Vector2.Right, Speed = BulletSpeed, Owner = owner, DamageType = _damageType, Damage = BulletDamage, BulletCount = BulletsPerShot, Spread = SpreadAngle, BulletScene = BulletScene, RotationOffset = _rotationOffset, Modifier = _modifier as IBulletModifier, LifeTime = LifeTime, TimeModifiers = _timeModifiers?.Where(mod => mod is TimeModifier).Cast().ToList() ?? new List() }; } }