/*---------------------------------------------------------------------*//** シリアライズ **//*---------------------------------------------------------------------*/ bool StoryManager::serialize(Serializer* ser) const { // 実行中の Act イベント ID を得る u16 evidActing = 0; EventData* evdat = Game::getGame()->getEventSys()->getEventData(); ASSERT(evdat != 0L); for(int imat = 0; imat < evdat->getEventMatterNum(); imat++) { EventMatter* matterWk = evdat->getEventMatter(imat); if((matterWk->getMatterType() == EMTYPE_ACT) && matterWk->isBegin()) // 開始済み ActMatter 判定 { evidActing = matterWk->getEvId(); } } // ストーリーの保存 if(ser->isStructureMode()) // ストラクチャモード { SaveStructure* svst = (SaveStructure*)ser->getStructure(); svst->_gamesvst._storyid = _storyid; // ストーリー ID の書き込み svst->_gamesvst._isPlayedStoryStartupEvent = _isPlayedStoryStartupEvent; // ストーリー開始イベント起動フラグの書き込み svst->_gamesvst._evidActing = evidActing; // 実行中の Act イベント ID の書き込み } else // ダイレクトモード { ser->store(&_storyid); // ストーリー ID の書き込み ser->store(&_isPlayedStoryStartupEvent); // ストーリー開始イベント起動フラグの書き込み ser->store(&evidActing); // 実行中の Act イベント ID の書き込み } // 配置オブジェクトの状態を保存する if(ser->isStructureMode()) // ストラクチャモード { SaveStructure* svst = (SaveStructure*)ser->getStructure(); if(!svst->storePlacementObjData(_listPlaceObj)) { return false; } } else // ダイレクトモード { s32 numPobj = _listPlaceObj->getCount(); ser->store(&numPobj); for(ListIterator<PlacementObj*> it = _listPlaceObj->iterator(); it.has(); it.next()) { const PlacementObj* pobj = it.object(); pobj->serialize(ser); } } // ワールドマップのシリアライズ _wmap->serialize(ser); return true; }
/*---------------------------------------------------------------------*//** ユーザー操作 **//*---------------------------------------------------------------------*/ bool EventMovieFront::operationToEvent(EventOp eop) { EventSys* evsys = Game::getGame()->getEventSys(); ASSERT(evsys != 0L); if((eop == EOP_PAUSE) || (eop == EOP_PLAY)) { evsys->setEventPause(eop == EOP_PAUSE); return true; } bool is = false; // 現在駆動している全ての Act に送信する ActMatter* actm = 0L; EventData* evdat = evsys->getEventData(); ASSERT(evdat != 0L); for(s32 i = 0; i < evdat->getEventMatterNum(); i++) { EventMatter* matter = evdat->getEventMatter(i); if(matter->getMatterType() == EMTYPE_ACT) // ActMatter 判定 { if(((ActMatter*)matter)->isBegin()) // 実行中かどうか判定 { actm = (ActMatter*)matter; switch(eop) { case EOP_SKIP: actm->skip(); // スキップを行う is = true; break; case EOP_ENDWAIT: if(actm->isWaitMovieMsg()) // ムービー台詞待ち中 { actm->doneWaitMovieMsg(); // 台詞待ちを終了する is = true; } break; case EOP_CHECKSKIP: if(actm->checkValidSkip()) { is = true; // 一つでもスキップ可能なら可とする } break; } } } } return is; }