Newer
Older
DungeonShooting / DungeonShooting_Godot / src / config / ExcelConfig_WeaponBase.cs
using System.Text.Json.Serialization;
using System.Collections.Generic;

namespace Config;

public static partial class ExcelConfig
{
    public partial class WeaponBase
    {
        /// <summary>
        /// 武器属性id
        /// </summary>
        [JsonInclude]
        public string Id;

        /// <summary>
        /// 备注
        /// </summary>
        [JsonInclude]
        public string Remark;

        /// <summary>
        /// 属性绑定武器的Id,这个id时ActivityBase表Id,如果是Ai使用的数据, 则填空字符串串
        /// </summary>
        public ActivityBase Activity;

        /// <summary>
        /// 重量
        /// </summary>
        [JsonInclude]
        public float Weight;

        /// <summary>
        /// 武器类型: <br/>
        /// 1.副武器 <br/>
        /// 2.主武器 <br/>
        /// 3.重型武器
        /// </summary>
        [JsonInclude]
        public byte WeightType;

        /// <summary>
        /// 标记是否是近战武器
        /// </summary>
        [JsonInclude]
        public bool IsMelee;

        /// <summary>
        /// 是否连续发射, 如果为false, 则每次发射都需要扣动扳机
        /// </summary>
        [JsonInclude]
        public bool ContinuousShoot;

        /// <summary>
        /// 弹夹容量
        /// </summary>
        [JsonInclude]
        public int AmmoCapacity;

        /// <summary>
        /// 弹药容量上限
        /// </summary>
        [JsonInclude]
        public int MaxAmmoCapacity;

        /// <summary>
        /// 默认起始备用弹药数量
        /// </summary>
        [JsonInclude]
        public int StandbyAmmoCapacity;

        /// <summary>
        /// 换弹是否显示换弹进度
        /// </summary>
        [JsonInclude]
        public bool ShowReloadBar;

        /// <summary>
        /// 弹夹打空是否自动换弹
        /// </summary>
        [JsonInclude]
        public bool AutoReload;

        /// <summary>
        /// 装弹时间 (单位: 秒)
        /// </summary>
        [JsonInclude]
        public float ReloadTime;

        /// <summary>
        /// 每粒子弹是否是单独装填, 如果是, 那么每上一发子弹的时间就是 ReloadTime, 可以做霰弹枪装填效果
        /// </summary>
        [JsonInclude]
        public bool AloneReload;

        /// <summary>
        /// 单独装填时每次装填子弹数量, 必须要将 'AloneReload' 属性设置为 true
        /// </summary>
        [JsonInclude]
        public int AloneReloadCount;

        /// <summary>
        /// 单独装弹模式下,从触发装弹到开始装第一发子弹中间的间隔时间, 必须要将 'AloneReload' 属性设置为 true
        /// </summary>
        [JsonInclude]
        public float AloneReloadBeginIntervalTime;

        /// <summary>
        /// 单独装弹模式下,从装完最后一发子弹到可以射击中间的间隔时间, 必须要将 'AloneReload' 属性设置为 true
        /// </summary>
        [JsonInclude]
        public float AloneReloadFinishIntervalTime;

        /// <summary>
        /// 单独装填的子弹时可以立即射击, 必须要将 'AloneReload' 属性设置为 true
        /// </summary>
        [JsonInclude]
        public bool AloneReloadCanShoot;

        /// <summary>
        /// 是否为松发开火, 也就是松开扳机才开火, 若要启用该属性, 必须将 'ContinuousShoot' 设置为 false
        /// </summary>
        [JsonInclude]
        public bool LooseShoot;

        /// <summary>
        /// 最少需要蓄力多久才能开火, 必须将 'LooseShoot' 设置为 true
        /// </summary>
        [JsonInclude]
        public float MinChargeTime;

        /// <summary>
        /// 单次射击后是否需要手动上膛动作, 必须将 'ContinuousShoot' 设置为 false
        /// </summary>
        [JsonInclude]
        public bool ManualBeLoaded;

        /// <summary>
        /// 手动上膛模式下, 单次射击后是否自动执行上膛操作, 必须将 'ManualBeLoaded' 设置为 true
        /// </summary>
        [JsonInclude]
        public bool AutoManualBeLoaded;

        /// <summary>
        /// 上膛时间, 如果时间为0, 则不会播放上膛动画和音效, 可以视为没有上膛动作, 必须将 'ManualBeLoaded' 设置为 true
        /// </summary>
        [JsonInclude]
        public float BeLoadedTime;

        /// <summary>
        /// 连续发射次数区间, 仅当 'ContinuousShoot' 为 false 时生效 <br/>
        /// 格式为[value]或者[min,max]
        /// </summary>
        [JsonInclude]
        public int[] ContinuousCountRange;

        /// <summary>
        /// 按下一次扳机后需要多长时间才能再次感应按下
        /// </summary>
        [JsonInclude]
        public float TriggerInterval;

        /// <summary>
        /// 初始射速, 初始每分钟能开火次数
        /// </summary>
        [JsonInclude]
        public float StartFiringSpeed;

        /// <summary>
        /// 最终射速, 最终每分钟能开火次数, 仅当 'ContinuousShoot' 为 true 时生效
        /// </summary>
        [JsonInclude]
        public float FinalFiringSpeed;

        /// <summary>
        /// 按下扳机并开火后射速每秒增加量
        /// </summary>
        [JsonInclude]
        public float FiringSpeedAddSpeed;

        /// <summary>
        /// 松开扳机后射速消散速率
        /// </summary>
        [JsonInclude]
        public float FiringSpeedBackSpeed;

        /// <summary>
        /// 松开扳机后射速消散开始时间, 单位: 秒
        /// </summary>
        [JsonInclude]
        public float FiringSpeedBackTime;

        /// <summary>
        /// 单次开火发射子弹数量区间 <br/>
        /// 格式为[value]或者[min,max]
        /// </summary>
        [JsonInclude]
        public int[] FireBulletCountRange;

        /// <summary>
        /// 从按下扳机到发射第一发子弹的延时时, 如果中途松开扳机, 那么延时时间会重新计算, 必须将 'LooseShoot' 设置为 false
        /// </summary>
        [JsonInclude]
        public float DelayedTime;

        /// <summary>
        /// 初始散射半径
        /// </summary>
        [JsonInclude]
        public float StartScatteringRange;

        /// <summary>
        /// 最终散射半径
        /// </summary>
        [JsonInclude]
        public float FinalScatteringRange;

        /// <summary>
        /// 每次发射后散射增加值
        /// </summary>
        [JsonInclude]
        public float ScatteringRangeAddValue;

        /// <summary>
        /// 散射值销退速率
        /// </summary>
        [JsonInclude]
        public float ScatteringRangeBackSpeed;

        /// <summary>
        /// 开始销退散射值的延时时间
        /// </summary>
        [JsonInclude]
        public float ScatteringRangeBackDelayTime;

        /// <summary>
        /// 开火后相机抖动强度,只有玩家拾起武器开火才会抖动相机
        /// </summary>
        [JsonInclude]
        public float CameraShake;

        /// <summary>
        /// 后坐力区间 (仅用于开火后武器身抖动) <br/>
        /// 格式为[value]或者[min,max]
        /// </summary>
        [JsonInclude]
        public float[] BacklashRange;

        /// <summary>
        /// 后坐力偏移回归回归速度
        /// </summary>
        [JsonInclude]
        public float BacklashRegressionSpeed;

        /// <summary>
        /// 开火后武器口上抬角度
        /// </summary>
        [JsonInclude]
        public float UpliftAngle;

        /// <summary>
        /// 武器默认上抬角度
        /// </summary>
        [JsonInclude]
        public float DefaultAngle;

        /// <summary>
        /// 开火后武器口角度恢复速度倍数
        /// </summary>
        [JsonInclude]
        public float UpliftAngleRestore;

        /// <summary>
        /// 开火特效, 该特效脚本必须实现IEffect接口
        /// </summary>
        [JsonInclude]
        public string FireEffect;

        /// <summary>
        /// 默认射出的子弹
        /// </summary>
        public BulletBase Bullet;

        /// <summary>
        /// 默认抛出的弹壳
        /// </summary>
        public ActivityBase Shell;

        /// <summary>
        /// 是否在换弹时才抛弹壳
        /// </summary>
        [JsonInclude]
        public bool ReloadThrowShell;

        /// <summary>
        /// 抛壳数量
        /// </summary>
        [JsonInclude]
        public int ThrowShellCount;

        /// <summary>
        /// 投抛弹壳的延时时间
        /// </summary>
        [JsonInclude]
        public float ThrowShellDelayTime;

        /// <summary>
        /// 是否可以触发近战攻击
        /// </summary>
        [JsonInclude]
        public bool CanMeleeAttack;

        /// <summary>
        /// 近战攻击伤害区间 <br/>
        /// 格式为格式为[value]或者[min,max]
        /// </summary>
        [JsonInclude]
        public int[] MeleeAttackHarmRange;

        /// <summary>
        /// 近战攻击造成伤害后击退值区间 <br/>
        /// 格式为[value]或者[min,max]
        /// </summary>
        [JsonInclude]
        public float[] MeleeAttackRepelRange;

        /// <summary>
        /// 射击音效
        /// </summary>
        public Sound ShootSound;

        /// <summary>
        /// 开始换弹音效
        /// </summary>
        public Sound BeginReloadSound;

        /// <summary>
        /// 开始换弹音效延时时间
        /// </summary>
        [JsonInclude]
        public float BeginReloadSoundDelayTime;

        /// <summary>
        /// 换弹音效,单独装弹时也会出发
        /// </summary>
        public Sound ReloadSound;

        /// <summary>
        /// 换弹音效延时时间
        /// </summary>
        [JsonInclude]
        public float ReloadSoundDelayTime;

        /// <summary>
        /// 换弹结束音效
        /// </summary>
        public Sound ReloadFinishSound;

        /// <summary>
        /// 换弹结束音效在换弹结束前多久开始 <br/>
        /// 注意: 如果'AloneReload'为true, 那么当前属性的值应该小于'AloneReloadFinishIntervalTime'
        /// </summary>
        [JsonInclude]
        public float ReloadFinishSoundAdvanceTime;

        /// <summary>
        /// 上膛音效
        /// </summary>
        public Sound BeLoadedSound;

        /// <summary>
        /// 上膛音效延时时间, 这个时间应该小于'BeLoadedTime'
        /// </summary>
        [JsonInclude]
        public float BeLoadedSoundDelayTime;

        /// <summary>
        /// 其他音效
        /// </summary>
        public Dictionary<string, Sound> OtherSoundMap;

        /// <summary>
        /// Ai使用该武器开火时的一些额外配置属性 <br/>
        /// 玩家使用的武器不需要填写该字段
        /// </summary>
        public AiAttackAttr AiAttackAttr;

        /// <summary>
        /// 返回浅拷贝出的新对象
        /// </summary>
        public WeaponBase Clone()
        {
            var inst = new WeaponBase();
            inst.Id = Id;
            inst.Remark = Remark;
            inst.Activity = Activity;
            inst.Weight = Weight;
            inst.WeightType = WeightType;
            inst.IsMelee = IsMelee;
            inst.ContinuousShoot = ContinuousShoot;
            inst.AmmoCapacity = AmmoCapacity;
            inst.MaxAmmoCapacity = MaxAmmoCapacity;
            inst.StandbyAmmoCapacity = StandbyAmmoCapacity;
            inst.ShowReloadBar = ShowReloadBar;
            inst.AutoReload = AutoReload;
            inst.ReloadTime = ReloadTime;
            inst.AloneReload = AloneReload;
            inst.AloneReloadCount = AloneReloadCount;
            inst.AloneReloadBeginIntervalTime = AloneReloadBeginIntervalTime;
            inst.AloneReloadFinishIntervalTime = AloneReloadFinishIntervalTime;
            inst.AloneReloadCanShoot = AloneReloadCanShoot;
            inst.LooseShoot = LooseShoot;
            inst.MinChargeTime = MinChargeTime;
            inst.ManualBeLoaded = ManualBeLoaded;
            inst.AutoManualBeLoaded = AutoManualBeLoaded;
            inst.BeLoadedTime = BeLoadedTime;
            inst.ContinuousCountRange = ContinuousCountRange;
            inst.TriggerInterval = TriggerInterval;
            inst.StartFiringSpeed = StartFiringSpeed;
            inst.FinalFiringSpeed = FinalFiringSpeed;
            inst.FiringSpeedAddSpeed = FiringSpeedAddSpeed;
            inst.FiringSpeedBackSpeed = FiringSpeedBackSpeed;
            inst.FiringSpeedBackTime = FiringSpeedBackTime;
            inst.FireBulletCountRange = FireBulletCountRange;
            inst.DelayedTime = DelayedTime;
            inst.StartScatteringRange = StartScatteringRange;
            inst.FinalScatteringRange = FinalScatteringRange;
            inst.ScatteringRangeAddValue = ScatteringRangeAddValue;
            inst.ScatteringRangeBackSpeed = ScatteringRangeBackSpeed;
            inst.ScatteringRangeBackDelayTime = ScatteringRangeBackDelayTime;
            inst.CameraShake = CameraShake;
            inst.BacklashRange = BacklashRange;
            inst.BacklashRegressionSpeed = BacklashRegressionSpeed;
            inst.UpliftAngle = UpliftAngle;
            inst.DefaultAngle = DefaultAngle;
            inst.UpliftAngleRestore = UpliftAngleRestore;
            inst.FireEffect = FireEffect;
            inst.Bullet = Bullet;
            inst.Shell = Shell;
            inst.ReloadThrowShell = ReloadThrowShell;
            inst.ThrowShellCount = ThrowShellCount;
            inst.ThrowShellDelayTime = ThrowShellDelayTime;
            inst.CanMeleeAttack = CanMeleeAttack;
            inst.MeleeAttackHarmRange = MeleeAttackHarmRange;
            inst.MeleeAttackRepelRange = MeleeAttackRepelRange;
            inst.ShootSound = ShootSound;
            inst.BeginReloadSound = BeginReloadSound;
            inst.BeginReloadSoundDelayTime = BeginReloadSoundDelayTime;
            inst.ReloadSound = ReloadSound;
            inst.ReloadSoundDelayTime = ReloadSoundDelayTime;
            inst.ReloadFinishSound = ReloadFinishSound;
            inst.ReloadFinishSoundAdvanceTime = ReloadFinishSoundAdvanceTime;
            inst.BeLoadedSound = BeLoadedSound;
            inst.BeLoadedSoundDelayTime = BeLoadedSoundDelayTime;
            inst.OtherSoundMap = OtherSoundMap;
            inst.AiAttackAttr = AiAttackAttr;
            return inst;
        }
    }
    private class Ref_WeaponBase : WeaponBase
    {
        [JsonInclude]
        public string __Activity;

        [JsonInclude]
        public string __Bullet;

        [JsonInclude]
        public string __Shell;

        [JsonInclude]
        public string __ShootSound;

        [JsonInclude]
        public string __BeginReloadSound;

        [JsonInclude]
        public string __ReloadSound;

        [JsonInclude]
        public string __ReloadFinishSound;

        [JsonInclude]
        public string __BeLoadedSound;

        [JsonInclude]
        public Dictionary<string, string> __OtherSoundMap;

        [JsonInclude]
        public string __AiAttackAttr;

    }
}