using SoulHarvest.Items; using SoulHarvest.UI; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using System; using Terraria; using Terraria.Audio; using Terraria.GameContent; using Terraria.GameContent.ObjectInteractions; using Terraria.ID; using Terraria.ModLoader; using Terraria.ObjectData; namespace SoulHarvest.Tiles; public class DeathAltarTile : ModTile { public override void SetStaticDefaults() { Main.tileFrameImportant[Type] = true; Main.tileNoAttach[Type] = true; Main.tileLighted[Type] = true; TileID.Sets.InteractibleByNPCs[Type] = true; TileObjectData.newTile.CopyFrom(TileObjectData.Style3x4); TileObjectData.newTile.LavaDeath = false; TileObjectData.newTile.DrawYOffset = 2; TileObjectData.addTile(Type); DustType = DustID.Obsidian; RegisterItemDrop(ModContent.ItemType()); AddMapEntry(new Color(92, 45, 125), Mod.GetLocalization("Tiles.DeathAltarTile.MapEntry")); } public override bool HasSmartInteract(int i, int j, SmartInteractScanSettings settings) { return true; } public override bool RightClick(int i, int j) { if (Main.netMode != NetmodeID.Server) { SoundEngine.PlaySound(SoundID.MenuOpen); ModContent.GetInstance().Show(i, j); } return true; } public override void MouseOver(int i, int j) { Player player = Main.LocalPlayer; player.noThrow = 2; player.cursorItemIconEnabled = true; player.cursorItemIconID = ModContent.ItemType(); } public override void ModifyLight(int i, int j, ref float r, ref float g, ref float b) { Tile tile = Framing.GetTileSafely(i, j); if (tile.TileFrameX == 18 && tile.TileFrameY == 18) { float pulse = 0.1f + (float)Math.Sin(Main.GlobalTimeWrappedHourly * 3f) * 0.025f; r = 0.28f + pulse * 1.6f; g = 0.03f + pulse * 0.24f; b = 0.04f + pulse * 0.35f; } } public override bool PreDraw(int i, int j, SpriteBatch spriteBatch) { Tile tile = Framing.GetTileSafely(i, j); if (tile.TileFrameX != 0 || tile.TileFrameY != 0) return false; Texture2D texture = TextureAssets.Tile[Type].Value; Vector2 offScreen = Main.drawToScreen ? Vector2.Zero : new Vector2(Main.offScreenRange); Vector2 drawPosition = new Vector2(i * 16f + 24f, j * 16f + 34f) - Main.screenPosition + offScreen; Vector2 origin = texture.Size() / 2f; float scale = 70f / texture.Height; float pulse = 1f + (float)Math.Sin(Main.GlobalTimeWrappedHourly * 3f) * 0.025f; Color lightColor = Color.Lerp(Lighting.GetColor(i + 1, j + 2), Color.White, 0.4f); Color glowColor = new Color(255, 28, 42, 0) * 0.24f; for (int direction = 0; direction < 4; direction++) { Vector2 offset = (MathHelper.PiOver2 * direction).ToRotationVector2() * (2f + pulse); spriteBatch.Draw(texture, drawPosition + offset, null, glowColor, 0f, origin, scale * pulse, SpriteEffects.None, 0f); } spriteBatch.Draw(texture, drawPosition, null, lightColor, 0f, origin, scale, SpriteEffects.None, 0f); return false; } }