// Decompiled with JetBrains decompiler // Type: Terraria.GameContent.PlayerSittingHelper // Assembly: Terraria, Version=1.4.0.5, Culture=neutral, PublicKeyToken=null // MVID: 67F9E73E-0A81-4937-A22C-5515CD405A83 // Assembly location: C:\Users\mikeyisbaeyt\Downloads\depotdownloader-2.4.5\depots\105601\6707058\Terraria.exe using Microsoft.Xna.Framework; using Terraria.ID; namespace Terraria.GameContent { public struct PlayerSittingHelper { public const int ChairSittingMaxDistance = 40; public bool isSitting; public Vector2 offsetForSeat; public int sittingIndex; public void GetSittingOffsetInfo( Player player, out Vector2 posOffset, out float seatAdjustment) { if (this.isSitting) { posOffset = new Vector2((float) (this.sittingIndex * player.direction * 8), (float) ((double) this.sittingIndex * (double) player.gravDir * -4.0)); seatAdjustment = -4f; seatAdjustment += (float) (int) this.offsetForSeat.Y; posOffset += this.offsetForSeat * player.Directions; } else { posOffset = Vector2.Zero; seatAdjustment = 0.0f; } } public void UpdateSitting(Player player) { if (!this.isSitting) return; Point tileCoordinates = (player.Bottom + new Vector2(0.0f, -2f)).ToTileCoordinates(); int targetDirection; Vector2 seatDownOffset; if (!PlayerSittingHelper.GetSittingTargetInfo(player, tileCoordinates.X, tileCoordinates.Y, out targetDirection, out Vector2 _, out seatDownOffset)) { this.SitUp(player); } else { if (player.controlLeft || player.controlRight || player.controlUp || player.controlDown || player.controlJump || player.pulley || player.mount.Active || targetDirection != player.direction) this.SitUp(player); if (Main.sittingManager.GetNextPlayerStackIndexInCoords(tileCoordinates) >= 2) this.SitUp(player); if (!this.isSitting) return; this.offsetForSeat = seatDownOffset; Main.sittingManager.AddPlayerAndGetItsStackedIndexInCoords(player.whoAmI, tileCoordinates, out this.sittingIndex); } } public void SitUp(Player player, bool multiplayerBroadcast = true) { if (!this.isSitting) return; this.isSitting = false; this.offsetForSeat = Vector2.Zero; this.sittingIndex = -1; if (!multiplayerBroadcast || Main.myPlayer != player.whoAmI) return; NetMessage.SendData(13, number: player.whoAmI); } public void SitDown(Player player, int x, int y) { int targetDirection; Vector2 playerSittingPosition; Vector2 seatDownOffset; if (!PlayerSittingHelper.GetSittingTargetInfo(player, x, y, out targetDirection, out playerSittingPosition, out seatDownOffset)) return; Vector2 offset = playerSittingPosition - player.Bottom; bool position = player.CanSnapToPosition(offset); if (position) position &= Main.sittingManager.GetNextPlayerStackIndexInCoords((playerSittingPosition + new Vector2(0.0f, -2f)).ToTileCoordinates()) < 2; if (!position) return; if (this.isSitting && player.Bottom == playerSittingPosition) { this.SitUp(player); } else { player.StopVanityActions(); player.RemoveAllGrapplingHooks(); if (player.mount.Active) player.mount.Dismount(player); player.Bottom = playerSittingPosition; player.ChangeDir(targetDirection); this.isSitting = true; this.offsetForSeat = seatDownOffset; Main.sittingManager.AddPlayerAndGetItsStackedIndexInCoords(player.whoAmI, new Point(x, y), out this.sittingIndex); player.velocity = Vector2.Zero; player.gravDir = 1f; if (Main.myPlayer != player.whoAmI) return; NetMessage.SendData(13, number: player.whoAmI); } } public static bool GetSittingTargetInfo( Player player, int x, int y, out int targetDirection, out Vector2 playerSittingPosition, out Vector2 seatDownOffset) { Tile tileSafely = Framing.GetTileSafely(x, y); if (!TileID.Sets.CanBeSatOnForPlayers[(int) tileSafely.type] || !tileSafely.active()) { targetDirection = 1; seatDownOffset = Vector2.Zero; playerSittingPosition = new Vector2(); return false; } int x1 = x; int num1 = y; targetDirection = 1; seatDownOffset = Vector2.Zero; int num2 = 6; Vector2 zero1 = Vector2.Zero; switch (tileSafely.type) { case 15: case 497: seatDownOffset.Y = (float) ((tileSafely.type == (ushort) 15 && (int) tileSafely.frameY / 40 == 27).ToInt() * 4); if ((int) tileSafely.frameY % 40 != 0) --num1; targetDirection = -1; if (tileSafely.frameX != (short) 0) { targetDirection = 1; break; } break; case 89: targetDirection = player.direction; num2 = 0; Vector2 vector2_1 = new Vector2(-4f, 2f); Vector2 vector2_2 = new Vector2(4f, 2f); Vector2 vector2_3 = new Vector2(0.0f, 2f); Vector2 zero2 = Vector2.Zero; zero2.X = 1f; zero1.X = -1f; switch ((int) tileSafely.frameX / 54) { case 0: vector2_3.Y = vector2_1.Y = vector2_2.Y = 1f; break; case 1: vector2_3.Y = 1f; break; case 2: case 14: case 15: case 17: case 20: case 21: case 22: case 23: case 25: case 26: case 27: case 28: case 35: case 37: case 38: case 39: case 40: case 41: case 42: vector2_3.Y = vector2_1.Y = vector2_2.Y = 1f; break; case 3: case 4: case 5: case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 16: case 18: case 19: case 36: vector2_3.Y = vector2_1.Y = vector2_2.Y = 0.0f; break; case 6: vector2_3.Y = vector2_1.Y = vector2_2.Y = -1f; break; case 24: vector2_3.Y = 0.0f; vector2_1.Y = -4f; vector2_1.X = 0.0f; vector2_2.X = 0.0f; vector2_2.Y = -4f; break; } if ((int) tileSafely.frameY % 40 != 0) --num1; seatDownOffset = (int) tileSafely.frameX % 54 == 0 && targetDirection == -1 || (int) tileSafely.frameX % 54 == 36 && targetDirection == 1 ? vector2_1 : ((int) tileSafely.frameX % 54 == 0 && targetDirection == 1 || (int) tileSafely.frameX % 54 == 36 && targetDirection == -1 ? vector2_2 : vector2_3); seatDownOffset += zero2; break; case 102: int num3 = (int) tileSafely.frameX / 18; if (num3 == 0) ++x1; if (num3 == 2) --x1; int num4 = (int) tileSafely.frameY / 18; if (num4 == 0) num1 += 2; if (num4 == 1) ++num1; if (num4 == 3) --num1; targetDirection = player.direction; num2 = 0; break; case 487: int num5 = (int) tileSafely.frameX % 72 / 18; if (num5 == 1) --x1; if (num5 == 2) ++x1; if ((int) tileSafely.frameY / 18 != 0) --num1; targetDirection = (num5 <= 1).ToDirectionInt(); num2 = 0; --seatDownOffset.Y; break; } playerSittingPosition = new Point(x1, num1 + 1).ToWorldCoordinates(autoAddY: 16f); playerSittingPosition.X += (float) (targetDirection * num2); playerSittingPosition += zero1; return true; } } }