BodyMotionAimCharge class
Пакет: com.hypixel.hytale.server.npc.corecomponents.combat
Файл: com/hypixel/hytale/server/npc/corecomponents/combat/BodyMotionAimCharge.java
extends: BodyMotionBase
Поля (12)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
ComponentType<EntityStore, TransformComponent> |
TRANSFORM_COMPONENT_TYPE |
|
double |
var11 |
|
double |
var13 |
|
double |
var15 |
|
float |
var17 |
|
float |
var18 |
|
TransformComponent |
var19 |
|
Rotation3f |
var20 |
|
double |
var21 |
|
Ref |
var23 |
|
Vector3d |
var8 |
|
double |
var9 |
Методы (3)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
|
if if(var3 != null) |
|
|
if if(var21 < var9 - 1.0E-6) |
abstract |
|
super super(var1) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.npc.corecomponents.combat;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.math.vector.Rotation3f;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.physics.util.PhysicsMath;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderSupport;
class="kw">import com.hypixel.hytale.server.npc.corecomponents.BodyMotionBase;
class="kw">import com.hypixel.hytale.server.npc.corecomponents.combat.builders.BuilderBodyMotionAimCharge;
class="kw">import com.hypixel.hytale.server.npc.instructions.ExecutionSupport;
class="kw">import com.hypixel.hytale.server.npc.movement.Steering;
class="kw">import com.hypixel.hytale.server.npc.movement.controllers.ProbeMoveData;
class="kw">import com.hypixel.hytale.server.npc.sensorinfo.InfoProvider;
class="kw">import com.hypixel.hytale.server.npc.util.AimingData;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">public class BodyMotionAimCharge class="kw">extends BodyMotionBase {
class="kw">protected class="kw">static class="kw">final ComponentType<EntityStore, TransformComponent> TRANSFORM_COMPONENT_TYPE = TransformComponent.getComponentType();
class="kw">protected class="kw">final double relativeTurnSpeed;
class="kw">protected class="kw">final AimingData aimingData = new AimingData();
class="kw">protected class="kw">final Vector3d direction = new Vector3d();
class="kw">protected class="kw">final ProbeMoveData probeMoveData = new ProbeMoveData();
class="kw">public BodyMotionAimCharge(@Nonnull BuilderBodyMotionAimCharge var1, @Nonnull BuilderSupport var2) {
super(var1);
this.relativeTurnSpeed = var1.getRelativeTurnSpeed(var2);
}
@Override
class="kw">public void preComputeSteering(@Nonnull Ref<EntityStore> var1, @Nonnull ExecutionSupport var2, @Nullable InfoProvider var3, @Nonnull Store<EntityStore> var4) {
if (var3 != null) {
var3.passExtraInfo(this.aimingData);
}
}
@Override
class="kw">public boolean computeSteering(
@Nonnull Ref<EntityStore> var1,
@Nonnull ExecutionSupport var2,
@Nullable InfoProvider var3,
double var4,
@Nonnull Steering var6,
@Nonnull ComponentAccessor<EntityStore> var7
) {
if (var3 != null && var3.getPositionProvider().providePosition(this.direction)) {
if (this.aimingData.isHaveAttacked()) {
if (var2.getCombatSupport().isExecutingAttack()) {
var6.clear();
class="kw">return true;
}
this.aimingData.setHaveAttacked(false);
}
Vector3d var8 = var7.getComponent(var1, TRANSFORM_COMPONENT_TYPE).getPosition();
double var9 = var2.getMotionContextSupport().getActiveMotionController().waypointDistance(var8, this.direction);
if (var9 > this.aimingData.getChargeDistance()) {
this.aimingData.clearSolution();
class="kw">return true;
} else {
this.direction.sub(var8);
this.direction.normalize(this.aimingData.getChargeDistance());
double var11 = this.direction.x();
double var13 = this.direction.y();
double var15 = this.direction.z();
float var17 = PhysicsMath.normalizeTurnAngle(PhysicsMath.headingFromDirection(var11, var15));
float var18 = PhysicsMath.pitchFromDirection(var11, var13, var15);
var6.setYaw(var17);
var6.setPitch(var18);
var6.setRelativeTurnSpeed(this.relativeTurnSpeed);
TransformComponent var19 = var7.getComponent(var1, TRANSFORM_COMPONENT_TYPE);
Rotation3f var20 = var19.getRotation();
this.aimingData.setOrientation(var17, var18);
if (!this.aimingData.isOnTarget(var20.yaw(), var20.pitch(), this.aimingData.getDesiredHitAngle())) {
this.aimingData.clearSolution();
class="kw">return true;
} else {
double var21 = var2.getMotionContextSupport().getActiveMotionController().probeMove(var1, var8, this.direction, this.probeMoveData, var7);
if (var21 < var9 - 1.0E-6) {
this.aimingData.clearSolution();
class="kw">return true;
} else {
Ref var23 = var3.getPositionProvider().getTarget();
this.aimingData.setTarget(var23);
class="kw">return true;
}
}
}
} else {
var6.clear();
class="kw">return true;
}
}
}