本文整理汇总了C++中StaticANIObject::getMessageQueue方法的典型用法代码示例。如果您正苦于以下问题:C++ StaticANIObject::getMessageQueue方法的具体用法?C++ StaticANIObject::getMessageQueue怎么用?C++ StaticANIObject::getMessageQueue使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类StaticANIObject
的用法示例。
在下文中一共展示了StaticANIObject::getMessageQueue方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: handleInteraction
//.........这里部分代码省略.........
if (!inter->_objectId2) {
if (obj->_objtype == kObjTypeStaticANIObject) {
StaticANIObject *ani = static_cast<StaticANIObject *>(obj);
if (inter->_flags & 1) {
if (!ani->isIdle())
return false;
if (ani->_flags & 0x100)
return false;
} else if (inter->_staticsId1 != 0) {
if (ani->_movement || ani->_statics == 0 || ani->_statics->_staticsId != inter->_staticsId1) {
mq = ani->changeStatics1(inter->_staticsId1);
if (!mq)
return false;
ex = new ExCommand((subj ? subj->_id : 0), 55, 0, 0, 0, 0, 1, 0, 0, 0);
ex->_x = obj->_id;
ex->_y = obj->_odelay;
ex->_param = subj ? subj->_odelay : 0;
ex->_excFlags = 3;
ex->_z = (obj->_objtype != kObjTypePictureObject);
ex->_field_20 = invId;
mq->addExCommandToEnd(ex);
if (mq->_isFinished) {
mq->_isFinished = 0;
ani->queueMessageQueue(mq);
}
return true;
} else {
if (ani->getMessageQueue())
ani->queueMessageQueue(0);
}
}
}
if (inter->_messageQueue) {
mq = new MessageQueue(inter->_messageQueue, 0, 1);
mq->changeParam28ForObjectId(obj->_id, -1, obj->_odelay);
if (!mq->chain(0))
return false;
}
return true;
}
if (obj && !subj)
return true;
if (!obj || inter->_objectId3 == obj->_id) {
if (subj) {
if (inter->_messageQueue) {
if (subj->isIdle()) {
mq = new MessageQueue(inter->_messageQueue, 0, 1);
if (!mq->chain(subj)) {
delete mq;
return false;
}
}
}
示例2: handleInteraction
bool InteractionController::handleInteraction(StaticANIObject *subj, GameObject *obj, int invId) {
if (subj) {
if (!subj->isIdle() || (subj->_flags & 0x100))
return false;
}
if (!_interactions.size())
return false;
Interaction *inter = 0;
Interaction *previnter = 0;
int dur = 0;
int mindur = 0xFFFF;
MessageQueue *mq;
ExCommand *ex;
for (ObList::iterator i = _interactions.begin(); i != _interactions.end(); ++i) {
Interaction *cinter = (Interaction *)*i;
if (!cinter->canInteract(subj, obj, invId))
continue;
if ((inter || cinter->_objectId2) && (!obj || cinter->_objectId3 != obj->_id)) {
if (cinter->_messageQueue)
cinter->_messageQueue->calcDuration(subj);
PicAniInfo aniInfo;
obj->getPicAniInfo(&aniInfo);
if (cinter->_staticsId1) {
StaticANIObject *ani = (StaticANIObject *)obj;
ani->_messageQueueId = 0;
ani->changeStatics2(cinter->_staticsId1);
}
int xpos = cinter->_xOffs + obj->_ox;
int ypos = cinter->_yOffs + obj->_oy;
obj->setPicAniInfo(&aniInfo);
if (abs(xpos - subj->_ox) > 1 || abs(ypos - subj->_oy) > 1) {
mq = getSc2MctlCompoundBySceneId(g_fullpipe->_currentScene->_sceneId)->doWalkTo(subj, xpos, ypos, 1, cinter->_staticsId2);
if (mq) {
dur = mq->calcDuration(subj);
delete mq;
} else {
dur = 0x10000;
}
inter = previnter;
} else {
dur = 0;
}
if (dur < mindur) {
inter = cinter;
mindur = dur;
previnter = cinter;
}
} else {
inter = cinter;
break;
}
}
if (!inter)
return false;
if (!inter->_objectId2) {
StaticANIObject *ani = (StaticANIObject *)obj;
if (!ani->isIdle())
return false;
if (ani->_flags & 0x100)
return false;
if (!inter->_staticsId1 || !(inter->_flags & 1))
goto LABEL_38;
if (ani->_movement || ani->_statics == 0 || ani->_statics->_staticsId != inter->_staticsId1) {
mq = ani->changeStatics1(inter->_staticsId1);
if (!mq)
return false;
ex = new ExCommand((subj ? subj->_id : 0), 55, 0, 0, 0, 0, 1, 0, 0, 0);
ex->_x = obj->_id;
ex->_y = obj->_okeyCode;
ex->_keyCode = subj ? subj->_okeyCode : 0;
ex->_excFlags = 3;
ex->_field_14 = (obj->_objtype != kObjTypePictureObject);
ex->_field_20 = invId;
mq->_exCommands.push_back(ex);
if (mq->_isFinished) {
mq->_isFinished = 0;
ani->queueMessageQueue(mq);
}
} else {
if (ani->getMessageQueue())
ani->queueMessageQueue(0);
//.........这里部分代码省略.........
示例3: global_messageHandler4
int global_messageHandler4(ExCommand *cmd) {
StaticANIObject *ani = 0;
switch (cmd->_messageKind) {
case 18: {
MessageQueue *mq = new MessageQueue(g_fp->_currentScene->getMessageQueueById(cmd->_messageNum), cmd->_parId, 0);
if (cmd->_excFlags & 1)
mq->_flag1 = 1;
else
mq->_flag1 = 0;
mq->sendNextCommand();
break;
}
case 2:
if (!g_fp->_currentScene)
break;
ani = g_fp->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_param);
if (!ani)
break;
ani->trySetMessageQueue(cmd->_messageNum, cmd->_parId);
break;
case 1: {
if (!g_fp->_currentScene)
break;
ani = g_fp->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_param);
if (!ani)
break;
int flags = cmd->_field_14;
if (flags <= 0)
flags = -1;
if (cmd->_excFlags & 1)
ani->startAnim(cmd->_messageNum, 0, flags);
else
ani->startAnim(cmd->_messageNum, cmd->_parId, flags);
break;
}
case 8:
if (!g_fp->_currentScene)
break;
ani = g_fp->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_param);
if (!ani)
break;
ani->startAnimEx(cmd->_messageNum, cmd->_parId, -1, -1);
break;
case 20: {
if (!g_fp->_currentScene)
break;
ani = g_fp->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_param);
if (!ani)
break;
int flags = cmd->_field_14;
if (flags <= 0)
flags = -1;
ExCommand2 *cmd2 = (ExCommand2 *)cmd;
if (cmd->_excFlags & 1) {
ani->startAnimSteps(cmd->_messageNum, 0, cmd->_x, cmd->_y, cmd2->_points, cmd2->_pointsSize, flags);
} else {
ani->startAnimSteps(cmd->_messageNum, cmd->_parId, cmd->_x, cmd->_y, cmd2->_points, cmd2->_pointsSize, flags);
}
break;
}
case 21:
if (!g_fp->_currentScene)
break;
ani = g_fp->_currentScene->getStaticANIObject1ById(cmd->_parentId, cmd->_param);
if (!ani)
break;
ani->queueMessageQueue(0);
ani->playIdle();
break;
case 9:
// Nop in original
break;
case 3:
g_fp->_currentScene->_y = cmd->_messageNum - cmd->_messageNum % g_fp->_scrollSpeed;
break;
case 4:
g_fp->_currentScene->_x = cmd->_messageNum - cmd->_messageNum % g_fp->_scrollSpeed;
break;
case 19: {
//.........这里部分代码省略.........