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

📄 cscene.cpp

📁 一个3D的保龄球的源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
					if(m_tenpin[i].m_tenpinState==TENPIN_STATE_MOVING)
						m_tenpin[i].m_tenpinState=TENPIN_STATE_DEAD;
				}
				if(withAI == 0) //Without AI
					m_curHint = ID_HINT_REPLAY;
			}
		}	  
		//////////////////end		
	}
	else 
	{ 
		dealWithAfterCollision();
		
#ifdef ONLINE
		
		//online sent
		CGame * pgame=(CGame*)m_pEngine->m_pGame;
		int round=m_pMatch->GetCurRoundNumber();
		if(round!=(m_pMatch->GetRoundCount()-1)&&m_pMatch->GetPlayerScore(m_pMatch->GetCurPlayer())->m_isSecondBall||
			(round!=(m_pMatch->GetRoundCount()-1)&&m_pMatch->GetPlayerScore(m_pMatch->GetCurPlayer())->m_isStrike))// it is the last ball, begin to send data
			pgame->onlineStateChange(ONLINE_STATE_SEND_DATA);
		if(round==(m_pMatch->GetRoundCount()-1))
		{
			if((m_pMatch->GetPlayerScore(m_pMatch->GetCurPlayer())->iScores == (m_pMatch->GetRoundCount() * 2+1)))// 3rd delivery
				pgame->onlineStateChange(ONLINE_STATE_SEND_DATA);	
			
		}
#endif
		ret = true;
	}  	
	return ret;
}

/************************************************************************/
/* Set pins initial status;									    		*/
/************************************************************************/
void CScene::setInitTenpinState(int tenpinState)  
{	
	int check = 0x0001;
	
	if(m_bReplay != TRUE)
	{
		m_currentTenpinState = tenpinState;
	}
	for (int i = 0; i < 10; i++) 
	{
		if ((m_currentTenpinState & check) >> i == 1) 
		{
			m_tenpin[i].m_tenpinState = (TENPIN_STATE_STAND);
			
		}
		else 
		{
			m_tenpin[i].m_tenpinState = (TENPIN_STATE_OUTSIDE);
			m_object[i]->SetHideProperty(TRUE);
		}	
		m_tenpin[i].Restart(); 
		Vector4s temp = Vector4s(TENPIN_INIT_POS[i][0],TENPIN_INIT_POS[i][1],(8-1) * 4+15);
		m_tenpin[i].SetPosition(temp);
		
		check = check << 1;
	}
}


/************************************************************************/
/*  judge whether no pin is valid										*/
/*																		*/
/*	@return true or false                                               */                  
/************************************************************************/

bool CScene::isNoPinMoving() 
{
	for (int i = 0; i < 10; i++) {
		if (m_tenpin[i].m_tenpinState == TENPIN_STATE_MOVING||m_tenpin[i].m_tenpinState == TENPIN_STATE_BACK) 
		{
			return false;
		}
	}
	return true;
}


/************************************************************************/
/* IT is called to set the rotation level of the ball every step        */
/************************************************************************/
void CScene::setRotationPower() 
{	  
	if(m_aRotRec[0][1] > 0)//init right rolling
	{
		if (m_rotationPower >=0)
		{
			m_ball.setBallType(m_rotationPower);
		}
		else
		{
			m_rotationPower =0;
		}
	}
	else if ( m_aRotRec[0][1] < 0)//init left rolling
	{
		if (m_rotationPower <=0)
		{
			m_ball.setBallType(m_rotationPower);
		}
		else
		{
			m_rotationPower =0;
		}
	}
	else if (m_aRotRec[0][1] == 0)
	{
		m_ball.setBallType(m_rotationPower);
	}
}



/************************************************************************/
/* render all objects in the scene										*/		
/************************************************************************/
void CScene::renderScene()
{
	int i = 0;	
	
#ifdef TIME_STASTIC
	int *TimeOffsets = m_pEngine->m_TimeOffsets;
	TimeOffsets[TIMET_RENDER3DALL] = GETUPTIMEMS();
#endif	
	
	m_render3D.GetG3d()->m_renderParam = RP_NOZSET;
	m_object[RENDER_FLOOR]->Render(&m_render3D); // for FLOOR
	
	
	//RENDER BALL	Mirror
	if(!
		(m_curStage == DS_PLAYER_POWER_CONFIRM || m_curStage == DS_AIM_SPOT_CONFIRM ||
		(m_bReplay == TRUE && m_curCamera == CCI_BACKSIDE3))  //Milo 03-08
		)
	{
		if(m_ball.GetPosition().z >= 0)
		{
			m_render3D.GetG3d()->m_renderParam = RP_MIRROR;
			m_object[RENDER_BALL]->Render(&m_render3D);
		}
	}
	
	//RENDER GRABBING_TENPIN
	m_render3D.GetG3d()->m_renderParam = RP_FLAT|RP_NOFRUSTUM|RP_MIRROR;
	m_object[RENDER_GRABBING_TENPIN]->Render(&m_render3D, m_pMatch->GetGrab()); //for Grabbing tenpin Mirror
	
	for(i =0; i < 10;  ++i)
	{
		if(m_object[i]->GetModelID() == MODEL_2D_TENPIN)
		{
			m_render3D.GetG3d()->m_renderParam = RP_FLAT|RP_NOFRUSTUM|RP_MIRROR|RP_COLORKEY;
		}
		m_tenpin[i].Render(&m_render3D, TRUE);
	}
	m_render3D.GetG3d()->m_renderParam = RP_FLAT|RP_NOFRUSTUM|RP_MIRROR;
	m_object[RENDER_SETTING_TENPIN]->Render(&m_render3D); //for Grabbing tenpin Mirror
	m_render3D.GetG3d()->m_renderParam = 0;	
	
#ifdef TIME_STASTIC
	TimeOffsets[TIMET_RENDERSCENE] = GETUPTIMEMS();
#endif
	
	//RENDER SCENE
	m_object[RENDER_SCENE]->Render(&m_render3D);	// for scene
	
	if((m_curStage == DS_ROTATION_POWER_CONFIRM && m_player->m_iFoulType == FOUL_TYPE_FOUL) 
		|| m_curStage == DS_PLAYER_FOULS || m_curStage == DS_PLAYER_FOULS2)// WangLeiQing
	{	
		int xx1, yy1, xx2, yy2;
		m_render3D.GetG3d()->get2DPos(-60, 0, 0, xx1, yy1);
		m_render3D.GetG3d()->get2DPos(60, 0, 0, xx2, yy2);
		m_pEngine->GetGfx()->DrawLine(xx1, yy1, xx2, yy2, MAKERGB(200, 0, 0));
	}
	
#ifdef TIME_STASTIC
	TimeOffsets[TIMET_RENDERSCENE] = GETUPTIMEMS() - TimeOffsets[TIMET_RENDERSCENE];
#endif
	
	for(i =9; i >= 0;  --i)
	{
		m_render3D.GetG3d()->m_renderParam = RP_FLAT|RP_NOFRUSTUM;		
		m_tenpin[i].Render(&m_render3D,TRUE);//b);
	}
	m_render3D.GetG3d()->m_renderParam = RP_FLAT|RP_NOFRUSTUM;
	m_object[RENDER_GRABBING_TENPIN]->Render(&m_render3D, m_pMatch->GetGrab()); //for Grabbing tenpin
	m_render3D.GetG3d()->m_renderParam = 0;	
	
	//RENDER SETTING_TENPIN
	m_render3D.GetG3d()->m_renderParam = RP_FLAT|RP_NOFRUSTUM;
	m_object[RENDER_SETTING_TENPIN]->Render(&m_render3D); //for Grabbing tenpin
	
	
	if(!(m_curStage == DS_PLAYER_POWER_CONFIRM || m_curStage == DS_AIM_SPOT_CONFIRM))
	{
		m_render3D.GetG3d()->m_renderParam = 0;
		m_object[RENDER_BALL]->Render(&m_render3D);
	}	
	
#ifdef TIME_STASTIC
	TimeOffsets[TIMET_RENDERPLAYER] = GETUPTIMEMS();
	TimeOffsets[TIMET_RENDERANIMATION] = GETUPTIMEMS();
#endif
	
	////////DRAW direction arrow before render 
	if((m_curStage == DS_AIM_SPOT_CONFIRM || m_curStage == DS_PLAYER_POSITION_CONFIRM || m_curStage == DS_GRABBING_TENPIN_ANIM)
		&& m_pMatch->GetCurPlayerAI() == 0)//without AI
	{
		if(m_player->GetIsFouls(m_ball.m_weight) != FOUL_TYPE_FOUL)
		{
			int temp;
			GetDirection(temp);
			int i = m_player->GetPosition().x - PLAYER_POSITION_X+5;
			((CGame*)m_pEngine->m_pGame)->GetUI()->DrawDirection(m_render3D.GetG3d(), temp, i); //m_ball // + DEFAULT_BALL_RADIUS / DEFAULT_EXTEND);
		}
	}
	//////
	
	m_render3D.GetG3d()->m_renderParam = RP_FLAT|RP_NOFRUSTUM;
	if(m_object[RENDER_PLAYER]!=NULL)
	{
		if(m_bReplay)
			m_render3D.GetG3d()->BBCheck(m_player->GetPosition());
		m_object[RENDER_PLAYER]->Render(&m_render3D);
	}
	
	if(m_object[RENDER_PLAYER2]!=NULL && m_bShowSecondPlayer==true)
		m_object[RENDER_PLAYER2]->Render(&m_render3D);
	
	
#ifdef TIME_STASTIC
	TimeOffsets[TIMET_RENDERPLAYER] = GETUPTIMEMS() - TimeOffsets[TIMET_RENDERPLAYER];
#endif
	
	//for rendering AUDIENCE
	m_render3D.GetG3d()->m_renderParam = RP_COLORKEY;	
	m_object[RENDER_FREEZE_AUDIENCE]->Render(&m_render3D); //for static audience 	
	m_object[RENDER_FURNITURE]->Render(&m_render3D); //for Furniture	
	
	////Milo 12-16
#ifdef TIME_STASTIC
	TimeOffsets[TIMET_RENDERANIMATION] = GETUPTIMEMS() - TimeOffsets[TIMET_RENDERANIMATION];
#endif
	
	////RENDER TV
	m_render3D.GetG3d()->m_renderParam = RP_EXTENDED|RP_FLAT|RP_NOFRUSTUM;	
	m_object[RENDER_TV]->Render(&m_render3D); //for static audience 	
	
	//// RENDER coins
	m_render3D.GetG3d()->m_renderParam = RP_COLORKEY;
	
	//	for(i=0;i<COINS_COUNT;i++)
	if(!m_object[RENDER_COIN]->GetHideProperty())
	{
		m_object[RENDER_COIN]->UpdateWorldMat();
		m_render3D.RenderModel(m_object[RENDER_COIN]->GetModelID(),
			&(m_object[RENDER_COIN]->GetWorldMatrix()), m_object[RENDER_COIN]->GetCurFrame() ,m_pDM->m_pCoinTexture[m_cnCurCType]);
	}
	
#ifdef TIME_STASTIC
	TimeOffsets[TIMET_RENDER3DALL] = GETUPTIMEMS() - TimeOffsets[TIMET_RENDER3DALL];
#endif
}


void CScene::playerPositionAdjust(byte withAI, bool bResOK)
{
	int i;
	if(withAI == 0) //without AI
	{
		//
		//
		if(m_pInput->KeyPressed(VKEY_SCROLL_LEFT) || m_pInput->KeyHold(VKEY_SCROLL_LEFT))
		{	
			if(m_iPlayerMoving == 2 || m_iPlayerMoving == 0)
			{
				m_player->SetAnimationOption(PLAYER_ANI_RIGHT_MOVING); //Milo
			}
			m_iPlayerMoving = 1;
			m_player->SetMovingStep(8);	
			for(i=0; i<2;++i)
			{
				if(m_player->MovingPlayer(TRUE) == TRUE)
				{
					movingHand(FALSE, TRUE);
				}
			}
			m_bMoving = false;
			
			if( m_bIsTutStage )
			{
				m_iTutorialStage += TUTORIAL_POSITION;	
				m_bIsTutStage = false;					
			}
			/*if(m_pInput->KeyHold(VKEY_SCROLL_LEFT))
			m_pInput->ResetAll();*/
		}		
		else if(m_pInput->KeyPressed(VKEY_SCROLL_RIGHT) || m_pInput->KeyHold(VKEY_SCROLL_RIGHT))
		{
			if(m_iPlayerMoving == 1 || m_iPlayerMoving == 0)
			{
				m_player->SetAnimationOption(PLAYER_ANI_RIGHT_MOVING, true); //Milo
			}
			m_iPlayerMoving = 2;
			m_player->SetMovingStep(8);		
			for(i=0; i<2;++i)
			{
				if(m_player->MovingPlayer(FALSE) == TRUE)
				{
					movingHand(FALSE, FALSE);
				}
			}
			m_bMoving = false;
			
			if( m_bIsTutStage )
			{
				m_iTutorialStage += TUTORIAL_POSITION;	
				m_bIsTutStage = false;					
			}
			/*if(m_pInput->KeyHold(VKEY_SCROLL_RIGHT))
			m_pInput->ResetAll();*/
		}
		
		if( /*!m_bIsTutStage &&*/ m_pInput->KeyPressed(VKEY_MENU_SELECT) && bResOK)//|| m_m_pInput->KeyHold(VKEY_MENU_SELECT))//confirm go to DS_AIM_SPOT_CONFIRM
		{
			SetStage(DS_PLAYER_POWER_CONFIRM, withAI);
			/*			if( m_bIsTutStage )
			{
			m_iTutorialStage += TUTORIAL_POSITION;	
			m_bIsTutStage = false;					
			}
			*/		
			if( m_bIsTutStage )
			{
				m_iTutorialStage += TUTORIAL_POSITION;	
				m_bIsTutStage = false;					
			}
			m_iPlayerMoving = 0 ; 
			m_bMoving = false;
			return;
		}
		
		//
		if((m_pInput->KeyReleased(VKEY_SCROLL_LEFT) || m_pInput->KeyReleased(VKEY_SCROLL_RIGHT)) 
			&& !m_bMoving)
		{
			//m_iPlayerMoving = 0 ; 
			if(m_player->GetMovingStep()>4)
			{	
				m_player->ZeroMovingStep();
				m_player->SetMovingStep(4);
			}
			m_bMoving = true;
			if(m_iPlayerMoving == 1)
			{
				while(m_player->GetMovingStep()>0)
				{
					if(m_player->MovingPlayer(TRUE) == TRUE)
					{
						movingHand(FALSE, TRUE);
					}
				}
			}
			else if(m_iPlayerMoving == 2)
			{				
				while(m_player->GetMovingStep()>0)
				{
					if(m_player->MovingPlayer(FALSE) == TRUE)
					{
						movingHand(FALSE, FALSE);
					}
				}
			}
			//			m_ball.StepWithPlayer(m_player, &m_vHandPos,  FALSE);	//12-15 Milo
			
			if( m_bIsTutStage )
			{
				m_iTutorialStage += TUTORIAL_POSITION;	
				m_bIsTutStage = false;					
			}
			return;
		}
		
		if(m_bMoving)
		{			
			if(m_player->PlayingAnimation(TRUE) == PLAYER_ANI_FINISH
				|| m_player->PlayingAnimation(TRUE) == PLAYER_ANI_FOUL_FINISH )
			{
				//m_player->SetAnimationOption(PLAYER_ANI_BREATH); //Milo
				if(m_iPlayerMoving == 2)
				{
					m_player->SetAnimationOption(PLAYER_ANI_RIGHT_MOVING, true); //Milo
				}
				else
				{
					m_player->SetAnimationOption(PLAYER_ANI_RIGHT_MOVING);
				}
				m_iPlayerMoving = 0 ; 
				m_bMoving = false;
			}
			m_ball.StepWithPlayer(m_player, &m_vHandPos,  FALSE);	//12-15 Milo
			return;
		}
		
		//
		playerStepMoving();	
		
		if(m_iPlayerMoving != 0)
		{
			if (m_player->PlayingAnimation(TRUE) == PLAYER_ANI_FINISH
				|| m_player->PlayingAnimation(TRUE) == PLAYER_ANI_FOUL_FINISH )
			{
				//m_player->SetAnimationOption(PLAYER_ANI_BREATH); //Milo
				//m_iPlayerMoving = 0;
				if(m_iPlayerMoving == 2)
				{
					m_player->SetAnimationOption(PLAYER_ANI_RIGHT_MOVING, true); //Milo
				}
				else
				{
					m_player->SetAnimationOption(PLAYER_ANI_RIGHT_MOVING);
				}
			}
		}
		/*}
		else
		{
		if (m_player->PlayingAnimation(TRUE) == PLAYER_ANI_FINISH
		|| m_player->PlayingAnimation(TRUE) == PLAYER_ANI_FOUL_FINISH)
		{
		m_player->SetAnimationOption(PLAYER_ANI_BREATH); //Milo
		}
	}*/
	}
	else
	{			
		SetStage(DS_PLAYER_POWER_CONFIRM, withAI);
		return;
	}
	
#ifdef _FOR_BETA_
	m_ball.StepWithPlayer(m_player, &m_vHandPos,  FALSE);	//12-15 Milo
#else
	m_ball.StepWithPlayer(m_player, &m_vHandPos,  FALSE);	//12-15 Milo
#endif
}

void CScene::playerPowerAdjust(byte withAI)
{
	if(withAI == 0) //without AI
	{
		if (m_pInput->KeyPressed(VKEY_MENU_SELECT) )//|| m_m_pInput->KeyHold(VKEY_MENU_SELECT))
		{			
			if( m_bIsTutStage )
			{
				m_iTutorialStage += TUTORIAL_POWER;	
				m_bIsTutStage = false;
			}
			((CGame*)m_pEngine->m_pGame)->GetUI()->StartPowerFire();
			SetStage(DS_AIM_SPOT_CONFIRM, withAI);
			return;
		}	
		if (m_pInput->KeyPressed(VKEY_MENU_BACK) && m_iTutorialStage != TUTORIAL_POWER)//temp changed by Milo 12-01VKEY_MENU_BACK) ) //VKEY_MENU_BACK) )//|| m_m_pInput->KeyHold(VKEY_MENU_SELECT))
		{		
			SetStage(DS_PLAYER_POSITION_CONFIRM, withAI);	
			if( m_bIsTutStage )
			{
				m_iTutorialStage += TUTORIAL_POWER;	
				m_bIsTutStage = false;
			}
			return;
		}
		++m_frameIndex;
	}
	else
	{
		if(m_player->m_curPower<=m_playerAI.power){
			++m_frameIndex;
		}

⌨️ 快捷键说明

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