+ SDL_Delay(25);
+
+ if (SDL_PollEvent(&event)
+ && (event.type == SDL_QUIT
+ || (event.type == SDL_KEYDOWN
+ && event.key.keysym.sym == SDLK_ESCAPE))) {
+ SDL_Quit();
+ return 0;
+ }
+
+ if (cwiid_get_state(wiimote, &state))
+ errx(1, "No wii state");
+
+ /* Find biggest state. */
+ ir = &state.ir_src[0];
+ for (i = 0; i < CWIID_IR_SRC_COUNT; i++) {
+ if (!state.ir_src[i].valid)
+ continue;
+ if (!ir->valid || state.ir_src[i].size > ir->size)
+ ir = &state.ir_src[0];
+ }
+
+ if (ir->valid) {
+ /* Give it some slack for missing one or two... */
+ if (time_since_last_ir <= 3) {
+ struct line_segment *n = malloc(sizeof(*n));
+ /* Wiimote coordinates are backwards for us. */
+ n->start.x = MAX_X - last_ir.pos[0];
+ n->start.y = MAX_Y - last_ir.pos[1];
+ n->end.x = MAX_X - ir->pos[0];
+ n->end.y = MAX_Y - ir->pos[1];
+ n->ignore = false;
+ timeradd(&now, &line_life, &n->expires);
+ list_add_tail(&lines, &n->list);
+ thick_line(screen, n, 0);
+ }
+ time_since_last_ir = 0;
+ last_ir = *ir;
+ }
+ time_since_last_ir++;
+ }