注释掉OBB实体碰撞部分
This commit is contained in:
parent
40dad236dd
commit
b92c421b83
1 changed files with 23 additions and 26 deletions
|
@ -1,12 +1,9 @@
|
|||
package com.atsuishio.superbwarfare.mixins;
|
||||
|
||||
import com.atsuishio.superbwarfare.entity.OBBEntity;
|
||||
import com.atsuishio.superbwarfare.entity.mixin.OBBHitter;
|
||||
import com.atsuishio.superbwarfare.entity.vehicle.base.MobileVehicleEntity;
|
||||
import com.atsuishio.superbwarfare.tools.OBB;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.phys.AABB;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
@ -65,29 +62,29 @@ public abstract class EntityMixin implements OBBHitter {
|
|||
}
|
||||
|
||||
// TODO 优化OBB面算法并排除AABB影响,现在下车就动不了了
|
||||
@Inject(method = "collide", at = @At("HEAD"), cancellable = true)
|
||||
private void onHitOBB(Vec3 movement, CallbackInfoReturnable<Vec3> cir) {
|
||||
AABB boundingBox = this.getBoundingBox();
|
||||
Entity self = (Entity) (Object) this;
|
||||
var list = this.level().getEntities(self, boundingBox.expandTowards(movement).inflate(1), e -> true);
|
||||
var entity = list.stream().filter(e -> e instanceof OBBEntity).min((e1, e2) -> (int) (e1.position().distanceTo(self.position()) - e2.position().distanceTo(self.position()))).orElse(null);
|
||||
if (entity == null || entity == self) return;
|
||||
|
||||
OBBEntity obbEntity = (OBBEntity) entity;
|
||||
Vec3 position = self.position();
|
||||
// 第一版实现
|
||||
var faceInfo = OBB.findClosestFace(obbEntity.getOBBs(), position);
|
||||
if (faceInfo == null) return;
|
||||
double dot = movement.dot(new Vec3(faceInfo.faceNormal()));
|
||||
var vec = new Vec3(faceInfo.faceNormal()).multiply(dot, dot, dot);
|
||||
|
||||
if (self instanceof Player player) {
|
||||
player.displayClientMessage(Component.literal("Vec: [" + vec.x + ", " + vec.y + ", " + vec.z + "]," +
|
||||
" Face: [" + faceInfo.faceNormal().x + ", " + faceInfo.faceNormal().y + ", " + faceInfo.faceNormal().z + "]"), true);
|
||||
}
|
||||
|
||||
cir.setReturnValue(movement.subtract(vec));
|
||||
}
|
||||
// @Inject(method = "collide", at = @At("HEAD"), cancellable = true)
|
||||
// private void onHitOBB(Vec3 movement, CallbackInfoReturnable<Vec3> cir) {
|
||||
// AABB boundingBox = this.getBoundingBox();
|
||||
// Entity self = (Entity) (Object) this;
|
||||
// var list = this.level().getEntities(self, boundingBox.expandTowards(movement).inflate(1), e -> true);
|
||||
// var entity = list.stream().filter(e -> e instanceof OBBEntity).min((e1, e2) -> (int) (e1.position().distanceTo(self.position()) - e2.position().distanceTo(self.position()))).orElse(null);
|
||||
// if (entity == null || entity == self) return;
|
||||
//
|
||||
// OBBEntity obbEntity = (OBBEntity) entity;
|
||||
// Vec3 position = self.position();
|
||||
// // 第一版实现
|
||||
// var faceInfo = OBB.findClosestFace(obbEntity.getOBBs(), position);
|
||||
// if (faceInfo == null) return;
|
||||
// double dot = movement.dot(new Vec3(faceInfo.faceNormal()));
|
||||
// var vec = new Vec3(faceInfo.faceNormal()).multiply(dot, dot, dot);
|
||||
//
|
||||
// if (self instanceof Player player) {
|
||||
// player.displayClientMessage(Component.literal("Vec: [" + vec.x + ", " + vec.y + ", " + vec.z + "]," +
|
||||
// " Face: [" + faceInfo.faceNormal().x + ", " + faceInfo.faceNormal().y + ", " + faceInfo.faceNormal().z + "]"), true);
|
||||
// }
|
||||
//
|
||||
// cir.setReturnValue(movement.subtract(vec));
|
||||
// }
|
||||
|
||||
// TODO 优化后续逻辑
|
||||
// @Redirect(method = "turn(DD)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;setXRot(F)V", ordinal = 1))
|
||||
|
|
Loading…
Add table
Reference in a new issue