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); }
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); }
/// <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); } }
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); }