bool SpaceInvadersModel::registerObserver(Observer* obs) { //Check if already registered if (findObserver(obs) != observers_.end()) return false; //If not, register observers_.push_back(obs); return true; }
bool SpaceInvadersModel::unregisterObserver(Observer* obs) { //Find observer to unregister std::vector<Observer*>::iterator pos = findObserver(obs); if (pos == observers_.end()) return false; //Unregister if found observers_.erase(pos); return true; }
LocalMapState* Entity::getLocalMap(){ Observer* o = findObserver(0); if (o){ return (LocalMapState*)(o); } return NULL; }
/** * Register an observer to be triggered in a certain interval. * TickObservers with the same interval are grouped to one timer to save timers. * A TickObserver may be registered multiple times with different intervals. * * First a timer with the same interval is looked up. If none found, a free one is * used. Then a free TickObserver slot (of max CFG_MAX_TICK_OBSERVERS) is looked up. If all went * well, the timer is configured and (re)started. */ void TickHandler::attach(TickObserver* observer, uint32_t interval) { int timer = findTimer(interval); if (timer == -1) { timer = findTimer(0); // no timer with given tick interval exist -> look for unused (interval == 0) if (timer == -1) { Logger::error("No free timer available for interval=%d", interval); return; } timerEntry[timer].interval = interval; } int observerIndex = findObserver(timer, 0); if (observerIndex == -1) { Logger::error("No free observer slot for timer %d with interval %d", timer, timerEntry[timer].interval); return; } timerEntry[timer].observer[observerIndex] = observer; Logger::debug("attached TickObserver (%X) as number %d to timer %d, %dus interval", observer, observerIndex, timer, interval); switch (timer) { // restarting a timer which would already be running is no problem (see DueTimer.cpp) case 0: Timer0.setPeriod(interval).attachInterrupt(timer0Interrupt).start(); break; case 1: Timer1.setPeriod(interval).attachInterrupt(timer1Interrupt).start(); break; case 2: Timer2.setPeriod(interval).attachInterrupt(timer2Interrupt).start(); break; case 3: Timer3.setPeriod(interval).attachInterrupt(timer3Interrupt).start(); break; case 4: Timer4.setPeriod(interval).attachInterrupt(timer4Interrupt).start(); break; case 5: Timer5.setPeriod(interval).attachInterrupt(timer5Interrupt).start(); break; case 6: Timer6.setPeriod(interval).attachInterrupt(timer6Interrupt).start(); break; case 7: Timer7.setPeriod(interval).attachInterrupt(timer7Interrupt).start(); break; case 8: Timer8.setPeriod(interval).attachInterrupt(timer8Interrupt).start(); break; } }