Beispiel #1
0
        private static List <int> PossibleNeighbors(int tile, Direction dir, List <int> tiles, RuleType rt)
        {
            var possible = new List <int>();

            if (tile == -1)
            {
                if (rt == RuleType.Allowed)
                {
                    possible.AddRange(tiles);
                }
            }
            else
            {
                if (_TileRules.ContainsKey(tile))
                {
                    foreach (var rule in _TileRules[tile])
                    {
                        //Skip rule if rule type doesn't match.
                        if (rule.Type != rt)
                        {
                            continue;
                        }

                        var neighborMatch = -1;
                        if (rule.Base == tile && rule.Direction == dir)
                        {
                            neighborMatch = rule.Neighbor;
                        }
                        else if (rule.Neighbor == tile && rule.Direction == TileRule.ReverseDirection(dir))
                        {
                            neighborMatch = rule.Base;
                        }
                        if (neighborMatch > -1 && tiles.Contains(neighborMatch))
                        {
                            possible.Add(neighborMatch);
                        }
                    }
                }
            }
            return(possible);
        }
Beispiel #2
0
        public static void AddRule(TileRule rule)
        {
            if (rule == null)
            {
                return;
            }

            if (!_TileRules.ContainsKey(rule.Base))
            {
                _TileRules[rule.Base] = new List <TileRule>();
            }
            if (!_TileRules.ContainsKey(rule.Neighbor))
            {
                _TileRules[rule.Neighbor] = new List <TileRule>();
            }
            if (!_TileRules[rule.Base].Contains(rule))
            {
                _TileRules[rule.Base].Add(rule);
            }
            if (!_TileRules[rule.Neighbor].Contains(rule))
            {
                _TileRules[rule.Neighbor].Add(rule.Flip());
            }
        }