📄 cscene.cpp
字号:
#include "CScene.h"
/*#include "CPlayer.h"
#include "CBall.h"
#include "CTenpin.h"*/
#include "..\System\IMath.h"
#include "..\system\font.h"
#include "res.h"
#include "..\3d\render3d.h"
#include "..\3d\render3d.h"
#include "CCameraControl.h"
#include "..\System\keyinput.h"
#include "..\System\sound.h"
#include "..\System\Sysdef.h"
#include "UI.h"
#include "game.h"
#include "cid.h"
//add lane setting here
CScene::CScene(CEngine *p, CMatch *pMatch,CDataManager *pDataManager)
{
m_pEngine = p;
m_pMatch = pMatch;
m_pDM = pDataManager;
m_pInput = m_pEngine->GetInput();
m_cCamera = new CCameraControl(this);
m_cCamera->Load(m_pEngine);
m_render3D.SetEngine(p);
int i;
for (i = 0; i < 10; ++i)
{
m_tenpin[i].init();
m_object[i] = &m_tenpin[i];
}
m_object[RENDER_BALL] = &m_ball;
m_object[RENDER_PLAYER] = m_player;
m_object[RENDER_PLAYER2] = NULL;
m_bShowSecondPlayer=false;
m_object[RENDER_SCENE] = new CObject(OBJ_NORMAL); // for scene
m_object[RENDER_FLOOR] = new CObject(OBJ_NORMAL); // for FLOOR
m_object[RENDER_SKYBOX] = new CObject(OBJ_NORMAL); // for SKYBOX
m_object[RENDER_GRABBING_TENPIN] = new CObject(OBJ_NORMAL); // for GRABBING TENPINS
m_object[RENDER_SETTING_TENPIN] = new CObject(OBJ_NORMAL); // for SETTING TENPINS
// m_object[RENDER_HANDS] = new CObject(OBJ_NORMAL); // for HANDS
m_object[RENDER_FIRST_AUDIENCE] = new CObject(OBJ_NORMAL); // for the first AUDENCE
m_object[RENDER_SECOND_AUDIENCE] = new CObject(OBJ_NORMAL); // for the second AUDENCE
m_object[RENDER_THIRD_AUDIENCE] = new CObject(OBJ_NORMAL); // for the third AUDENCE
// m_object[RENDER_FORTH_AUDIENCE] = new CObject(OBJ_NORMAL); // for the third AUDENCE
m_object[RENDER_FREEZE_AUDIENCE] = new CObject(OBJ_NORMAL); // for the third AUDENCE
m_object[RENDER_FURNITURE] = new CObject(OBJ_NORMAL); // for the third AUDENCE
// for(i=0;i<COINS_COUNT;i++)
m_object[RENDER_COIN]=new CObject(OBJ_NORMAL);
m_object[RENDER_TV]=new CObject(OBJ_NORMAL);
m_physics = new Physics();
//in old init() function
//init();
m_object[RENDER_FREEZE_AUDIENCE]->m_iCurFrame = 0;
for(i=0; i<RENDER_COUNTS;++i)
m_bCurHideProperty[i] = TRUE;
m_curCamera = 0;
// setTenpinLandingPosition();
m_hand2DBuf = (unsigned short *)m_pEngine->GetMem()->GlobalMalloc(SCREEN_WIDTH*SCREEN_HEIGHT*2);
m_pTvBuf = (unsigned short *)m_pEngine->GetMem()->GlobalMalloc(SCREEN_WIDTH*SCREEN_HEIGHT*2);
m_iTutorialStage = WITHOUT_TUTORIAL;
m_bIsDraw = false;
}
CScene::~CScene()
{
if(m_object[RENDER_SCENE])
{
delete m_object[RENDER_SCENE];
m_object[RENDER_SCENE] = NULL;
}
if(m_object[RENDER_FLOOR])
{
delete m_object[RENDER_FLOOR];
m_object[RENDER_FLOOR] = NULL;
}
if(m_object[RENDER_SKYBOX])
{
delete m_object[RENDER_SKYBOX];
m_object[RENDER_SKYBOX] = NULL;
}
if(m_object[RENDER_GRABBING_TENPIN])
{
delete m_object[RENDER_GRABBING_TENPIN];
m_object[RENDER_GRABBING_TENPIN] = NULL;
}
/* if(m_object[RENDER_HANDS])
{
delete m_object[RENDER_HANDS];
m_object[RENDER_HANDS] = NULL;
}*/
if(m_object[RENDER_FIRST_AUDIENCE])
{
delete m_object[RENDER_FIRST_AUDIENCE];
m_object[RENDER_FIRST_AUDIENCE] = NULL;
}
if(m_object[RENDER_SECOND_AUDIENCE])
{
delete m_object[RENDER_SECOND_AUDIENCE];
m_object[RENDER_SECOND_AUDIENCE] = NULL;
}
if(m_object[RENDER_THIRD_AUDIENCE])
{
delete m_object[RENDER_THIRD_AUDIENCE];
m_object[RENDER_THIRD_AUDIENCE] = NULL;
}
/*
if(m_object[RENDER_FORTH_AUDIENCE])
{
delete m_object[RENDER_FORTH_AUDIENCE];
m_object[RENDER_FORTH_AUDIENCE] = NULL;
}*/
if(m_object[RENDER_FREEZE_AUDIENCE])
{
delete m_object[RENDER_FREEZE_AUDIENCE];
m_object[RENDER_FREEZE_AUDIENCE] = NULL;
}
if(m_object[RENDER_FURNITURE])
{
delete m_object[RENDER_FURNITURE];
m_object[RENDER_FURNITURE] = NULL;
}
// for(int i=0;i<COINS_COUNT;i++)
if(m_object[RENDER_COIN])
{
delete m_object[RENDER_COIN];
m_object[RENDER_COIN] = NULL;
}
if(m_object[RENDER_TV])
{
delete m_object[RENDER_TV];
m_object[RENDER_TV] = NULL;
}
if(m_object[RENDER_SETTING_TENPIN])
{
delete m_object[RENDER_SETTING_TENPIN];
m_object[RENDER_SETTING_TENPIN] = NULL;
}
if(m_cCamera)
{
delete m_cCamera;
m_cCamera = NULL;
}
if(m_physics)
{
delete m_physics;
m_physics=NULL;
}
m_pEngine->GetMem()->StackFree(NULL);
}
/*
* load all OBJECT in game scene: ball, player, tenpin and scene.
* @return boolean Load successful or not.
*/
bool CScene::Load()
{
m_render3D.UpdateCamera();
return true;
}
/************************************************************************/
/* Update all object status, properties and movement. */
/* parameter: withAI == 1 for with AI, 0 for without AI */
/* return 0- PAUSE in Game 1 -normal 3-Show ScoreBoard in Game */
/* 5-after show finish animation */
/************************************************************************/
int CScene::UpdateScene(byte withAI)
{
int ret = NORMAL_RETURN;
Vector4s rot = Vector4s(0,0,0);
int i = 0;
++m_iTotalCounter;
#ifdef _NOT_RELEASE
//for CHEAT CODE MODULE
if((m_curStage ==DS_DELIVERY_INIT || m_curStage ==DS_PLAYER_POSITION_CONFIRM) && m_curStage !=DS_DELIVERY_REPLAY)
{
if(isCheatOpen() == CHEAT_OPEN)
{
m_iCheatCode[0] = 7;
cheatCode();
}
//return ret;
} //Milo 01-04 //for cheat code
#endif
//response MENU KEY in Game
if (m_pInput->KeyPressed(gk_NUM5|gk_MSOFT)
&& m_curStage != DS_RESULT_ANI && m_curStage != DS_STORY_MATCHEND && !m_bIsTutStage)
{
if(withAI == 1 && m_bDirectResult == FALSE &&
((m_curStage != DS_BALL_RUNNING || !m_isInTenpinArea )&& m_iSoundPlay != ANI_IN_GUTTER))
{ //for SKIP COM PLAYING IN VS MODE
skipCOMPlaying();
switchToWaiting();
m_pInput->ResetAll();
m_cCamera->UpdateCamera();
return ret;
}
}
// for(i=0;i<COINS_COUNT;i++)
CoinRotate();
//according to the current Stage in SCENE, deal with particular function
switch (m_curStage)
{
case DS_DELIVERY_INIT:
/*if (TENPIN_VIEW_RETURN == swithchWithCameraView() && withAI == 0)
{
ret = TENPIN_VIEW_RETURN;
return ret;
} */
if(m_frameIndex < 5)
{
++m_frameIndex;
}
else
{
m_frameIndex = 0;
m_pEngine->GetSound()->playMIDI(ConvertSoundID(ID_SOUND_AMBIENCE),1);//ID_SOUND_AUD3),0); //ConvertSoundID(ID_SOUND_AUD_DEPRESS//SDF_MID_FOOT_FAULT
m_curStage = DS_GRABBING_TENPIN_ANIM;
}
break;
case DS_GRABBING_TENPIN_ANIM:
grabbingTenpins(TRUE,withAI);
if(withAI ==0) // without AI
{
playerPositionAdjust(withAI, false);
}
break;
case DS_CLOSE_SEE_COIN:
{
if(m_cCamera->IsCameraConstant() && m_iCoinMode != COIN_VIEW_SHOWING
&& m_iCoinMode != COIN_VIEW_DONE)
{
m_iCoinMode = COIN_VIEW_SHOWING;
}
if(m_iCoinMode == COIN_VIEW_SHOWING && m_pInput->KeyPressed(VKEY_MENU_SELECT | VKEY_MENU_CLR))
{
m_iCoinMode = COIN_VIEW_DONE;
m_cCamera->MoveBackFromCoin();
}
else
{
if(m_cCamera->IsCameraConstant() && m_iCoinMode == COIN_VIEW_DONE)
{
SetStage(DS_PLAYER_POSITION_CONFIRM, withAI);
}
}
if (m_pInput->KeyPressed(VKEY_MENU_CLR))
{
m_iCoinMode = COIN_VIEW_DONE;
SetStage(DS_PLAYER_POSITION_CONFIRM, withAI);
}
}
break;
case DS_PLAYER_POSITION_CONFIRM:
//for tutorial
if(m_frameIndex == 0 && m_bWholeScoreBoard == FALSE)
{
setCurTutorialStage(TUTORIAL_POSITION, withAI);
++m_frameIndex;
break;
}
/* else
{
if(m_bIsTutStage && withAI == 0)
{
if(m_pInput->KeyPressed(VKEY_MENU_SELECT))
{
m_iTutorialStage += TUTORIAL_POSITION;
m_bIsTutStage = false;
}
break;
}
}
*/
if(m_prepareClock>0)
{
m_prepareClock--;
if(m_pInput->KeyPressed(VKEY_MENU_SELECT))
m_prepareClock=0;
// break;
}
if(m_prepareClock==0)
m_bHasTitle=false;
if(withAI == 0 && m_bWholeScoreBoard ==FALSE)
{
if ( TENPIN_VIEW_RETURN == swithchWithCameraView())
{
ret = TENPIN_VIEW_RETURN;
return ret;
}
}
//for SHOW WHOLE SCORE BOARD IN GAME (IN GAME)
if ((m_pInput->KeyPressed(gk_NUM3) && m_pMatch->m_iMatchType != MATCH_TYPE_BONUS)
|| (m_bWholeScoreBoard == TRUE && (m_pInput->KeyPressed(gk_NUM5) || m_pInput->KeyPressed(VKEY_MENU_BACK))))
{
if(m_bWholeScoreBoard ==FALSE)
{
ret = SCOREBOARD_RETURN;
m_curHint = ID_HINT_EXIT_SCOREVIEW;
m_bWholeScoreBoard = TRUE;
m_iShowVSTurn = 0;
return ret;
}
else
{
m_curHint = m_pMatch->m_iMatchType == MATCH_TYPE_BONUS ? ID_HINT_BONUS_WAITING : ID_HINT_WAITING;
m_bWholeScoreBoard = FALSE;
m_iPlayerMoving = 0 ;
m_bMoving = false;
return ret;
}
m_pInput->ResetAll();
}
if(m_bWholeScoreBoard == TRUE)
{
ret = SCOREBOARD_RETURN;
m_frameIndex = 0;
return ret;
}
playerPositionAdjust(withAI);
++m_frameIndex;
break;
case DS_PLAYER_POWER_CONFIRM:
//for tutorial
if(m_frameIndex == 1)
{
setCurTutorialStage(TUTORIAL_POWER, withAI);
++m_frameIndex;
break;
}
/* else
{
if(m_bIsTutStage && withAI == 0)
{
if(m_pInput->KeyPressed(VKEY_MENU_SELECT))
{
m_iTutorialStage += TUTORIAL_POWER;
m_bIsTutStage = false;
}
break;
}
}
*/
playerPowerAdjust(withAI);
break;
case DS_AIM_SPOT_CONFIRM:
//for tutorial FOULS or FASTER DIRECTION
if((m_player->GetIsFouls(m_ball.m_weight) != FOUL_TYPE_NONE && !(m_iTutorialStage&TUTORIAL_OVER_POWER) )
|| (m_player->GetIsFouls(m_ball.m_weight) == FOUL_TYPE_FOUL))
{
if(withAI == 0)
{
if(m_player->GetIsFouls(m_ball.m_weight) == FOUL_TYPE_FOUL)
{
if(m_frameIndex == 0)
{
if(!(m_iTutorialStage&TUTORIAL_FOUL))
{
m_curHint = ID_HINT_BONUS_CONTINUE; // player fouls
setCurTutorialStage(TUTORIAL_FOUL, withAI);
}
++m_frameIndex;
break;
}
else
{
if(m_bIsTutStage && withAI == 0)
{
if(m_pInput->KeyPressed(gk_NUM5 | gk_MSOFT | VKEY_MENU_CLR))
{
m_curHint = ID_HINT_PLAYER_FOUL;
m_frameIndex = 1;
m_iTutorialStage += TUTORIAL_FOUL;
m_bIsTutStage = false;
}
break;
}
}
}
else if(m_player->GetIsFouls(m_ball.m_weight) == FOUL_TYPE_FASTER_DIRECTION)
{
if(m_frameIndex == 0)
{
m_curHint = ID_HINT_BONUS_CONTINUE; // player choose too much power,
setCurTutorialStage(TUTORIAL_OVER_POWER, withAI);
++m_frameIndex;
break;
}
else
{
if(m_bIsTutStage && withAI == 0)
{
if(m_pInput->KeyPressed(gk_NUM5 | gk_MSOFT | VKEY_MENU_CLR))
{
m_curHint = ID_HINT_DIRECTION;
m_frameIndex = 0;
m_iTutorialStage += TUTORIAL_OVER_POWER;
m_bIsTutStage = false;
}
break;
}
}
}
}
//if the Player foul, jump to throwing ani after 1-2 seconds...
if(m_player->GetIsFouls(m_ball.m_weight) == FOUL_TYPE_FOUL)
{
if(m_frameIndex > STOP_ON_FOULS_FEET)
{
SetStage(DS_ROTATION_POWER_CONFIRM, withAI);
}
else
{
++m_frameIndex;
}
break;
}
}
/*else
{
//for tutorial DIRECTION
if(m_frameIndex == 0)
{
setCurTutorialStage(TUTORIAL_DIRECTION, withAI);
++m_frameIndex;
break;
}
}*/
/*if(!m_bMoving && m_player->GetIsFouls(m_ball.m_weight) == FOUL_TYPE_FASTER_DIRECTION)
{
if(m_frameIndex > 15)
{
SetStage(DS_ROTATION_POWER_CONFIRM, withAI);
if( m_bIsTutStage )
{
m_iTutorialStage += TUTORIAL_DIRECTION;
m_bIsTutStage = false;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -