using System; using Wizard; using Wizard.Battle.View.Vfx; public class SkillPreprocessUnitAttackStop : SkillPreprocessBase { private const string REMOVE_TARGET_SELF = "me"; private readonly string _target = ""; public SkillPreprocessUnitAttackStop(string target) { _target = target; } public override bool IsRight(BattlePlayerReadOnlyInfoPair playerInfoPair, SkillConditionCheckerOption option, bool PreexecutionCheck = false) { return true; } public override VfxBase Start(BattlePlayerPair playerPair, SkillBase skill, SkillProcessor skillProcessor, SkillOptionValue optionValue, SkillConditionCheckerOption checkerOption) { BattlePlayerBase battlePlayer = ((_target == "me") ? playerPair.Self : playerPair.Opponent); Func callStopOneTime = null; callStopOneTime = delegate(BattleCardBase attackCard, BattleCardBase target, SkillProcessor skillProcessorOneTime) { SequentialVfxPlayer sequentialVfxPlayer = SequentialVfxPlayer.Create(); if (attackCard.SelfBattlePlayer == battlePlayer) { sequentialVfxPlayer.Register(StopSkill(skill, skillProcessorOneTime)); battlePlayer.BattleMgr.OperateMgr.OnBeforeAttack -= callStopOneTime; } return sequentialVfxPlayer; }; battlePlayer.BattleMgr.OperateMgr.OnBeforeAttack += callStopOneTime; skill.SkillPrm.ownerCard.OnRemoveFromInPlayAfterOneTime += delegate { battlePlayer.BattleMgr.OperateMgr.OnBeforeAttack -= callStopOneTime; return NullVfx.GetInstance(); }; return NullVfx.GetInstance(); } }