VectorOffsetPositionProvider class

Пакет: com.hypixel.hytale.builtin.hytalegenerator.positionproviders

Файл: com/hypixel/hytale/builtin/hytalegenerator/positionproviders/VectorOffsetPositionProvider.java

extends: PositionProvider

Методы (1)

МодификаторыВозвратСигнатура
public void acceptpublic void accept(@Nonnull Vector3d var1, @Nonnull Control var2)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.hytalegenerator.bounds.Bounds3d;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.pipe.Control;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.pipe.Pipe;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.vectorproviders.VectorProvider;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;

class="kw">public class VectorOffsetPositionProvider class="kw">extends PositionProvider {
   @Nonnull
   class="kw">private class="kw">final VectorProvider vectorProvider;
   @Nonnull
   class="kw">private class="kw">final PositionProvider positionProvider;
   @Nonnull
   class="kw">private class="kw">final Bounds3d movementBounds;
   @Nonnull
   class="kw">private class="kw">final Bounds3d movementBoundsFlipped;
   @Nonnull
   class="kw">private class="kw">final Bounds3d rChildBounds;
   @Nonnull
   class="kw">private class="kw">final Bounds3d rLocalMovementBounds;
   @Nonnull
   class="kw">private class="kw">final PositionProvider.Context rChildContext;
   @Nonnull
   class="kw">private class="kw">final VectorProvider.Context rVectorContext;
   @Nonnull
   class="kw">private PositionProvider.Context rContext;
   @Nonnull
   class="kw">private class="kw">final Vector3d rVector;
   @Nonnull
   class="kw">private class="kw">final Vector3d rPosition;
   @Nonnull
   class="kw">private class="kw">final Pipe.One<Vector3d> rChildPipe = new Pipe.One<Vector3d>() {
      class="kw">public void accept(@Nonnull Vector3d var1, @Nonnull Control var2) {
         VectorOffsetPositionProvider.this.rVectorContext.assign(VectorOffsetPositionProvider.this.rContext, var1);
         VectorOffsetPositionProvider.this.vectorProvider.process(VectorOffsetPositionProvider.this.rVectorContext, VectorOffsetPositionProvider.this.rVector);
         VectorOffsetPositionProvider.this.rLocalMovementBounds.assign(VectorOffsetPositionProvider.this.movementBounds).offset(var1);
         VectorOffsetPositionProvider.this.rPosition.set(var1);
         VectorOffsetPositionProvider.this.rPosition.add(VectorOffsetPositionProvider.this.rVector);
         if (VectorOffsetPositionProvider.this.rLocalMovementBounds.contains(VectorOffsetPositionProvider.this.rPosition)) {
            var1.set(VectorOffsetPositionProvider.this.rPosition);
         }

         VectorOffsetPositionProvider.this.rContext.pipe.accept(var1, var2);
      }
   };

   class="kw">public VectorOffsetPositionProvider(@Nonnull VectorProvider var1, @Nonnull PositionProvider var2, @Nonnull Bounds3d var3) {
      this.vectorProvider = var1;
      this.positionProvider = var2;
      this.movementBounds = var3.clone();
      this.movementBoundsFlipped = this.movementBounds.clone().flipOnOriginPoint();
      this.rChildBounds = new Bounds3d();
      this.rLocalMovementBounds = new Bounds3d();
      this.rVectorContext = new VectorProvider.Context();
      this.rChildContext = new PositionProvider.Context();
      this.rContext = new PositionProvider.Context();
      this.rVector = new Vector3d();
      this.rPosition = new Vector3d();
   }

   @Override
   class="kw">public void generate(@Nonnull PositionProvider.Context var1) {
      this.rContext = var1;
      this.rChildBounds.assign(var1.bounds);
      this.rChildBounds.stack(this.movementBoundsFlipped);
      this.rChildContext.assign(var1);
      this.rChildContext.bounds = this.rChildBounds;
      this.rChildContext.pipe = this.rChildPipe;
      this.positionProvider.generate(this.rChildContext);
      this.rChildContext.clearReferences();
      this.rVectorContext.clearReferences();
      this.rContext = PositionProvider.Context.DEFAULT_INSTANCE;
   }
}