void Field::update(sf::Event ev) { sf::Vector2i pos_mouse(sf::Mouse::getPosition(*win)); int x,y; x = (int)((float)pos_mouse.x/(float)draw_size); y = (int)((float)pos_mouse.y/(float)draw_size); if (x < 0 || x > (int)size.x || y < 0 || y > (int)size.y) { return; } int i = y*size.x+x; if (ev.type == sf::Event::MouseButtonPressed && ev.key.code == sf::Mouse::Left) { if (!field[i].is_revealed) setPressedState(i,true); } if (ev.type == sf::Event::MouseButtonReleased) { if (ev.key.code == sf::Mouse::Left) { if (field[i].is_pressed && !field[i].is_flagged && !field[i].is_revealed) { setRevealState(i,true); // check win/lose state if (field[i].type == Tile::BOMB) is_lost = true; } setAllPressedState(false); } if (ev.key.code == sf::Mouse::Right) { if (!field[i].is_revealed) { changeFlag(i); } } } updateAllVertex(); }
void colibrateDetector(){ enum {GOTOPAUSE, PAUSE, CHECKEXT, PROCESSBUTTON, PROCESSNOCK}; static char state = GOTOPAUSE; switch (state){ case GOTOPAUSE: #ifdef LOGGDEBUG loggerWriteToMarker((LogMesT)" GOTOPAUSE \r*", '*'); #endif ledOff(LEDRED1); ledOff(LEDRED2); ledOff(LEDGREEN1); ledOff(LEDGREEN2); timerSet(TIMER_NOCK, 0, 30); state = PAUSE; break; case PAUSE: if (timerIsElapsed(TIMER_NOCK) == TRUE){ state = CHECKEXT; } break; case CHECKEXT: if(buttonIsPressed(BUTTONDOOR) == TRUE){ #ifdef LOGGDEBUG loggerWriteToMarker((LogMesT)" setNextSence \r*", '*'); #endif setNextSence(); changeFlag(FLAG_NOCK, FALSE); ledOn(LEDRED1); ledOn(LEDRED2); _delay_ms(300); ledOff(LEDRED1); ledOff(LEDRED2); state = GOTOPAUSE; return; } if (getFlag(FLAG_NOCK) == TRUE){ state = PROCESSNOCK; } break; case PROCESSNOCK: #ifdef LOGGDEBUG loggerWriteToMarker((LogMesT)" PROCESSNOCK \r*", '*'); #endif ledOn(LEDGREEN1); ledOn(LEDGREEN2); _delay_ms(300); ledOff(LEDGREEN1); ledOff(LEDGREEN2); changeFlag(FLAG_NOCK, FALSE); state = CHECKEXT; break; default: break; } }