package sourcecoded.quantum.client.renderer.fx.helpers;
import net.minecraft.world.World;
import sourcecoded.core.util.RandomUtils;
import sourcecoded.quantum.api.block.Colourizer;
import sourcecoded.quantum.client.renderer.fx.FXPortalFragment;
import sourcecoded.quantum.client.renderer.fx.FXRiftInjection;
import sourcecoded.quantum.client.renderer.fx.FXRiftNode;
import sourcecoded.quantum.client.renderer.fx.FXRiftNodeOrbit;
public class FXManager {
public static FXRiftNode riftNodeFX1Larger(float sizeBase, World world, double x, double y, double z, Colourizer colour) {
FXRiftNode.DataHolder data = new FXRiftNode.DataHolder(colour.rgb[0], colour.rgb[1], colour.rgb[2], 0.1F, sizeBase);
FXRiftNode nodeFX = new FXRiftNode(world, x, y, z, data, false);
ParticleDispatcher.INSTANCE.addParticleToRenderQueue(nodeFX);
return nodeFX;
}
public static FXRiftNode riftNodeFX1Smaller(float sizeBase, World world, double x, double y, double z) {
float size = sizeBase * 0.45F;
FXRiftNode.DataHolder data = new FXRiftNode.DataHolder(0F, 0F, 0F, 0.07F, size);
data.fadeLength = 0.4F;
FXRiftNode nodeFX = new FXRiftNode(world, x, y, z, data, false);
ParticleDispatcher.INSTANCE.addParticleToRenderQueue(nodeFX);
return nodeFX;
}
public static FXRiftInjection injectionFX(float size, World world, double x, double y, double z, boolean reversed, Colourizer colour) {
FXRiftInjection.DataHolder data = new FXRiftInjection.DataHolder(colour.rgb[0], colour.rgb[1], colour.rgb[2], 0.25F, size);
data.fadeLength = 0.4F;
if (reversed) {
data.xRad *= -1;
data.zRad *= -1;
}
FXRiftInjection nodeFX = new FXRiftInjection(world, x, y, z, data);
ParticleDispatcher.INSTANCE.addParticleToRenderQueue(nodeFX);
return nodeFX;
}
public static FXPortalFragment vacuumFX1(World world, int x, int y, int z) {
float size = RandomUtils.nextFloat(0.04F, 0.07F);
float r = RandomUtils.nextFloat(0F, 0.5F);
float g = RandomUtils.nextFloat(0F, 0.5F);
float b = RandomUtils.nextFloat(0F, 0.5F);
FXPortalFragment.DataHolder data = new FXPortalFragment.DataHolder(r, g, b, 0.3F, size);
data.fadeLength = 0F;
data.xRadius = RandomUtils.nextFloat(-3F, 3F);
data.yRadius = RandomUtils.nextFloat(-3F, 3F);
data.zRadius = RandomUtils.nextFloat(-3F, 3F);
FXPortalFragment fx = new FXPortalFragment(world, x + 0.5, y + 0.5, z + 0.5, data);
ParticleDispatcher.INSTANCE.addParticleToRenderQueue(fx);
return fx;
}
public static FXPortalFragment portalFX1Fragment(World world, int x, int y, int z) {
float size = RandomUtils.nextFloat(0.02F, 0.04F);
float r = RandomUtils.nextFloat(0F, 0.5F);
float g = RandomUtils.nextFloat(0F, 0.5F);
float b = RandomUtils.nextFloat(0F, 0.5F);
FXPortalFragment.DataHolder data = new FXPortalFragment.DataHolder(r, g, b, 0.3F, size);
data.fadeLength = 0F;
data.xRadius = RandomUtils.nextFloat(-1F, 1F);
data.yRadius = RandomUtils.nextFloat(-1F, 1F);
data.zRadius = RandomUtils.nextFloat(-1F, 1F);
FXPortalFragment fx = new FXPortalFragment(world, x + 0.5, y + 0.5, z + 0.5, data);
ParticleDispatcher.INSTANCE.addParticleToRenderQueue(fx);
return fx;
}
public static FXRiftNode portalFX1Hole(float sizeBase, World world, int x, int y, int z) {
FXRiftNode.DataHolder data = new FXRiftNode.DataHolder(0.0F, 0.0F, 0.0F, 0.2F, sizeBase);
data.fadeLength = 0.15F;
FXRiftNode nodeFX = new FXRiftNode(world, x + 0.5, y + 0.5, z + 0.5, data, true);
ParticleDispatcher.INSTANCE.addParticleToRenderQueue(nodeFX);
return nodeFX;
}
public static FXRiftNode portalFX2Filler(float sizeBase, World world, int x, int y, int z) {
FXRiftNode.DataHolder data = new FXRiftNode.DataHolder(0.2F, 0.2F, 0.2F, 0.4F, sizeBase / 1.2F);
data.fadeLength = 0.2F;
FXRiftNode nodeFX = new FXRiftNode(world, x + 0.5, y + 0.5, z + 0.5, data, false);
ParticleDispatcher.INSTANCE.addParticleToRenderQueue(nodeFX);
return nodeFX;
}
public static FXRiftNodeOrbit orbitingFX1(float size, World world, int x, int y, int z, Colourizer colour) {
float bright = RandomUtils.nextFloat(0.1F, 0.3F);
FXRiftNodeOrbit.DataHolder data = new FXRiftNodeOrbit.DataHolder(colour.rgb[0], colour.rgb[1], colour.rgb[2], bright, size);
data.xRad = RandomUtils.nextFloat(1.5F, 1F);
data.yRad = RandomUtils.nextFloat(2F, -2F);
data.zRad = data.xRad;
data.fadeLength = 0.05F;
FXRiftNodeOrbit nodeFX = new FXRiftNodeOrbit(world, x + 0.5, y + 0.5, z + 0.5, data);
ParticleDispatcher.INSTANCE.addParticleToRenderQueue(nodeFX);
return nodeFX;
}
}