Newer
Older
DungeonShooting / DungeonShooting_Godot / src / config / ExcelConfig_Weapon.cs
  1. using System.Text.Json.Serialization;
  2. using System.Collections.Generic;
  3.  
  4. namespace Config;
  5.  
  6. public static partial class ExcelConfig
  7. {
  8. public class Weapon
  9. {
  10. /// <summary>
  11. /// 武器属性id
  12. /// </summary>
  13. [JsonInclude]
  14. public string Id;
  15.  
  16. /// <summary>
  17. /// 属性绑定武器的Id,如果是Ai使用的数据, 则填空字符串串
  18. /// </summary>
  19. [JsonInclude]
  20. public string WeaponId;
  21.  
  22. /// <summary>
  23. /// 备注
  24. /// </summary>
  25. [JsonInclude]
  26. public string Remark;
  27.  
  28. /// <summary>
  29. /// 重量
  30. /// </summary>
  31. [JsonInclude]
  32. public float Weight;
  33.  
  34. /// <summary>
  35. /// 武器类型: <br/>
  36. /// 1.副武器 <br/>
  37. /// 2.主武器 <br/>
  38. /// 3.重型武器
  39. /// </summary>
  40. [JsonInclude]
  41. public byte WeightType;
  42.  
  43. /// <summary>
  44. /// 是否连续发射, 如果为false, 则每次发射都需要扣动扳机
  45. /// </summary>
  46. [JsonInclude]
  47. public bool ContinuousShoot;
  48.  
  49. /// <summary>
  50. /// 弹夹容量
  51. /// </summary>
  52. [JsonInclude]
  53. public int AmmoCapacity;
  54.  
  55. /// <summary>
  56. /// 弹药容量上限
  57. /// </summary>
  58. [JsonInclude]
  59. public int MaxAmmoCapacity;
  60.  
  61. /// <summary>
  62. /// 默认起始备用弹药数量
  63. /// </summary>
  64. [JsonInclude]
  65. public int StandbyAmmoCapacity;
  66.  
  67. /// <summary>
  68. /// 装弹时间 (单位: 秒)
  69. /// </summary>
  70. [JsonInclude]
  71. public float ReloadTime;
  72.  
  73. /// <summary>
  74. /// 每粒子弹是否是单独装填, 如果是, 那么每上一发子弹的时间就是 ReloadTime, 可以做霰弹枪装填效果
  75. /// </summary>
  76. [JsonInclude]
  77. public bool AloneReload;
  78.  
  79. /// <summary>
  80. /// 单独装填时每次装填子弹数量, 必须要将 'AloneReload' 属性设置为 true
  81. /// </summary>
  82. [JsonInclude]
  83. public int AloneReloadCount;
  84.  
  85. /// <summary>
  86. /// 单独装弹模式下,从触发装弹到开始装第一发子弹中间的间隔时间, 必须要将 'AloneReload' 属性设置为 true
  87. /// </summary>
  88. [JsonInclude]
  89. public float AloneReloadBeginIntervalTime;
  90.  
  91. /// <summary>
  92. /// 单独装弹模式下,从装完最后一发子弹到可以射击中间的间隔时间, 必须要将 'AloneReload' 属性设置为 true
  93. /// </summary>
  94. [JsonInclude]
  95. public float AloneReloadFinishIntervalTime;
  96.  
  97. /// <summary>
  98. /// 单独装填的子弹时可以立即射击, 必须要将 'AloneReload' 属性设置为 true
  99. /// </summary>
  100. [JsonInclude]
  101. public bool AloneReloadCanShoot;
  102.  
  103. /// <summary>
  104. /// 是否为松发开火, 也就是松开扳机才开火, 若要启用该属性, 必须将 'ContinuousShoot' 设置为 false
  105. /// </summary>
  106. [JsonInclude]
  107. public bool LooseShoot;
  108.  
  109. /// <summary>
  110. /// 最少需要蓄力多久才能开火, 必须将 'LooseShoot' 设置为 true
  111. /// </summary>
  112. [JsonInclude]
  113. public float MinChargeTime;
  114.  
  115. /// <summary>
  116. /// 单次射击后是否需要手动上膛动作, 必须将 'ContinuousShoot' 设置为 false
  117. /// </summary>
  118. [JsonInclude]
  119. public bool ManualBeLoaded;
  120.  
  121. /// <summary>
  122. /// 手动上膛模式下, 单次射击后是否自动执行上膛操作, 必须将 'ManualBeLoaded' 设置为 true
  123. /// </summary>
  124. [JsonInclude]
  125. public bool AutoManualBeLoaded;
  126.  
  127. /// <summary>
  128. /// 上膛时间, 如果时间为0, 则不会播放上膛动画和音效, 可以视为没有上膛动作, 必须将 'ManualBeLoaded' 设置为 true
  129. /// </summary>
  130. [JsonInclude]
  131. public float BeLoadedTime;
  132.  
  133. /// <summary>
  134. /// 连续发射次数区间, 仅当 'ContinuousShoot' 为 false 时生效 <br/>
  135. /// 格式为[value]或者[min,max]
  136. /// </summary>
  137. [JsonInclude]
  138. public int[] ContinuousCountRange;
  139.  
  140. /// <summary>
  141. /// 按下一次扳机后需要多长时间才能再次感应按下
  142. /// </summary>
  143. [JsonInclude]
  144. public float TriggerInterval;
  145.  
  146. /// <summary>
  147. /// 初始射速, 初始每分钟能开火次数
  148. /// </summary>
  149. [JsonInclude]
  150. public float StartFiringSpeed;
  151.  
  152. /// <summary>
  153. /// 最终射速, 最终每分钟能开火次数, 仅当 'ContinuousShoot' 为 true 时生效
  154. /// </summary>
  155. [JsonInclude]
  156. public float FinalFiringSpeed;
  157.  
  158. /// <summary>
  159. /// 按下扳机并开火后射速每秒增加量
  160. /// </summary>
  161. [JsonInclude]
  162. public float FiringSpeedAddSpeed;
  163.  
  164. /// <summary>
  165. /// 松开扳机后射速消散速率
  166. /// </summary>
  167. [JsonInclude]
  168. public float FiringSpeedBackSpeed;
  169.  
  170. /// <summary>
  171. /// 单次开火发射子弹数量区间 <br/>
  172. /// 格式为[value]或者[min,max]
  173. /// </summary>
  174. [JsonInclude]
  175. public int[] FireBulletCountRange;
  176.  
  177. /// <summary>
  178. /// 从按下扳机到发射第一发子弹的延时时, 如果中途松开扳机, 那么延时时间会重新计算, 必须将 'LooseShoot' 设置为 false
  179. /// </summary>
  180. [JsonInclude]
  181. public float DelayedTime;
  182.  
  183. /// <summary>
  184. /// 初始散射半径
  185. /// </summary>
  186. [JsonInclude]
  187. public float StartScatteringRange;
  188.  
  189. /// <summary>
  190. /// 最终散射半径
  191. /// </summary>
  192. [JsonInclude]
  193. public float FinalScatteringRange;
  194.  
  195. /// <summary>
  196. /// 每次发射后散射增加值
  197. /// </summary>
  198. [JsonInclude]
  199. public float ScatteringRangeAddValue;
  200.  
  201. /// <summary>
  202. /// 散射值销退速率
  203. /// </summary>
  204. [JsonInclude]
  205. public float ScatteringRangeBackSpeed;
  206.  
  207. /// <summary>
  208. /// 开始销退散射值的延时时间
  209. /// </summary>
  210. [JsonInclude]
  211. public float ScatteringRangeBackDelayTime;
  212.  
  213. /// <summary>
  214. /// 开火后相机抖动强度,只有玩家拾起武器开火才会抖动相机
  215. /// </summary>
  216. [JsonInclude]
  217. public float CameraShake;
  218.  
  219. /// <summary>
  220. /// 后坐力区间 (仅用于开火后武器身抖动) <br/>
  221. /// 格式为[value]或者[min,max]
  222. /// </summary>
  223. [JsonInclude]
  224. public float[] BacklashRange;
  225.  
  226. /// <summary>
  227. /// 后坐力偏移回归回归速度
  228. /// </summary>
  229. [JsonInclude]
  230. public float BacklashRegressionSpeed;
  231.  
  232. /// <summary>
  233. /// 开火后武器口上抬角度
  234. /// </summary>
  235. [JsonInclude]
  236. public float UpliftAngle;
  237.  
  238. /// <summary>
  239. /// 武器默认上抬角度
  240. /// </summary>
  241. [JsonInclude]
  242. public float DefaultAngle;
  243.  
  244. /// <summary>
  245. /// 开火后武器口角度恢复速度倍数
  246. /// </summary>
  247. [JsonInclude]
  248. public float UpliftAngleRestore;
  249.  
  250. /// <summary>
  251. /// 默认射出的子弹id
  252. /// </summary>
  253. [JsonInclude]
  254. public string BulletId;
  255.  
  256. /// <summary>
  257. /// 造成的伤害区间 <br/>
  258. /// 格式为[value]或者[min,max]
  259. /// </summary>
  260. [JsonInclude]
  261. public int[] HarmRange;
  262.  
  263. /// <summary>
  264. /// 造成伤害后击退值区间 <br/>
  265. /// 如果发射子弹,则按每发子弹算击退 <br/>
  266. /// 格式为[value]或者[min,max]
  267. /// </summary>
  268. [JsonInclude]
  269. public float[] RepelRnage;
  270.  
  271. /// <summary>
  272. /// 子弹偏移角度区间 <br/>
  273. /// 用于设置子弹偏移朝向, 该属性和射半径效果类似, 但与其不同的是, 散射半径是用来控制枪口朝向的, 而该属性是控制子弹朝向的, 可用于制作霰弹枪子弹效果 <br/>
  274. /// 格式为[value]或者[min,max]
  275. /// </summary>
  276. [JsonInclude]
  277. public float[] BulletDeviationAngleRange;
  278.  
  279. /// <summary>
  280. /// 子弹初速度区间 <br/>
  281. /// 格式为[value]或者[min,max]
  282. /// </summary>
  283. [JsonInclude]
  284. public float[] BulletSpeedRange;
  285.  
  286. /// <summary>
  287. /// 子弹飞行距离区间 <br/>
  288. /// 格式为[value]或者[min,max]
  289. /// </summary>
  290. [JsonInclude]
  291. public float[] BulletDistanceRange;
  292.  
  293. /// <summary>
  294. /// 默认抛出的弹壳
  295. /// </summary>
  296. [JsonInclude]
  297. public string ShellId;
  298.  
  299. /// <summary>
  300. /// 投抛弹壳的延时时间, 在射击或者上膛后会触发抛弹壳效果 <br/>
  301. /// 如果为负数, 则不自动抛弹
  302. /// </summary>
  303. [JsonInclude]
  304. public float ThrowShellDelayTime;
  305.  
  306. /// <summary>
  307. /// 投抛状态下物体碰撞器大小
  308. /// </summary>
  309. [JsonInclude]
  310. public SerializeVector2 ThrowCollisionSize;
  311.  
  312. /// <summary>
  313. /// 是否可以触发近战攻击
  314. /// </summary>
  315. [JsonInclude]
  316. public bool CanMeleeAttack;
  317.  
  318. /// <summary>
  319. /// 近战攻击伤害区间 <br/>
  320. /// 格式为格式为[value]或者[min,max]
  321. /// </summary>
  322. [JsonInclude]
  323. public int[] MeleeAttackHarmRange;
  324.  
  325. /// <summary>
  326. /// 近战攻击造成伤害后击退值区间 <br/>
  327. /// 格式为[value]或者[min,max]
  328. /// </summary>
  329. [JsonInclude]
  330. public float[] MeleeAttackRepelRnage;
  331.  
  332. /// <summary>
  333. /// 射击音效
  334. /// </summary>
  335. public Sound ShootSound;
  336.  
  337. /// <summary>
  338. /// 开始换弹音效
  339. /// </summary>
  340. public Sound BeginReloadSound;
  341.  
  342. /// <summary>
  343. /// 开始换弹音效延时时间
  344. /// </summary>
  345. [JsonInclude]
  346. public float BeginReloadSoundDelayTime;
  347.  
  348. /// <summary>
  349. /// 换弹音效
  350. /// </summary>
  351. public Sound ReloadSound;
  352.  
  353. /// <summary>
  354. /// 换弹音效延时时间
  355. /// </summary>
  356. [JsonInclude]
  357. public float ReloadSoundDelayTime;
  358.  
  359. /// <summary>
  360. /// 换弹结束音效
  361. /// </summary>
  362. public Sound ReloadFinishSound;
  363.  
  364. /// <summary>
  365. /// 换弹结束音效在换弹结束前多久开始 <br/>
  366. /// 注意: 如果'AloneReload'为true, 那么当前属性的值应该小于'AloneReloadFinishIntervalTime'
  367. /// </summary>
  368. [JsonInclude]
  369. public float ReloadFinishSoundAdvanceTime;
  370.  
  371. /// <summary>
  372. /// 上膛音效
  373. /// </summary>
  374. public Sound BeLoadedSound;
  375.  
  376. /// <summary>
  377. /// 上膛音效延时时间, 这个时间应该小于'BeLoadedTime'
  378. /// </summary>
  379. [JsonInclude]
  380. public float BeLoadedSoundDelayTime;
  381.  
  382. /// <summary>
  383. /// 其他音效
  384. /// </summary>
  385. public Dictionary<string, Sound> OtherSoundMap;
  386.  
  387. /// <summary>
  388. /// Ai属性 <br/>
  389. /// Ai 使用该武器时的武器数据, 设置该字段, 可让同一把武器在敌人和玩家手上有不同属性 <br/>
  390. /// 如果不填则Ai和玩家使用同一种属性
  391. /// </summary>
  392. public Weapon AiUseAttribute;
  393.  
  394. /// <summary>
  395. /// Ai使用该武器开火时的一些额外配置属性 <br/>
  396. /// 玩家使用的武器不需要填写该字段
  397. /// </summary>
  398. public AiAttackAttr AiAttackAttr;
  399.  
  400. /// <summary>
  401. /// 返回浅拷贝出的新对象
  402. /// </summary>
  403. public Weapon Clone()
  404. {
  405. var inst = new Weapon();
  406. inst.Id = Id;
  407. inst.WeaponId = WeaponId;
  408. inst.Remark = Remark;
  409. inst.Weight = Weight;
  410. inst.WeightType = WeightType;
  411. inst.ContinuousShoot = ContinuousShoot;
  412. inst.AmmoCapacity = AmmoCapacity;
  413. inst.MaxAmmoCapacity = MaxAmmoCapacity;
  414. inst.StandbyAmmoCapacity = StandbyAmmoCapacity;
  415. inst.ReloadTime = ReloadTime;
  416. inst.AloneReload = AloneReload;
  417. inst.AloneReloadCount = AloneReloadCount;
  418. inst.AloneReloadBeginIntervalTime = AloneReloadBeginIntervalTime;
  419. inst.AloneReloadFinishIntervalTime = AloneReloadFinishIntervalTime;
  420. inst.AloneReloadCanShoot = AloneReloadCanShoot;
  421. inst.LooseShoot = LooseShoot;
  422. inst.MinChargeTime = MinChargeTime;
  423. inst.ManualBeLoaded = ManualBeLoaded;
  424. inst.AutoManualBeLoaded = AutoManualBeLoaded;
  425. inst.BeLoadedTime = BeLoadedTime;
  426. inst.ContinuousCountRange = ContinuousCountRange;
  427. inst.TriggerInterval = TriggerInterval;
  428. inst.StartFiringSpeed = StartFiringSpeed;
  429. inst.FinalFiringSpeed = FinalFiringSpeed;
  430. inst.FiringSpeedAddSpeed = FiringSpeedAddSpeed;
  431. inst.FiringSpeedBackSpeed = FiringSpeedBackSpeed;
  432. inst.FireBulletCountRange = FireBulletCountRange;
  433. inst.DelayedTime = DelayedTime;
  434. inst.StartScatteringRange = StartScatteringRange;
  435. inst.FinalScatteringRange = FinalScatteringRange;
  436. inst.ScatteringRangeAddValue = ScatteringRangeAddValue;
  437. inst.ScatteringRangeBackSpeed = ScatteringRangeBackSpeed;
  438. inst.ScatteringRangeBackDelayTime = ScatteringRangeBackDelayTime;
  439. inst.CameraShake = CameraShake;
  440. inst.BacklashRange = BacklashRange;
  441. inst.BacklashRegressionSpeed = BacklashRegressionSpeed;
  442. inst.UpliftAngle = UpliftAngle;
  443. inst.DefaultAngle = DefaultAngle;
  444. inst.UpliftAngleRestore = UpliftAngleRestore;
  445. inst.BulletId = BulletId;
  446. inst.HarmRange = HarmRange;
  447. inst.RepelRnage = RepelRnage;
  448. inst.BulletDeviationAngleRange = BulletDeviationAngleRange;
  449. inst.BulletSpeedRange = BulletSpeedRange;
  450. inst.BulletDistanceRange = BulletDistanceRange;
  451. inst.ShellId = ShellId;
  452. inst.ThrowShellDelayTime = ThrowShellDelayTime;
  453. inst.ThrowCollisionSize = ThrowCollisionSize;
  454. inst.CanMeleeAttack = CanMeleeAttack;
  455. inst.MeleeAttackHarmRange = MeleeAttackHarmRange;
  456. inst.MeleeAttackRepelRnage = MeleeAttackRepelRnage;
  457. inst.ShootSound = ShootSound;
  458. inst.BeginReloadSound = BeginReloadSound;
  459. inst.BeginReloadSoundDelayTime = BeginReloadSoundDelayTime;
  460. inst.ReloadSound = ReloadSound;
  461. inst.ReloadSoundDelayTime = ReloadSoundDelayTime;
  462. inst.ReloadFinishSound = ReloadFinishSound;
  463. inst.ReloadFinishSoundAdvanceTime = ReloadFinishSoundAdvanceTime;
  464. inst.BeLoadedSound = BeLoadedSound;
  465. inst.BeLoadedSoundDelayTime = BeLoadedSoundDelayTime;
  466. inst.OtherSoundMap = OtherSoundMap;
  467. inst.AiUseAttribute = AiUseAttribute;
  468. inst.AiAttackAttr = AiAttackAttr;
  469. return inst;
  470. }
  471. }
  472. private class Ref_Weapon : Weapon
  473. {
  474. [JsonInclude]
  475. public string __ShootSound;
  476.  
  477. [JsonInclude]
  478. public string __BeginReloadSound;
  479.  
  480. [JsonInclude]
  481. public string __ReloadSound;
  482.  
  483. [JsonInclude]
  484. public string __ReloadFinishSound;
  485.  
  486. [JsonInclude]
  487. public string __BeLoadedSound;
  488.  
  489. [JsonInclude]
  490. public Dictionary<string, string> __OtherSoundMap;
  491.  
  492. [JsonInclude]
  493. public string __AiUseAttribute;
  494.  
  495. [JsonInclude]
  496. public string __AiAttackAttr;
  497.  
  498. }
  499. }