public void movement() {
    	if (body == null)
    		return;
    	Vector3D oldPosition = getLocation();
		body.updateBodyEuler(0.1);
		if (body.getX() > getArenaWidth() - getWidth() ||
		    body.getY() > getArenaHeight() - getHeight() ||
		    body.getX() < 0 ||
		    body.getY() < 0 ||
		    getArena().isBlockedByTerrain((int)body.getX(), (int)body.getY(), getWidth(), getHeight())) {
				body.setPosition(oldPosition);
				// Shut down all velocities, etc.
				body.reset();
				// Notify interested parties.
				blockedByTerrain();
		} 
		setLocation(body.getPosition());
		BlockageInfo blockage = isMovementBlocked();
		if (blockage != null) {
			body.reset();
			body.setPosition(oldPosition);
			setLocation(body.getPosition());
			// Notify interested parties
			movementIsBlocked(blockage);
		}
    }