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(); } }