Exemplo n.º 1
0
 private bool NeighborMatchesRule(TilingRule.Neighbor neighbor, TileBase neighborTile)
 {
     return
         (neighbor == TilingRule.Neighbor.This && (m_NeighborType == NeighborType.Self && neighborTile == this || m_NeighborType == NeighborType.AnyTile && neighborTile != null) ||
          neighbor == TilingRule.Neighbor.NotThis && (m_NeighborType == NeighborType.Self && neighborTile != this || m_NeighborType == NeighborType.AnyTile && neighborTile == null) ||
          neighbor == TilingRule.Neighbor.DontCare);
 }
Exemplo n.º 2
0
        private bool NeighbouringTileFitsRuleExp(TilingRule.Neighbor neighbourExp, TileBase neighbourTile)
        {
            TileBase thisTile = this;

            if (m_onlySameTile)
            {
                if (neighbourExp == TilingRule.Neighbor.This && neighbourTile != this || neighbourExp == TilingRule.Neighbor.NotThis && neighbourTile == this)
                {
                    return(true);
                }
            }
            else
            {
                if (neighbourExp == TilingRule.Neighbor.This && neighbourTile == null || neighbourExp == TilingRule.Neighbor.NotThis && neighbourTile != null)
                {
                    return(true);
                }
            }


            return(false);
        }
Exemplo n.º 3
0
        /// <summary>
        /// 我们添加的方法,判断是不是采用规则(Rule)
        /// true: 使用
        /// false: 不使用
        /// </summary>
        /// <param name="neighbor"></param>
        /// <param name="neighborTile"></param>
        /// <returns></returns>
        private bool NeighborMatches(TilingRule.Neighbor neighbor, TileBase neighborTile)
        {
            switch (neighbor)
            {
            /// 不关心,直接采用规则
            case TilingRule.Neighbor.DontCare:
                return(true);

            /// 绿色箭头,
            /// 如果检测所有Tile,返回neighbor是不是不为null,
            /// 否则返回neighbor是不是自己
            case TilingRule.Neighbor.This:
                return(m_CheckAnyTile ? neighborTile != null : neighborTile == this);

            /// 红色叉子,
            /// 如果检测所有Tile,返回neighbor是不是为null,
            /// 否则返回neighbor是不是不为自己
            case TilingRule.Neighbor.NotThis:
                return(m_CheckAnyTile ? neighborTile == null : neighborTile != this);

            default:
                return(false);
            }
        }
Exemplo n.º 4
0
        private bool ReturnFalseIf(TilingRule rule, TileBase tile, TilingRule.Neighbor RULE)
        {
            TileBase[] Q;
            #region this is bad
            switch ((int)RULE)
            {
            case 3:
                Q = t1;
                break;

            case 4:
                Q = t2;
                break;

            case 5:
                Q = t3;
                break;

            case 6:
                Q = t4;
                break;

            case 7:
                Q = t5;
                break;

            case 8:
                Q = t6;
                break;

            case 9:
                Q = t7;
                break;

            case 10:
                Q = n1;
                break;

            case 11:
                Q = n2;
                break;

            case 12:
                Q = n3;
                break;

            case 13:
                Q = n4;
                break;

            case 14:
                Q = n5;
                break;

            case 15:
                Q = n6;
                break;

            default:
                Q = t1;
                break;
            }
            #endregion

            if (RULE == TilingRule.Neighbor.This && tile == m_Self || RULE == TilingRule.Neighbor.NotThis && tile != m_Self)
            {
                return(false);
            }
            if ((int)RULE > 2 && (int)RULE < 10)
            {
                foreach (TileBase q in Q)   //No, .Contains() does not exist for TileBase[]
                {
                    if (q == tile)
                    {
                        return(false);
                    }
                }
                return(true);
            }
            if ((int)RULE > 9)
            {
                foreach (TileBase q in Q)
                {
                    if (q == tile)
                    {
                        return(true);
                    }
                }
                return(false);
            }
            if (RULE == TilingRule.Neighbor.DontCare)
            {
                return(false);
            }
            return(true);
        }