using System.Linq; using Wizard; using Wizard.Battle.View.Vfx; public class SkillPreprocessConditionCheck : SkillPreprocessBase { protected readonly ConditionSkillFilterCollection _filter; protected readonly SkillBase _skill; public string ConditionText { get; private set; } public SkillPreprocessConditionCheck(SkillBase skill, string conditionString) { _skill = skill; _filter = new ConditionSkillFilterCollection(); ConditionText = conditionString; if (conditionString.First() != '(' || conditionString.Last() != ')') { return; } conditionString = conditionString.Substring(1, conditionString.Length - 2); string[] array = conditionString.Split('&'); for (int i = 0; i < array.Length; i++) { if (array[i].First() == '{') { _filter.VariableCompareFilter.Add(new SkillVariableComareFilter(array[i])); } } } public bool Contains(string text) { return _filter.VariableCompareFilter.Any((SkillVariableComareFilter x) => x.Text.Contains(text)); } public override bool IsRight(BattlePlayerReadOnlyInfoPair playerInfoPair, SkillConditionCheckerOption option, bool PreexecutionCheck = false) { if (PreexecutionCheck) { SkillCollectionBase.SetupOptionValue(_skill.OptionValue, playerInfoPair, _skill.SkillPrm.ownerCard, _skill, option); return _filter.VariableCompareFilter.All((SkillVariableComareFilter s) => s.Filtering(_skill.OptionValue)); } return true; } public override bool IsRight(BattlePlayerReadOnlyInfoPair playerInfoPair, SkillConditionCheckerOption option, bool PreexecutionCheck = false, bool isRegidentStop = false) { if (!isRegidentStop) { return IsRight(playerInfoPair, option, PreexecutionCheck); } return !IsRight(playerInfoPair, option, PreexecutionCheck); } public override VfxBase Start(BattlePlayerPair playerPair, SkillBase skill, SkillProcessor skillProcessor, SkillOptionValue optionValue, SkillConditionCheckerOption checkerOption) { return NullVfx.GetInstance(); } public ConditionSkillFilterCollection GetFilter() { return _filter; } }