コード例 #1
0
        public void Test(int x, int y, bool expected)
        {
            var tile     = new Tile();
            var template = Mock.Of <ITemplate>(t => t.Matches(tile) == expected);
            var mask     = new TemplateMask(template);
            var position = new Vector(x, y);
            var extent   = Mock.Of <Extent>(m => m.GetTile(position) == tile);

            Assert.That(mask.Test(extent, new Vector(x, y)), Is.EqualTo(expected));
        }
コード例 #2
0
        private void Mask(CommandArgs args)
        {
            var parameters = args.Parameters;
            var player     = args.Player;

            if (parameters.Count == 0 || parameters.Count == 2)
            {
                player.SendErrorMessage("Syntax: //mask <mask>");
                return;
            }

            var  session = Plugin.GetOrCreateSession(player);
            Mask mask;

            if (parameters.Count == 1)
            {
                var inputMask = parameters[0];
                if (inputMask.Equals("#none", StringComparison.OrdinalIgnoreCase))
                {
                    mask = new EmptyMask();
                }
                else if (inputMask.Equals("#selection", StringComparison.OrdinalIgnoreCase))
                {
                    mask = new RegionMask(session.Selection);
                }
                else
                {
                    var state = new TileStateParser().Parse(inputMask);
                    if (state == null)
                    {
                        player.SendErrorMessage($"Invalid state '{inputMask}'.");
                        return;
                    }

                    mask = new TemplateMask(state);
                }
            }
            else
            {
                var inputType = parameters[0];
                if (!Parsers.TryGetValue(inputType, out var parser))
                {
                    player.SendErrorMessage($"Invalid mask type '{inputType}'.");
                    return;
                }

                var inputComparison = parameters[1];
                var negated         = false;
                if (inputComparison.Equals("!=", StringComparison.OrdinalIgnoreCase))
                {
                    negated = true;
                }
                else if (!inputComparison.Equals("=", StringComparison.OrdinalIgnoreCase))
                {
                    player.SendErrorMessage($"Invalid mask comparison '{inputComparison}'.");
                    return;
                }

                var inputPattern = string.Join(" ", parameters.Skip(2));
                var pattern      = parser.Parse(inputPattern);
                if (pattern == null)
                {
                    player.SendErrorMessage($"Invalid pattern '{inputPattern}'.");
                    return;
                }

                mask = new TemplateMask(pattern);
                if (negated)
                {
                    mask = new NegatedMask(mask);
                }
            }

            session.Mask = mask;
            player.SendSuccessMessage("Set mask.");
        }