int ltr_int_tracker_get_frame(struct camera_control_block *ccb, struct frame_type *f, bool *frame_acquired) { (void) ccb; struct input_event event[16]; struct js_event js[16]; size_t i; desc.fd = fd; desc.events = POLLIN; desc.revents = 0; ssize_t res; int poll_res = poll(&desc, 1, 1000 / ltr_int_joy_get_pps()); if(poll_res < 0){ ltr_int_my_perror("poll"); return -1; }else if(poll_res > 0){ //timeout switch(ifc){ case e_JS: res = read(fd, js, sizeof(js)); if((res < 0) || (res % sizeof(struct js_event) != 0)){ ltr_int_my_perror("read"); return -1; } for(i = 0; i < res / sizeof(struct js_event); ++i){ if((js[i].type & ~JS_EVENT_INIT) == JS_EVENT_AXIS){ mapAxis(js[i].number, js[i].value); } } break; case e_EVDEV: res = read(fd, &event, sizeof(event)); if((res < 0) || (res % sizeof(struct input_event) != 0)){ ltr_int_my_perror("read"); return -1; } for(i = 0; i < res / sizeof(struct input_event); ++i){ if(event[i].type == EV_ABS){ mapAxis(event[i].code, normalize(event[i].value, &axes, event[i].code)); } } break; } } f->bloblist.num_blobs = 3; f->bloblist.blobs[0].x = yaw; f->bloblist.blobs[0].y = pitch; f->bloblist.blobs[1].x = roll; f->bloblist.blobs[1].y = tx; f->bloblist.blobs[2].x = ty; f->bloblist.blobs[2].y = tz; f->width = 1; f->height = 1; f->counter = cntr++; *frame_acquired = true; //f->bitmap = &bm; return 0; }
int main(int argc, char** argv) { // std::setbuf(stdout, NULL); // used to always flush std::cout auto sdl_init_status = SDL_Init(SDL_INIT_EVENTS | SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER); assert(sdl_init_status==0); auto inputproc = std::unique_ptr<sdli::Processor>(new sdli::Processor(SampleContext::MAX_COUNT)); auto& device = inputproc->getKeyboard(); auto& pad = inputproc->getGamecontroller(0); /** BEG Mappings **/ auto ctx1 = inputproc->createContext(SampleContext::GameMod); auto ctx2 = inputproc->createContext(SampleContext::Game); ctx1->mapAxis(SDL_SCANCODE_D, SDL_SCANCODE_A, SampleAxes::MoveHorizontal); return 0; }
int main(int argc, char** argv) { std::setbuf(stdout, NULL); // used to always flush std::cout auto sdl_init_status = SDL_Init(SDL_INIT_EVENTS | SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER); assert(sdl_init_status==0); bool sampleQuit = false; auto inputproc = std::unique_ptr<sdli::Processor>(new sdli::Processor(SampleContext::MAX_COUNT)); auto& keyboard = inputproc->getKeyboard(); auto& pad = inputproc->getGamecontroller(0); // auto& pad = inputproc->getGamecontroller(0); SDL_Window* w = SDL_CreateWindow("SampleWindow", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 800, 600, SDL_WindowFlags::SDL_WINDOW_SHOWN|SDL_WindowFlags::SDL_WINDOW_OPENGL); auto sdl_glContext = SDL_GL_CreateContext(w); auto ctx = inputproc->createContext(SampleContext::Game); auto climb = inputproc->createContext(SampleContext::GameMod); /* [BEG] Bind Axes */ ctx->mapAxis(SDL_SCANCODE_LEFT, SDL_SCANCODE_RIGHT, SampleInputAxis::Horizontal); ctx->mapAxis(SDL_SCANCODE_A, SDL_SCANCODE_D, SampleInputAxis::Horizontal); ctx->mapAxis(SDL_SCANCODE_W, SDL_SCANCODE_S, SampleInputAxis::Vertical); ctx->mapAxis(SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_DPAD_LEFT, SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_DPAD_RIGHT, SampleInputAxis::Horizontal); ctx->mapAxis(SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_DPAD_UP, SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_DPAD_DOWN, SampleInputAxis::Vertical); ctx->mapAxis(SDL_GameControllerAxis::SDL_CONTROLLER_AXIS_LEFTX, SampleInputAxis::Horizontal); ctx->mapAxis(SDL_GameControllerAxis::SDL_CONTROLLER_AXIS_LEFTY, SampleInputAxis::Vertical); /* [END] Bind Axes */ /* [BEG] Bind Buttons */ ctx->mapButton(SDL_SCANCODE_E, SampleInputActions::Shoot); ctx->mapButton(SDL_SCANCODE_F, SampleInputActions::CHANGE_CTX); ctx->mapButton(SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_A, SampleInputActions::Shoot); ctx->mapButton(SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_B, SampleInputActions::CHANGE_CTX); /* [END] Bind Buttons */ ctx->addCallback(sdli::CallType::OnPress, SampleInputActions::CHANGE_CTX, [=,&keyboard, &pad](){ keyboard.pushContext(climb); pad.pushContext(climb); }); climb->mapButton(SDL_SCANCODE_F, SampleInputActions::CHANGE_CTX); climb->mapButton(SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_B, SampleInputActions::CHANGE_CTX); climb->addCallback(sdli::CallType::OnRelease, SampleInputActions::CHANGE_CTX, [=,&keyboard, &pad](){ keyboard.popContext(); pad.popContext(); }); keyboard.pushContext(ctx); pad.pushContext(ctx); /* Sample Data */ const int trailCount = 300; float aspectRatio = 600.0f/800.0f; float dx = 0.025f * aspectRatio; float dy = 0.025f; float color[trailCount][4]; color[0][0] = 1.0f; color[0][1] = 1.0f; color[0][2] = 1.0f; color[0][3] = 1.0f; for(int i=1;i<trailCount;++i) { color[i][0] = 0.5f + i*(1.5f/trailCount); color[i][1] = 1.0f; color[i][2] = 1.0f; color[i][3] = 1.0f - i*(2.0f/trailCount); } struct Test { float x{0.0f}, y{0.0f}; } player[trailCount]; float add = -0.01f; SDL_Event event; while(!sampleQuit) { while(SDL_PollEvent(&event)) { switch(event.type) { case SDL_QUIT: sampleQuit = true; break; } inputproc->handleSdlEvents(event); } inputproc->poll(); inputproc->dispatch(); for(int i=trailCount-1;i>0;--i) { player[i].x = player[i-1].x; player[i].y = player[i-1].y; } float movDir[2]; movDir[0] = pad.getAxis(SampleInputAxis::Horizontal) + keyboard.getAxis(SampleInputAxis::Horizontal); movDir[1] = pad.getAxis(SampleInputAxis::Vertical) + keyboard.getAxis(SampleInputAxis::Vertical); float len = sqrtf((movDir[0]*movDir[0])+(movDir[1]*movDir[1])); if(!isnan(len) && len!=0.0f) // Character Control { float dmx = (movDir[0] / len) * 0.002f * fabs(movDir[0]); float dmy = (movDir[1] / len) * 0.002f * fabs(movDir[1]); player[0].x = sdli::clamp(player[0].x + dmx, -1.0f +dx, 1.0f -dx); player[0].y = sdli::clamp(player[0].y - dmy, -1.0f + dy, 1.0f -dy); } if(pad.isPressed(SampleInputActions::Shoot) || keyboard.isPressed(SampleInputActions::Shoot)) { printf("shoot\n"); add = 0.001f; } if(pad.isReleased(SampleInputActions::Shoot) || keyboard.isReleased(SampleInputActions::Shoot)) { printf("unshoot\n"); add = -0.001f; } color[0][1] = sdli::clamp(color[0][1] + add, 0.5f, 1.0f); color[0][0] = keyboard.isDown(SampleInputActions::CHANGE_CTX)||pad.isDown(SampleInputActions::CHANGE_CTX)?1.0f:0.0f; glClearColor(0,0,0,1); glClear(GL_DEPTH_BUFFER_BIT|GL_COLOR_BUFFER_BIT); glEnable(GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // int i = 0; for(int i=trailCount-1;i>=0;--i) { glColor4fv((const GLfloat*)color[i]); glBegin(GL_TRIANGLE_STRIP); glVertex2f(player[i].x - dx * (1.0f - i*(1.0f/trailCount)), player[i].y - dy * (1.0f - i*(1.0f/trailCount))); glVertex2f(player[i].x + dx * (1.0f - i*(1.0f/trailCount)), player[i].y - dy * (1.0f - i*(1.0f/trailCount))); glVertex2f(player[i].x - dx * (1.0f - i*(1.0f/trailCount)), player[i].y + dy * (1.0f - i*(1.0f/trailCount))); glVertex2f(player[i].x + dx * (1.0f - i*(1.0f/trailCount)), player[i].y + dy * (1.0f - i*(1.0f/trailCount))); glEnd(); } glDisable(GL_BLEND); inputproc->swap(); SDL_GL_SwapWindow(w); } SDL_GL_DeleteContext(sdl_glContext); SDL_DestroyWindow(w); return 0; }