Beispiel #1
0
void MotionMaster::Mutate(MovementGenerator *m, MovementSlot slot)
{
    if (MovementGenerator *curr = Impl[slot])
    {
        bool wasAtTop = (i_top == slot);

        Impl[slot] = NULL; // in case a new one is generated in this slot during directdelete
        removeEmptyTops();

        if (wasAtTop && (m_cleanFlag & MMCF_UPDATE))
            DelayedDelete(curr);
        else
            DirectDelete(curr);
    }

    if (i_top < slot)
    {
        i_top = slot;
    }

    Impl[slot] = m;
    if (i_top > slot)
        needInit[slot] = true;
    else
    {
        needInit[slot] = false;
        m->Initialize(*i_owner);
    }
}
Beispiel #2
0
void MotionMaster::DelayedClean() {
	while (size() > 1) {
		MovementGenerator *curr = top();
		pop();
		removeEmptyTops();
		if (curr)
			DelayedDelete(curr);
	}
}
Beispiel #3
0
MotionMaster::~MotionMaster() {
	// clear ALL movement generators (including default)
	while (!empty()) {
		MovementGenerator *curr = top();
		pop();
		removeEmptyTops();
		if (curr)
			DirectDelete(curr);
	}
}
Beispiel #4
0
void MotionMaster::DelayedExpire() {
	if (size() > 1) {
		MovementGenerator *curr = top();
		pop();
		removeEmptyTops();
		DelayedDelete(curr);
	}

	while (!top())
		--i_top;
}
Beispiel #5
0
void MotionMaster::DirectClean(bool reset) {
	while (size() > 1) {
		MovementGenerator *curr = top();
		pop();
		removeEmptyTops();
		if (curr)
			DirectDelete(curr);
	}

	if (needInitTop())
		InitTop();
	else if (reset)
		top()->Reset(*i_owner);
}
Beispiel #6
0
void MotionMaster::DirectExpire(bool reset) {
	if (size() > 1) {
		MovementGenerator *curr = top();
		pop();
		removeEmptyTops();
		DirectDelete(curr);
	}

	while (!top())
		--i_top;

	if (empty())
		Initialize();
	else if (needInitTop())
		InitTop();
	else if (reset)
		top()->Reset(*i_owner);
}