// 
// Decompiled by Procyon v0.6.0
// 

package com.hypixel.hytale.server.npc.path.builders;

import com.hypixel.hytale.server.npc.util.expression.ExecutionContext;
import com.hypixel.hytale.server.npc.asset.builder.validators.DoubleSingleValidator;
import com.hypixel.hytale.server.npc.asset.builder.validators.DoubleValidator;
import com.hypixel.hytale.server.npc.asset.builder.validators.DoubleRangeValidator;
import com.hypixel.hytale.server.npc.asset.builder.Builder;
import com.google.gson.JsonElement;
import com.hypixel.hytale.server.npc.asset.builder.BuilderDescriptorState;
import com.hypixel.hytale.server.npc.asset.builder.BuilderSupport;
import javax.annotation.Nonnull;
import com.hypixel.hytale.builtin.path.waypoint.RelativeWaypointDefinition;
import com.hypixel.hytale.server.npc.asset.builder.BuilderBase;

public class BuilderRelativeWaypointDefinition extends BuilderBase<RelativeWaypointDefinition>
{
    protected float rotation;
    protected double distance;
    
    @Nonnull
    @Override
    public String getShortDescription() {
        return "A simple path waypoint definition where each waypoint is relative to the previous";
    }
    
    @Nonnull
    @Override
    public String getLongDescription() {
        return this.getShortDescription();
    }
    
    @Nonnull
    @Override
    public RelativeWaypointDefinition build(final BuilderSupport builderSupport) {
        return new RelativeWaypointDefinition(this.getRotation(), this.getDistance());
    }
    
    @Nonnull
    @Override
    public Class<RelativeWaypointDefinition> category() {
        return RelativeWaypointDefinition.class;
    }
    
    @Nonnull
    @Override
    public BuilderDescriptorState getBuilderDescriptorState() {
        return BuilderDescriptorState.Stable;
    }
    
    @Nonnull
    @Override
    public Builder<RelativeWaypointDefinition> readConfig(@Nonnull final JsonElement data) {
        this.getFloat(data, "Rotation", f -> this.rotation = f * 0.017453292f, 0.0f, DoubleRangeValidator.fromExclToExcl(-360.0, 360.0), BuilderDescriptorState.Stable, "Rotation to turn from previous waypoint", null);
        this.requireDouble(data, "Distance", d -> this.distance = d, DoubleSingleValidator.greater0(), BuilderDescriptorState.Stable, "A distance to move from the previous waypoint", null);
        return this;
    }
    
    @Override
    public final boolean isEnabled(final ExecutionContext context) {
        return true;
    }
    
    public float getRotation() {
        return this.rotation;
    }
    
    public double getDistance() {
        return this.distance;
    }
}
