pl.kotcrab.jdialogue.editor.components.Connector.java Source code

Java tutorial

Introduction

Here is the source code for pl.kotcrab.jdialogue.editor.components.Connector.java

Source

/*******************************************************************************
 * DialogueEditor
 * Copyright (C) 2013-2014 Pawel Pastuszak
 * <p>
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * <p>
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * <p>
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 ******************************************************************************/
package pl.kotcrab.jdialogue.editor.components;

import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType;

import java.util.ArrayList;

public class Connector {
    private float x, y;

    private ArrayList<Connector> targets = new ArrayList<Connector>();
    private ArrayList<Connector> targetsToRemove = new ArrayList<Connector>();
    private boolean isInput;

    private DComponent parrentComponent;

    public Connector(DComponent parrentComponent, boolean isInput) {
        this.x = 0;
        this.y = 0;
        this.isInput = isInput;
        this.parrentComponent = parrentComponent;
    }

    public void render(ShapeRenderer shapeRenderer) {
        shapeRenderer.setColor(Color.BLACK);
        shapeRenderer.rect(x, y, 12, 12);
    }

    public void renderAsSelected(ShapeRenderer shapeRenderer, Color color) {
        shapeRenderer.begin(ShapeType.Filled);
        shapeRenderer.setColor(color);
        shapeRenderer.rect(x, y, 12, 12);
        shapeRenderer.end();
    }

    public Connector getTarget() {
        if (targets.size() > 0)
            return targets.get(0);
        else
            return null;
    }

    public void detach() {
        for (Connector target : targets) {
            Connector[] targetConnectors = null;
            try {
                if (isInput)
                    targetConnectors = target.getParrentComponent().getOutputs();
                else
                    targetConnectors = target.getParrentComponent().getInputs();
            } catch (NullPointerException e) // target was not set, ignore
            {
                continue;
            }

            for (int j = 0; j < targetConnectors.length; j++) // searching for matching output connector
            {
                if (targetConnectors[j] == target) // found
                {
                    Connector temp = targetConnectors[j];
                    targetConnectors[j].removeTarget(this); // detach
                    targetsToRemove.add(temp);
                    continue;
                }
            }
        }

        if (targetsToRemove.size() > 0) {
            targets.removeAll(targetsToRemove);
            targetsToRemove.clear();
        }
    }

    public void detachNotOnList(ArrayList<DComponent> componentList) {
        for (Connector target : targets) {
            Connector[] targetConnectors = null;
            try {
                if (isInput)
                    targetConnectors = target.getParrentComponent().getOutputs();
                else
                    targetConnectors = target.getParrentComponent().getInputs();
            } catch (NullPointerException e) // target was not set, ignore
            {
                continue;
            }

            for (int j = 0; j < targetConnectors.length; j++) // searching for matching output connector
            {
                if (componentList.contains(targetConnectors[j].getParrentComponent())
                        && componentList.contains(this.getParrentComponent()))
                    continue;

                if (targetConnectors[j] == target) // found
                {
                    Connector temp = targetConnectors[j];
                    targetConnectors[j].removeTarget(this); // detach
                    targetsToRemove.add(temp);
                    continue;
                }
            }
        }

        if (targetsToRemove.size() > 0) {
            targets.removeAll(targetsToRemove);
            targetsToRemove.clear();
        }
    }

    public void addTarget(Connector target) {
        targets.add(target);
    }

    public void removeTarget(Connector target) {
        targets.remove(target);
    }

    public float getX() {
        return x;
    }

    public void setX(float x) {
        this.x = x;
    }

    public float getY() {
        return y;
    }

    public void setY(float y) {
        this.y = y;
    }

    public void setPosition(float x, float y) {
        this.x = x;
        this.y = y;
    }

    public DComponent getParrentComponent() {
        return parrentComponent;
    }

    public boolean isInput() {
        return isInput;
    }

    public boolean contains(float x, float y) // is given point inside component
    {
        return this.x <= x && this.x + 12 >= x && this.y <= y && this.y + 12 >= y;
    }
}