package com.hypixel.hytale.server.npc.corecomponents.world.builders;
import com.google.gson.JsonElement;
import com.hypixel.hytale.server.npc.asset.builder.BuilderDescriptorState;
import com.hypixel.hytale.server.npc.asset.builder.BuilderSupport;
import com.hypixel.hytale.server.npc.asset.builder.holder.BooleanHolder;
import com.hypixel.hytale.server.npc.asset.builder.holder.DoubleHolder;
import com.hypixel.hytale.server.npc.asset.builder.holder.IntHolder;
import com.hypixel.hytale.server.npc.asset.builder.holder.NumberArrayHolder;
import com.hypixel.hytale.server.npc.asset.builder.validators.DoubleRangeValidator;
import com.hypixel.hytale.server.npc.asset.builder.validators.DoubleSequenceValidator;
import com.hypixel.hytale.server.npc.asset.builder.validators.IntSingleValidator;
import com.hypixel.hytale.server.npc.corecomponents.builders.BuilderHeadMotionBase;
import com.hypixel.hytale.server.npc.corecomponents.world.HeadMotionObserve;
import javax.annotation.Nonnull;
publicclassBuilderHeadMotionObserveextendsBuilderHeadMotionBase {
protectedstaticfinaldouble[] DEFAULT_PAUSE_TIME_RANGE = newdouble[]{2.0, 2.0};
protectedfinalNumberArrayHolderangleRange=newNumberArrayHolder();
protectedfinalNumberArrayHolderpauseTimeRange=newNumberArrayHolder();
protectedfinalBooleanHolderpickRandomAngle=newBooleanHolder();
protectedfinalIntHolderviewSegments=newIntHolder();
protectedfinalDoubleHolderrelativeTurnSpeed=newDoubleHolder();
publicBuilderHeadMotionObserve() {
}
@Nonnullpublic HeadMotionObserve build(@Nonnull BuilderSupport builderSupport) {
returnnewHeadMotionObserve(this, builderSupport);
}
@Nonnullpublic String getShortDescription() {
return"Observe surroundings in various ways.";
}
@Nonnullpublic String getLongDescription() {
return"Observe surroundings in various ways. This includes looking in random directions within an angle, or sweeping the head left and right, etc. Angles are relative to body angle at any given time.";
}
@Nonnullpublic BuilderDescriptorState getBuilderDescriptorState() {
return BuilderDescriptorState.Stable;
}
@Nonnullpublic BuilderHeadMotionObserve readConfig(@Nonnull JsonElement data) {
this.requireDoubleRange(data, "AngleRange", this.angleRange, DoubleSequenceValidator.betweenWeaklyMonotonic(-180.0, 180.0), BuilderDescriptorState.Stable, "The angle range to observe in degrees", "The angle range to observe in degrees, offset from facing forwards");
this.getDoubleRange(data, "PauseTimeRange", this.pauseTimeRange, DEFAULT_PAUSE_TIME_RANGE, DoubleSequenceValidator.betweenWeaklyMonotonic(0.0, 1.7976931348623157E308), BuilderDescriptorState.Stable, "How long to continue looking in a given direction", (String)null);
this.getBoolean(data, "PickRandomAngle", this.pickRandomAngle, false, BuilderDescriptorState.Stable, "Whether to pick random angles within the range", "Whether to pick random angles within the range. If false, will instead sweep across the range, pausing at either end.");
this.getInt(data, "ViewSegments", this.viewSegments, 1, IntSingleValidator.greater0(), BuilderDescriptorState.Stable, "The number of distinct segments to stop at when sweeping from left to right", (String)null);
this.getDouble(data, "RelativeTurnSpeed", this.relativeTurnSpeed, 1.0, DoubleRangeValidator.fromExclToIncl(0.0, 2.0), BuilderDescriptorState.Stable, "The relative turn speed modifier", (String)null);
returnthis;
}
publicfloat[] getAngleRange(@Nonnull BuilderSupport support) {
double[] range = this.angleRange.get(support.getExecutionContext());
float[] floatRange = newfloat[2];
floatRange[0] = (float)(range[0] * 0.01745329238474369);
floatRange[1] = (float)(range[1] * 0.01745329238474369);
return floatRange;
}
publicdouble[] getPauseTimeRange(@Nonnull BuilderSupport support) {
returnthis.pauseTimeRange.get(support.getExecutionContext());
}
publicbooleanisPickRandomAngle(@Nonnull BuilderSupport support) {
returnthis.pickRandomAngle.get(support.getExecutionContext());
}
publicintgetViewSegments(@Nonnull BuilderSupport support) {
returnthis.viewSegments.get(support.getExecutionContext());
}
publicdoublegetRelativeTurnSpeed(@Nonnull BuilderSupport support) {
returnthis.relativeTurnSpeed.get(support.getExecutionContext());
}
}