using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using BITKit; namespace BITFALL.Guns { /// /// 射击模式的接口 /// public interface IFireMode { float FireRate { get; } } /// /// 后坐力接口定义 /// public interface IRecoil:IProperty { /// /// 后坐力的方向 /// Vector3 Recoil { get; } } [Serializable] [CustomType(typeof(IRecoil))] public struct VectorRecoil:IRecoil { [SerializeField] private Vector3 recoil; public Vector3 Recoil => recoil; } /// /// 射击模式的基类 /// public record FireMode : IFireMode { [SerializeField]protected float fireRate; public float FireRate => fireRate; } /// /// 自动开火模式 /// [System.Serializable] public record AutoFireMode : FireMode { } /// /// 半自动开火模式 /// [System.Serializable] public record SemiFireMode : FireMode { } /// /// 爆炸射击模式 BurstRound为爆炸开火时一次发射的子弹数量 /// /// [System.Serializable] public record BurstFireMode : FireMode { [SerializeField] protected int brustRound; [SerializeField] protected float burstFireInterval; public int BurstRound=> brustRound; public float BurstFireInterval => burstFireInterval; } /// /// 资产化武器配置 /// [System.Serializable] public record ArrowFireMode : FireMode { } public class AssetableGun : AssetableEquip { [Header(nameof(AssetableGun))] [SerializeReference, SubclassSelector] protected IFireMode fireMode; [SerializeField] private int initialDamage; [SerializeField] private int initialBulletForce; [SerializeField] private int initialBulletSpeed = 128; public IFireMode FireMode => fireMode; public int InitialBulletForce => initialBulletForce; public int InitialDamage => initialDamage; public int InitialBulletSpeed => initialBulletSpeed; } }