コード例 #1
0
/*---------------------------------------------------------------------*//**
	シリアライズ
**//*---------------------------------------------------------------------*/
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;
}
コード例 #2
0
/*---------------------------------------------------------------------*//**
	ユーザー操作
**//*---------------------------------------------------------------------*/
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;
}