コード例 #1
0
void MissionBegin::beginAtConnectionScreen()
{

	beginMPlayer();
	int i;
	for (i = 0; i < 5/*dim screen X*/; i+=1)
	{
		int j;
		for (j = 0; j < 3/*dim screen Y*/; j += 1)
		{
			screens[i][j] = multiplayerScreens[i][j];
		}
	}
	curScreenX = 0;
	curScreenY = 1;
	screens[curScreenX][curScreenY]->beginFadeIn( 1.0 );
	bReadyToLoad = 0;
	bDone = 0;

	LogisticsData::instance->startMultiPlayer();

	ChatWindow::init();


}
コード例 #2
0
void MissionBegin::beginZone()
{
	beginMPlayer();
	restartMPlayer(nullptr);
	bReadyToLoad = 0;
	bDone = 0;
	LogisticsData::instance->startMultiPlayer();
	mainMenu->skipIntro();
	ChatWindow::init();
}
コード例 #3
0
PCSTR MissionBegin::update()
{
	if(bSplash)
	{
		mainMenu->update();
		if(LogisticsScreen::RUNNING != mainMenu->getStatus())
		{
			bSplash = 0;
			if(LogisticsScreen::RESTART == mainMenu->getStatus())
			{
				LogisticsScreen*		pCurScreen = screens[curScreenX][curScreenY];
				if(pCurScreen)
					pCurScreen->end();
				int32_t i;
				for(i = 0; i < 5/*dim screen X*/; i += 1)
				{
					int32_t j;
					for(j = 0; j < 3/*dim screen Y*/; j += 1)
					{
						screens[i][j] = singlePlayerScreens[i][j];
					}
				}
				if(LogisticsData::instance->skipLogistics())
				{
					if(LogisticsData::instance->showChooseMission())
					{
						curScreenX = 3;
						curScreenY = 1;
						screens[3][1] = singlePlayerScreens[0][1];
						screens[curScreenX][curScreenY]->begin();
					}
					else
					{
						curScreenX = 4;
						curScreenY = 1;
						screens[curScreenX][curScreenY]->begin();
					}
				}
				else
				{
					curScreenX = 0;
					curScreenY = 1;
					screens[curScreenX][curScreenY]->beginFadeIn(1.0);
					screens[curScreenX][curScreenY]->begin();
				}
				return LogisticsData::instance->getCurrentBigVideo();
			}
			else if(LogisticsScreen::MULTIPLAYERRESTART == mainMenu->getStatus())
			{
				LogisticsScreen*		pCurScreen = screens[curScreenX][curScreenY];
				if(pCurScreen)
					pCurScreen->end();
				beginMPlayer();
				int32_t i;
				for(i = 0; i < 5/*dim screen X*/; i += 1)
				{
					int32_t j;
					for(j = 0; j < 3/*dim screen Y*/; j += 1)
					{
						screens[i][j] = multiplayerScreens[i][j];
					}
				}
				curScreenX = 0;
				curScreenY = 1;
				screens[curScreenX][curScreenY]->beginFadeIn(1.0);
			}
			else if(LogisticsScreen::SKIPONENEXT == mainMenu->getStatus())
			{
				LogisticsScreen*		pCurScreen = screens[curScreenX][curScreenY];
				if(pCurScreen)
					pCurScreen->end();
				int32_t i;
				for(i = 0; i < 5/*dim screen X*/; i += 1)
				{
					int32_t j;
					for(j = 0; j < 3/*dim screen Y*/; j += 1)
					{
						screens[i][j] = singlePlayerScreens[i][j];
					}
				}
				curScreenX = 1;
				curScreenY = 1;
				screens[curScreenX][curScreenY]->beginFadeIn(1.0);
				screens[curScreenX][curScreenY]->begin();
			}
			if(screens[curScreenX][curScreenY] && curScreenX != -1)
			{
				screens[curScreenX][curScreenY]->begin();
			}
			else // no screen? stay on main menu
			{
				bSplash = true;
				mainMenu->begin();
			}
		}
		return nullptr;
	}
	leftAnim.update();
	rightAnim.update();
	downAnim.update();
	upAnim.update();
	LogisticsScreen*		pCurScreen = screens[curScreenX][curScreenY];
	if(pCurScreen)
	{
		if(logisticsBrain && !MPlayer)
			logisticsBrain->execute();
		//--------------------
		//For Tutorial
		if(animationRunning)
		{
			//Move mouse to correct position.
			if(targetIsButton)
			{
				aButton* targetButton = pCurScreen->getButton(targetButtonId);
				if(!targetButton)
				{
					animationRunning = false;
				}
				else
				{
					userInput->setMouseCursor(mState_TUTORIALS);
					//Get button position.
					float buttonPosX = (targetButton->left() + targetButton->right()) * 0.5f;
					float buttonPosY = (targetButton->top() + targetButton->bottom()) * 0.5f;
					//-------------------
					// Mouse Checks Next
					float realMouseX = userInput->realMouseX();
					float realMouseY = userInput->realMouseY();
					if(timeLeftToScroll > 0.0f)
					{
						float xDistLeft = buttonPosX - realMouseX;
						float yDistLeft = buttonPosY - realMouseY;
						float xDistThisFrame = xDistLeft / timeLeftToScroll * frameLength;
						float yDistThisFrame = yDistLeft / timeLeftToScroll * frameLength;
						userInput->setMousePos(realMouseX + xDistThisFrame, realMouseY + yDistThisFrame);
						timeLeftToScroll -= frameLength;
					}
					else
					{
						userInput->setMousePos(buttonPosX, buttonPosY);
						//We are there.  Start flashing.
						if(buttonNumFlashes)
						{
							buttonFlashTime += frameLength;
							if(buttonFlashTime > .5f)
							{
								pCurScreen->getButton(targetButtonId)->setColor(0xffffffff);
								buttonFlashTime = 0.0f;
								buttonNumFlashes--;
							}
							else if(buttonFlashTime > .25f)
							{
								pCurScreen->getButton(targetButtonId)->setColor(0xff7f7f7f);
							}
						}
						else
						{
							//Flashing is done.  We now return you to your regularly scheduled program.
							animationRunning = false;
							pCurScreen->getButton(targetButtonId)->setColor(0xffffffff);
						}
					}
				}
			}
			else
			{
				aRect* targetButton = pCurScreen->getRect(targetButtonId);
				if(!targetButton)
				{
					animationRunning = false;
				}
				else
				{
					userInput->setMouseCursor(mState_TUTORIALS);
					//Get button position.
					float buttonPosX = (targetButton->left() + targetButton->right()) * 0.5f;
					float buttonPosY = (targetButton->top() + targetButton->bottom()) * 0.5f;
					//-------------------
					// Mouse Checks Next
					float realMouseX = userInput->realMouseX();
					float realMouseY = userInput->realMouseY();
					if(timeLeftToScroll > 0.0f)
					{
						float xDistLeft = buttonPosX - realMouseX;
						float yDistLeft = buttonPosY - realMouseY;
						float xDistThisFrame = xDistLeft / timeLeftToScroll * frameLength;
						float yDistThisFrame = yDistLeft / timeLeftToScroll * frameLength;
						userInput->setMousePos(realMouseX + xDistThisFrame, realMouseY + yDistThisFrame);
						timeLeftToScroll -= frameLength;
					}
					else
					{
						userInput->setMousePos(buttonPosX, buttonPosY);
						//We are there.  Start flashing.
						if(buttonNumFlashes)
						{
							buttonFlashTime += frameLength;
							if(buttonFlashTime > .5f)
							{
								pCurScreen->getRect(targetButtonId)->setColor(0xff000000);
								buttonFlashTime = 0.0f;
								buttonNumFlashes--;
							}
							else if(buttonFlashTime > .25f)
							{
								pCurScreen->getRect(targetButtonId)->setColor(0xffffffff);
							}
						}
						else
						{
							//Flashing is done.  We now return you to your regularly scheduled program.
							animationRunning = false;
							pCurScreen->getRect(targetButtonId)->setColor(0xff000000);
						}
					}
				}
			}
		}
		pCurScreen->update();
		if(pCurScreen->getStatus() == LogisticsScreen::GOTOSPLASH || (MPlayer && MPlayer->hostLeft))
		{
			pCurScreen->end();
			beginSplash();
			if(MPlayer &&  MPlayer->hostLeft)
			{
				MPlayer->closeSession();
				delete MPlayer;
				MPlayer = nullptr;
			}
			return nullptr;
		}
		if(pCurScreen->getStatus() == LogisticsScreen::READYTOLOAD &&
				(curScreenX == 4 || (MPlayer && curScreenX == 3)))
			bReadyToLoad = true;
		if(pCurScreen->getStatus() != LogisticsScreen::RUNNING)
		{
			soundSystem->stopBettySample(); // don't want to carry droning on to next screen
			soundSystem->stopSupportSample();
			if(pCurScreen->getStatus() == LogisticsScreen::NEXT)
			{
				pCurScreen->end();
				if(curScreenX < 4)
				{
					if(MPlayer)   // different rules for multiplayer
					{
						if(dynamic_cast<MPParameterScreen*>(screens[curScreenX][curScreenY]))
						{
							if(curScreenX == 2)
							{
								if(!MPlayer->missionSettings.quickStart)
								{
									setUpMultiplayerLogisticsScreens();
								}
							}
							else if(curScreenX == 3)
							{
								bDone = true;
							}
						}
					}
					if(screens[curScreenX + 1][curScreenY])
					{
						if(screens[curScreenX + 1][curScreenY] == placeHolderScreen)
							curScreenX++;
						screens[curScreenX + 1][curScreenY]->begin();
					}
					leftAnim.begin();
					curScreenX++;
					soundSystem->playDigitalSample(LOG_NEXTBACKBUTTONS);
					animJustBegun = true;
				}
				else
				{
					bDone = true;
				}
			}
			else if(pCurScreen->getStatus() == LogisticsScreen::PREVIOUS)
			{
				pCurScreen->end();
				if(screens[curScreenX - 1][curScreenY])
				{
					if(screens[curScreenX - 1][curScreenY] == placeHolderScreen)
						curScreenX--;
					screens[curScreenX - 1][curScreenY]->begin();
				}
				rightAnim.begin();
				curScreenX--;
				soundSystem->playDigitalSample(LOG_NEXTBACKBUTTONS);
				animJustBegun = true;
			}
			else if(pCurScreen->getStatus() == LogisticsScreen::DOWN)
			{
				pCurScreen->end();
				if(screens[curScreenX][curScreenY + 1])
					screens[curScreenX][curScreenY + 1]->begin();
				upAnim.begin();
				curScreenY++;
				soundSystem->playDigitalSample(LOG_NEXTBACKBUTTONS);
				animJustBegun = true;
			}
			else if(pCurScreen->getStatus() == LogisticsScreen::UP)
			{
				pCurScreen->end();
				if(screens[curScreenX][curScreenY - 1])
					screens[curScreenX][curScreenY - 1]->begin();
				downAnim.begin();
				curScreenY--;
				soundSystem->playDigitalSample(LOG_NEXTBACKBUTTONS);
				animJustBegun = true;
			}
			else if(pCurScreen->getStatus() == LogisticsScreen::MAINMENU)
			{
				bSplash = true;
				mainMenu->setDrawBackground(false);
				mainMenu->begin();
				animJustBegun = true;
			}
			else if(pCurScreen->getStatus() == LogisticsScreen::SKIPONENEXT)
			{
				pCurScreen->end();
				if(curScreenX < 3 - 1)
				{
					if(screens[curScreenX + 1 + 1][curScreenY])
						screens[curScreenX + 1 + 1][curScreenY]->begin();
					leftAnim.begin();
					curScreenX++;
					curScreenX++;
					soundSystem->playDigitalSample(LOG_NEXTBACKBUTTONS);
					animJustBegun = true;
				}
				else
				{
					bDone = true;
				}
			}
			else if(pCurScreen->getStatus() == LogisticsScreen::SKIPONEPREVIOUS)
			{
				pCurScreen->end();
				if(screens[curScreenX - 1 - 1][curScreenY])
					screens[curScreenX - 1 - 1][curScreenY]->begin();
				rightAnim.begin();
				curScreenX--;
				curScreenX--;
				soundSystem->playDigitalSample(LOG_NEXTBACKBUTTONS);
				animJustBegun = true;
			}
		}
	}
	else
		bDone = true;
	return nullptr;
}