public void motionDetected(double cX, double cY, double area) {
		if (
			this.controller.getCamState().getCamSpeedX() == 0
			&& this.controller.getCamState().getCamSpeedY() == 0
		) {
			Point2D motion 	= this.camPosToAbsPos(new Point2D(cX, cY));
	        
			Body 	closest = null;
			this.controller.getRoomState().lock(true);
	        for (Body candidate : this.controller.getRoomState().getBodyList()) {
	        	Point2D bodyAng = this.cartesianToAbsRad(candidate.getPos());
	        	double	bDist	= candidate.getDistance();
	        	
	        	double 	angDist = this.angularDistance(motion, bodyAng);
	        	
	        	// TODO proper size calculation
	        	if (
	        		((angDist / Math.pow(bDist, 0.45)) < 0.2)
	        		&& (
	        			closest == null
	        			|| closest.getDistance() > bDist
	        		) 
	        	) {
	        		closest = candidate;
	        	}
	        }
	        
	        if (closest != null) {
	        	Point3D motionPos = this.absPosToCartesian(motion, closest.getDistance());
		        closest.moved(motionPos);
		        
				this.controller.getGui().printConsole("Bewegung erkannt (" + df.format(motionPos.x) + ", " + df.format(motionPos.y) + ", " +  df.format(motionPos.z) + ")", 6);
	        }
	        
	        this.controller.getRoomState().lock(false);
		}
	}