Decimation_Mod/Content/Projectiles/MagmaBall.cs
2020-07-09 21:57:29 -04:00

100 lines
3.1 KiB
C#

using System;
using Decimation.Content.Buffs.Debuffs;
using Decimation.Lib.Util;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Terraria;
using Terraria.ID;
using Terraria.ModLoader;
namespace Decimation.Content.Projectiles
{
public class MagmaBall : DecimationProjectile
{
public override string Texture => "Decimation/Content/Projectiles/MagmaBall";
private bool HitPlayer
{
get => projectile.ai[0] == 1f;
set => projectile.ai[0] = value ? 1 : 0;
}
private bool AlternativeTexture
{
get => projectile.localAI[0] == 1f;
set => projectile.localAI[0] = value ? 1 : 0;
}
protected override void Init()
{
projectile.width = 22;
projectile.height = 20;
projectile.aiStyle = -1;
projectile.hostile = true;
projectile.penetrate = 1;
AlternativeTexture = Main.rand.NextBool();
}
public override void AI()
{
Lighting.AddLight(projectile.Center, LightingUtils.Rgb255ToRgb1(255, 155, 48));
Dust.NewDust(projectile.position, projectile.width, projectile.height, DustID.LavaMoss);
projectile.velocity.Y += 1 / 4f;
}
public override void OnHitPlayer(Player target, int damage, bool crit)
{
DustUtils.NewDustCircle(16, target.position, target.width, target.height, DustID.Fire,
projectile.scale * 3f);
target.AddBuff(ModContent.BuffType<Singed>(), 300);
HitPlayer = true;
projectile.Kill();
}
public override void Kill(int timeLeft)
{
if (HitPlayer) return;
DustUtils.NewDustCircle(4, projectile.position, projectile.width, projectile.height, DustID.Fire,
projectile.scale * 3f);
Tile currentTile = Framing.GetTileSafely((int) Math.Floor(projectile.position.X / 16f),
(int) Math.Ceiling(projectile.position.Y / 16f));
currentTile.liquid = 1;
currentTile.lava(true);
Main.PlaySound(SoundID.NPCDeath19, projectile.Center);
}
public override bool PreDraw(SpriteBatch spriteBatch, Color lightColor)
{
var frameSize = new Vector2(projectile.width, projectile.height);
string texturePath = "Content/Projectiles/MagmaBall";
if (AlternativeTexture) texturePath += "_Alternative";
var texture = mod.GetTexture(texturePath);
spriteBatch.Draw
(
texture,
new Vector2(
projectile.position.X - Main.screenPosition.X + frameSize.X / 2,
projectile.position.Y - Main.screenPosition.Y + frameSize.Y / 2
),
null,
lightColor,
projectile.rotation + MathHelper.Pi * .5f,
frameSize * 0.5f,
projectile.scale,
SpriteEffects.None,
0f
);
return false;
}
}
}