diff --git a/src/main/java/electroblob/wizardry/client/ClientProxy.java b/src/main/java/electroblob/wizardry/client/ClientProxy.java index 989589dc..da53f756 100644 --- a/src/main/java/electroblob/wizardry/client/ClientProxy.java +++ b/src/main/java/electroblob/wizardry/client/ClientProxy.java @@ -333,6 +333,7 @@ public class ClientProxy extends CommonProxy { ParticleWizardry.registerParticle(Type.BEAM, ParticleBeam::new); ParticleWizardry.registerParticle(Type.BLOCK_HIGHLIGHT, ParticleBlockHighlight::new); ParticleWizardry.registerParticle(Type.BUFF, ParticleBuff::new); + ParticleWizardry.registerParticle(Type.CLOUD, ParticleCloud::new); ParticleWizardry.registerParticle(Type.DARK_MAGIC, ParticleDarkMagic::new); ParticleWizardry.registerParticle(Type.DUST, ParticleDust::new); ParticleWizardry.registerParticle(Type.FLASH, ParticleFlash::new); diff --git a/src/main/java/electroblob/wizardry/client/particle/ParticleCloud.java b/src/main/java/electroblob/wizardry/client/particle/ParticleCloud.java new file mode 100644 index 00000000..f59ebbf7 --- /dev/null +++ b/src/main/java/electroblob/wizardry/client/particle/ParticleCloud.java @@ -0,0 +1,52 @@ +package electroblob.wizardry.client.particle; + +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.client.event.TextureStitchEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.relauncher.Side; + +@Mod.EventBusSubscriber(Side.CLIENT) +public class ParticleCloud extends ParticleWizardry { + + private static final ResourceLocation[] TEXTURES = generateTextures("cloud", 4); + + public ParticleCloud(World world, double x, double y, double z){ + + super(world, x, y, z, TEXTURES[world.rand.nextInt(TEXTURES.length)]); + + this.setRBGColorF(1, 1, 1); + this.particleMaxAge = 48 + this.rand.nextInt(12); + this.particleScale *= 6; + this.setGravity(false); + this.setAlphaF(0); + this.canCollide = false; + this.shaded = true; + } + + @Override + public boolean shouldDisableDepth(){ + return true; + } + + @Override + public void onUpdate(){ + + super.onUpdate(); + + // Fading + float fadeTime = this.particleMaxAge * 0.3f; + this.setAlphaF(MathHelper.clamp(Math.min(this.particleAge / fadeTime, (this.particleMaxAge - this.particleAge) / fadeTime), 0, 1)); + + } + + @SubscribeEvent + public static void onTextureStitchEvent(TextureStitchEvent.Pre event){ + for(ResourceLocation texture : TEXTURES){ + event.getMap().registerSprite(texture); + } + } + +} diff --git a/src/main/java/electroblob/wizardry/entity/projectile/EntitySmokeBomb.java b/src/main/java/electroblob/wizardry/entity/projectile/EntitySmokeBomb.java index 1339c929..ae0c078f 100644 --- a/src/main/java/electroblob/wizardry/entity/projectile/EntitySmokeBomb.java +++ b/src/main/java/electroblob/wizardry/entity/projectile/EntitySmokeBomb.java @@ -39,13 +39,12 @@ public class EntitySmokeBomb extends EntityBomb { this.world.spawnParticle(EnumParticleTypes.EXPLOSION_LARGE, this.posX, this.posY, this.posZ, 0, 0, 0); for(int i = 0; i < 60 * blastMultiplier; i++){ - - this.world.spawnParticle(EnumParticleTypes.SMOKE_LARGE, - this.posX + (this.rand.nextDouble() * 4 - 2) * blastMultiplier, - this.posY + (this.rand.nextDouble() * 4 - 2) * blastMultiplier, - this.posZ + (this.rand.nextDouble() * 4 - 2) * blastMultiplier, 0, 0, 0); - + float brightness = rand.nextFloat() * 0.3f; + ParticleBuilder.create(Type.CLOUD, rand, posX, posY, posZ, 2*blastMultiplier, false) + .clr(brightness, brightness, brightness).spawn(world); + + brightness = rand.nextFloat() * 0.3f; ParticleBuilder.create(Type.DARK_MAGIC, rand, posX, posY, posZ, 2*blastMultiplier, false) .clr(brightness, brightness, brightness).spawn(world); } diff --git a/src/main/java/electroblob/wizardry/util/ParticleBuilder.java b/src/main/java/electroblob/wizardry/util/ParticleBuilder.java index e0a1e8e2..fa6e6660 100644 --- a/src/main/java/electroblob/wizardry/util/ParticleBuilder.java +++ b/src/main/java/electroblob/wizardry/util/ParticleBuilder.java @@ -98,6 +98,8 @@ public final class ParticleBuilder { /** Helical animated 'buffing' particle.

Defaults:
Lifetime: 15 ticks *
Velocity: (0, 0.27, 0)
Colour: white */ public static final ResourceLocation BUFF = new ResourceLocation(Wizardry.MODID,"buff"); + /** Large, thick cloud.

Defaults:
Lifetime: 48-60 ticks
Colour: dark grey */ + public static final ResourceLocation CLOUD = new ResourceLocation(Wizardry.MODID,"cloud"); /** Spiral particle, like potions.

Defaults:
Lifetime: 8-40 ticks
Colour: white */ public static final ResourceLocation DARK_MAGIC = new ResourceLocation(Wizardry.MODID,"dark_magic"); /** Single pixel particle.

Defaults:
Lifetime: 16-80 ticks
Colour: white */ diff --git a/src/main/resources/assets/ebwizardry/textures/particle/cloud_0.png b/src/main/resources/assets/ebwizardry/textures/particle/cloud_0.png new file mode 100644 index 00000000..a2f8dd5f Binary files /dev/null and b/src/main/resources/assets/ebwizardry/textures/particle/cloud_0.png differ diff --git a/src/main/resources/assets/ebwizardry/textures/particle/cloud_1.png b/src/main/resources/assets/ebwizardry/textures/particle/cloud_1.png new file mode 100644 index 00000000..c424e60f Binary files /dev/null and b/src/main/resources/assets/ebwizardry/textures/particle/cloud_1.png differ diff --git a/src/main/resources/assets/ebwizardry/textures/particle/cloud_2.png b/src/main/resources/assets/ebwizardry/textures/particle/cloud_2.png new file mode 100644 index 00000000..7e49bfcc Binary files /dev/null and b/src/main/resources/assets/ebwizardry/textures/particle/cloud_2.png differ diff --git a/src/main/resources/assets/ebwizardry/textures/particle/cloud_3.png b/src/main/resources/assets/ebwizardry/textures/particle/cloud_3.png new file mode 100644 index 00000000..a53b59f4 Binary files /dev/null and b/src/main/resources/assets/ebwizardry/textures/particle/cloud_3.png differ