Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / activity / role / RoleState.cs
  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 RollSpeed = 180f;
  25.  
  26. /// <summary>
  27. /// 翻滚冷却时间
  28. /// </summary>
  29. public float RollTime = 0.5f;
  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.6f;
  49.  
  50. /// <summary>
  51. /// 攻击/发射后计算伤害
  52. /// </summary>
  53. public event Action<int, RefValue<int>> CalcDamageEvent;
  54. public int CallCalcDamageEvent(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 CallCalcHurtDamageEvent(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<Weapon, float, RefValue<float>> CalcStartScatteringEvent;
  86.  
  87. public float CallCalcStartScatteringEvent(Weapon weapon, float value)
  88. {
  89. if (CalcStartScatteringEvent != null)
  90. {
  91. var result = new RefValue<float>(value);
  92. CalcStartScatteringEvent(weapon, value, result);
  93. return result.Value;
  94. }
  95.  
  96. return value;
  97. }
  98.  
  99. /// <summary>
  100. /// 武器最终散射值增量
  101. /// </summary>
  102. public event Action<Weapon, float, RefValue<float>> CalcFinalScatteringEvent;
  103. public float CallCalcFinalScatteringEvent(Weapon weapon, float value)
  104. {
  105. if (CalcFinalScatteringEvent != null)
  106. {
  107. var result = new RefValue<float>(value);
  108. CalcFinalScatteringEvent(weapon, value, result);
  109. return result.Value;
  110. }
  111.  
  112. return value;
  113. }
  114.  
  115. /// <summary>
  116. /// 武器开火发射子弹数量
  117. /// </summary>
  118. public event Action<Weapon, int, RefValue<int>> CalcBulletCountEvent;
  119. public int CallCalcBulletCountEvent(Weapon weapon, int count)
  120. {
  121. if (CalcBulletCountEvent != null)
  122. {
  123. var result = new RefValue<int>(count);
  124. CalcBulletCountEvent(weapon, count, result);
  125. return result.Value;
  126. }
  127.  
  128. return count;
  129. }
  130.  
  131. /// <summary>
  132. /// 子弹偏移角度, 角度制
  133. /// </summary>
  134. public event Action<Weapon, float, RefValue<float>> CalcBulletDeviationAngleEvent;
  135. public float CallCalcBulletDeviationAngleEvent(Weapon weapon, float angle)
  136. {
  137. if (CalcBulletDeviationAngleEvent != null)
  138. {
  139. var result = new RefValue<float>(angle);
  140. CalcBulletDeviationAngleEvent(weapon, angle, result);
  141. return result.Value;
  142. }
  143.  
  144. return angle;
  145. }
  146.  
  147. /// <summary>
  148. /// 子弹速度
  149. /// </summary>
  150. public event Action<Weapon, float, RefValue<float>> CalcBulletSpeedEvent;
  151. public float CallCalcBulletSpeedEvent(Weapon weapon, float speed)
  152. {
  153. if (CalcBulletSpeedEvent != null)
  154. {
  155. var result = new RefValue<float>(speed);
  156. CalcBulletSpeedEvent(weapon, speed, result);
  157. return result.Value;
  158. }
  159.  
  160. return speed;
  161. }
  162. /// <summary>
  163. /// 子弹射程
  164. /// </summary>
  165. public event Action<Weapon, float, RefValue<float>> CalcBulletDistanceEvent;
  166. public float CallCalcBulletDistanceEvent(Weapon weapon, float distance)
  167. {
  168. if (CalcBulletDistanceEvent != null)
  169. {
  170. var result = new RefValue<float>(distance);
  171. CalcBulletDistanceEvent(weapon, distance, result);
  172. return result.Value;
  173. }
  174.  
  175. return distance;
  176. }
  177. }