public bool TryOpenDoor( DoorOpeningHelper.DoorOpenCloseTogglingInfo doorInfo, DoorOpeningHelper.PlayerInfoForOpeningDoors playerInfo) { Point coordsForToggling = doorInfo.tileCoordsForToggling; Rectangle rectangle = new Rectangle(doorInfo.tileCoordsForToggling.X * 16, doorInfo.tileCoordsForToggling.Y * 16, 16, 80); switch (playerInfo.playerGravityDirection) { case -1: rectangle.Y -= 16; rectangle.Height += 16; break; case 1: rectangle.Height += 16; break; } if (!rectangle.Intersects(playerInfo.hitboxToOpenDoor) || playerInfo.hitboxToOpenDoor.Top < rectangle.Top || playerInfo.hitboxToOpenDoor.Bottom > rectangle.Bottom) { return(false); } bool closing = false; if (!WorldGen.ShiftTallGate(coordsForToggling.X, coordsForToggling.Y, closing, false)) { return(false); } NetMessage.SendData(19, -1, -1, (NetworkText)null, 4 + closing.ToInt(), (float)coordsForToggling.X, (float)coordsForToggling.Y, 0.0f, 0, 0, 0); return(true); }
private void TryAutoOpeningDoor( Point tileCoords, DoorOpeningHelper.PlayerInfoForOpeningDoors playerInfo) { DoorOpeningHelper.DoorAutoHandler infoProvider; if (!this.TryGetHandler(tileCoords, out infoProvider)) { return; } DoorOpeningHelper.DoorOpenCloseTogglingInfo info = infoProvider.ProvideInfo(tileCoords); if (!infoProvider.TryOpenDoor(info, playerInfo)) { return; } this._ongoingOpenDoors.Add(info); }
public void LookForDoorsToOpen(Player player) { DoorOpeningHelper.PlayerInfoForOpeningDoors infoForOpeningDoor = this.GetPlayerInfoForOpeningDoor(player); if (infoForOpeningDoor.intendedOpeningDirection == 0 && (double)player.velocity.X == 0.0) { return; } Point tileCoords = new Point(); for (int left = infoForOpeningDoor.tileCoordSpaceForCheckingForDoors.Left; left <= infoForOpeningDoor.tileCoordSpaceForCheckingForDoors.Right; ++left) { for (int top = infoForOpeningDoor.tileCoordSpaceForCheckingForDoors.Top; top <= infoForOpeningDoor.tileCoordSpaceForCheckingForDoors.Bottom; ++top) { tileCoords.X = left; tileCoords.Y = top; this.TryAutoOpeningDoor(tileCoords, infoForOpeningDoor); } } }
public bool TryOpenDoor( DoorOpeningHelper.DoorOpenCloseTogglingInfo doorInfo, DoorOpeningHelper.PlayerInfoForOpeningDoors playerInfo) { Point coordsForToggling = doorInfo.tileCoordsForToggling; int openingDirection = playerInfo.intendedOpeningDirection; Rectangle rectangle = new Rectangle(doorInfo.tileCoordsForToggling.X * 16, doorInfo.tileCoordsForToggling.Y * 16, 16, 48); switch (playerInfo.playerGravityDirection) { case -1: rectangle.Y -= 16; rectangle.Height += 16; break; case 1: rectangle.Height += 16; break; } if (!rectangle.Intersects(playerInfo.hitboxToOpenDoor) || playerInfo.hitboxToOpenDoor.Top < rectangle.Top || playerInfo.hitboxToOpenDoor.Bottom > rectangle.Bottom) { return(false); } WorldGen.OpenDoor(coordsForToggling.X, coordsForToggling.Y, openingDirection); if (Main.tile[coordsForToggling.X, coordsForToggling.Y].type != (ushort)10) { NetMessage.SendData(19, -1, -1, (NetworkText)null, 0, (float)coordsForToggling.X, (float)coordsForToggling.Y, (float)openingDirection, 0, 0, 0); return(true); } WorldGen.OpenDoor(coordsForToggling.X, coordsForToggling.Y, -openingDirection); if (Main.tile[coordsForToggling.X, coordsForToggling.Y].type == (ushort)10) { return(false); } NetMessage.SendData(19, -1, -1, (NetworkText)null, 0, (float)coordsForToggling.X, (float)coordsForToggling.Y, (float)-openingDirection, 0, 0, 0); return(true); }