HyCodeYourTale
classpublicPriority 3

FieldFunctionOccurrencePositionProvider

com.hypixel.hytale.builtin.hytalegenerator.positionproviders.FieldFunctionOccurrencePositionProvider

extends PositionProvider

1

Methods

1

Public Methods

3

Fields

1

Constructors

Constants

doubleFP_RESOLUTION= 100.0

Constructors

public
FieldFunctionOccurrencePositionProvider(Density field, PositionProvider positionProvider, int seed)

Methods

Public Methods (1)

public
void positionsIn(PositionProvider.Context context)
@Override

Fields

Private/Package Fields (3)

privateDensity field
privatePositionProvider positionProvider
privateSeedGenerator seedGenerator

Inheritance

Parent
Current
Interface
Child

Use mouse wheel to zoom, drag to pan. Click nodes to navigate.

Related Classes

Source Code

package com.hypixel.hytale.builtin.hytalegenerator.positionproviders;

import com.hypixel.hytale.builtin.hytalegenerator.density.Density;
import com.hypixel.hytale.builtin.hytalegenerator.framework.math.SeedGenerator;
import com.hypixel.hytale.math.util.FastRandom;
import javax.annotation.Nonnull;

public class FieldFunctionOccurrencePositionProvider extends PositionProvider {
   public static final double FP_RESOLUTION = 100.0;
   @Nonnull
   private final Density field;
   @Nonnull
   private final PositionProvider positionProvider;
   @Nonnull
   private final SeedGenerator seedGenerator;

   public FieldFunctionOccurrencePositionProvider(@Nonnull Density field, @Nonnull PositionProvider positionProvider, int seed) {
      this.field = field;
      this.positionProvider = positionProvider;
      this.seedGenerator = new SeedGenerator((long)seed);
   }

   @Override
   public void positionsIn(@Nonnull PositionProvider.Context context) {
      PositionProvider.Context childContext = new PositionProvider.Context(context);
      childContext.consumer = position -> {
         Density.Context densityContext = new Density.Context();
         densityContext.position = position;
         densityContext.positionsAnchor = context.anchor;
         densityContext.workerId = context.workerId;
         double discardChance = 1.0 - this.field.process(densityContext);
         FastRandom random = new FastRandom(this.seedGenerator.seedAt(position.x, position.y, position.z, 100.0));
         if (!(discardChance > random.nextDouble())) {
            context.consumer.accept(position);
         }
      };
      this.positionProvider.positionsIn(childContext);
   }
}