Esempio n. 1
0
        private static TileDrawDefinition GetHouseFrameTileDefAt2(
            int x,
            int y,
            int width,
            int height,
            Rectangle outerRect)
        {
            TileDrawDefinition myTileDef = null;
            int offX    = x - outerRect.X;
            int offY    = y - outerRect.Y;
            int doorMid = height - 4;

            // Side walls
            if (offX == 0 || offX == width - 1)
            {
                // Vertical just-above-floor
                if (offY == doorMid)
                {
                    myTileDef = new TileDrawDefinition {
                        TileType = TileID.ClosedDoor
                    };
                }
            }

            return(myTileDef);
        }
        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
                    );
            }
        }
Esempio n. 3
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);
            }
        }
        public static void MakeScaffold(int leftTileX, int floorTileY)
        {
            int width  = ScaffoldingErectorKitItem.ScaffoldWidth;
            int height = ScaffoldingErectorKitItem.ScaffoldHeight;
            var rect   = new Rectangle(
                leftTileX,
                floorTileY - height,
                width,
                height
                );

            var postTileDef = new TileDrawDefinition {
                NotActive = true,
                WallType  = WallID.RichMahoganyFence
            };
            var platTileDef = new TileDrawDefinition {
                SkipWall = true,
                TileType = TileID.Platforms
            };

            //

            int findFloor(int myTileX, int myTileY)
            {
                int y;

                for (y = myTileY; !TileLibraries.IsSolid(Main.tile[myTileX, y], true, true); y++)
                {
                    if (y >= Main.maxTilesY - 1)
                    {
                        break;
                    }
                }
                return(y);
            }

            //

            int rightTileX  = rect.X + rect.Width - 1;
            int lPostFloorY = findFloor(leftTileX, rect.Bottom);
            int rPostFloorY = findFloor(rightTileX, rect.Bottom);

            // Posts
            if (Main.tile[leftTileX - 1, rect.Y].wall != WallID.RichMahoganyFence)
            {
                TileDrawPrimitivesLibraries.DrawRectangle(
                    filter: TilePattern.NonSolid,
                    area: new Rectangle(leftTileX, rect.Y, 1, lPostFloorY - rect.Y),
                    hollow: null,
                    place: (x, y) => postTileDef
                    );
            }
            if (Main.tile[rightTileX + 1, rect.Y].wall != WallID.RichMahoganyFence)
            {
                TileDrawPrimitivesLibraries.DrawRectangle(
                    filter: TilePattern.NonSolid,
                    area: new Rectangle(rightTileX, rect.Y, 1, rPostFloorY - rect.Y),
                    hollow: null,
                    place: (x, y) => postTileDef
                    );
            }

            // Platforms
            TileDrawPrimitivesLibraries.DrawRectangle(
                filter: TilePattern.NonSolid,
                area: new Rectangle(rect.X, rect.Y, width, 1),
                hollow: null,
                place: (x, y) => platTileDef
                );

            //

            Main.PlaySound(SoundID.Item69, rect.Center.ToVector2() * 16);

            //

            if (Main.netMode == NetmodeID.Server)
            {
//LogLibraries.Log( "!!!MakeScaffold " + rect.ToString() );
                TileRectangleModPacketProtocol.Send(rect);
            }
        }
Esempio n. 5
0
        private static void MakeHouseSupports(Rectangle rect, int floorTileY)
        {
            var supportLeft  = new Rectangle(rect.X, floorTileY, 1, 256);
            var supportRight = new Rectangle(rect.X + rect.Width - 1, floorTileY, 1, 256);
            int floorLeft    = floorTileY + 256;
            int floorRight   = floorTileY + 256;

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

            //

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

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

            //

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

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

            //

            TileDrawPrimitivesLibraries.DrawRectangle(
                filter: TilePattern.Any,
                area: supportLeft,
                hollow: null,
                place: getSupportLeftDef
                );
            TileDrawPrimitivesLibraries.DrawRectangle(
                filter: TilePattern.Any,
                area: supportRight,
                hollow: null,
                place: getSupportRightDef
                );

            if (Main.netMode == NetmodeID.Server)
            {
                Timers.SetTimer(2, false, () => {
//LogLibraries.Log( "!!!MakeHouseSupports 1 " + supportLeft.ToString() );
                    TileRectangleModPacketProtocol.Send(supportLeft);
                    return(false);
                });
                Timers.SetTimer(4, false, () => {
//LogLibraries.Log( "!!!MakeHouseSupports 2 " + supportRight.ToString() );
                    TileRectangleModPacketProtocol.Send(supportRight);
                    return(false);
                });
            }
        }
Esempio n. 6
0
        public static void MakeHouseFrame(int midTileX, int floorTileY)
        {
            int width     = HouseFramingKitItem.FrameWidth;
            int height    = HouseFramingKitItem.FrameHeight;
            var outerRect = new Rectangle(
                midTileX - (width / 2),
                floorTileY - 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)
            => HouseFramingKitItem.IsHouseFrameTileSolid(x, y, width, height, outerRect);

            //

            TileDrawPrimitivesLibraries.DrawRectangle(
                filter: TilePattern.NonActive,
                area: outerRect,
                hollow: innerRect,
                place: (x, y) => isSolidFrame(x, y) ? frameTileDef : null
                );
            TileDrawPrimitivesLibraries.DrawRectangle(
                filter: TilePattern.NonActive,
                area: outerRect,
                hollow: null,
                place: (int x, int y) => HouseFramingKitItem.GetHouseFrameTileDefAt1(x, y, width, height, outerRect)
                );
            TileDrawPrimitivesLibraries.DrawRectangle(
                filter: TilePattern.NonActive,
                area: outerRect,
                hollow: null,
                place: (int x, int y) => HouseFramingKitItem.GetHouseFrameTileDefAt2(x, y, width, height, outerRect)
                );

            /*int ceiling = floorTileY - height;
             *
             * Tile tile1 = Main.tile[ midTileX-3, ceiling+1 ];
             * tile1.slope( 1 );
             * Tile tile2 = Main.tile[ midTileX+2, ceiling+1 ];
             * tile2.slope( 2 );*/

            if (Main.netMode == NetmodeID.Server)
            {
//LogLibraries.Log( "!!!MakeHouseFrame "+outerRect.ToString() );
                TileRectangleModPacketProtocol.Send(outerRect);
            }

            //

            HouseFramingKitItem.MakeHouseSupports(outerRect, floorTileY);

            Main.PlaySound(SoundID.Item108, new Vector2(midTileX * 16, floorTileY * 16));
        }
Esempio n. 7
0
        private static TileDrawDefinition GetHouseFrameTileDefAt1(
            int x,
            int y,
            int width,
            int height,
            Rectangle outerRect)
        {
            TileDrawDefinition myTileDef = null;
            int offX     = x - outerRect.X;
            int offY     = y - outerRect.Y;
            int doorTop  = height - 4;
            int doorBot  = height - 2;
            int midLeft  = (width / 2) - 3;
            int midRight = (width / 2) + 3;

            // Side walls
            if (offX == 0 || offX == width - 1)
            {
                // Vertical just-above-just-above-floor area
                if (offY >= doorTop && offY <= (doorBot - 1))
                {
                    myTileDef = null;
                }
            }
            else
            // Horizontal middle
            if (offX >= midLeft && offX < midRight)
            {
                // Top
                if (offY == 0)
                {
                    if (offX == (midLeft + 1))
                    {
                        myTileDef = new TileDrawDefinition {
                            TileType  = TileID.Platforms,
                            TileStyle = 0,
                            Shape     = TileShapeType.TopRightSlope
                        };
                    }
                    else if (offX == (midRight - 2))
                    {
                        myTileDef = new TileDrawDefinition {
                            TileType  = TileID.Platforms,
                            TileStyle = 0,
                            Shape     = TileShapeType.TopLeftSlope
                        };
                    }
                    else
                    {
                        myTileDef = new TileDrawDefinition {
                            TileType  = TileID.Platforms,
                            TileStyle = 0
                        };
                    }
                }
                else if (offY == 1)
                {
                    if (offX >= (midLeft + 1) && offX < (midRight - 1))
                    {
                        myTileDef = new TileDrawDefinition {
                            TileType  = TileID.Platforms,
                            TileStyle = 0
                        };
                    }
                }
            }

            return(myTileDef);
        }