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