using Godot; /// <summary> /// 分裂子弹 子弹数量翻倍, 但是精准度和伤害降低 /// </summary> [Tool] public partial class BuffPropProp0010 : BuffProp { public override void OnPickUpItem() { Master.RoleState.CalcBulletCountEvent += CalcBulletCountEvent; Master.RoleState.CalcBulletDeviationAngleEvent += CalcBulletDeviationAngleEvent; Master.RoleState.CalcDamageEvent += CalcDamageEvent; Master.RoleState.CalcBulletSpeedEvent += CalcBulletSpeedEvent; } public override void OnRemoveItem() { Master.RoleState.CalcBulletCountEvent -= CalcBulletCountEvent; Master.RoleState.CalcBulletDeviationAngleEvent -= CalcBulletDeviationAngleEvent; Master.RoleState.CalcDamageEvent -= CalcDamageEvent; Master.RoleState.CalcBulletSpeedEvent -= CalcBulletSpeedEvent; } private void CalcBulletCountEvent(Weapon weapon, int originCount, RefValue<int> refValue) { refValue.Value += originCount; } private void CalcBulletDeviationAngleEvent(Weapon weapon, float originAngle, RefValue<float> refValue) { refValue.Value += Utils.Random.RandomRangeFloat(-8, 8); } private void CalcDamageEvent(int originDamage, RefValue<int> refValue) { if (refValue.Value <= 0) { return; } refValue.Value = Mathf.Max(1, refValue.Value - Mathf.FloorToInt(originDamage * 0.4f)); } private void CalcBulletSpeedEvent(Weapon weapon, float originSpeed, RefValue<float> speed) { speed.Value += originSpeed * Utils.Random.RandomRangeFloat(-0.05f, 0.05f); } }