All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.gempukku.libgdx.graph.pipeline.producer.math.geometric.DistancePipelineNodeProducer Maven / Gradle / Ivy

package com.gempukku.libgdx.graph.pipeline.producer.math.geometric;

import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.math.Vector3;
import com.badlogic.gdx.utils.JsonValue;
import com.badlogic.gdx.utils.ObjectMap;
import com.gempukku.libgdx.graph.pipeline.config.math.geometric.DistancePipelineNodeConfiguration;
import com.gempukku.libgdx.graph.pipeline.producer.PipelineRenderingContext;
import com.gempukku.libgdx.graph.pipeline.producer.node.OncePerFrameJobPipelineNode;
import com.gempukku.libgdx.graph.pipeline.producer.node.PipelineNode;
import com.gempukku.libgdx.graph.pipeline.producer.node.PipelineNodeProducerImpl;
import com.gempukku.libgdx.graph.pipeline.producer.node.PipelineRequirements;

public class DistancePipelineNodeProducer extends PipelineNodeProducerImpl {
    public DistancePipelineNodeProducer() {
        super(new DistancePipelineNodeConfiguration());
    }

    @Override
    protected PipelineNode createNodeForSingleInputs(final JsonValue data, final ObjectMap> inputFields) {
        final PipelineNode.FieldOutput aFunction = inputFields.get("p0");
        final PipelineNode.FieldOutput bFunction = inputFields.get("p1");

        return new OncePerFrameJobPipelineNode(configuration, inputFields) {
            @Override
            protected void executeJob(PipelineRenderingContext pipelineRenderingContext, PipelineRequirements pipelineRequirements, ObjectMap outputValues) {
                Object a = aFunction.getValue(pipelineRenderingContext, null);
                Object b = bFunction.getValue(pipelineRenderingContext, null);

                Object result;
                if (a instanceof Float) {
                    result = Math.abs(((float) a) - ((float) b));
                } else if (a instanceof Vector2) {
                    result = ((Vector2) a).dst((Vector2) b);
                } else if (a instanceof Vector3) {
                    result = ((Vector3) a).dst((Vector3) b);
                } else if (a instanceof Color) {
                    Color aColor = (Color) a;
                    Color bColor = (Color) b;

                    final float p1 = aColor.r - bColor.r;
                    final float p2 = aColor.g - bColor.g;
                    final float p3 = aColor.b - bColor.b;
                    final float p4 = aColor.a - bColor.a;
                    result = (float) Math.sqrt(p1 * p1 + p2 * p2 + p3 * p3 + p4 * p4);
                } else {
                    throw new IllegalArgumentException("Not matching type for function");
                }

                OutputValue output = outputValues.get("output");
                if (output != null)
                    output.setValue(result);
            }
        };
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy