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