package com.hypixel.hytale.builtin.adventure.camera.asset;
import com.hypixel.hytale.codec.Codec;
import com.hypixel.hytale.codec.KeyedCodec;
import com.hypixel.hytale.codec.builder.BuilderCodec;
import com.hypixel.hytale.codec.codecs.EnumCodec;
import com.hypixel.hytale.codec.codecs.array.ArrayCodec;
import com.hypixel.hytale.codec.schema.metadata.ui.UIDefaultCollapsedState;
import com.hypixel.hytale.codec.validation.Validators;
import com.hypixel.hytale.protocol.NoiseType;
import com.hypixel.hytale.server.core.io.NetworkSerializable;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
public class NoiseConfig implements NetworkSerializable<com.hypixel.hytale.protocol.NoiseConfig> {
@Nonnull
public static final Codec<NoiseType> NOISE_TYPE_CODEC = new EnumCodec<NoiseType>(NoiseType.class);
@Nonnull
public static final BuilderCodec<NoiseConfig> CODEC;
@Nonnull
public static final ArrayCodec<NoiseConfig> ARRAY_CODEC;
@Nonnull
public static final com.hypixel.hytale.protocol.NoiseConfig[] NOISE_CONFIGS;
protected int seed;
@Nonnull
protected NoiseType type;
@Nonnull
protected ClampConfig clamp;
protected float frequency;
protected float amplitude;
public NoiseConfig() {
this.type = NoiseType.Sin;
this.clamp = NoiseConfig.ClampConfig.NONE;
}
@Nonnull
public com.hypixel.hytale.protocol.NoiseConfig toPacket() {
return new com.hypixel.hytale.protocol.NoiseConfig(this.seed, this.type, this.frequency, this.amplitude, this.clamp.toPacket());
}
@Nonnull
public String toString() {
int var10000 = this.seed;
return "NoiseConfig{seed=" + var10000 + ", type=" + String.valueOf(this.type) + ", clamp=" + String.valueOf(this.clamp) + ", frequency=" + this.frequency + ", amplitude=" + this.amplitude + "}";
}
@Nonnull
public static com.hypixel.hytale.protocol.NoiseConfig[] toPacket(@Nullable NoiseConfig[] configs) {
if (configs != null && configs.length != 0) {
com.hypixel.hytale.protocol.NoiseConfig[] result = new com.hypixel.hytale.protocol.NoiseConfig[configs.length];
for(int i = 0; i < configs.length; ++i) {
NoiseConfig config = configs[i];
if (config != null) {
result[i] = config.toPacket();
}
}
return result;
} else {
return NOISE_CONFIGS;
}
}
static {
CODEC = ((BuilderCodec.Builder)((BuilderCodec.Builder)((BuilderCodec.Builder)((BuilderCodec.Builder)((BuilderCodec.Builder)BuilderCodec.builder(NoiseConfig.class, NoiseConfig::new).appendInherited(new KeyedCodec("Seed", Codec.INTEGER), (o, v) -> o.seed = v, (o) -> o.seed, (o, p) -> o.seed = p.seed).documentation("The value used to seed the noise source").add()).appendInherited(new KeyedCodec("Type", NOISE_TYPE_CODEC), (o, v) -> o.type = v, (o) -> o.type, (o, p) -> o.type = p.type).documentation("The type of noise used to move the camera").addValidator(Validators.nonNull()).add()).appendInherited(new KeyedCodec("Frequency", Codec.FLOAT), (o, v) -> o.frequency = v, (o) -> o.frequency, (o, p) -> o.frequency = p.frequency).documentation("The frequency at which the noise source is sampled").add()).appendInherited(new KeyedCodec("Amplitude", Codec.FLOAT), (o, v) -> o.amplitude = v, (o) -> o.amplitude, (o, p) -> o.amplitude = p.amplitude).documentation("The maximum extent of the noise source output").add()).appendInherited(new KeyedCodec("Clamp", NoiseConfig.ClampConfig.CODEC), (o, v) -> o.clamp = v, (o) -> o.clamp, (o, p) -> o.clamp = p.clamp).documentation("Restricts the range of values that the noise source can output").metadata(UIDefaultCollapsedState.UNCOLLAPSED).add()).build();
ARRAY_CODEC = ArrayCodec.<NoiseConfig>ofBuilderCodec(CODEC, (x$0) -> new NoiseConfig[x$0]);
NOISE_CONFIGS = new com.hypixel.hytale.protocol.NoiseConfig[0];
}
public static class ClampConfig implements NetworkSerializable<com.hypixel.hytale.protocol.ClampConfig> {
@Nonnull
public static final BuilderCodec<ClampConfig> CODEC;
@Nonnull
public static final ClampConfig NONE;
protected float min = -1.0F;
protected float max = 1.0F;
protected boolean normalize = true;
public ClampConfig() {
}
@Nonnull
public com.hypixel.hytale.protocol.ClampConfig toPacket() {
return new com.hypixel.hytale.protocol.ClampConfig(this.min, this.max, this.normalize);
}
@Nonnull
public String toString() {
return "ClampConfig{min=" + this.min + ", max=" + this.max + ", normalize=" + this.normalize + "}";
}
static {
CODEC = ((BuilderCodec.Builder)((BuilderCodec.Builder)((BuilderCodec.Builder)((BuilderCodec.Builder)BuilderCodec.builder(ClampConfig.class, ClampConfig::new).appendInherited(new KeyedCodec("Min", Codec.FLOAT), (o, v) -> o.min = v, (o) -> o.min, (o, p) -> o.min = p.min).documentation("The inclusive minimum value of the clamp range").addValidator(Validators.range(-1.0F, 1.0F)).add()).appendInherited(new KeyedCodec("Max", Codec.FLOAT), (o, v) -> o.max = v, (o) -> o.max, (o, p) -> o.max = p.max).documentation("The inclusive maximum value of the clamp range").addValidator(Validators.range(-1.0F, 1.0F)).add()).appendInherited(new KeyedCodec("Normalize", Codec.BOOLEAN), (o, v) -> o.normalize = v, (o) -> o.normalize, (o, p) -> o.normalize = p.normalize).documentation("Rescales the clamped output value back to the range -1 to 1").add()).afterDecode((range) -> {
range.min = Math.min(range.min, range.max);
range.max = Math.max(range.min, range.max);
})).build();
NONE = new ClampConfig();
}
}
}