From 5c236bb5305bc8528712aac1392bab6fe853f267 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Thu, 10 Jun 2021 18:17:51 +0200 Subject: [PATCH] particles: `angry_villager`, `heart` --- .../particle/DefaultParticleFactory.kt | 4 ++ .../simple/emotion/AngryVillagerParticle.kt | 37 ++++++++++++++++ .../texture/simple/emotion/EmotionParticle.kt | 42 +++++++++++++++++++ .../texture/simple/emotion/HeartParticle.kt | 32 ++++++++++++++ 4 files changed, 115 insertions(+) create mode 100644 src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/simple/emotion/AngryVillagerParticle.kt create mode 100644 src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/simple/emotion/EmotionParticle.kt create mode 100644 src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/simple/emotion/HeartParticle.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 e482b0e81..502d0cf98 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 @@ -27,6 +27,8 @@ import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.da import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.damage.DamageIndicatorParticle import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.damage.EnchantedHitParticle import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.dust.DustParticle +import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.emotion.AngryVillagerParticle +import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.emotion.HeartParticle import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.enchant.EnchantParticle import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.enchant.NautilusParticle import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.fire.SmokeParticle @@ -74,4 +76,6 @@ object DefaultParticleFactory : DefaultFactory>( WarpedSporeParticle, NoteParticle, PortalParticle, + HeartParticle, + AngryVillagerParticle, ) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/simple/emotion/AngryVillagerParticle.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/simple/emotion/AngryVillagerParticle.kt new file mode 100644 index 000000000..24662a08c --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/simple/emotion/AngryVillagerParticle.kt @@ -0,0 +1,37 @@ +/* + * 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.emotion + +import de.bixilon.minosoft.data.mappings.ResourceLocation +import de.bixilon.minosoft.data.mappings.particle.data.ParticleData +import de.bixilon.minosoft.data.text.ChatColors +import de.bixilon.minosoft.gui.rendering.particle.ParticleFactory +import de.bixilon.minosoft.protocol.network.connection.PlayConnection +import de.bixilon.minosoft.util.KUtil.asResourceLocation +import glm_.vec3.Vec3d + +class AngryVillagerParticle(connection: PlayConnection, position: Vec3d, data: ParticleData? = null) : EmotionParticle(connection, position + Vec3d(0.0, 0.5, 0.0), data) { + + init { + color = ChatColors.WHITE + } + + companion object : ParticleFactory { + override val RESOURCE_LOCATION: ResourceLocation = "minecraft:angry_villager".asResourceLocation() + + override fun build(connection: PlayConnection, position: Vec3d, velocity: Vec3d, data: ParticleData): AngryVillagerParticle { + return AngryVillagerParticle(connection, position, data) + } + } +} diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/simple/emotion/EmotionParticle.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/simple/emotion/EmotionParticle.kt new file mode 100644 index 000000000..d20fb460e --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/simple/emotion/EmotionParticle.kt @@ -0,0 +1,42 @@ +/* + * 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.emotion + +import de.bixilon.minosoft.data.mappings.particle.data.ParticleData +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.protocol.network.connection.PlayConnection +import de.bixilon.minosoft.util.MMath +import glm_.vec3.Vec3d + +abstract class EmotionParticle(connection: PlayConnection, position: Vec3d, data: ParticleData? = null) : SimpleTextureParticle(connection, position, Vec3d.EMPTY, data) { + + override var scale: Float + get() = super.scale * MMath.clamp(floatAge / maxAge * 32.0f, 0.0f, 1.0f) + set(value) { + super.scale = value + } + + init { + accelerateIfYBlocked = true + friction = 0.86f + this.velocity *= 0.009999999776482582 + + this.velocity.y += 0.1 + super.scale *= 1.5f + maxAge = 16 + this.physics = false + } + +} diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/simple/emotion/HeartParticle.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/simple/emotion/HeartParticle.kt new file mode 100644 index 000000000..6148ec076 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/types/render/texture/simple/emotion/HeartParticle.kt @@ -0,0 +1,32 @@ +/* + * 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.emotion + +import de.bixilon.minosoft.data.mappings.ResourceLocation +import de.bixilon.minosoft.data.mappings.particle.data.ParticleData +import de.bixilon.minosoft.gui.rendering.particle.ParticleFactory +import de.bixilon.minosoft.protocol.network.connection.PlayConnection +import de.bixilon.minosoft.util.KUtil.asResourceLocation +import glm_.vec3.Vec3d + +class HeartParticle(connection: PlayConnection, position: Vec3d, data: ParticleData? = null) : EmotionParticle(connection, position + Vec3d(0.0, 0.5, 0.0), data) { + + companion object : ParticleFactory { + override val RESOURCE_LOCATION: ResourceLocation = "minecraft:heart".asResourceLocation() + + override fun build(connection: PlayConnection, position: Vec3d, velocity: Vec3d, data: ParticleData): HeartParticle { + return HeartParticle(connection, position, data) + } + } +}