Beispiel #1
0
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;
}
Beispiel #2
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;
}
Beispiel #3
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;
}