public static bool IsOutputTo(this IBuilding_WaterNet t1, IBuilding_WaterNet t2, bool ignoreActivate = false) { if (!ignoreActivate && !t1.HasOutputConnector) { return(false); } if (!ignoreActivate && !t2.HasInputConnector) { return(false); } var t1_out_t2_body = false; foreach (var vec1 in t1.OutputConnectors) { foreach (var vec2 in t2.OccupiedRect()) { if (vec1 != vec2) { continue; } t1_out_t2_body = true; break; } if (t1_out_t2_body) { break; } } var t1_body_t2_in = false; foreach (var vec1 in t1.OccupiedRect()) { foreach (var vec2 in t2.InputConnectors) { if (vec1 != vec2) { continue; } t1_body_t2_in = true; break; } if (t1_body_t2_in) { break; } } return(t1_out_t2_body && t1_body_t2_in); }
public static int GetRoofNumNearby(this IBuilding_WaterNet t, int dist) { int roofNum = 0; foreach (var cell in t.OccupiedRect().ExpandedBy(dist)) { if (!cell.InBounds(t.Map)) { continue; } // 自然の屋根でなければボーナス var roofDef = t.Map.roofGrid.RoofAt(cell); if (roofDef != null && roofDef.isNatural == false) { roofNum++; } } return(roofNum); }
public static float GetUnroofedPercent(this IBuilding_WaterNet t) { int allCells = 0; int unroofedCells = 0; foreach (var c in t.OccupiedRect()) { allCells++; if (!c.Roofed(t.Map)) { unroofedCells++; } } if (allCells == 0) { return(0f); } return((float)unroofedCells / allCells); }
public virtual bool IsAdjacentToCardinalOrInside(IBuilding_WaterNet other) { return(GenAdj.IsAdjacentToCardinalOrInside(this.OccupiedRect(), other.OccupiedRect())); }