From cac7d44bb07f30e1d3fad4d82ff00c0b7218058f Mon Sep 17 00:00:00 2001 From: Bixilon Date: Wed, 16 Jun 2021 18:13:00 +0200 Subject: [PATCH] particles: `bubble` --- .../particle/DefaultParticleFactory.kt | 2 + .../texture/simple/water/BubbleParticle.kt | 61 +++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/simple/water/BubbleParticle.kt diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/DefaultParticleFactory.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/DefaultParticleFactory.kt index 922dfa025..9bfa975e4 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/DefaultParticleFactory.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/DefaultParticleFactory.kt @@ -44,6 +44,7 @@ import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.su import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.suspend.DolphinParticle import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.suspend.HappyVillagerParticle import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.suspend.MyceliumParticle +import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.water.BubbleParticle import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.water.CrimsonSporeParticle import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.water.WarpedSporeParticle @@ -80,4 +81,5 @@ object DefaultParticleFactory : DefaultFactory>( HeartParticle, AngryVillagerParticle, EndRodParticle, + BubbleParticle, ) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/simple/water/BubbleParticle.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/simple/water/BubbleParticle.kt new file mode 100644 index 000000000..935027565 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/simple/water/BubbleParticle.kt @@ -0,0 +1,61 @@ +/* + * Minosoft + * Copyright (C) 2021 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.water + +import de.bixilon.minosoft.data.registries.ResourceLocation +import de.bixilon.minosoft.data.registries.particle.data.ParticleData +import de.bixilon.minosoft.gui.rendering.particle.ParticleFactory +import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.SimpleTextureParticle +import de.bixilon.minosoft.gui.rendering.util.VecUtil.EMPTY +import de.bixilon.minosoft.gui.rendering.util.VecUtil.assign +import de.bixilon.minosoft.gui.rendering.util.VecUtil.of +import de.bixilon.minosoft.protocol.network.connection.PlayConnection +import de.bixilon.minosoft.util.KUtil.asResourceLocation +import glm_.vec3.Vec3 +import glm_.vec3.Vec3d + +class BubbleParticle(connection: PlayConnection, position: Vec3d, velocity: Vec3d, data: ParticleData? = null) : SimpleTextureParticle(connection, position, Vec3d.EMPTY, data) { + + init { + this.spacing = Vec3(0.02f) + + this.scale *= random.nextFloat() * 0.6f + 0.2f + + this.velocity assign (velocity * 0.20000000298023224) + (Vec3d.of { random.nextDouble() * 2.0 - 1.0 } * 0.019999999552965164) + this.maxAge = (8.0f / random.nextFloat() * 0.8f + 0.2f).toInt() + + movement = false + } + + override fun tick() { + super.tick() + if (dead) { + return + } + this.velocity.y += 0.002 + forceMove(velocity) + velocity *= 0.8500000238418579 + + // ToDo: Check if in water: Kill particle + } + + + companion object : ParticleFactory { + override val RESOURCE_LOCATION: ResourceLocation = "minecraft:bubble".asResourceLocation() + + override fun build(connection: PlayConnection, position: Vec3d, velocity: Vec3d, data: ParticleData): BubbleParticle { + return BubbleParticle(connection, position, velocity, data) + } + } +}