Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / activity / role / RoleState.cs
@小李xl 小李xl on 29 Jun 2023 4 KB 制作被动道具
  1.  
  2. using System;
  3.  
  4. /// <summary>
  5. /// 角色属性类
  6. /// </summary>
  7. public class RoleState
  8. {
  9. /// <summary>
  10. /// 移动速度
  11. /// </summary>
  12. public float MoveSpeed = 120f;
  13. /// <summary>
  14. /// 移动加速度
  15. /// </summary>
  16. public float Acceleration = 1500f;
  17. /// <summary>
  18. /// 移动摩擦力
  19. /// </summary>
  20. public float Friction = 900f;
  21. /// <summary>
  22. /// 单格护盾恢复时间, 单位: 秒
  23. /// </summary>
  24. public float ShieldRecoveryTime = 8;
  25.  
  26. /// <summary>
  27. /// 受伤后的无敌时间, 单位: 秒
  28. /// </summary>
  29. public float WoundedInvincibleTime = 1f;
  30.  
  31. /// <summary>
  32. /// 护盾被攻击后的无敌时间, 单位: 秒
  33. /// </summary>
  34. public float ShieldInvincibleTime = 0.5f;
  35.  
  36. /// <summary>
  37. /// 攻击/发射后计算伤害
  38. /// </summary>
  39. public event Action<int, RefValue<int>> CalcDamageEvent;
  40. public int CallCalcDamageEvent(int damage)
  41. {
  42. if (CalcDamageEvent != null)
  43. {
  44. var result = new RefValue<int>(damage);
  45. CalcDamageEvent(damage, result);
  46. return result.Value;
  47. }
  48.  
  49. return damage;
  50. }
  51.  
  52. /// <summary>
  53. /// 受伤后计算受到的伤害
  54. /// </summary>
  55. public event Action<int, RefValue<int>> CalcHurtDamageEvent;
  56. public int CallCalcHurtDamageEvent(int damage)
  57. {
  58. if (CalcHurtDamageEvent != null)
  59. {
  60. var result = new RefValue<int>(damage);
  61. CalcHurtDamageEvent(damage, result);
  62. return result.Value;
  63. }
  64.  
  65. return damage;
  66. }
  67.  
  68. /// <summary>
  69. /// 武器初始散射值增量
  70. /// </summary>
  71. public event Action<Weapon, float, RefValue<float>> CalcStartScatteringEvent;
  72.  
  73. public float CallCalcStartScatteringEvent(Weapon weapon, float value)
  74. {
  75. if (CalcStartScatteringEvent != null)
  76. {
  77. var result = new RefValue<float>(value);
  78. CalcStartScatteringEvent(weapon, value, result);
  79. return result.Value;
  80. }
  81.  
  82. return value;
  83. }
  84.  
  85. /// <summary>
  86. /// 武器最终散射值增量
  87. /// </summary>
  88. public event Action<Weapon, float, RefValue<float>> CalcFinalScatteringEvent;
  89. public float CallCalcFinalScatteringEvent(Weapon weapon, float value)
  90. {
  91. if (CalcFinalScatteringEvent != null)
  92. {
  93. var result = new RefValue<float>(value);
  94. CalcFinalScatteringEvent(weapon, value, result);
  95. return result.Value;
  96. }
  97.  
  98. return value;
  99. }
  100.  
  101. /// <summary>
  102. /// 武器开火发射子弹数量
  103. /// </summary>
  104. public event Action<Weapon, int, RefValue<int>> CalcBulletCountEvent;
  105. public int CallCalcBulletCountEvent(Weapon weapon, int count)
  106. {
  107. if (CalcBulletCountEvent != null)
  108. {
  109. var result = new RefValue<int>(count);
  110. CalcBulletCountEvent(weapon, count, result);
  111. return result.Value;
  112. }
  113.  
  114. return count;
  115. }
  116.  
  117. /// <summary>
  118. /// 子弹偏移角度, 角度制
  119. /// </summary>
  120. public event Action<Weapon, float, RefValue<float>> CalcBulletDeviationAngleEvent;
  121. public float CallCalcBulletDeviationAngleEvent(Weapon weapon, float angle)
  122. {
  123. if (CalcBulletDeviationAngleEvent != null)
  124. {
  125. var result = new RefValue<float>(angle);
  126. CalcBulletDeviationAngleEvent(weapon, angle, result);
  127. return result.Value;
  128. }
  129.  
  130. return angle;
  131. }
  132.  
  133. /// <summary>
  134. /// 子弹速度
  135. /// </summary>
  136. public event Action<Weapon, float, RefValue<float>> CalcBulletSpeedEvent;
  137. public float CallCalcBulletSpeedEvent(Weapon weapon, float speed)
  138. {
  139. if (CalcBulletSpeedEvent != null)
  140. {
  141. var result = new RefValue<float>(speed);
  142. CalcBulletSpeedEvent(weapon, speed, result);
  143. return result.Value;
  144. }
  145.  
  146. return speed;
  147. }
  148. /// <summary>
  149. /// 子弹射程
  150. /// </summary>
  151. public event Action<Weapon, float, RefValue<float>> CalcBulletDistanceEvent;
  152. public float CallCalcBulletDistanceEvent(Weapon weapon, float distance)
  153. {
  154. if (CalcBulletDistanceEvent != null)
  155. {
  156. var result = new RefValue<float>(distance);
  157. CalcBulletDistanceEvent(weapon, distance, result);
  158. return result.Value;
  159. }
  160.  
  161. return distance;
  162. }
  163. }