public override bool NewRightClick(int i, int j) { Player player = Main.LocalPlayer; Main.mouseRightRelease = false; if (player.sign >= 0) { Main.PlaySound(SoundID.MenuClose); player.sign = -1; Main.editSign = false; Main.npcChatText = ""; } //TODO: (Or not to do) Hardcoded frame coordinate values because using TileObjectData is cancer. if (PoMUtil.TryGetTileEntity(i, j, 18, 18, out TileEntity te)) { MapDeviceTE clickedMD = (MapDeviceTE)te; if (clickedMD.timeLeft > 0 && IsTilePortal(clickedMD, i, j)) { Map map = ((Items.Map)clickedMD.mapItem.modItem).map; var teleportBounds = new Vector4( map.openMap.dimensions.Left + (map.openMap.dimensions.Width * map.spawnArea.X), map.openMap.dimensions.Top + (map.openMap.dimensions.Height * map.spawnArea.Y), map.openMap.dimensions.Width * map.spawnArea.Z, map.openMap.dimensions.Height * map.spawnArea.W); var newPlayerPos = new Vector2( Main.rand.NextFloat(teleportBounds.X * 16, (teleportBounds.X + teleportBounds.Z - 1) * 16), Main.rand.NextFloat(teleportBounds.Y * 16, (teleportBounds.Y + teleportBounds.W - 2) * 16)); #if DEBUG var oldPos = player.position; #endif player.Teleport(newPlayerPos, 3); #if DEBUG player.Teleport(oldPos, 3); #endif } else { if (MapDeviceUI.Instance.IsVisible && activeMD == clickedMD) { MapDeviceUI.HideUI(); } else { MapDeviceUI.ShowUI(clickedMD); } } return(true); } return(false); }
bool IsTilePortal(MapDeviceTE md, int i, int j) { return(j - md.Position.Y < 3); }