protected void move() {
		//show/hide nodes
		if (visibleNodesCount != mainPanel.symbolsCount.intValue()) {
			visibleNodesCount = mainPanel.symbolsCount.intValue();
			for (int i = 0; i < symbols.size(); i++)
				symbols.get(i).node.setVisible(i < visibleNodesCount);
		}
		//animate symbols
		for (int i = 0; i < mainPanel.symbolsCount.intValue(); i++) {
			NodeSymbol symbol = symbols.get(i);
			symbol.x += symbol.dirX * 5;
			symbol.y += symbol.dirY * 5;
			if (symbol.x < 0)
				symbol.dirX = Math.abs(symbol.dirX);
			if (symbol.y < 0)
				symbol.dirY = Math.abs(symbol.dirY);
			if (symbol.x > getWidth())
				symbol.dirX = -1 * Math.abs(symbol.dirX);
			if (symbol.y > getHeight())
				symbol.dirY = -1 * Math.abs(symbol.dirY);
			symbol.node.setLayoutX(symbol.x);
			symbol.node.setLayoutY(symbol.y);
		}
		//measure FPS
		frameCount++;
		long currentTime = System.nanoTime();
		if (currentTime > lastSecondStart + 1000000000) {
			int fps = frameCount;
			frameCount = 0;
			lastSecondStart = currentTime;
			mainPanel.onFPSChange(fps);
		}
	}