private void Fire(Player player) { var baseVel = player.DirectionTo(Main.MouseWorld).RotatedByRandom(0.02f) * player.HeldItem.shootSpeed; Vector2 pos = player.Center - new Vector2(0, 8); Vector2 muzzleOffset = Vector2.Normalize(baseVel) * (player.HeldItem.width / 2f); if (Collision.CanHit(pos, 0, 0, pos + muzzleOffset, 0, 0)) { pos += muzzleOffset; } var p = Projectile.NewProjectileDirect(pos, baseVel, ModContent.ProjectileType <GranitechGunBullet>(), player.HeldItem.damage, 0f, player.whoAmI); if (p.modProjectile is GranitechGunBullet bullet) { bullet.spawnRings = true; } //Main.PlaySound(Terraria.ID.SoundID.Item11, projectile.Center); if (!Main.dedServ) { Main.PlaySound(SpiritMod.Instance.GetLegacySoundSlot(SoundType.Custom, "Sounds/EnergyShoot").WithPitchVariance(0.1f).WithVolume(0.25f), pos); } VFX(pos + muzzleOffset, baseVel * 0.2f); GItem.UseAmmo(player, AmmoID.Bullet); }
private void Fire(Player p) { Main.PlaySound(SoundID.NPCDeath13, projectile.Center); Vector2 vel = Vector2.Normalize(Main.MouseWorld - p.Center) * 10f * (ScalingCapped * 0.8f); int inc = 3 + (int)ScalingCapped; for (int i = 0; i < inc; i++) //Projectiles { Vector2 velocity = vel.RotatedBy((i - (inc / 2f)) * 0.16f) * Main.rand.NextFloat(0.85f, 1.15f); Projectile.NewProjectile(p.Center, velocity, ModContent.ProjectileType <GastricAcid>(), (int)(p.HeldItem.damage * ScalingCapped), 1f, projectile.owner); } GItem.UseAmmo(p, AmmoID.Gel); }
public override void AI() { Player player = Main.player[projectile.owner]; player.ChangeDir(Main.MouseWorld.X > player.position.X ? 1 : -1); player.itemTime = 5; // Set item time to 2 frames while we are used player.itemAnimation = 5; // Set item animation time to 2 frames while we are used direction = Main.MouseWorld - (player.Center); direction.Normalize(); direction *= 70f; projectile.position = player.Center + direction; projectile.velocity = Vector2.Zero; player.itemRotation = direction.ToRotation(); player.heldProj = projectile.whoAmI; if (player.direction != 1) { player.itemRotation -= 3.14f; } if (player.channel) { if (projectile.soundDelay <= 0 && targets.Count > 0) //Create sound & use ammo { projectile.soundDelay = 20; Main.PlaySound(SoundID.Item, (int)projectile.position.X, (int)projectile.position.Y, 15); GItem.UseAmmo(player, AmmoID.Gel); } projectile.timeLeft = 2; counter++; projectile.frame = (counter / 5) % 4; for (int i = 0; i < Main.npc.Length; i++) { NPC npc = Main.npc[i]; Vector2 toNPC = npc.Center - player.Center; if (toNPC.Length() < RANGE && npc.active && AnglesWithinCone(toNPC.ToRotation(), direction.ToRotation()) && (!npc.townNPC || !npc.friendly)) { bool targetted = false; foreach (var npc2 in targets) { if (npc2.active) { if (npc2 == npc) { targetted = true; } } } if (!targetted) { SpiritMod.primitives.CreateTrail(new RailgunPrimTrail(projectile, npc)); targets.Add(npc); npc.GetGlobalNPC <TeslaCannonGNPC>().charging = true; } } else { if (npc.active) { npc.GetGlobalNPC <TeslaCannonGNPC>().charging = false; } targets.Remove(npc); } } foreach (var npc2 in targets.ToArray()) { if (!npc2.active) { targets.Remove(npc2); } } } else { projectile.active = false; } }