回滚BMP2模型

This commit is contained in:
Atsuihsio 2025-01-26 15:57:25 +08:00
parent 2e43bc96fe
commit 5abdadf0c9
2 changed files with 129 additions and 49 deletions

View file

@ -50,57 +50,137 @@ public class Bmp2Model extends GeoModel<Bmp2Entity> {
CoreGeoBone trackR = getAnimationProcessor().getBone("trackR" + i); CoreGeoBone trackR = getAnimationProcessor().getBone("trackR" + i);
CoreGeoBone trackRRot = getAnimationProcessor().getBone("trackRRot" + i); CoreGeoBone trackRRot = getAnimationProcessor().getBone("trackRRot" + i);
float t1 = animatable.getEntityData().get(TRACK_L) + 2 * i % 100; float t = animatable.getEntityData().get(TRACK_L) + 2 * i;
setTrackPos(trackL, trackLRot, t1);
float t2 = animatable.getEntityData().get(TRACK_R) + 2 * i % 100; if (t >= 100) {
setTrackPos(trackR, trackRRot, t2); t -= 100;
} }
}
private static void setTrackPos(CoreGeoBone track, CoreGeoBone trackRot, float t) { if (t < 37.5) {
if (track == null || trackRot == null) return; trackL.setPosY(0);
trackL.setPosZ(3 * t);
trackLRot.setRotX(0);
}
if (t < 37.5) { if (t >= 37.5 && t < 39.5) {
track.setPosY(0); trackL.setPosY(-(t - 37.5f) * 3 * 0.7071f);
track.setPosZ(3 * t); trackL.setPosZ(3 * 37.5f + (t - 37.5f) * 3 * 0.7071f);
trackRot.setRotX(0); trackLRot.setRotX(45 * Mth.DEG_TO_RAD);
} else if (t < 39.5) { }
track.setPosY(-(t - 37.5f) * 3 * 0.7071f);
track.setPosZ(3 * 37.5f + (t - 37.5f) * 3 * 0.7071f); if (t >= 39.5 && t < 41.5) {
trackRot.setRotX(45 * Mth.DEG_TO_RAD); trackL.setPosY(-5.3f - (t - 39.5f) * 3);
} else if (t < 41.5) { trackL.setPosZ(116);
track.setPosY(-5.3f - (t - 39.5f) * 3); trackLRot.setRotX(90 * Mth.DEG_TO_RAD);
track.setPosZ(116); }
trackRot.setRotX(90 * Mth.DEG_TO_RAD);
} else if (t < 43) { if (t >= 41.5 && t < 43) {
track.setPosY(-11.6f - (t - 41.5f) * 3 * 0.7071f); trackL.setPosY(-11.6f - (t - 41.5f) * 3 * 0.7071f);
track.setPosZ(115 - (t - 41.5f) * 3 * 0.7071f); trackL.setPosZ(115 - (t - 41.5f) * 3 * 0.7071f);
trackRot.setRotX(135 * Mth.DEG_TO_RAD); trackLRot.setRotX(135 * Mth.DEG_TO_RAD);
} else if (t < 49.5) { }
track.setPosY(-15.6f - (t - 43f) * 3 * 0.45f);
track.setPosZ(109.5f - (t - 43f) * 3 * 0.75f); if (t >= 43 && t < 49.5) {
trackRot.setRotX(150 * Mth.DEG_TO_RAD); trackL.setPosY(-15.6f - (t - 43f) * 3 * 0.45f);
} else if (t < 76.5) { trackL.setPosZ(109.5f - (t - 43f) * 3 * 0.75f);
track.setPosY(-23.5f); trackLRot.setRotX(150 * Mth.DEG_TO_RAD);
track.setPosZ(95f - (t - 49.5f) * 3); }
trackRot.setRotX(180 * Mth.DEG_TO_RAD);
} else if (t < 83.5) { if (t >= 49.5 && t < 76.5) {
track.setPosY(-23.5f + (t - 76.5f) * 3 * 0.45f); trackL.setPosY(-23.5f);
track.setPosZ(13.5f - (t - 76.5f) * 3 * 0.75f); trackL.setPosZ(95f - (t - 49.5f) * 3);
trackRot.setRotX(210 * Mth.DEG_TO_RAD); trackLRot.setRotX(180 * Mth.DEG_TO_RAD);
} else if (t < 85.5) { }
track.setPosY(-12.7f + (t - 83.5f) * 3 * 0.7071f);
track.setPosZ(-3.5f - (t - 83.5f) * 3 * 0.7071f); if (t >= 76.5 && t < 83.5) {
trackRot.setRotX(225 * Mth.DEG_TO_RAD); trackL.setPosY(-23.5f + (t - 76.5f) * 3 * 0.45f);
} else if (t < 87) { trackL.setPosZ(13.5f - (t - 76.5f) * 3 * 0.75f);
track.setPosY(-9.2f + (t - 85.5f) * 3); trackLRot.setRotX(210 * Mth.DEG_TO_RAD);
track.setPosZ(-6.9f); }
trackRot.setRotX(270 * Mth.DEG_TO_RAD);
} else if (t < 89) { if (t >= 83.5 && t < 85.5) {
track.setPosY(-4.3f + (t - 87f) * 3 * 0.7071f); trackL.setPosY(-12.7f + (t - 83.5f) * 3 * 0.7071f);
track.setPosZ(-6.9f + (t - 87f) * 3 * 0.7071f); trackL.setPosZ(-3.5f - (t - 83.5f) * 3 * 0.7071f);
trackRot.setRotX(315 * Mth.DEG_TO_RAD); trackLRot.setRotX(225 * Mth.DEG_TO_RAD);
}
if (t >= 85.5 && t < 87) {
trackL.setPosY(-9.2f + (t - 85.5f) * 3);
trackL.setPosZ(-6.9f);
trackLRot.setRotX(270 * Mth.DEG_TO_RAD);
}
if (t >= 87 && t < 89) {
trackL.setPosY(-4.3f + (t - 87f) * 3 * 0.7071f);
trackL.setPosZ(-6.9f + (t - 87f) * 3 * 0.7071f);
trackLRot.setRotX(315 * Mth.DEG_TO_RAD);
}
float t2 = animatable.getEntityData().get(TRACK_R) + 2 * i;
if (t2 >= 100) {
t2 -= 100;
}
if (t2 < 37.5) {
trackR.setPosY(0);
trackR.setPosZ(3 * t2);
trackRRot.setRotX(0);
}
if (t2>= 37.5 && t2< 39.5) {
trackR.setPosY(-(t2- 37.5f) * 3 * 0.7071f);
trackR.setPosZ(3 * 37.5f + (t2- 37.5f) * 3 * 0.7071f);
trackRRot.setRotX(45 * Mth.DEG_TO_RAD);
}
if (t2>= 39.5 && t2< 41.5) {
trackR.setPosY(-5.3f - (t2- 39.5f) * 3);
trackR.setPosZ(116);
trackRRot.setRotX(90 * Mth.DEG_TO_RAD);
}
if (t2>= 41.5 && t2< 43) {
trackR.setPosY(-11.6f - (t2- 41.5f) * 3 * 0.7071f);
trackR.setPosZ(115 - (t2- 41.5f) * 3 * 0.7071f);
trackRRot.setRotX(135 * Mth.DEG_TO_RAD);
}
if (t2>= 43 && t2< 49.5) {
trackR.setPosY(-15.6f - (t2- 43f) * 3 * 0.45f);
trackR.setPosZ(109.5f - (t2- 43f) * 3 * 0.75f);
trackRRot.setRotX(150 * Mth.DEG_TO_RAD);
}
if (t2>= 49.5 && t2< 76.5) {
trackR.setPosY(-23.5f);
trackR.setPosZ(95f - (t2- 49.5f) * 3);
trackRRot.setRotX(180 * Mth.DEG_TO_RAD);
}
if (t2>= 76.5 && t2< 83.5) {
trackR.setPosY(-23.5f + (t2- 76.5f) * 3 * 0.45f);
trackR.setPosZ(13.5f - (t2- 76.5f) * 3 * 0.75f);
trackRRot.setRotX(210 * Mth.DEG_TO_RAD);
}
if (t2>= 83.5 && t2< 85.5) {
trackR.setPosY(-12.7f + (t2- 83.5f) * 3 * 0.7071f);
trackR.setPosZ(-3.5f - (t2- 83.5f) * 3 * 0.7071f);
trackRRot.setRotX(225 * Mth.DEG_TO_RAD);
}
if (t2>= 85.5 && t2< 87) {
trackR.setPosY(-9.2f + (t2- 85.5f) * 3);
trackR.setPosZ(-6.9f);
trackRRot.setRotX(270 * Mth.DEG_TO_RAD);
}
if (t2>= 87 && t2< 89) {
trackR.setPosY(-4.3f + (t2- 87f) * 3 * 0.7071f);
trackR.setPosZ(-6.9f + (t2- 87f) * 3 * 0.7071f);
trackRRot.setRotX(315 * Mth.DEG_TO_RAD);
}
} }
} }
} }

View file

@ -163,7 +163,7 @@ public class MobileVehicleEntity extends EnergyVehicleEntity {
if (!this.canCrushEntities()) return; if (!this.canCrushEntities()) return;
if (velocity.horizontalDistance() < 0.25) return; if (velocity.horizontalDistance() < 0.25) return;
if (isRemoved()) return; if (isRemoved()) return;
var frontBox = getBoundingBox().move(velocity.scale(0.5)); var frontBox = getBoundingBox().move(velocity.scale(0.6));
var velAdd = velocity.add(0, 0, 0).scale(0.9); var velAdd = velocity.add(0, 0, 0).scale(0.9);
var entities = level().getEntities(EntityTypeTest.forClass(Entity.class), frontBox, var entities = level().getEntities(EntityTypeTest.forClass(Entity.class), frontBox,