void sceneHandler03_takeEgg(ExCommand *ex) { MessageQueue *mq = g_fp->_globalMessageQueueList->getMessageQueueById(ex->_parId); if (mq && mq->getCount() > 0) { ExCommand *ex0 = mq->getExCommandByIndex(0); ExCommand *ex1 = mq->getExCommandByIndex(1); int egg1 = sceneHandler03_swallowedEgg1State(); if (egg1 && ex0) { ex0->_parentId = egg1; sceneHandler03_pushEggStack(); } if ( g_vars->swallowedEgg1->_value.intValue == ANI_INV_EGGAPL && !g_vars->swallowedEgg2->_value.intValue && !g_vars->swallowedEgg3->_value.intValue && ex1) { if (ex1->_objtype == kObjTypeObjstateCommand) { ObjstateCommand *com = (ObjstateCommand *)ex1; com->_value = g_fp->getObjectEnumState(sO_EggGulper, sO_WantsNothing); } } } }
void sceneHandler32_trySit(ExCommand *cmd) { MessageQueue *mq = g_fp->_globalMessageQueueList->getMessageQueueById(cmd->_parId); if (!mq || mq->getCount() == 0) return; ExCommand *ex = mq->getExCommandByIndex(0); if (g_vars->scene32_cactusIsGrowing || g_vars->scene32_cactus->_movement || g_vars->scene32_cactus->_statics->_staticsId != ST_CTS_EMPTY || (g_vars->scene32_cactusCounter >= 0 && g_vars->scene32_cactusCounter <= 20)) { ex->_messageKind = 0; ex->_excFlags |= 1; } else { ex->_parentId = ANI_MAN; ex->_messageKind = 1; ex->_messageNum = MV_MAN32_SITDOWN; ex->_param = g_fp->_aniMan->_odelay; g_vars->scene32_dudeIsSitting = true; getCurrSceneSc2MotionController()->deactivate(); getGameLoaderInteractionController()->disableFlag24(); } }
void TestMessageQueue1() { MessageQueue q; Uint32 sum = 0; for (Uint32 i = 1; i <= 5; i++) { q.enqueue(new Alarm(i)); sum += i; } assert(Sum(q) == sum); // Test removing from the middle: Message* m = q.findByKey(3); assert(m != 0); q.remove(m); assert(Sum(q) == sum - 3); assert(q.getCount() == 4); // Test removing from the front: q.remove(q.front()); assert(Sum(q) == sum - 3 - 1); assert(q.getCount() == 3); // Test removing from the front: q.remove(q.back()); assert(Sum(q) == sum - 3 - 1 - 5); assert(q.getCount() == 2); // Test dequeue: m = q.dequeue(); assert(m->getKey() == 2); assert(Sum(q) == sum - 3 - 1 - 5 - 2); assert(q.getCount() == 1); // Test dequeue: m = q.dequeue(); assert(m->getKey() == 4); assert(Sum(q) == sum - 3 - 1 - 5 - 2 - 4); assert(q.getCount() == 0); }
void TestMessageQueue3() { MessageQueue q; Uint32 sum = 0; for (Uint32 i = 1; i <= 5; i++) { q.enqueue(new Alarm(i)); sum += i; } assert(sum == 15); while (!q.isEmpty()) q.remove(q.back()); assert(q.getCount() == 0); }
void sceneHandler03_giveCoin(ExCommand *ex) { MessageQueue *mq = g_fp->_globalMessageQueueList->getMessageQueueById(ex->_parId); if (mq && mq->getCount() > 0) { ExCommand *ex0 = mq->getExCommandByIndex(0); ExCommand *ex1 = mq->getExCommandByIndex(1); if (sceneHandler03_swallowedEgg1State()) { ex0->_messageKind = 1; ex1->_messageKind = 1; getGameLoaderInventory()->removeItem(ANI_INV_COIN, 1); } else { ex0->_messageKind = 0; ex0->_excFlags |= 1; ex1->_messageKind = 0; ex1->_excFlags |= 1; g_vars->scene03_eggeater->_flags &= 0xFF7Fu; } } }
void sceneHandler32_spin(ExCommand *cmd) { MessageQueue *mq = g_fp->_globalMessageQueueList->getMessageQueueById(cmd->_parId); if (!mq || mq->getCount() == 0) return; ExCommand *ex = mq->getExCommandByIndex(0); ExCommand *newex; if ((g_vars->scene32_cactus->_movement && g_vars->scene32_cactus->_movement->_id == MV_CTS_DEFAULT) || g_vars->scene32_cactus->_statics->_staticsId == ST_CTS_GROWUP) { for (int i = 0; i < 12; i++) { newex = ex->createClone(); newex->_excFlags |= 2; mq->insertExCommandAt(1, newex); } g_vars->scene32_cactus->changeStatics2(ST_CTS_GROWUP); chainQueue(QU_CTS_BACK, 1); g_vars->scene32_cactusIsGrowing = false; return; } if (g_vars->scene32_cactus->_statics->_staticsId == ST_CTS_EMPTY && g_vars->scene32_cactusCounter < 0) { for (int i = 0; i < 2; i++) { newex = ex->createClone(); newex->_excFlags |= 2; mq->insertExCommandAt(1, newex); } chainQueue(QU_KDK_DRIZZLE, 0); } }