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;
      }
   }
}