Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / activity / role / RoleState.cs
@小李xl 小李xl on 23 Nov 2023 5 KB 添加敌人属性表
  1.  
  2. using System;
  3.  
  4. /// <summary>
  5. /// 角色属性类
  6. /// </summary>
  7. public class RoleState
  8. {
  9. /// <summary>
  10. /// 是否可以拾起武器
  11. /// </summary>
  12. public bool CanPickUpWeapon = false;
  13.  
  14. /// <summary>
  15. /// 移动速度
  16. /// </summary>
  17. public float MoveSpeed = 120f;
  18. /// <summary>
  19. /// 移动加速度
  20. /// </summary>
  21. public float Acceleration = 1500f;
  22. /// <summary>
  23. /// 移动摩擦力, 仅用于人物基础移动
  24. /// </summary>
  25. public float Friction = 900f;
  26. /// <summary>
  27. /// 单格护盾恢复时间, 单位: 秒
  28. /// </summary>
  29. public float ShieldRecoveryTime = 18;
  30.  
  31. /// <summary>
  32. /// 受伤后的无敌时间, 单位: 秒
  33. /// </summary>
  34. public float WoundedInvincibleTime = 1f;
  35.  
  36. /// <summary>
  37. /// 护盾被攻击后的无敌时间, 单位: 秒
  38. /// </summary>
  39. public float ShieldInvincibleTime = 0.4f;
  40.  
  41. /// <summary>
  42. /// 近战攻击间隔时间
  43. /// </summary>
  44. public float MeleeAttackTime = 0.5f;
  45.  
  46. /// <summary>
  47. /// 攻击/发射后计算伤害
  48. /// </summary>
  49. public event Action<int, RefValue<int>> CalcDamageEvent;
  50. public int CalcDamage(int damage)
  51. {
  52. if (CalcDamageEvent != null)
  53. {
  54. var result = new RefValue<int>(damage);
  55. CalcDamageEvent(damage, result);
  56. return result.Value;
  57. }
  58.  
  59. return damage;
  60. }
  61.  
  62. /// <summary>
  63. /// 受伤后计算受到的伤害
  64. /// </summary>
  65. public event Action<int, RefValue<int>> CalcHurtDamageEvent;
  66. public int CalcHurtDamage(int damage)
  67. {
  68. if (CalcHurtDamageEvent != null)
  69. {
  70. var result = new RefValue<int>(damage);
  71. CalcHurtDamageEvent(damage, result);
  72. return result.Value;
  73. }
  74.  
  75. return damage;
  76. }
  77.  
  78. /// <summary>
  79. /// 武器初始散射值增量
  80. /// </summary>
  81. public event Action<float, RefValue<float>> CalcStartScatteringEvent;
  82. public float CalcStartScattering(float value)
  83. {
  84. if (CalcStartScatteringEvent != null)
  85. {
  86. var result = new RefValue<float>(value);
  87. CalcStartScatteringEvent(value, result);
  88. return result.Value;
  89. }
  90.  
  91. return value;
  92. }
  93.  
  94. /// <summary>
  95. /// 武器最终散射值增量
  96. /// </summary>
  97. public event Action<float, RefValue<float>> CalcFinalScatteringEvent;
  98. public float CalcFinalScattering(float value)
  99. {
  100. if (CalcFinalScatteringEvent != null)
  101. {
  102. var result = new RefValue<float>(value);
  103. CalcFinalScatteringEvent(value, result);
  104. return result.Value;
  105. }
  106.  
  107. return value;
  108. }
  109.  
  110. /// <summary>
  111. /// 武器开火发射子弹数量
  112. /// </summary>
  113. public event Action<int, RefValue<int>> CalcBulletCountEvent;
  114. public int CalcBulletCount(int count)
  115. {
  116. if (CalcBulletCountEvent != null)
  117. {
  118. var result = new RefValue<int>(count);
  119. CalcBulletCountEvent(count, result);
  120. return result.Value;
  121. }
  122.  
  123. return count;
  124. }
  125.  
  126. /// <summary>
  127. /// 子弹偏移角度, 角度制
  128. /// </summary>
  129. public event Action<float, RefValue<float>> CalcBulletDeviationAngleEvent;
  130. public float CalcBulletDeviationAngle(float angle)
  131. {
  132. if (CalcBulletDeviationAngleEvent != null)
  133. {
  134. var result = new RefValue<float>(angle);
  135. CalcBulletDeviationAngleEvent(angle, result);
  136. return result.Value;
  137. }
  138.  
  139. return angle;
  140. }
  141.  
  142. /// <summary>
  143. /// 子弹速度
  144. /// </summary>
  145. public event Action<float, RefValue<float>> CalcBulletSpeedEvent;
  146. public float CalcBulletSpeed(float speed)
  147. {
  148. if (CalcBulletSpeedEvent != null)
  149. {
  150. var result = new RefValue<float>(speed);
  151. CalcBulletSpeedEvent(speed, result);
  152. return result.Value;
  153. }
  154.  
  155. return speed;
  156. }
  157. /// <summary>
  158. /// 子弹射程
  159. /// </summary>
  160. public event Action<float, RefValue<float>> CalcBulletDistanceEvent;
  161. public float CalcBulletDistance(float distance)
  162. {
  163. if (CalcBulletDistanceEvent != null)
  164. {
  165. var result = new RefValue<float>(distance);
  166. CalcBulletDistanceEvent(distance, result);
  167. return result.Value;
  168. }
  169.  
  170. return distance;
  171. }
  172.  
  173. /// <summary>
  174. /// 子弹击退
  175. /// </summary>
  176. public event Action<float, RefValue<float>> CalcBulletRepelEvent;
  177. public float CalcBulletRepel(float distance)
  178. {
  179. if (CalcBulletRepelEvent != null)
  180. {
  181. var result = new RefValue<float>(distance);
  182. CalcBulletRepelEvent(distance, result);
  183. return result.Value;
  184. }
  185.  
  186. return distance;
  187. }
  188.  
  189. /// <summary>
  190. /// 子弹反弹次数
  191. /// </summary>
  192. public event Action<int, RefValue<int>> CalcBulletBounceCountEvent;
  193. public int CalcBulletBounceCount(int distance)
  194. {
  195. if (CalcBulletBounceCountEvent != null)
  196. {
  197. var result = new RefValue<int>(distance);
  198. CalcBulletBounceCountEvent(distance, result);
  199. return result.Value;
  200. }
  201.  
  202. return distance;
  203. }
  204. /// <summary>
  205. /// 子弹穿透次数
  206. /// </summary>
  207. public event Action<int, RefValue<int>> CalcBulletPenetrationEvent;
  208. public int CalcBulletPenetration(int distance)
  209. {
  210. if (CalcBulletPenetrationEvent != null)
  211. {
  212. var result = new RefValue<int>(distance);
  213. CalcBulletPenetrationEvent(distance, result);
  214. return result.Value;
  215. }
  216.  
  217. return distance;
  218. }
  219. }