ForceProviderStandard class
Пакет: com.hypixel.hytale.server.core.modules.physics.util
Файл: com/hypixel/hytale/server/core/modules/physics/util/ForceProviderStandard.java
implements: ForceProvider
Поля (7)
| Модификаторы | Тип | Имя |
|---|---|---|
|
double |
var10 |
|
double |
var12 |
|
double |
var14 |
|
ForceProviderStandardState |
var4 |
|
Vector3d |
var5 |
|
double |
var6 |
|
double |
var8 |
Методы (16)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
public |
void |
clipForcevoid clipForce(@Nonnull Vector3d var1, @Nonnull Vector3d var2) |
abstract abstract |
double |
getDensitydouble getDensity() |
abstract abstract |
ForceProviderStandardState |
getForceProviderStandardStateForceProviderStandardState getForceProviderStandardState() |
abstract abstract |
double |
getFrictionCoefficientdouble getFrictionCoefficient() |
abstract abstract |
double |
getMassdouble getMass(double var1) |
abstract abstract |
double |
getProjectedAreadouble getProjectedArea(PhysicsBodyState var1, double var2) |
abstract abstract |
double |
getVolumedouble getVolume() |
|
|
if if(var3) |
|
|
if if(var8 > 0.0 && var14 > 0.0) |
|
|
if if(var4.displacedMass != 0.0) |
|
|
if if(var2.x < 0.0) |
|
|
if if(var1.x < var2.x) |
|
|
if if(var2.y < 0.0) |
|
|
if if(var1.y < var2.y) |
|
|
if if(var2.z < 0.0) |
|
|
if if(var1.z < var2.z) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.modules.physics.util;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;
class="kw">public class="kw">abstract class ForceProviderStandard class="kw">implements ForceProvider {
@Nonnull
class="kw">public class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
@Nonnull
class="kw">protected Vector3d dragForce = new Vector3d();
class="kw">public ForceProviderStandard() {
}
class="kw">public class="kw">abstract double getMass(double var1);
class="kw">public class="kw">abstract double getVolume();
class="kw">public class="kw">abstract double getDensity();
class="kw">public class="kw">abstract double getProjectedArea(PhysicsBodyState var1, double var2);
class="kw">public class="kw">abstract double getFrictionCoefficient();
class="kw">public class="kw">abstract ForceProviderStandardState getForceProviderStandardState();
@Override
class="kw">public void update(@Nonnull PhysicsBodyState var1, @Nonnull ForceAccumulator var2, boolean var3) {
ForceProviderStandardState var4 = this.getForceProviderStandardState();
Vector3d var5 = var4.externalForce;
double var6 = var5.y;
var2.force.add(var5);
double var8 = var2.speed;
double var10 = var4.dragCoefficient * this.getProjectedArea(var1, var8) * var8;
this.dragForce.set(var1.velocity).mul(-var10);
this.clipForce(this.dragForce, var2.resistanceForceLimit);
var2.force.add(this.dragForce);
double var12 = -var4.gravity * this.getMass(this.getVolume());
if (var3) {
double var14 = (var12 + var6) * this.getFrictionCoefficient();
if (var8 > 0.0 && var14 > 0.0) {
var14 /= var8;
var2.force.x = var2.force.x - var1.velocity.x * var14;
var2.force.z = var2.force.z - var1.velocity.z * var14;
}
} else {
var2.force.y += var12;
}
if (var4.displacedMass != 0.0) {
var2.force.y = var2.force.y + var4.displacedMass * var4.gravity;
}
}
class="kw">public void clipForce(@Nonnull Vector3d var1, @Nonnull Vector3d var2) {
if (var2.x < 0.0) {
if (var1.x < var2.x) {
var1.x = var2.x;
}
} else if (var1.x > var2.x) {
var1.x = var2.x;
}
if (var2.y < 0.0) {
if (var1.y < var2.y) {
var1.y = var2.y;
}
} else if (var1.y > var2.y) {
var1.y = var2.y;
}
if (var2.z < 0.0) {
if (var1.z < var2.z) {
var1.z = var2.z;
}
} else if (var1.z > var2.z) {
var1.z = var2.z;
}
}
}