using System; /// <summary> /// 角色属性类 /// </summary> public class RoleState { /// <summary> /// 移动速度 /// </summary> public float MoveSpeed = 120f; /// <summary> /// 移动加速度 /// </summary> public float Acceleration = 1500f; /// <summary> /// 移动摩擦力 /// </summary> public float Friction = 900f; /// <summary> /// 单格护盾恢复时间, 单位: 秒 /// </summary> public float ShieldRecoveryTime = 8; /// <summary> /// 受伤后的无敌时间, 单位: 秒 /// </summary> public float WoundedInvincibleTime = 1f; /// <summary> /// 护盾被攻击后的无敌时间, 单位: 秒 /// </summary> public float ShieldInvincibleTime = 0.5f; /// <summary> /// 攻击/发射后计算伤害 /// </summary> public event Action<int, RefValue<int>> CalcDamageEvent; public int CallCalcDamageEvent(int damage) { if (CalcDamageEvent != null) { var result = new RefValue<int>(damage); CalcDamageEvent(damage, result); return result.Value; } return damage; } /// <summary> /// 受伤后计算受到的伤害 /// </summary> public event Action<int, RefValue<int>> CalcHurtDamageEvent; public int CallCalcHurtDamageEvent(int damage) { if (CalcHurtDamageEvent != null) { var result = new RefValue<int>(damage); CalcHurtDamageEvent(damage, result); return result.Value; } return damage; } /// <summary> /// 武器初始散射值增量 /// </summary> public event Action<Weapon, float, RefValue<float>> CalcStartScatteringEvent; public float CallCalcStartScatteringEvent(Weapon weapon, float value) { if (CalcStartScatteringEvent != null) { var result = new RefValue<float>(value); CalcStartScatteringEvent(weapon, value, result); return result.Value; } return value; } /// <summary> /// 武器最终散射值增量 /// </summary> public event Action<Weapon, float, RefValue<float>> CalcFinalScatteringEvent; public float CallCalcFinalScatteringEvent(Weapon weapon, float value) { if (CalcFinalScatteringEvent != null) { var result = new RefValue<float>(value); CalcFinalScatteringEvent(weapon, value, result); return result.Value; } return value; } /// <summary> /// 武器开火发射子弹数量 /// </summary> public event Action<Weapon, int, RefValue<int>> CalcBulletCountEvent; public int CallCalcBulletCountEvent(Weapon weapon, int count) { if (CalcBulletCountEvent != null) { var result = new RefValue<int>(count); CalcBulletCountEvent(weapon, count, result); return result.Value; } return count; } /// <summary> /// 子弹偏移角度, 角度制 /// </summary> public event Action<Weapon, float, RefValue<float>> CalcBulletDeviationAngleEvent; public float CallCalcBulletDeviationAngleEvent(Weapon weapon, float angle) { if (CalcBulletDeviationAngleEvent != null) { var result = new RefValue<float>(angle); CalcBulletDeviationAngleEvent(weapon, angle, result); return result.Value; } return angle; } /// <summary> /// 子弹速度 /// </summary> public event Action<Weapon, float, RefValue<float>> CalcBulletSpeedEvent; public float CallCalcBulletSpeedEvent(Weapon weapon, float speed) { if (CalcBulletSpeedEvent != null) { var result = new RefValue<float>(speed); CalcBulletSpeedEvent(weapon, speed, result); return result.Value; } return speed; } /// <summary> /// 子弹射程 /// </summary> public event Action<Weapon, float, RefValue<float>> CalcBulletDistanceEvent; public float CallCalcBulletDistanceEvent(Weapon weapon, float distance) { if (CalcBulletDistanceEvent != null) { var result = new RefValue<float>(distance); CalcBulletDistanceEvent(weapon, distance, result); return result.Value; } return distance; } }