public void update() {
		if(state.equals(RowerState.Resting)) {
			heartRate -= RECOVERY_RATE;
			if(heartRate < INITIAL_HEARTRATE) heartRate = INITIAL_HEARTRATE;	
		} else if(state.equals(RowerState.Rowing)) {			
			heartRate += EXERTION_RATE;
			if(heartRate > MAX_HEARTRATE) {
				setState(RowerState.BurntOut);
			}
		} else if(state.equals(RowerState.BurntOut)) {
			heartRate -= RECOVERY_RATE;
			if(heartRate < BURNOUT_RECOVER_HEARTRATE) {
				setState(RowerState.Resting);
			}
		}
		
		frame ++;
		frame = frame % 60;
		if(frame % DRAW_UPDATE_FREQ == 0) drawUpdate();
	}