bool Effect::tryPerform(Unit* owner) { if (_firstPerform) { onApply(owner); _firstPerform = false; } //if force remove we do not want the effect to get another tick if (_forceRemove) { //remove me onRemoving(owner); return false; } double now = BW_Time::getMilliSecondsCached(); if (_tickDelay != NOTICK && _lastperform < now - _tickDelay) { perform(owner); _lastperform += _tickDelay; } //if timeover we want to give the effect the chance for a last tick if (_removeTime != FOREVER && now > _removeTime) { //remove me onRemoving(owner); return false; } return true; }
bool widget::remove(widget* widget) { typedef std::vector<class widget*>::iterator widget_iterator; widget_iterator child = impl_->find_child(widget); if (child == impl_->children_.end()) return false; if (!onRemoving(widget)) return false; impl_->children_.erase(child); widget->impl_->father_ = nullptr; onRemove(widget); repaint(); return true; }