using System; using System.Collections.Generic; using System.Linq; using Wizard; using Wizard.Battle.View.Vfx; public class SkillPreprocessTurnEndStopAndRemove : SkillPreprocessBase { private readonly string _target; private int _callCount; private Func _conditionFunc; public SkillPreprocessTurnEndStopAndRemove(string target) { string[] array = DisassemblySpecialString(target); _target = array[0]; _callCount = 0; _conditionFunc = GetConditionJudgeFunc((array.Length > 1) ? array[1] : string.Empty); } 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(SkillProcessor skillProcessorOneTime) { _callCount++; if (_conditionFunc == null || _conditionFunc(playerPair, _callCount, 0)) { battlePlayer.OnTurnEnd -= callStopOneTime; ParallelVfxPlayer parallelVfxPlayer = ParallelVfxPlayer.Create(); parallelVfxPlayer.Register(StopSkill(skill, skillProcessorOneTime)); skill.SkillPrm.ownerCard.Skills.Remove(skill); List list = playerPair.Self.InPlayCards.ToList(); list.AddRange(playerPair.Opponent.InPlayCards); SkillIconInitialize(parallelVfxPlayer, list); return parallelVfxPlayer; } return NullVfx.GetInstance(); }; battlePlayer.OnTurnEnd += callStopOneTime; return NullVfx.GetInstance(); } }