public void update(double time_difference) {
		// Update delay
		if (is_delaying) {
			if (delay_timer <= 0) {
				is_delaying = false;
			} else {
				delay_timer = Math.max(0, delay_timer - time_difference);
				return;
			}
		}
		// Update timer
		timer += time_difference;
		if (timer >= typing_wait) {
			timer -= typing_wait;
			// Finished
			if (buffer.isEmpty()) {
				is_typing = false;
			// Delay
			} else if (buffer.charAt(0) == DELAY_START) {
				buffer = buffer.substring(1);
				is_delaying = true;
				String delay = "";
				while (buffer.charAt(0) != DELAY_END) {
					delay += buffer.charAt(0);
					buffer = buffer.substring(1);
				}
				buffer = buffer.substring(1);
				delay_timer = Double.parseDouble(delay);
			// New Line
			} else if (buffer.charAt(0) == SEPARATOR) {
				current_order += 1;
				buffer = buffer.substring(1);
			} else {
				// Too many lines
				if (current_order >= LINES) {
					ripple();
				}
				orders[current_order] += buffer.substring(0, 1);
				buffer = buffer.substring(1);
			}
		}
	}