From 4f5a6c1ae97f4efc1bbdaa298f83f2df3b886ffb Mon Sep 17 00:00:00 2001 From: ByteDice Date: Sun, 24 Nov 2024 02:33:25 +0100 Subject: [PATCH] finished forceFields args --- .../bytedice/bde_particles/Bde_particles.kt | 1 + .../commands/ManageConfigArgs.kt | 48 ++++++++++++++++++- 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/com/bytedice/bde_particles/Bde_particles.kt b/src/main/kotlin/com/bytedice/bde_particles/Bde_particles.kt index c988f2e..91b57d3 100644 --- a/src/main/kotlin/com/bytedice/bde_particles/Bde_particles.kt +++ b/src/main/kotlin/com/bytedice/bde_particles/Bde_particles.kt @@ -28,6 +28,7 @@ import java.util.* // TODO: finish the particle ticking +// TODO: make custom commands to create particles easier (only temporarily saved) var ALL_PARTICLE_EMITTERS: Array = emptyArray() diff --git a/src/main/kotlin/com/bytedice/bde_particles/commands/ManageConfigArgs.kt b/src/main/kotlin/com/bytedice/bde_particles/commands/ManageConfigArgs.kt index fb0c9d2..e7f3213 100644 --- a/src/main/kotlin/com/bytedice/bde_particles/commands/ManageConfigArgs.kt +++ b/src/main/kotlin/com/bytedice/bde_particles/commands/ManageConfigArgs.kt @@ -301,7 +301,8 @@ class ArgConfigParticleKeys { fun forceFields() : LiteralArgumentBuilder { return CommandManager.literal("ForceFields") .then(argAddForceField()) - } // TODO + .then(argRemoveForceField()) + } fun gravity() : LiteralArgumentBuilder { return CommandManager.literal("gravity") .then(CommandManager.argument("X", FloatArgumentType.floatArg()) @@ -498,6 +499,49 @@ fun argAddForceField() : LiteralArgumentBuilder { } +fun argRemoveForceField() : LiteralArgumentBuilder { + return CommandManager.literal("remove") + .then(CommandManager.argument("Force Field Name", StringArgumentType.string()) + .suggests { context, builder -> + val particleId = StringArgumentType.getString(context, "Registered Emitter ID") + val particleIndex = IntegerArgumentType.getInteger(context, "Particle Index") + val params = getEmitterParams(particleId) + val forceFields = params!!.particleTypes[particleIndex].forceFields + + forceFields.iterator().forEach { + builder.suggest(it.name) + } + + CompletableFuture.completedFuture(builder.build()) + } + .executes { context -> + val ffName = StringArgumentType.getString(context, "Force Field Name") + val particleId = StringArgumentType.getString(context, "Registered Emitter ID") + val particleIndex = IntegerArgumentType.getInteger(context, "Particle Index") + + val params = getEmitterParams(particleId) + val forceFields = params!!.particleTypes[particleIndex].forceFields + val newForceFields: MutableList = forceFields.toMutableList() + + for (forceField in forceFields) { + if (forceField.name == ffName) { + newForceFields.remove(forceField) + } + } + + val feedback = argUpdateParticleParam( + context, + particleIndex, + "forceFields", + newForceFields + ) + context.source.sendFeedback( { feedback }, false) + Command.SINGLE_SUCCESS + } + ) +} + + fun forceFieldAddSphereExec(context: CommandContext) : Int { val particleIndex = IntegerArgumentType.getInteger(context, "Particle Index") val radius = FloatArgumentType.getFloat(context, "Radius") @@ -562,7 +606,7 @@ fun forceFieldGenericParams(context: CommandContext, shape: val maxForce = FloatArgumentType.getFloat(context, "Max Force") return ForceField( - name, + name.replace(" ", "_"), Vector3f(posX, posY, posZ), Pair(minForce, maxForce), shape