回滚Glock17模型修改
This commit is contained in:
parent
f85f44dc67
commit
cdbf784864
1 changed files with 105 additions and 96 deletions
|
@ -1,9 +1,19 @@
|
|||
package com.atsuishio.superbwarfare.client.model.item;
|
||||
|
||||
import com.atsuishio.superbwarfare.Mod;
|
||||
import com.atsuishio.superbwarfare.client.AnimationHelper;
|
||||
import com.atsuishio.superbwarfare.client.overlay.CrossHairOverlay;
|
||||
import com.atsuishio.superbwarfare.data.gun.GunData;
|
||||
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||
import com.atsuishio.superbwarfare.item.gun.handgun.Glock17Item;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.util.Mth;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import software.bernie.geckolib.animation.AnimationState;
|
||||
import software.bernie.geckolib.cache.object.GeoBone;
|
||||
import software.bernie.geckolib.model.GeoModel;
|
||||
|
||||
public class Glock17ItemModel extends GeoModel<Glock17Item> {
|
||||
|
@ -13,113 +23,112 @@ public class Glock17ItemModel extends GeoModel<Glock17Item> {
|
|||
|
||||
@Override
|
||||
public ResourceLocation getAnimationResource(Glock17Item animatable) {
|
||||
return Mod.loc("animations/aurelia_sceptre.animation.json");
|
||||
return Mod.loc("animations/glock17.animation.json");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getModelResource(Glock17Item animatable) {
|
||||
return Mod.loc("geo/aurelia_sceptre.geo.json");
|
||||
return Mod.loc("geo/glock17.geo.json");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getTextureResource(Glock17Item animatable) {
|
||||
return Mod.loc("textures/item/aurelia_sceptre.png");
|
||||
return Mod.loc("textures/item/glock17.png");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCustomAnimations(Glock17Item animatable, long instanceId, AnimationState animationState) {
|
||||
// TODO 动画
|
||||
// GeoBone gun = getAnimationProcessor().getBone("bone");
|
||||
// GeoBone slide = getAnimationProcessor().getBone("huatao");
|
||||
// GeoBone bullet = getAnimationProcessor().getBone("bullet");
|
||||
//
|
||||
// Player player = Minecraft.getInstance().player;
|
||||
// if (player == null) return;
|
||||
// ItemStack stack = player.getMainHandItem();
|
||||
// if (!(stack.getItem() instanceof GunItem)) return;
|
||||
//
|
||||
// float times = 0.6f * (float) Math.min(Minecraft.getInstance().getTimer().getRealtimeDeltaTicks(), 0.8);
|
||||
// double zt = ClientEventHandler.zoomTime;
|
||||
// double zp = ClientEventHandler.zoomPos;
|
||||
// double zpz = ClientEventHandler.zoomPosZ;
|
||||
// double fpz = ClientEventHandler.firePosZ * 13 * times;
|
||||
// double fp = ClientEventHandler.firePos;
|
||||
// double fr = ClientEventHandler.fireRot;
|
||||
//
|
||||
// gun.setPosX(1.23f * (float) zp);
|
||||
// gun.setPosY(1.43f * (float) zp - (float) (0.2f * zpz));
|
||||
// gun.setPosZ(7f * (float) zp + (float) (0.3f * zpz));
|
||||
// gun.setScaleZ(1f - (0.55f * (float) zp));
|
||||
//
|
||||
// GeoBone body = getAnimationProcessor().getBone("gun");
|
||||
//
|
||||
// fireRotY = (float) Mth.lerp(0.3f * times, fireRotY, 0.6f * ClientEventHandler.recoilHorizon * fpz);
|
||||
// fireRotZ = (float) Mth.lerp(2f * times, fireRotZ, (0.4f + 0.5 * fpz) * ClientEventHandler.recoilHorizon);
|
||||
//
|
||||
// body.setPosX(-0.4f * (float) (ClientEventHandler.recoilHorizon * (0.5 + 0.4 * ClientEventHandler.fireSpread)));
|
||||
// body.setPosY((float) (0.15f * fp + 0.18f * fr));
|
||||
// body.setPosZ((float) (1.935 * fp + 0.16f * fr + 0.925 * fpz));
|
||||
// body.setRotX((float) (0.08f * fp + 0.1f * fr + 0.35f * fpz));
|
||||
// body.setRotY(fireRotY);
|
||||
// body.setRotZ(fireRotZ);
|
||||
//
|
||||
// body.setPosX((float) (body.getPosX() * (1 - 0.4 * zt)));
|
||||
// body.setPosY((float) (body.getPosY() * (-1 + 0.5 * zt)));
|
||||
// body.setPosZ((float) (body.getPosZ() * (1 - 0.3 * zt)));
|
||||
// body.setRotX((float) (body.getRotX() * (1 - 0.8 * zt)));
|
||||
// body.setRotY((float) (body.getRotY() * (1 - 0.7 * zt)));
|
||||
// body.setRotZ((float) (body.getRotZ() * (1 - 0.65 * zt)));
|
||||
//
|
||||
// CrossHairOverlay.gunRot = body.getRotZ();
|
||||
//
|
||||
// slide.setPosZ(1.5f * (float) fp);
|
||||
//
|
||||
// ClientEventHandler.gunRootMove(getAnimationProcessor());
|
||||
//
|
||||
// GeoBone camera = getAnimationProcessor().getBone("camera");
|
||||
// GeoBone main = getAnimationProcessor().getBone("0");
|
||||
//
|
||||
// float numR = (float) (1 - 0.12 * zt);
|
||||
// float numP = (float) (1 - 0.68 * zt);
|
||||
//
|
||||
// var data = GunData.from(stack);
|
||||
//
|
||||
// if (data.reload.time() > 0) {
|
||||
// main.setRotX(numR * main.getRotX());
|
||||
// main.setRotY(numR * main.getRotY());
|
||||
// main.setRotZ(numR * main.getRotZ());
|
||||
// main.setPosX(numP * main.getPosX());
|
||||
// main.setPosY(numP * main.getPosY());
|
||||
// main.setPosZ(numP * main.getPosZ());
|
||||
// camera.setRotX(numR * camera.getRotX());
|
||||
// camera.setRotY(numR * camera.getRotY());
|
||||
// camera.setRotZ(numR * camera.getRotZ());
|
||||
// }
|
||||
//
|
||||
// ClientEventHandler.handleReloadShake(Mth.RAD_TO_DEG * camera.getRotX(), Mth.RAD_TO_DEG * camera.getRotY(), Mth.RAD_TO_DEG * camera.getRotZ());
|
||||
// AnimationHelper.handleShellsAnimation(getAnimationProcessor(), 0.7f, 1f);
|
||||
//
|
||||
// GeoBone shell = getAnimationProcessor().getBone("shell");
|
||||
// GeoBone barrel = getAnimationProcessor().getBone("guan");
|
||||
// if (data.holdOpen.get()) {
|
||||
// slide.setPosZ(1.5f);
|
||||
// barrel.setRotX(4 * Mth.DEG_TO_RAD);
|
||||
// bullet.setScaleX(0);
|
||||
// bullet.setScaleY(0);
|
||||
// bullet.setScaleZ(0);
|
||||
//
|
||||
// shell.setScaleX(0);
|
||||
// shell.setScaleY(0);
|
||||
// shell.setScaleZ(0);
|
||||
// } else {
|
||||
// barrel.setRotX(0);
|
||||
// bullet.setScaleX(1);
|
||||
// bullet.setScaleY(1);
|
||||
// bullet.setScaleZ(1);
|
||||
//
|
||||
// shell.setScaleX(1);
|
||||
// shell.setScaleY(1);
|
||||
// shell.setScaleZ(1);
|
||||
// }
|
||||
GeoBone gun = getAnimationProcessor().getBone("bone");
|
||||
GeoBone slide = getAnimationProcessor().getBone("huatao");
|
||||
GeoBone bullet = getAnimationProcessor().getBone("bullet");
|
||||
|
||||
Player player = Minecraft.getInstance().player;
|
||||
if (player == null) return;
|
||||
ItemStack stack = player.getMainHandItem();
|
||||
if (!(stack.getItem() instanceof GunItem)) return;
|
||||
|
||||
float times = 0.6f * (float) Math.min(Minecraft.getInstance().getTimer().getRealtimeDeltaTicks(), 0.8);
|
||||
double zt = ClientEventHandler.zoomTime;
|
||||
double zp = ClientEventHandler.zoomPos;
|
||||
double zpz = ClientEventHandler.zoomPosZ;
|
||||
double fpz = ClientEventHandler.firePosZ * 13 * times;
|
||||
double fp = ClientEventHandler.firePos;
|
||||
double fr = ClientEventHandler.fireRot;
|
||||
|
||||
gun.setPosX(1.23f * (float) zp);
|
||||
gun.setPosY(1.43f * (float) zp - (float) (0.2f * zpz));
|
||||
gun.setPosZ(7f * (float) zp + (float) (0.3f * zpz));
|
||||
gun.setScaleZ(1f - (0.55f * (float) zp));
|
||||
|
||||
GeoBone body = getAnimationProcessor().getBone("gun");
|
||||
|
||||
fireRotY = (float) Mth.lerp(0.3f * times, fireRotY, 0.6f * ClientEventHandler.recoilHorizon * fpz);
|
||||
fireRotZ = (float) Mth.lerp(2f * times, fireRotZ, (0.4f + 0.5 * fpz) * ClientEventHandler.recoilHorizon);
|
||||
|
||||
body.setPosX(-0.4f * (float) (ClientEventHandler.recoilHorizon * (0.5 + 0.4 * ClientEventHandler.fireSpread)));
|
||||
body.setPosY((float) (0.15f * fp + 0.18f * fr));
|
||||
body.setPosZ((float) (1.935 * fp + 0.16f * fr + 0.925 * fpz));
|
||||
body.setRotX((float) (0.08f * fp + 0.1f * fr + 0.35f * fpz));
|
||||
body.setRotY(fireRotY);
|
||||
body.setRotZ(fireRotZ);
|
||||
|
||||
body.setPosX((float) (body.getPosX() * (1 - 0.4 * zt)));
|
||||
body.setPosY((float) (body.getPosY() * (-1 + 0.5 * zt)));
|
||||
body.setPosZ((float) (body.getPosZ() * (1 - 0.3 * zt)));
|
||||
body.setRotX((float) (body.getRotX() * (1 - 0.8 * zt)));
|
||||
body.setRotY((float) (body.getRotY() * (1 - 0.7 * zt)));
|
||||
body.setRotZ((float) (body.getRotZ() * (1 - 0.65 * zt)));
|
||||
|
||||
CrossHairOverlay.gunRot = body.getRotZ();
|
||||
|
||||
slide.setPosZ(1.5f * (float) fp);
|
||||
|
||||
ClientEventHandler.gunRootMove(getAnimationProcessor());
|
||||
|
||||
GeoBone camera = getAnimationProcessor().getBone("camera");
|
||||
GeoBone main = getAnimationProcessor().getBone("0");
|
||||
|
||||
float numR = (float) (1 - 0.12 * zt);
|
||||
float numP = (float) (1 - 0.68 * zt);
|
||||
|
||||
var data = GunData.from(stack);
|
||||
|
||||
if (data.reload.time() > 0) {
|
||||
main.setRotX(numR * main.getRotX());
|
||||
main.setRotY(numR * main.getRotY());
|
||||
main.setRotZ(numR * main.getRotZ());
|
||||
main.setPosX(numP * main.getPosX());
|
||||
main.setPosY(numP * main.getPosY());
|
||||
main.setPosZ(numP * main.getPosZ());
|
||||
camera.setRotX(numR * camera.getRotX());
|
||||
camera.setRotY(numR * camera.getRotY());
|
||||
camera.setRotZ(numR * camera.getRotZ());
|
||||
}
|
||||
|
||||
ClientEventHandler.handleReloadShake(Mth.RAD_TO_DEG * camera.getRotX(), Mth.RAD_TO_DEG * camera.getRotY(), Mth.RAD_TO_DEG * camera.getRotZ());
|
||||
AnimationHelper.handleShellsAnimation(getAnimationProcessor(), 0.7f, 1f);
|
||||
|
||||
GeoBone shell = getAnimationProcessor().getBone("shell");
|
||||
GeoBone barrel = getAnimationProcessor().getBone("guan");
|
||||
if (data.holdOpen.get()) {
|
||||
slide.setPosZ(1.5f);
|
||||
barrel.setRotX(4 * Mth.DEG_TO_RAD);
|
||||
bullet.setScaleX(0);
|
||||
bullet.setScaleY(0);
|
||||
bullet.setScaleZ(0);
|
||||
|
||||
shell.setScaleX(0);
|
||||
shell.setScaleY(0);
|
||||
shell.setScaleZ(0);
|
||||
} else {
|
||||
barrel.setRotX(0);
|
||||
bullet.setScaleX(1);
|
||||
bullet.setScaleY(1);
|
||||
bullet.setScaleZ(1);
|
||||
|
||||
shell.setScaleX(1);
|
||||
shell.setScaleY(1);
|
||||
shell.setScaleZ(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue