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);
        }
Beispiel #4
0
 public virtual bool IsAdjacentToCardinalOrInside(IBuilding_WaterNet other)
 {
     return(GenAdj.IsAdjacentToCardinalOrInside(this.OccupiedRect(), other.OccupiedRect()));
 }