Exemple #1
0
        public override AcceptanceReport AllowsPlacing(BuildableDef checkingDef, IntVec3 loc, Rot4 rot, Map map, Thing thingToIgnore = null, Thing thing = null)
        {
            if (thing is NCS_Tent tent)
            {
                bool existingFloor = tent.CanSafelySpawnFloor(loc, map);
                foreach (SketchEntity entity in tent.sketch.Entities)
                {
                    CellRect cellRect = entity.OccupiedRect.MovedBy(loc);
                    if (!cellRect.InBounds(map))
                    {
                        return((AcceptanceReport)false);
                    }
                    if (cellRect.InNoBuildEdgeArea(map))
                    {
                        return((AcceptanceReport)"TooCloseToMapEdge".Translate());
                    }

                    if (!entity.CanBuildOnTerrain(entity.pos + loc, map) && !(entity is SketchTerrain && existingFloor))                    // ignore floors if they're going to get skipped on spawn
                    {
                        if (entity is SketchBuildable sb)
                        {
                            return((AcceptanceReport)"TerrainCannotSupport_TerrainAffordance".Translate(sb.Buildable, sb.Buildable.GetTerrainAffordanceNeed(sb.Stuff)));
                        }
                        return((AcceptanceReport)"TerrainCannotSupport".Translate(tent));
                    }
                }
            }

            return((AcceptanceReport)true);
        }
Exemple #2
0
        public override AcceptanceReport AllowsPlacing(BuildableDef checkingDef, IntVec3 loc, Rot4 rot, Map map, Thing thingToIgnore = null, Thing thing = null)
        {
            MonumentMarker monumentMarker = thing as MonumentMarker;

            if (monumentMarker != null)
            {
                CellRect          rect           = monumentMarker.sketch.OccupiedRect.MovedBy(loc);
                Blueprint_Install thingToIgnore2 = monumentMarker.FindMyBlueprint(rect, map);
                foreach (SketchEntity entity in monumentMarker.sketch.Entities)
                {
                    CellRect cellRect = entity.OccupiedRect.MovedBy(loc);
                    if (!cellRect.InBounds(map))
                    {
                        return(false);
                    }
                    if (cellRect.InNoBuildEdgeArea(map))
                    {
                        return("TooCloseToMapEdge".Translate());
                    }
                    foreach (IntVec3 item in cellRect)
                    {
                        if (!entity.CanBuildOnTerrain(item, map))
                        {
                            TerrainDef terrain = item.GetTerrain(map);
                            return("CannotPlaceMonumentOnTerrain".Translate(terrain.LabelCap));
                        }
                    }
                }
                tmpMonumentThings.Clear();
                foreach (SketchBuildable buildable in monumentMarker.sketch.Buildables)
                {
                    Thing       spawnedBlueprintOrFrame = buildable.GetSpawnedBlueprintOrFrame(loc + buildable.pos, map);
                    SketchThing sketchThing;
                    if (spawnedBlueprintOrFrame != null)
                    {
                        tmpMonumentThings.Add(spawnedBlueprintOrFrame);
                    }
                    else if ((sketchThing = buildable as SketchThing) != null)
                    {
                        Thing sameSpawned = sketchThing.GetSameSpawned(loc + sketchThing.pos, map);
                        if (sameSpawned != null)
                        {
                            tmpMonumentThings.Add(sameSpawned);
                        }
                    }
                }
                foreach (SketchEntity entity2 in monumentMarker.sketch.Entities)
                {
                    if (entity2.IsSameSpawnedOrBlueprintOrFrame(loc + entity2.pos, map))
                    {
                        continue;
                    }
                    foreach (IntVec3 item2 in entity2.OccupiedRect.MovedBy(loc))
                    {
                        if (item2.InBounds(map))
                        {
                            Building firstBuilding = item2.GetFirstBuilding(map);
                            if (firstBuilding != null && !tmpMonumentThings.Contains(firstBuilding))
                            {
                                tmpMonumentThings.Clear();
                                return("CannotPlaceMonumentOver".Translate(firstBuilding.LabelCap));
                            }
                        }
                    }
                    SketchBuildable sketchBuildable;
                    if ((sketchBuildable = entity2 as SketchBuildable) != null)
                    {
                        Thing thing2 = sketchBuildable.FirstPermanentBlockerAt(loc + entity2.pos, map);
                        if (thing2 != null && !tmpMonumentThings.Contains(thing2))
                        {
                            tmpMonumentThings.Clear();
                            return("CannotPlaceMonumentOver".Translate(thing2.LabelCap));
                        }
                    }
                }
                foreach (SketchEntity entity3 in monumentMarker.sketch.Entities)
                {
                    Building firstAdjacentBuilding = MonumentMarkerUtility.GetFirstAdjacentBuilding(entity3, loc, tmpMonumentThings, map);
                    if (firstAdjacentBuilding != null)
                    {
                        return("MonumentAdjacentToBuilding".Translate(firstAdjacentBuilding.LabelCap));
                    }
                    if (entity3.IsSpawningBlockedPermanently(loc + entity3.pos, map, thingToIgnore2))
                    {
                        tmpMonumentThings.Clear();
                        return("MonumentBlockedPermanently".Translate());
                    }
                }
                tmpMonumentThings.Clear();
            }
            return(true);
        }
Exemple #3
0
        public override AcceptanceReport AllowsPlacing(BuildableDef checkingDef, IntVec3 loc, Rot4 rot, Map map, Thing thingToIgnore = null, Thing thing = null)
        {
            MonumentMarker monumentMarker = thing as MonumentMarker;

            if (monumentMarker != null)
            {
                CellRect          rect           = monumentMarker.sketch.OccupiedRect.MovedBy(loc);
                Blueprint_Install thingToIgnore2 = monumentMarker.FindMyBlueprint(rect, map);
                foreach (SketchEntity entity in monumentMarker.sketch.Entities)
                {
                    CellRect cellRect = entity.OccupiedRect.MovedBy(loc);
                    if (!cellRect.InBounds(map))
                    {
                        return(false);
                    }
                    if (cellRect.InNoBuildEdgeArea(map))
                    {
                        return("TooCloseToMapEdge".Translate());
                    }
                    foreach (IntVec3 item in cellRect)
                    {
                        if (!entity.CanBuildOnTerrain(item, map))
                        {
                            return("MonumentBadTerrain".Translate());
                        }
                    }
                    if (entity.IsSpawningBlockedPermanently(loc + entity.pos, map, thingToIgnore2))
                    {
                        return("MonumentBlockedPermanently".Translate());
                    }
                }
                tmpMonumentThings.Clear();
                foreach (SketchBuildable buildable in monumentMarker.sketch.Buildables)
                {
                    Thing       spawnedBlueprintOrFrame = buildable.GetSpawnedBlueprintOrFrame(loc + buildable.pos, map);
                    SketchThing sketchThing;
                    if (spawnedBlueprintOrFrame != null)
                    {
                        tmpMonumentThings.Add(spawnedBlueprintOrFrame);
                    }
                    else if ((sketchThing = (buildable as SketchThing)) != null)
                    {
                        Thing sameSpawned = sketchThing.GetSameSpawned(loc + sketchThing.pos, map);
                        if (sameSpawned != null)
                        {
                            tmpMonumentThings.Add(sameSpawned);
                        }
                    }
                }
                foreach (SketchEntity entity2 in monumentMarker.sketch.Entities)
                {
                    if (!entity2.IsSameSpawnedOrBlueprintOrFrame(loc + entity2.pos, map))
                    {
                        foreach (IntVec3 item2 in entity2.OccupiedRect.MovedBy(loc))
                        {
                            if (item2.InBounds(map))
                            {
                                Building firstBuilding = item2.GetFirstBuilding(map);
                                if (firstBuilding != null && !tmpMonumentThings.Contains(firstBuilding))
                                {
                                    tmpMonumentThings.Clear();
                                    return("MonumentOverlapsBuilding".Translate());
                                }
                            }
                        }
                    }
                }
                foreach (SketchEntity entity3 in monumentMarker.sketch.Entities)
                {
                    if (!entity3.IsSameSpawnedOrBlueprintOrFrame(loc + entity3.pos, map))
                    {
                        foreach (IntVec3 edgeCell in entity3.OccupiedRect.MovedBy(loc).ExpandedBy(1).EdgeCells)
                        {
                            if (edgeCell.InBounds(map))
                            {
                                Building firstBuilding2 = edgeCell.GetFirstBuilding(map);
                                if (firstBuilding2 != null && !tmpMonumentThings.Contains(firstBuilding2) && (firstBuilding2.Faction == null || firstBuilding2.Faction == Faction.OfPlayer))
                                {
                                    tmpMonumentThings.Clear();
                                    return("MonumentAdjacentToBuilding".Translate());
                                }
                            }
                        }
                    }
                }
                tmpMonumentThings.Clear();
            }
            return(true);
        }