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 StringName Name { get; set; } [Export] public BulletResource BulletData { get; private set; } //[Export] //public PackedScene BulletScene { get; set; } //[Export] public PackedScene DestructionParticlesScene { 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 StringName ItemKey; [Export] public StringName AmmoKey; #region Bullet spawn data [ExportCategory("Bullet Spawn Data")] [Export] public int BulletsPerShot = 1; [Export] public float SpreadAngle = 0f; [Export] public float RandomSpread = 0f; //[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 [ExportCategory("Sounds")] [Export] public AudioStream ReloadSound { get; set; } [Export] public AudioStream ShootSound { get; set; } [Export] public AudioStream EmptySound { get; set; } public BulletInfo MakeBullet(Vector2 position) { return BulletData.MakeBullet(position, BulletsPerShot, SpreadAngle, _rotationOffset); // 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, // DestructionParticlesScene = DestructionParticlesScene, // TimeModifiers = _timeModifiers?.Where(mod => mod is TimeModifier).Cast().ToList() ?? // new List() // }; } }