예제 #1
0
 void NewGame::onKeyDown(Event::Keyboard* event)
 {
     switch (event->keyCode())
     {
         case SDLK_ESCAPE:
         case SDLK_b:
             doBack();
             break;
         case SDLK_t:
             doBeginGame();
             break;
         case SDLK_c:
             doCreate();
             break;
         case SDLK_m:
             doEdit();
             break;
         case SDLK_LEFT:
             doPrev();
             break;
         case SDLK_RIGHT:
             doNext();
             break;
     }
 }
예제 #2
0
파일: main.c 프로젝트: szczys/SloJak
int main(void)
{
    init_IO();
    init_interrupts();
    oledInit();
    _delay_ms(200);

    oledSetCursor(cursX, cursY);
    putChar(66,1);
    advanceCursor(6);

    compose();

    initMenu();

    while(1)
    {
        static uint16_t butCounter = 0;
        if (butCounter++ > 65000) {
            //FIXME: Proper button debounce and handling
            butCounter = 0;
            uint8_t readButtons = BUT_PIN;
            if (~readButtons & BUT_LEFT) {
                ++goLeft;
            }
            if (~readButtons & BUT_SEL) {
                ++goSel;
            }
        }

        if (knobChange) {
            if (knobChange > 0) {
                //menuUp();
                knobLeft();
            }
            else {
                //menuDn();
                knobRight();
            }
            knobChange = 0;
        }

        if (goSel) {
            //Lookup and execute action
            doSelect[optionIndex]();
            goSel = 0;
        }
        else if (goLeft) {
            doBack();
            goLeft = 0;
        }
    }
}
예제 #3
0
void PlayerEditName::onTextAreaKeyDown(Event::Keyboard* event)
{
    auto sender = dynamic_cast<UI::TextArea*>(event->emitter());

    std::string text = sender->text();

    if (event->keyCode() == SDLK_BACKSPACE) //backspace
    {
        if (text.length() > 0)
        {
            text = text.substr(0, text.length() - 1);
            sender->setText(text.c_str());
            return;
        }
        return;
    }

    if (event->keyCode() == SDLK_RETURN) //enter
    {
        doDone();
        return;
    }

    if (event->keyCode() == SDLK_ESCAPE)
    {
        doBack();
        return;
    }

    if (event->keyCode() == SDLK_LSHIFT || event->keyCode() == SDLK_RSHIFT) return;
    if (event->keyCode() == SDLK_LCTRL || event->keyCode() == SDLK_RCTRL) return;
    if (event->keyCode() == SDLK_LALT || event->keyCode() == SDLK_RALT) return;

    if (text.length() == 11) return;

    if (_keyCodes.find(event->keyCode()) != _keyCodes.end())
    {
        char chr = _keyCodes.at(event->keyCode());

        if (event->shiftPressed())
        {
            text += toupper(chr);
        }
        else
        {
            text += chr;
        }
        sender->setText(text.c_str());
    }
}
예제 #4
0
void PlayerEditAge::onKeyDown(Event::Keyboard* event)
{
    switch (event->keyCode())
    {
    case SDLK_RIGHT:
        doInc();
        break;
    case SDLK_LEFT:
        doDec();
        break;
    case SDLK_ESCAPE:
        doBack();
        break;
    case SDLK_RETURN:
        doDone();
        break;
    }
}
예제 #5
0
 void NewGame::onBackButtonClick(Event::Mouse* event)
 {
     doBack();
 }