本文整理汇总了C++中TaskPtr::isDone方法的典型用法代码示例。如果您正苦于以下问题:C++ TaskPtr::isDone方法的具体用法?C++ TaskPtr::isDone怎么用?C++ TaskPtr::isDone使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TaskPtr
的用法示例。
在下文中一共展示了TaskPtr::isDone方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: process
bool TaskQueue::process(float dt, TaskPtr task)
{
if(task->isDone())
return true;
if(task->getType() == Task::BATCH)
{
TaskBatchPtr t = boost::static_pointer_cast<TaskBatch>(task);
for(std::list<TaskPtr>::iterator i=t->list.begin(); i != t->list.end();)
{
if(process(dt, *i))
i = t->list.erase(i);
else
i++;
}
return t->isDone();
}
else if(task->getType() == Task::SEQUENCE)
{
TaskSequencePtr t = boost::static_pointer_cast<TaskSequence>(task);
for(int j=0; j< MAX_CURRENT_JOBS && !t->isDone(); j++)
{
TaskPtr head = t->list.front();
if(process(dt, head))
{
if(t->list.size())
t->list.pop_front();
}
else
break;
}
return t->isDone();
}
else if(task->getType() == Task::ANIM)
{
TaskAnimPtr anim = boost::static_pointer_cast<TaskAnim>(task);
if(!anim->node->isRunning())
return true;
if(!anim->hasStarted())
{
anim->launch();
}
else if(anim->wait)
{
// insidious hack
int ref = (int)anim->node->getUserData();
if(ref != anim->runningCount)
{
LOGD("overwriting previous anmation %d %d\n", ref, anim->runningCount);
return true;
}
}
return anim->isDone();
}
else if(task->getType() == Task::SOUND)
{
TaskSoundPtr sound = boost::static_pointer_cast<TaskSound>(task);
if(!sound->isDone())
sound->launch();
return true;
}
else if(task->getType() == Task::LAMBDA)
{
TaskLambdaPtr t = boost::static_pointer_cast<TaskLambda>(task);
t->func();
return true;
}
else if(task->getType() == Task::EMPTY || task->getType() == Task::IGNORE)
{
return true;
}
LOGD("unknown task %s\n", task->getTag().c_str());
phassert(false && "Unknown task occured");
return true;
}