package dF.Wirent.functions.impl.render;
import com.mojang.blaze3d.matrix.MatrixStack;
import dF.Wirent.functions.api.Category;
import dF.Wirent.functions.api.Function;
import dF.Wirent.functions.api.FunctionRegister;
import dF.Wirent.functions.impl.combat.KillAura;
import dF.Wirent.functions.settings.Setting;
import dF.Wirent.functions.settings.impl.BooleanSetting;
import dF.Wirent.functions.settings.impl.ModeSetting;
import dF.Wirent.functions.settings.impl.SliderSetting;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.math.vector.Vector3f;
@FunctionRegister(
name = "SwingAnimation",
type = Category.Render
)
public class SwingAnimation extends Function {
public ModeSetting animationMode = new ModeSetting("Мод", "2", new String[]{"1", "2", "3", "4", "5", "6", "7"});
public SliderSetting swingPower = new SliderSetting("Сила", 5.0F, 1.0F, 10.0F, 0.05F);
public SliderSetting swingSpeed = new SliderSetting("Скорость", 10.0F, 3.0F, 10.0F, 1.0F);
public SliderSetting scale = new SliderSetting("Размер", 1.0F, 0.5F, 1.5F, 0.05F);
public final BooleanSetting onlyAura = new BooleanSetting("Только с киллаурой", true);
public final BooleanSetting full7Rotation = new BooleanSetting("Вращение на 360", false);
public KillAura killAura;
public SwingAnimation(KillAura killAura) {
this.killAura = killAura;
this.addSettings(new Setting[]{this.animationMode, this.swingPower, this.swingSpeed, this.scale, this.onlyAura, this.full7Rotation});
}
public void animationProcess(MatrixStack stack, float swingProgress, Runnable runnable) {
float anim = (float)Math.sin((double)swingProgress * 1.5707963267948966 * 2.0);
if ((Boolean)this.onlyAura.get() && this.killAura.getTarget() == null) {
runnable.run();
} else {
if ((Boolean)this.full7Rotation.get()) {
long time = System.currentTimeMillis();
float rotation = (float)(time % 3600L) / 10.0F;
stack.scale((Float)this.scale.get(), (Float)this.scale.get(), (Float)this.scale.get());
float yOffset = -0.2F * swingProgress;
stack.translate(0.0, (double)yOffset, -0.5);
stack.rotate(Vector3f.YP.rotationDegrees(rotation));
} else {
switch (this.animationMode.getIndex()) {
case 0:
stack.scale((Float)this.scale.get(), (Float)this.scale.get(), (Float)this.scale.get());
stack.translate(0.4000000059604645, 0.10000000149011612, -0.5);
stack.rotate(Vector3f.YP.rotationDegrees(90.0F));
stack.rotate(Vector3f.ZP.rotationDegrees(-60.0F));
stack.rotate(Vector3f.XP.rotationDegrees(-90.0F - (Float)this.swingPower.get() * 10.0F * anim));
break;
case 1:
stack.scale((Float)this.scale.get(), (Float)this.scale.get(), (Float)this.scale.get());
stack.translate(0.0, 0.0, -0.5);
stack.rotate(Vector3f.YP.rotationDegrees(15.0F * anim));
stack.rotate(Vector3f.ZP.rotationDegrees(-60.0F * anim));
stack.rotate(Vector3f.XP.rotationDegrees((-90.0F - (Float)this.swingPower.get()) * anim));
break;
case 2:
stack.scale((Float)this.scale.get(), (Float)this.scale.get(), (Float)this.scale.get());
stack.translate(0.4000000059604645, 0.0, -0.5);
stack.rotate(Vector3f.YP.rotationDegrees(90.0F));
stack.rotate(Vector3f.ZP.rotationDegrees(-30.0F));
stack.rotate(Vector3f.XP.rotationDegrees(-90.0F - (Float)this.swingPower.get() * 10.0F * anim));
break;
case 3:
stack.scale((Float)this.scale.get(), (Float)this.scale.get(), (Float)this.scale.get());
stack.translate(0.0, 0.0, -0.5);
stack.rotate(Vector3f.YP.rotationDegrees(0.0F - anim));
stack.rotate(Vector3f.ZP.rotationDegrees(60.0F * anim));
stack.rotate(Vector3f.XP.rotationDegrees(-50.0F + anim));
break;
case 4:
stack.scale((Float)this.scale.get(), (Float)this.scale.get(), (Float)this.scale.get());
stack.translate(0.0, 0.0, -0.5);
stack.rotate(Vector3f.YP.rotationDegrees(90.0F));
stack.rotate(Vector3f.ZP.rotationDegrees(0.0F));
stack.rotate(Vector3f.XP.rotationDegrees(-200.0F - (Float)this.swingPower.get() * 10.0F * anim));
break;
case 5:
stack.scale((Float)this.scale.get(), (Float)this.scale.get(), (Float)this.scale.get());
stack.translate(0.0, (double)(-0.5F * anim), (double)(-0.5F * anim));
stack.rotate(Vector3f.XP.rotationDegrees(-90.0F + anim));
stack.translate(0.0, (double)(0.5F * anim), (double)(0.5F * anim));
break;
default:
stack.scale((Float)this.scale.get(), (Float)this.scale.get(), (Float)this.scale.get());
runnable.run();
}
}
}
}
}