CinematicTeleport class

Пакет: com.hypixel.hytale.builtin.adventure.camera

Файл: com/hypixel/hytale/builtin/adventure/camera/CinematicTeleport.java

Поля (67)

МодификаторыТипИмя
final float DEFAULT_ASCEND_HEIGHT
Rotation3f var10
Vector3d var10
ModelComponent var11
Vector3d var11
Vector3d var11
float var12
Vector3d var12
Vector3d var13
Vector3d var13
Vector3d var14
Vector3d var14
Vector3d var15
Vector3d var15
CameraSequenceBuilder var16
float var16
float var17
float var17
float var18
CameraSequenceBuilder var18
float var19
double var2
float var20
Vector3d var20
float var21
EasingType var21
float var22
float var23
Vector3d var24
float var28
int var3
double var3
Vector3d var3
Vector3d var3
double var3
Ref var4
EntityEffect var4
EffectControllerComponent var4
double var4
Vector3d var4
Vector3d var4
double var4
Store var5
Teleport var5
EffectControllerComponent var5
double var5
Vector3d var5
Vector3d var5
double var5
World var6
Vector3d var6
Vector3d var6
Vector3d var6
float var6
TransformComponent var7
Vector3d var7
double var7
Vector3d var7
Vector3d var7
double var7
HeadRotation var8
Rotation3f var8
Vector3d var8
Rotation3f var9
float var9
double var9
Vector3d var9

Методы (17)

МодификаторыВозвратСигнатура
abstract return new Vector3dreturn new Vector3d(-var3 / var7, 0.0, -var5 / var7)
static void applyEffectvoid applyEffect(@Nonnull Store<EntityStore> var0, @Nonnull Ref<EntityStore> var1, @Nonnull String var2, float var3)
abstract applyEffect applyEffect(var5, var4, "Cinematic_Dissolve_Out", var23)
abstract applyEffect applyEffect(var5, var4, "Cinematic_Dissolve_In", var20)
static float arcTravelDurationfloat arcTravelDuration(@Nonnull Vector3d var0, @Nonnull Vector3d var1)
for for(int var19 = 1; var19 <= 6; var19++)
if if(var4 != null)
if if(var7 != null && var8 != null)
if if(var4 == null)
if if(var5 != null)
if if(var3 >= 0)
if if(var4 != null)
if if(var7 < 0.001)
static void playvoid play(@Nonnull PlayerRef var0, @Nonnull Vector3dc var1, @Nonnull CinematicPath var2, float var3)
static void removeEffectvoid removeEffect(@Nonnull Store<EntityStore> var0, @Nonnull Ref<EntityStore> var1, @Nonnull String var2)
abstract removeEffect removeEffect(var5, var4, "Cinematic_Dissolve_Out")
static float traverseDurationfloat traverseDuration(@Nonnull Vector3d var0, @Nonnull Vector3d var1)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.adventure.camera;

class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.math.vector.Rotation3f;
class="kw">import com.hypixel.hytale.math.vector.Vector3dUtil;
class="kw">import com.hypixel.hytale.protocol.EasingType;
class="kw">import com.hypixel.hytale.server.core.asset.type.entityeffect.config.EntityEffect;
class="kw">import com.hypixel.hytale.server.core.asset.type.entityeffect.config.OverlapBehavior;
class="kw">import com.hypixel.hytale.server.core.entity.effect.EffectControllerComponent;
class="kw">import com.hypixel.hytale.server.core.modules.camera.CameraKeyframeBuilder;
class="kw">import com.hypixel.hytale.server.core.modules.camera.CameraSequenceBuilder;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.HeadRotation;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.ModelComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.teleport.Teleport;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import java.util.concurrent.TimeUnit;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3dc;

class="kw">public class="kw">final class CinematicTeleport {
   class="kw">public class="kw">static class="kw">final float DEFAULT_ASCEND_HEIGHT = 45.0F;
   class="kw">private class="kw">static class="kw">final String DISSOLVE_OUT_EFFECT_ID = "Cinematic_Dissolve_Out";
   class="kw">private class="kw">static class="kw">final String DISSOLVE_IN_EFFECT_ID = "Cinematic_Dissolve_In";
   class="kw">private class="kw">static class="kw">final float DISCONNECT_DURATION = 0.5F;
   class="kw">private class="kw">static class="kw">final float DISSOLVE_OUT_DURATION = 0.6F;
   class="kw">private class="kw">static class="kw">final float ORIGIN_HOLD_DURATION = 0.5F;
   class="kw">private class="kw">static class="kw">final float ORIGIN_BEAT_DURATION = 1.6F;
   class="kw">private class="kw">static class="kw">final float SETTLE_DURATION = 1.0F;
   class="kw">private class="kw">static class="kw">final float DESTINATION_HOLD_DURATION = 0.75F;
   class="kw">private class="kw">static class="kw">final float ASCEND_DURATION = 1.4F;
   class="kw">private class="kw">static class="kw">final float DESCEND_DURATION = 1.4F;
   class="kw">private class="kw">static class="kw">final float TRAVERSE_BLOCKS_PER_SECOND = 70.0F;
   class="kw">private class="kw">static class="kw">final float MIN_TRAVERSE_DURATION = 0.5F;
   class="kw">private class="kw">static class="kw">final float MAX_TRAVERSE_DURATION = 4.0F;
   class="kw">private class="kw">static class="kw">final float LOOK_TRANSITION_FRACTION = 0.25F;
   class="kw">private class="kw">static class="kw">final float DOWN_PITCH = -1.5607964F;
   class="kw">private class="kw">static class="kw">final double ORBIT_RADIUS = 7.0;
   class="kw">private class="kw">static class="kw">final double ORBIT_HEIGHT = 3.5;
   class="kw">private class="kw">static class="kw">final float ORBIT_TRAVEL_DURATION = 1.4F;
   class="kw">private class="kw">static class="kw">final float ORBIT_ARC_DURATION = 1.6F;
   class="kw">private class="kw">static class="kw">final double DOLLY_BACK = 8.0;
   class="kw">private class="kw">static class="kw">final double DOLLY_APPROACH = 4.0;
   class="kw">private class="kw">static class="kw">final double DOLLY_HEIGHT = 3.0;
   class="kw">private class="kw">static class="kw">final float DOLLY_TRAVEL_DURATION = 1.4F;
   class="kw">private class="kw">static class="kw">final float DOLLY_PUSH_DURATION = 1.6F;
   class="kw">private class="kw">static class="kw">final float DOLLY_WIDE_FOV = 95.0F;
   class="kw">private class="kw">static class="kw">final double ARC_HEIGHT_FRACTION = 0.35;
   class="kw">private class="kw">static class="kw">final double ARC_MIN_HEIGHT = 4.0;
   class="kw">private class="kw">static class="kw">final double ARC_MAX_HEIGHT = 30.0;
   class="kw">private class="kw">static class="kw">final int ARC_SAMPLES = 6;
   class="kw">private class="kw">static class="kw">final float ARC_FLIGHT_SCALE = 1.7F;
   class="kw">private class="kw">static class="kw">final float ARC_MIN_TRAVEL = 1.5F;
   class="kw">private class="kw">static class="kw">final float ARC_DISSOLVE_IN_FRACTION = 0.55F;
   class="kw">private class="kw">static class="kw">final double ARC_PULLBACK = 6.0;
   class="kw">private class="kw">static class="kw">final double ARC_PULLBACK_HEIGHT = 3.0;
   class="kw">private class="kw">static class="kw">final double ARC_APPROACH = 5.0;
   class="kw">private class="kw">static class="kw">final double ARC_APPROACH_HEIGHT = 2.5;
   class="kw">private class="kw">static class="kw">final float DISSOLVE_HOLD_MARGIN = 0.5F;
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();

   class="kw">private CinematicTeleport() {
   }

   class="kw">public class="kw">static void play(@Nonnull PlayerRef var0, @Nonnull Vector3dc var1, @Nonnull CinematicPath var2, float var3) {
      Ref var4 = var0.getReference();
      if (var4 != null) {
         Store var5 = var4.getStore();
         World var6 = var5.getExternalData().getWorld();
         TransformComponent var7 = var5.getComponent(var4, TransformComponent.getComponentType());
         HeadRotation var8 = var5.getComponent(var4, HeadRotation.getComponentType());
         if (var7 != null && var8 != null) {
            Rotation3f var9 = new Rotation3f(var7.getRotation());
            Rotation3f var10 = new Rotation3f(var8.getRotation());
            ModelComponent var11 = var5.getComponent(var4, ModelComponent.getComponentType());
            float var12 = var11 != null ? var11.getModel().getEyeHeight(var4, var5) : 0.0F;
            Vector3d var13 = var7.getPosition();
            Vector3d var14 = new Vector3d(var13.x(), var13.y() + var12, var13.z());
            Vector3d var15 = new Vector3d(var1.x(), var1.y() + var12, var1.z());

            CameraSequenceBuilder var16 = class="kw">switch (var2) {
               case FLYOVER -> buildFlyover(var14, var15, var10, Math.max(0.0F, var3));
               case ARC -> buildArc(var14, var15, var10);
               case ORBIT -> buildOrbit(var14, var15, var10);
               case DOLLY -> buildDolly(var14, var15, var10);
            };
            var16.addFlag((byte)1).addFlag((byte)2).addFlag((byte)4).sendTo(var0);

            float var17 = class="kw">switch (var2) {
               case FLYOVER -> 1.4F;
               case ARC -> 0.5F;
               case ORBIT, DOLLY -> 1.6F;
            };

            float var18 = class="kw">switch (var2) {
               case FLYOVER -> traverseDuration(var14, var15);
               case ARC -> arcTravelDuration(var14, var15);
               case ORBIT -> 1.4F;
               case DOLLY -> 1.4F;
            };

            float var19 = class="kw">switch (var2) {
               case FLYOVER -> 0.35F;
               case ARC -> 0.0F;
               case ORBIT, DOLLY -> 0.5F;
            };

            float var20;
            float var28 = var20 = class="kw">switch (var2) {
               case FLYOVER -> 1.4F;
               case ARC -> var18 * 0.45F;
               case ORBIT -> 1.6F;
               case DOLLY -> 1.6F;
            };
            float var21 = var2 == CinematicPath.ARC ? var17 + var18 * 0.55F : var17 + var18;
            float var22 = var17 + var18 / 2.0F;
            float var23 = var21 - var19 + 0.5F;
            var6.scheduleAfter(() -> {
               if (var4.isValid()) {
                  applyEffect(var5, var4, "Cinematic_Dissolve_Out", var23);
               }
            }, Math.round(var19 * 1000.0F), TimeUnit.MILLISECONDS);
            var6.scheduleAfter(() -> {
               if (var4.isValid()) {
                  removeEffect(var5, var4, "Cinematic_Dissolve_Out");
                  applyEffect(var5, var4, "Cinematic_Dissolve_In", var20);
               }
            }, Math.round(var21 * 1000.0F), TimeUnit.MILLISECONDS);
            Vector3d var24 = new Vector3d(var1);
            var6.scheduleAfter(() -> {
               if (var4.isValid()) {
                  Teleport var5 = Teleport.createForPlayer(var24, var9).setHeadRotation(var10);
                  var5.addComponent(var4, Teleport.getComponentType(), var5);
               }
            }, Math.round(var22 * 1000.0F), TimeUnit.MILLISECONDS);
         }
      }
   }

   class="kw">private class="kw">static void applyEffect(@Nonnull Store<EntityStore> var0, @Nonnull Ref<EntityStore> var1, @Nonnull String var2, float var3) {
      EntityEffect var4 = EntityEffect.getAssetMap().getAsset(var2);
      if (var4 == null) {
         LOGGER.at(Level.WARNING).log("Cinematic dissolve effect missing: %s", var2);
      } else {
         EffectControllerComponent var5 = var0.getComponent(var1, EffectControllerComponent.getComponentType());
         if (var5 != null) {
            var5.addEffect(var1, var4, var3, OverlapBehavior.OVERWRITE, var0);
         }
      }
   }

   class="kw">private class="kw">static void removeEffect(@Nonnull Store<EntityStore> var0, @Nonnull Ref<EntityStore> var1, @Nonnull String var2) {
      int var3 = EntityEffect.getAssetMap().getIndex(var2);
      if (var3 >= 0) {
         EffectControllerComponent var4 = var0.getComponent(var1, EffectControllerComponent.getComponentType());
         if (var4 != null) {
            var4.removeEffect(var1, var3, var0);
         }
      }
   }

   @Nonnull
   class="kw">private class="kw">static CameraSequenceBuilder buildFlyover(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Rotation3f var2, float var3) {
      double var4 = Math.max(var0.y(), var1.y()) + var3;
      Vector3d var6 = new Vector3d(var0.x(), var4, var0.z());
      Vector3d var7 = new Vector3d(var1.x(), var4, var1.z());
      Rotation3f var8 = new Rotation3f(-1.5607964F, var2.yaw(), 0.0F);
      float var9 = traverseDuration(var0, var1);
      Vector3d var10 = new Vector3d(var0).lerp(var6, 0.25);
      Vector3d var11 = new Vector3d(var7).lerp(var1, 0.75);
      class="kw">return new CameraSequenceBuilder()
         .keyframe(var10, var8, 0.35F, EasingType.SineIn)
         .keyframe(var6, var8, 1.05F, EasingType.SineOut)
         .keyframe(var7, var8, var9, EasingType.SineInOut)
         .keyframe(var11, var8, 1.05F, EasingType.SineIn)
         .keyframe(var1, var2, 0.35F, EasingType.SineOut)
         .keyframe(var1, var2, 0.75F, EasingType.Linear);
   }

   @Nonnull
   class="kw">private class="kw">static CameraSequenceBuilder buildArc(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Rotation3f var2) {
      double var3 = var1.x() - var0.x();
      double var5 = var1.z() - var0.z();
      double var7 = Math.sqrt(var3 * var3 + var5 * var5);
      double var9 = Math.clamp(var7 * 0.35, 4.0, 30.0);
      Vector3d var11 = travelBack(var0, var1, var2);
      Vector3d var12 = offset(var0, var11, 6.0, 3.0);
      Vector3d var13 = offset(var1, var11, 5.0, 2.5);
      Vector3d var14 = new Vector3d(var12).lerp(var13, 0.5);
      Vector3d var15 = new Vector3d(var14.x(), Math.max(var12.y(), var13.y()) + 2.0 * var9, var14.z());
      float var16 = arcTravelDuration(var0, var1);
      float var17 = var16 / 6.0F;
      CameraSequenceBuilder var18 = new CameraSequenceBuilder().keyframeLookingAt(var12, var1, 0.5F, EasingType.SineOut);

      for (int var19 = 1; var19 <= 6; var19++) {
         Vector3d var20 = Vector3dUtil.quadraticBezier(var12, var15, var13, var19 / 6.0, new Vector3d());
         EasingType var21 = var19 == 1 ? EasingType.SineIn : (var19 == 6 ? EasingType.SineOut : EasingType.Linear);
         var18.keyframeLookingAt(var20, var1, var17, var21);
      }

      class="kw">return var18.keyframe(var1, var2, 1.0F, EasingType.SineOut).keyframe(var1, var2, 0.75F, EasingType.Linear);
   }

   @Nonnull
   class="kw">private class="kw">static CameraSequenceBuilder buildOrbit(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Rotation3f var2) {
      Vector3d var3 = Vector3dUtil.setYawPitch(var2.yaw(), 0.0, new Vector3d());
      Vector3d var4 = new Vector3d(-var3.z(), 0.0, var3.x());
      Vector3d var5 = new Vector3d(-var3.x(), 0.0, -var3.z());
      Vector3d var6 = offset(var0, var4, 7.0, 3.5);
      Vector3d var7 = offset(var1, var4, 7.0, 3.5);
      Vector3d var8 = offset(var1, var5, 7.0, 2.4499999999999997);
      class="kw">return new CameraSequenceBuilder()
         .keyframeLookingAt(var6, var0, 0.5F, EasingType.SineOut)
         .keyframeLookingAt(var6, var0, 0.6F, EasingType.Linear)
         .keyframeLookingAt(var6, var0, 0.5F, EasingType.Linear)
         .keyframeLookingAt(var7, var1, 1.4F, EasingType.SineInOut)
         .keyframeLookingAt(var8, var1, 1.6F, EasingType.SineInOut)
         .keyframe(var1, var2, 1.0F, EasingType.SineOut)
         .keyframe(var1, var2, 0.75F, EasingType.Linear);
   }

   @Nonnull
   class="kw">private class="kw">static CameraSequenceBuilder buildDolly(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Rotation3f var2) {
      Vector3d var3 = Vector3dUtil.setYawPitch(var2.yaw(), 0.0, new Vector3d());
      Vector3d var4 = new Vector3d(-var3.x(), 0.0, -var3.z());
      Vector3d var5 = offset(var0, var4, 8.0, 3.0);
      Vector3d var6 = offset(var1, var4, 8.0, 3.0);
      Vector3d var7 = offset(var1, var4, 4.0, 1.5);
      class="kw">return new CameraSequenceBuilder()
         .keyframe(wideKeyframeLookingAt(var5, var0, 0.5F, EasingType.SineOut))
         .keyframe(wideKeyframeLookingAt(var5, var0, 0.6F, EasingType.Linear))
         .keyframe(wideKeyframeLookingAt(var5, var0, 0.5F, EasingType.Linear))
         .keyframe(wideKeyframeLookingAt(var6, var1, 1.4F, EasingType.SineInOut))
         .keyframeLookingAt(var7, var1, 1.6F, EasingType.SineInOut)
         .keyframe(var1, var2, 1.0F, EasingType.SineOut)
         .keyframe(var1, var2, 0.75F, EasingType.Linear);
   }

   @Nonnull
   class="kw">private class="kw">static CameraKeyframeBuilder wideKeyframeLookingAt(@Nonnull Vector3d var0, @Nonnull Vector3d var1, float var2, @Nonnull EasingType var3) {
      class="kw">return new CameraKeyframeBuilder(var2, var3).position(var0).lookAt(var1).fov(95.0F);
   }

   class="kw">private class="kw">static float traverseDuration(@Nonnull Vector3d var0, @Nonnull Vector3d var1) {
      double var2 = var1.x() - var0.x();
      double var4 = var1.z() - var0.z();
      float var6 = (float)Math.sqrt(var2 * var2 + var4 * var4);
      class="kw">return Math.clamp(var6 / 70.0F, 0.5F, 4.0F);
   }

   class="kw">private class="kw">static float arcTravelDuration(@Nonnull Vector3d var0, @Nonnull Vector3d var1) {
      class="kw">return Math.max(1.5F, traverseDuration(var0, var1) * 1.7F);
   }

   @Nonnull
   class="kw">private class="kw">static Vector3d travelBack(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Rotation3f var2) {
      double var3 = var1.x() - var0.x();
      double var5 = var1.z() - var0.z();
      double var7 = Math.sqrt(var3 * var3 + var5 * var5);
      if (var7 < 0.001) {
         Vector3d var9 = Vector3dUtil.setYawPitch(var2.yaw(), 0.0, new Vector3d());
         class="kw">return new Vector3d(-var9.x(), 0.0, -var9.z());
      } else {
         class="kw">return new Vector3d(-var3 / var7, 0.0, -var5 / var7);
      }
   }

   @Nonnull
   class="kw">private class="kw">static Vector3d offset(@Nonnull Vector3dc var0, @Nonnull Vector3dc var1, double var2, double var4) {
      class="kw">return new Vector3d(var0.x() + var1.x() * var2, var0.y() + var4, var0.z() + var1.z() * var2);
   }
}