public List <TwisonLink> Filter(TwisonPassage active)
        {
            var requiredList = active.links
                               .Select(i => Tuple.Create(i, i.passage.tags.Where(j => j.StartsWith("Requires:")).ToList()))
                               .Where(i => i.Item2.Count > 0);

            var requiredFilters = requiredList.Where(i => i.Item2.Any(j =>
            {
                var requiredTag = j.Substring("Requires:".Length);
                return(!_tags.Contains(requiredTag));
            }));

            var lockedList = active.links
                             .Select(i => Tuple.Create(i, i.passage.tags.Where(j => j.StartsWith("Locked:")).ToList()))
                             .Where(i => i.Item2.Count > 0);

            var lockedFilters = lockedList.Where(i => i.Item2.Any(j =>
            {
                var lockedTag = j.Substring("Locked:".Length);
                return(_tags.Contains(lockedTag));
            }));

            return(active.links.Where(i =>
            {
                return requiredFilters.All(j => j.Item1 != i) &&
                lockedFilters.All(j => j.Item1 != i);
            }).ToList());
        }
        public void OnEnterState(TwisonPassage active)
        {
            var snapshot = _tags.ToList();

            active?.tags?.Where(i => !snapshot.Contains(i)).ToList().ForEach(i =>
            {
                if (i.StartsWith("Drop"))
                {
                    var dropTag = i.Substring("Drop:".Length);
                    if (_tags.Contains(dropTag))
                    {
                        _tags.Remove(dropTag);
                    }
                }
                else
                {
                    _tags.Add(i);
                }
            });
        }
 public void OnExitState(TwisonPassage active)
 {
 }
Ejemplo n.º 4
0
 public TwisonValidationError(string error, TwisonPassage passage) : base(error)
 {
     Passage = passage;
 }