⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cscene.cpp

📁 一个3D的保龄球的源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		
		//		if (m_frameIndex < m_playerAI.power)
		//		{
		//			++m_frameIndex;
		//		}
		else
		{
			SetStage(DS_AIM_SPOT_CONFIRM, withAI);	
			return;
		}
	}
	m_player->StrengthChanging(m_ball.m_weight);
	movingHand(TRUE, TRUE);
	m_ball.StepWithPlayer(m_player, &m_vHandPos, TRUE);
}

void CScene::rotationPowerAdjust() 
{
	if(m_bReplay == TRUE)
	{	
		if( m_aRotRec[m_iRecCount][0] == m_nFrame)
		{
			m_rotationPower	= m_aRotRec[m_iRecCount][1];
			++m_iRecCount;
		}
	}
	else
	{
		
		if(m_cnIsFreeze)return;
		
		//int rotationFlag=0;
		if((m_pInput->KeyPressed(VKEY_SCROLL_RIGHT)|| (m_pInput->KeyHold(VKEY_SCROLL_RIGHT) && m_frameIndex%4 ==0))&& m_iRotationFlag<=0)
		{
			--m_iRotationFlag;
		}
		
		if((m_pInput->KeyPressed(VKEY_SCROLL_LEFT) || (m_pInput->KeyHold(VKEY_SCROLL_LEFT) && m_frameIndex%4 ==0))&& m_iRotationFlag>=0)
		{
			++m_iRotationFlag;
		}
		
		if( m_iRotationFlag && m_bIsTutStage)
		{
			m_frameIndex = 0;
			m_iTutorialStage += TUTORIAL_SPIN_CONTROL;//TUTORIAL_FINISH;//TUTORIAL_DONE_SPIN_CONTROL;
			m_bIsTutStage = false;
		}
		
		
		if(m_cnIsReverse)
			m_iRotationFlag=-m_iRotationFlag;	
		
		if(m_iRotationFlag<0)
		{
			if (m_rotationPower > -MAX_PLAYER_ROTATION)//-m_player->m_rotation)//(MAX_PLAYER_ROTATION - m_player->GetStrength()/10 )) //(-(m_scene.getPlayer().getRotation())))
			{
				m_rotationPower = m_iRotationFlag;//--m_rotationPower; //decrease the rotation power
				setRotPower(-1);
				m_aRotRec[m_iRecCount][0] = m_nFrame;
				m_aRotRec[m_iRecCount][1] = m_rotationPower;
				++m_iRecCount;
			}
		}
		if(m_iRotationFlag>0)
		{
			if (m_rotationPower < MAX_PLAYER_ROTATION)//m_player->m_rotation)//(MAX_PLAYER_ROTATION - m_player->GetStrength()/10 ))//m_scene.m_player->m_rotation) 
			{
				m_rotationPower = m_iRotationFlag;//++m_rotationPower; //increase the rotation power				
				setRotPower(1);
				m_aRotRec[m_iRecCount][0] = m_nFrame;
				m_aRotRec[m_iRecCount][1] = m_rotationPower;
				++m_iRecCount;
			}
		}		
	}	
	++m_frameIndex;
}



void CScene::Paint(CUI *pUI)
{	
	if(m_bTvOn == TV_ANI_SHOW || m_bTvOn == TV_ANI_ROLL_BACK)
	{	
	/*if((m_colAni == ANI_COLLISION_STRIKE || m_colAni == ANI_COLLISION_SPARE || m_colAni == ANI_TURKEY_STRIKE) 
	&& m_bTvOn == TV_ANI_SHOW)
	{
	m_oldBuf = m_render3D.SetColorBuffer(m_hand2DBuf);
	m_render3D.SetColorBuffer(m_oldBuf);
	m_render3D.StartRender3D(); //Milo;forRender3D	
	//renderScene();
	m_render3D.GetG3d()->m_renderParam = RP_EXTENDED|RP_FLAT|RP_NOFRUSTUM;	
	m_object[RENDER_TV]->Render(&m_render3D); //for TV
	m_render3D.EndRender3D(); //Milo;forRender3D
	
	  //draw2DStuff(pUI);
	  }
		else*/
		PaintingTVAni();
	}
	else
	{		
		m_render3D.StartRender3D(); //Milo;forRender3D	
		renderScene();
		m_render3D.EndRender3D(); //Milo;forRender3D
		
		draw2DStuff(pUI);
	}
	
}




///set ball , player property
void CScene::setRoundInitInformation()
{
	//	m_pDM->LoadPlayerInfo( m_pMatch->GetCurPlayerID(), m_player);
	LinkPlayer(m_pMatch->GetCurPlayer());
	m_player->restart();
	
	m_ball.initBall();
	m_player->m_ballIndex = m_pMatch->GetCurBallID();
	
	m_pDM->LoadBallInfo(m_pEngine,m_player->m_ballIndex, &m_ball);
	((CGame *)m_pEngine->m_pGame)->GetUI()->DrawBmp2Buf(m_ball.m_Texture, 0, 0, m_pMatch->GetCurBallIconID(), 0, 0);
}

void CScene::MatchInit()
{
	//set scene MODEL id, floor id, pin id
	const Bg *pBg = m_pDM->GetBgInfo(m_pMatch->GetLane());
	m_object[RENDER_SCENE]->SetModelID(pBg->modelIndex);
	m_object[RENDER_FLOOR]->SetModelID(pBg->floorModelIndex);
	//Milo 01-18
	m_object[RENDER_FREEZE_AUDIENCE]->SetModelID(pBg->audienceIndex);//SetModelID(MODEL_FREEZE_AUD);
	m_object[RENDER_FURNITURE]->SetModelID(pBg->furnitureIndex);//SetModelID(MODEL_FREEZE_AUD); //Milo 01-17
	m_object[RENDER_SKYBOX]->SetModelID(pBg->skyboxModelIndex);
	/*for (int i=0; i<10; i++)
	{
	//m_tenpin[i].SetModelID(MODEL_TENPIN); //11-22 by Milo
	m_tenpin[i].SetModelID(MODEL_2D_TENPIN);
}*/
	m_object[RENDER_GRABBING_TENPIN]->SetModelID(MODEL_GRBBING);		
	m_object[RENDER_SETTING_TENPIN]->SetModelID(MODEL_SETTING_PINS);
	//	m_object[RENDER_HANDS]->SetModelID(MODEL_HANDS);
	
	m_object[RENDER_FIRST_AUDIENCE]->SetModelID(MODEL_AUD1);
	m_object[RENDER_SECOND_AUDIENCE]->SetModelID(MODEL_AUD2);
	m_object[RENDER_THIRD_AUDIENCE]->SetModelID(MODEL_AUD3);
	//	m_object[RENDER_FORTH_AUDIENCE]->SetModelID(MODEL_AUD3);
	//	for(int i=0;i<COINS_COUNT;i++)
	m_object[RENDER_COIN]->SetModelID(MODEL_COIN);
	m_object[RENDER_TV]->SetModelID(MODEL_TV);
	
	m_bIsDraw = false;	
}



void CScene::DeliveryInit()
{		
	//RESTART
	setRoundInitInformation();
	//	m_ball.initBall();
	//	m_player->restart();
	m_physics->InitializeObjects(TENPIN_INIT_POS);
	m_time = 0;
	m_bMovementFinished=false;	
	m_isInTenpinArea = false;
	
	m_nFrame = 0;
	
	int i,j;
	for(i =0; i<10;++i)
	{
		m_iCheatPin[i] = 0;
		m_tenpin[i].Restart();
		for(j=0;j<3;++j)
		{
			m_tenpin[i].m_tenpinVelocity[j] = 0;
		}
		
		if (m_tenpin[i].m_tenpinState != TENPIN_STATE_STAND)
		{
			m_tenpin[i].m_tenpinState = TENPIN_STATE_OUTSIDE;
		}
		
		m_tenpin[i].SetModelID(MODEL_2D_TENPIN);///11-22 by Milo		
	}
	
	/////clear the rotation record for replay
	for(i =0; i<75;++i)
	{
		for(j =0; j<2;++j)
		{
			m_aRotRec[i][j] = 0;
		}
	}	
	
	m_rotationPower = 0;
	m_frameIndex = 0;
	//m_frameCount = m_render3D.m_Models[m_player->GetModelID()].getFrameCount();
	
	m_bReplay = FALSE;
	m_vBallStartPosition = Vector4s(0,0,0);
	//set init positions that ball will reach
	m_ballDestinationPosition = Vector4s(0,0,0);
	m_iRecCount = 0;
	
	setInitTenpinState(m_pMatch->GetCurPinMode());	
	m_isTransparent = FALSE;
	m_iSoundPlay = WITHOUT_ANI;
	m_bWholeScoreBoard = FALSE;
	m_colAni = WITHOUT_ANI;
	m_iHandFrame = 0;
	m_bDirectResult = FALSE;
	m_iIsCheat = WITHOUT_CHEAT;
	//m_iMulBonusScore=1;
	m_iBonusScore=0;
	m_iBonusAni = 0;
	m_bAutoReplay = FALSE;
	m_bIsVSWin = FALSE;
	m_bWitheScreen = FALSE;
	m_bIsShaking = false;
	m_iSoundFlag = 0;
	m_iPlayerMoving = 0;
	if(m_pMatch->GetCurPlayer() == 0 && m_pMatch->GetPlayerScore(0)->m_isSecondBall == FALSE)
	{
		m_iCoinMode = 0;
	}
	m_vCoinPos = Vector4s(0,0,12);	
	for(i=0; i<3; ++i)
		m_iCheatCode[i] = 0;
	
	//m_object[RENDER_PLAYER]->SetHideProperty(TRUE);
	
	m_curHint =0;
	
	//reset player AI
	m_playerAI.aimSpot = 0;
	m_playerAI.position = 0;
	m_playerAI.power = 0;
	m_playerAI.rotation = 0;	
	//END
	
	//setRoundInitInformation(); // commented by Milo 01-25
	setInitTenpinState(m_pMatch->GetCurPinMode());
	m_frameIndex = 0; 	
	m_cCamera->SetReplay(FALSE);
	
	//m_curHint = ID_HINT_WAITING;	
	m_curHint = m_pMatch->m_iMatchType == MATCH_TYPE_BONUS ? ID_HINT_BONUS_WAITING : ID_HINT_WAITING;
	
	Vector4s vec = Vector4s(0,40,0);	
	//vec.Clear();
	m_object[RENDER_SETTING_TENPIN]->SetPosition(vec);
	m_object[RENDER_GRABBING_TENPIN]->SetPosition(vec);	
	
	for(i = 0; i<10;++i)
	{
		if(m_tenpin[i].m_tenpinState == TENPIN_STATE_STAND)
		{
			m_object[i]->SetHideProperty(FALSE);
		}
		else
		{
			m_object[i]->SetHideProperty(TRUE);
		}
	}
	
	getPlayerFlag();
	m_object[RENDER_SCENE]->SetHideProperty(FALSE);
	m_object[RENDER_FLOOR]->SetHideProperty(FALSE);
	m_object[RENDER_SKYBOX]->SetHideProperty(FALSE);
	m_object[RENDER_GRABBING_TENPIN]->SetHideProperty(TRUE);
	m_object[RENDER_SETTING_TENPIN]->SetHideProperty(FALSE);
	//	m_object[RENDER_HANDS]->SetHideProperty(FALSE);	
	m_object[RENDER_BALL]->SetHideProperty(FALSE);
	m_object[RENDER_PLAYER]->SetHideProperty(TRUE);
	
	//AUDIENCE
	m_object[RENDER_FIRST_AUDIENCE]->SetHideProperty(FALSE);
	m_object[RENDER_SECOND_AUDIENCE]->SetHideProperty(FALSE);
	m_object[RENDER_THIRD_AUDIENCE]->SetHideProperty(FALSE);
	//	m_object[RENDER_FORTH_AUDIENCE]->SetHideProperty(FALSE);
	m_object[RENDER_FREEZE_AUDIENCE]->SetHideProperty(FALSE);
	m_object[RENDER_FURNITURE]->SetHideProperty(FALSE);
	if(m_object[RENDER_PLAYER2])
		m_object[RENDER_PLAYER2]->SetHideProperty(TRUE);
	
	//	for(i=0;i<COINS_COUNT;i++)
	m_object[RENDER_COIN]->SetHideProperty(TRUE);
	
	m_object[RENDER_TV]->SetHideProperty(TRUE);
	
	m_render3D.GetG3d()->setZDist(FOV_POSITION_CONFIRM); //Milo 12-21
	
	SetStage(DS_DELIVERY_INIT,m_pMatch->GetCurPlayerAI());
	
	//	if(true==m_pMatch->m_smIsStoryMode && (SST_LEVEL==m_pMatch->m_smCurStageType
	//		|| SST_BOSSLEVEL==m_pMatch->m_smCurStageType))
	if(m_pMatch->m_mode==MODE_STORY || m_pMatch->m_mode==MODE_FREE || m_pMatch->m_mode==MODE_QUICK)
		CoinInit();
	
	setHandPos();
	
	getRecommendSpot(m_pMatch->GetCurPinMode(), m_aimPinId, m_aimPinOffset, m_aimType);
	
	Vector4s pos = Vector4s(0,0,0);
	//TV POSITIONS
	m_object[RENDER_TV]->SetPosition(pos);
	//for draw 2D hand & ball]
	
	pos.y = HAND_POSITION_Y ;
	pos.z = HAND_POSITION_Z ;
	m_ball.SetPosition(pos);
	
	m_oldBuf = m_render3D.SetColorBuffer(m_hand2DBuf);
	m_render3D.StartRender3D();	
	setCameraStage(CCSS_PREPARE);
	m_cCamera->UpdateCamera();
	m_render3D.GetG3d()->m_renderParam = 0;
	m_object[RENDER_BALL]->Render(&m_render3D);
	m_render3D.SetColorBuffer(m_oldBuf);
	//end
	setCameraStage(CCSS_AIM);
	m_cCamera->UpdateCamera();
	m_ball.initBall();
	m_physics->setBallWeight(m_ball.m_weight);
	
	/*if(	m_iTutorialStage > WITHOUT_TUTORIAL && 	m_iTutorialStage < TUTORIAL_FINISH)
	{
	m_bIsTutStage = true;
	}
	else
	{*/
	m_bIsTutStage = false;
	m_iCurTutoial = WITHOUT_TUTORIAL;
	//}
	
	m_iSaveFrameCnt = 0;
	TVPlayInit();
	m_bTvOn = TV_ANI_FINISH;
	m_bTvPause = true;
	m_bTvAniPlaying = false;
	
	m_object[RENDER_BALL]->SetHideProperty(TRUE);
	/*m_player->SetAnimationOption(PLAYER_ANI_RIGHT_MOVING); //Milo
	setHandPos();
	m_ball.StepWithPlayer(m_player, &m_vHandPos, FALSE);*/	
	m_ancPos = 60+GET_PRECISION(m_player->m_precision)/2;
	m_bMoving =false;
	m_iRollingCount = 0;
	m_iCurHintId = 0;	
	m_iBoardOffset = 0;
	
	m_bIsCollisionFinish = false;
	m_iRotationFlag=0; 
	m_object[RENDER_COIN]->SetHideProperty(TRUE);
	m_iPlayerFinshAni = -1;
	m_view = FALSE;
	m_iTotalCounter=0;
	m_iSaveDone = 0;
	//	m_bDrawDone = false;
}

void CScene::grabbingTenpins(bool isStart, byte withAI)
{
	int i = 0;
	Vector4s vec = Vector4s(0,0,0);
	++m_frameIndex;
	if(isStart == TRUE)
	{
		if(m_frameIndex < 15)
		{
			if (m_frameIndex < 8)
			{
				vec.z =	(m_object[RENDER_SETTING_TENPIN]->GetPosition().z - 10) ;
				m_object[RENDER_SETTING_TENPIN]->SetPositionZ(vec.z);
				for (i = 0; i < 10; ++i) 
				{	
					m_tenpin[i].GrabbingTenpin((m_pMatch->GetPlayerScore(m_pMatch->GetCurPlayer())->m_isSecondBall),
						TRUE,TRUE);
				}			
			}
			else 
			{
				vec.z =	(m_object[RENDER_SETTING_TENPIN]->GetPosition().z + 10) ;
				m_object[RENDER_SETTING_TENPIN]->SetPositionZ(vec.z);	
			}
		}
		else
		{
			if (m_curStage == DS_DELIVERY_REPLAY)
			{			
				//SetStage(DS_ROTATION_POWER_CONFIRM, withAI);	
				m_bTvPause = false;
			}
			else
			{				
				if(m_object[RENDER_COIN]->GetHideProperty() == FALSE && ((CGame*)m_pEngine->m_pGame)->IsShowHint() == TRUE)
				{	
					m_object[RENDER_SETTING_TENPIN]->SetHideProperty(TRUE);
					SetStage(DS_CLOSE_SEE_COIN, withAI);											
				}
				else
				{
					m_object[RENDER_SETTING_TENPIN]->SetHideProperty(TRUE);
					SetStage(DS_PLAYER_POSITION_CONFIRM, withAI);	
				}
			}
		}
	}	
	else
	{
		if (m_frameIndex > 35) 
		{
			if(m_colAni == ANI_COLLISION_STRIKE || m_colAni == ANI_TURKEY_STRIKE)
				m_bAutoReplay = TRUE;
			if(m_curStage ==DS_SHOW_GRABBING_ANIMATION_WITH_PLAYER_ANI )
			{				
				m_currFrame = 0;
				m_object[RENDER_BALL]->SetHideProperty(TRUE);
				for(i=0;i<10;++i)// FOR TENPIN
				{		
					m_tenpin[i].SetHideProperty(TRUE);
				}
				m_iPlayerFinshAni = m_player->GetAnimationOption();
				SetStage(DS_PLAYER_FINISH_ANI, withAI);	
			}
			else
			{
				switchToWaiting();
			}
		}
		else
		{
			int pindex = m_pMatch->GetCurPlayer();
			bool isSecond = m_pMatch->GetPlayerScore(pindex)->m_isSecondBall;
			if(m_iSaveDone != 0)
			{
				pindex = 1 - pindex;
				isSecond = !isSecond;//m_pMatch->GetPlayerScore(pindex)->m_isSecondBall;
			}
			
			
			if (m_frameIndex < 8)
			{
				if(m_frameIndex ==1)
				{
					playingAudiSound();				
				}
				else if (m_frameIndex == 5 && ((m_colAni == ANI_COLLISION_STRIKE )||(m_colAni == ANI_TURKEY_STRIKE)))
				{		
					m_pEngine->GetSound()->StopVibrate();	
					m_pEngine->GetSound()->playMIDI(ConvertSoundID(ID_SOUND_STRIKE),0);	//sound for STRIKE						
				}
				
				vec.z =	(m_object[RENDER_GRABBING_TENPIN]->GetPosition().z - 10) ;
				m_object[RENDER_GRABBING_TENPIN]->SetPositionZ(vec.z);
				
				if ( isSecond == TRUE 
					||m_pMatch->GetPlayerScore(pindex)->m_isStrike ==TRUE)
				{
					m_object[RENDER_SETTING_TENPIN]->SetHideProperty(TRUE);
				}
				else
				{
					vec.z =	(m_object[RENDER_SETTING_TENPIN]->GetPosition().z - 10) ;
					m_object[RENDER_SETTING_TENPIN]->SetPositionZ(vec.z);				
				}
			}
			else if (m_frameIndex < 15)
			{	
				if (isSecond == FALSE && m_pMatch->GetPlayerScore(pindex)->m_isStrike ==FALSE)
				{			
					vec.z =	(m_object[RENDER_SETTING_TENPIN]->GetPosition().z + 10) ;
					m_object[RENDER_SETTING_TENPIN]->SetPositionZ(vec.z);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -