summaryrefslogblamecommitdiffstats
path: root/src/main/java/org/openslx/graph/Node.java
blob: 0bf2fabdbf6a96b6850ead8e7fea1710d9c5943b (plain) (tree)





































































































































































































                                                                                                                    
package org.openslx.graph;

import java.awt.Color;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Node implements java.io.Serializable
{
	private static final long serialVersionUID = -6997045538537830300L;

	private final String _id;
	@Expose
	@SerializedName( "name" )
	private final String _displayName;
	@Expose
	@SerializedName( "distance" )
	private double _distance = 2;
	@Expose
	@SerializedName( "radius" )
	private int _radius = 2;
	@Expose
	@SerializedName( "color" )
	private String _colorString;
	@Expose
	@SerializedName( "x" )
	private double _x;
	@Expose
	@SerializedName( "y" )
	private double _y;
	private double _fx;
	private double _fy;
	private int _health;
	private Color _color;

	protected Node( String displayName )
	{
		this( displayName, displayName, null );
	}

	protected Node( String id, String displayName, Node startPos )
	{
		_displayName = displayName;
		_id = id;
		if ( startPos == null ) {
			_x = Math.random() * 2;
			_y = Math.random() * 2;
		} else {
			_x = startPos.getX();
			_y = startPos.getY();
		}
		_fx = 0;
		_fy = 0;
		_health = getMaxHealth();
		setColor( Color.BLUE );
	}

	public void swapPos( Node other )
	{
		final double tx = _x, ty = _y;
		_x = other._x;
		_y = other._y;
		other._x = tx;
		other._y = ty;
	}

	public void setX( double x )
	{
		_x = x;
	}

	public void setY( double y )
	{
		_y = y;
	}

	public void addForceX( double fx )
	{
		_fx += fx;
	}

	public void addForceY( double fy )
	{
		_fy += fy;
	}

	public void resetForce()
	{
		_fx = 0;
		_fy = 0;
	}

	public double getX()
	{
		return _x;
	}

	public double getY()
	{
		return _y;
	}

	public double getFX()
	{
		return _fx;
	}

	public double getFY()
	{
		return _fy;
	}

	public String toString()
	{
		return _displayName;
	}

	public String getId()
	{
		return _id;
	}

	public final boolean equals( Object o )
	{
		if ( o instanceof Node ) {
			Node other = (Node)o;
			return _id.equals( other._id );
		}
		return false;
	}

	public final int hashCode()
	{
		return _id.hashCode();
	}

	public final void activate()
	{
		_health = getMaxHealth();
	}

	public final boolean isAlive()
	{
		return _health > 0;
	}

	public final void age()
	{
		_health--;
	}

	public final Color getColor()
	{
		return _color;
	}

	protected final void setColor( Color color )
	{
		_color = color;
		_colorString = String.format( "#%02X%02X%02X", color.getRed(), color.getGreen(), color.getBlue() );
	}

	public final int getRadius()
	{
		return 5;
	}

	protected final void setRadius( int radius )
	{
		_radius = radius;
	}

	public int getMaxHealth()
	{
		return 1;
	}

	public final boolean wasActivated()
	{
		return _health == getMaxHealth();
	}

	public final double getDesiredDistance()
	{
		return _distance;
	}

	protected final void setDesiredDistance( double distance )
	{
		_distance = distance;
	}

	public final int getAlpha()
	{
		return 63 + ( _health * 192 ) / getMaxHealth();
	}

}