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