📄 cscene.cpp
字号:
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 + -