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

package com.hypixel.hytale.server.npc.movement.steeringforces;

import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
import com.hypixel.hytale.component.ComponentAccessor;
import com.hypixel.hytale.server.core.entity.Entity;
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
import com.hypixel.hytale.component.Ref;
import com.hypixel.hytale.server.npc.util.NPCPhysicsMath;
import javax.annotation.Nonnull;
import com.hypixel.hytale.server.npc.movement.Steering;

public class SteeringForceRotate implements SteeringForce
{
    private float desiredHeading;
    private float heading;
    private double tolerance;
    
    public SteeringForceRotate() {
        this.tolerance = 0.05235987901687622;
    }
    
    @Override
    public boolean compute(@Nonnull final Steering output) {
        output.clear();
        final float turnAngle = NPCPhysicsMath.turnAngle(this.desiredHeading, this.heading);
        if (Math.abs(turnAngle) >= this.tolerance) {
            output.setYaw(this.desiredHeading);
            return true;
        }
        return false;
    }
    
    public void setDesiredHeading(final float desiredHeading) {
        this.desiredHeading = desiredHeading;
    }
    
    public void setHeading(final float heading) {
        this.heading = heading;
    }
    
    public void setHeading(final Ref<EntityStore> ref, @Nonnull final Entity entity, final ComponentAccessor<EntityStore> componentAccessor) {
        final TransformComponent transformComponent = componentAccessor.getComponent(ref, TransformComponent.getComponentType());
        assert transformComponent != null;
        this.heading = transformComponent.getRotation().getYaw();
    }
    
    public void setTolerance(final double tolerance) {
        this.tolerance = tolerance;
    }
    
    public double getDesiredHeading() {
        return this.desiredHeading;
    }
    
    public double getHeading() {
        return this.heading;
    }
    
    public double getTolerance() {
        return this.tolerance;
    }
}
