private static void MakeHouseSupports(Rectangle rect, int tileY)
        {
            var supportLeft  = new Rectangle(rect.X, tileY, 1, 256);
            var supportRight = new Rectangle(rect.X + rect.Width - 1, tileY, 1, 256);
            int floorLeft    = tileY + 256;
            int floorRight   = tileY + 256;

            var woodBeamDef = new TileDrawDefinition {
                TileType = TileID.WoodenBeam
            };

            //

            TileDrawDefinition placeSupportLeft(int x, int y)
            {
                if (y >= floorLeft)
                {
                    return(null);
                }

                if (Main.tile[x, y].active())
                {
                    if (HamstarHelpers.Helpers.Tiles.Attributes.TileAttributeHelpers.IsBreakable(x, y))
                    {
                        WorldGen.KillTile(x, y, false, false, true);
                    }
                    else
                    {
                        floorLeft = y;
                        return(null);
                    }
                }
                return(new TileDrawDefinition {
                    TileType = TileID.WoodenBeam
                });
            }

            //

            TileDrawDefinition placeSupportRight(int x, int y)
            {
                if (y >= floorRight)
                {
                    return(null);
                }

                if (Main.tile[x, y].active())
                {
                    if (HamstarHelpers.Helpers.Tiles.Attributes.TileAttributeHelpers.IsBreakable(x, y))
                    {
                        WorldGen.KillTile(x, y, false, false, true);
                    }
                    else
                    {
                        floorRight = y;
                        return(null);
                    }
                }
                return(new TileDrawDefinition {
                    TileType = TileID.WoodenBeam
                });
            }

            //

            TileDrawPrimitivesHelpers.DrawRectangle(
                filter: TilePattern.Any,
                area: supportLeft,
                hollow: null,
                place: placeSupportLeft
                );
            TileDrawPrimitivesHelpers.DrawRectangle(
                filter: TilePattern.Any,
                area: supportRight,
                hollow: null,
                place: placeSupportRight
                );

            if (Main.netMode == 2)
            {
                NetMessage.SendTileRange(
                    whoAmi: -1,
                    tileX: supportLeft.X,
                    tileY: supportLeft.Y,
                    xSize: supportLeft.Width,
                    ySize: supportLeft.Height
                    );
                NetMessage.SendTileRange(
                    whoAmi: -1,
                    tileX: supportRight.X,
                    tileY: supportRight.Y,
                    xSize: supportRight.Width,
                    ySize: supportRight.Height
                    );
            }
        }
Exemple #2
0
        public static void MakeHouseFrame(int tileX, int tileY)
        {
            int width     = HouseFramingKitItem.FrameWidth;
            int height    = HouseFramingKitItem.FrameHeight;
            var outerRect = new Rectangle(
                tileX - (width / 2),
                tileY - height,
                width,
                height
                );
            var innerRect = outerRect;

            innerRect.X      += 1;
            innerRect.Y      += 1;
            innerRect.Width  -= 2;
            innerRect.Height -= 2;

            var frameTileDef = new TileDrawDefinition {
                TileType = TileID.WoodBlock
            };

            //

            bool isSolidFrame(int x, int y)
            {
                int offX = x - outerRect.X;
                int offY = y - outerRect.Y;

                if (offX == 0 || offX == width - 1)
                {
                    if (offY == (height - 2))
                    {
                        return(false);
                    }
                    else if (offY >= (height - 4) && offY <= (height - 3))
                    {
                        return(false);
                    }
                }
                else if (offX >= (width / 2) - 3 && offX <= (width / 2) + 2)
                {
                    if (offY == 0)
                    {
                        return(false);
                    }
                }

/*bool isActive = Main.tile[x, y].active();
 * int timer = 150;
 * Timers.SetTimer( "HFK0_"+x+"_"+y, 2, false, () => {
 *      Dust.QuickDust( new Point(x, y), isActive ? Color.Purple : Color.Blue );
 *      return timer-- > 0;
 * } );*/
                return(true);
            }

            //

            TileDrawDefinition getTileFeatureAt(int x, int y)
            {
                TileDrawDefinition myTileDef = null;
                int offX = x - outerRect.X;
                int offY = y - outerRect.Y;

                if (offX == 0 || offX == width - 1)
                {
                    if (offY == (height - 2))
                    {
                        myTileDef = new TileDrawDefinition {
                            TileType = TileID.ClosedDoor
                        };
                    }
                    else if (offY >= (height - 4) && offY <= (height - 3))
                    {
                        myTileDef = null;
                    }
                }
                else if (offX >= (width / 2) - 3 && offX <= (width / 2) + 2)
                {
                    if (offY == 0)
                    {
                        myTileDef = new TileDrawDefinition {
                            TileType = TileID.Platforms
                        };
                    }
                }

                return(myTileDef);
            }

            //

            TileDrawPrimitivesHelpers.DrawRectangle(
                filter: TilePattern.NonActive,
                area: outerRect,
                hollow: innerRect,
                place: (x, y) => isSolidFrame(x, y) ? frameTileDef : null
                );
            TileDrawPrimitivesHelpers.DrawRectangle(
                filter: TilePattern.NonActive,
                area: outerRect,
                hollow: innerRect,
                place: getTileFeatureAt
                );

            if (Main.netMode == 2)
            {
                NetMessage.SendTileRange(
                    whoAmi: -1,
                    tileX: outerRect.X,
                    tileY: outerRect.Y,
                    xSize: outerRect.Width,
                    ySize: outerRect.Height
                    );
            }

            //

            if (Main.netMode == 0)
            {
                HouseFramingKitItem.MakeHouseSupports(outerRect, tileY);
            }
        }