using System; using System.Collections.Generic; using MoleMole.Config; namespace MoleMole { public class AbilityAvatarShareRecoverMixin : BaseAbilityMixin { private AvatarShareRecoverMixin config; public AbilityAvatarShareRecoverMixin(ActorAbility instancedAbility, ActorModifier instancedModifier, ConfigAbilityMixin config) : base(instancedAbility, instancedModifier, config) { this.config = (AvatarShareRecoverMixin)config; } public override void OnAdded() { if (config.ShareHP) { BaseAbilityActor baseAbilityActor = actor; baseAbilityActor.onHPChanged = (Action)Delegate.Combine(baseAbilityActor.onHPChanged, new Action(ShareHPCallback)); } if (config.ShareSP) { BaseAbilityActor baseAbilityActor2 = actor; baseAbilityActor2.onSPChanged = (Action)Delegate.Combine(baseAbilityActor2.onSPChanged, new Action(ShareSPCallback)); } } public override void OnRemoved() { if (config.ShareHP) { BaseAbilityActor baseAbilityActor = actor; baseAbilityActor.onHPChanged = (Action)Delegate.Remove(baseAbilityActor.onHPChanged, new Action(ShareHPCallback)); } if (config.ShareSP) { BaseAbilityActor baseAbilityActor2 = actor; baseAbilityActor2.onSPChanged = (Action)Delegate.Remove(baseAbilityActor2.onSPChanged, new Action(ShareSPCallback)); } } private void ShareHPCallback(float from, float to, float amount) { if (amount <= 0f || !actor.abilityPlugin.EvaluateAbilityPredicate(config.Predicates, instancedAbility, instancedModifier, null, null)) { return; } float amount2 = instancedAbility.Evaluate(config.ShareHPRatio) * amount; List allPlayerAvatars = Singleton.Instance.GetAllPlayerAvatars(); for (int i = 0; i < allPlayerAvatars.Count; i++) { BaseMonoAvatar baseMonoAvatar = allPlayerAvatars[i]; if (!(baseMonoAvatar == null) && baseMonoAvatar.IsAlive() && baseMonoAvatar.GetRuntimeID() != actor.runtimeID) { AvatarActor avatarActor = Singleton.Instance.GetActor(baseMonoAvatar.GetRuntimeID()); avatarActor.HealHP(amount2); } } } private void ShareSPCallback(float from, float to, float amount) { if (amount <= 0f || !actor.abilityPlugin.EvaluateAbilityPredicate(config.Predicates, instancedAbility, instancedModifier, null, null)) { return; } float amount2 = instancedAbility.Evaluate(config.ShareSPRatio) * amount; List allPlayerAvatars = Singleton.Instance.GetAllPlayerAvatars(); for (int i = 0; i < allPlayerAvatars.Count; i++) { BaseMonoAvatar baseMonoAvatar = allPlayerAvatars[i]; if (!(baseMonoAvatar == null) && baseMonoAvatar.IsAlive() && baseMonoAvatar.GetRuntimeID() != actor.runtimeID) { AvatarActor avatarActor = Singleton.Instance.GetActor(baseMonoAvatar.GetRuntimeID()); avatarActor.HealSP(amount2); } } } } }