📄 games_cargador.c
字号:
case EDITOR_RET_BACK:/*Notify you the user press skey right(BACK)*/
App_change_state( (APP_DATA_STRUCTURE_NAME_T *)&gamesApp_data.app,
(APP_SUBSTATE_STRUCTURE_NAME_T *)&games_substate,
(OP_UINT8) APP_GAMES_STATE_MENU);
break;
case EDITOR_RET_CALL_COME:
call_come_in_editor = OP_TRUE;
break;
default:
break;
}
break;
case OPUS_FOCUS_CUST_PAINT :
if ( (pMess != OP_NULL) && (*((OP_BOOLEAN *)pMess) == OP_TRUE))
{
if(call_come_in_editor)
{
APP_Cargador_select();
call_come_in_editor = OP_FALSE;
}
else if (inGame)
{
if (ds_get_screen_mode() != SCREEN_GENERAL)
ds_set_screen_mode( SCREEN_GENERAL);
gamePause = OP_FALSE;
guy_moved_count = 0;
ds_set_softkeys_rm( PMPT_SKEY_RESTART,PMPT_SKEY_EMPTY, PMPT_SKEY_BACK);
RePaint();
TPO_SetCurrent_RPU(TPO_RUI_GAMES);
}
/*else /* when in select level popup, there is a sms or call incoming, back to here */
/*{
Games_change_state((OP_UINT8) APP_GAMES_STATE_MENU);
}*/
}
else
ds_refresh();
break;
case OPUS_TIMER_KEYPRESS_REPEAT:
pKey = (KEYEVENT_STRUCT *)pMess;
if (gamesApp_data.popupwin != OP_NULL)
{
ds_pass_event_to_popup(gamesApp_data.popupwin, OPUS_TIMER_KEYPRESS_REPEAT, pKey);
}
break;
case OPUS_FOCUS_KEYPAD :
pKey = (KEYEVENT_STRUCT *)pMess;
if(pKey->state == UHKEY_RELEASE)
break;
OPUS_Stop_Timer(OPUS_TIMER_GAME_TIMING);
onKeyPress(pMess);
op_debug(DEBUG_MED,"ok!!!key pressed.");
break;
case OPUS_TIMER_POPUP_MSG:
cargador_pop_msg_processing();
break;
case OPUS_FOCUS_CUST_APP_PAUSE:
gamePause = OP_TRUE;
OPUS_Stop_Timer(OPUS_TIMER_GAME_TIMING);
OPUS_Stop_Timer(OPUS_TIMER_GAME_PEN);
if (gamesApp_data.popupwin!= OP_NULL)
{
close_old_popup();
/*
* If a call come in when we just passed a level and a popup is displayed (when inGame == OP_TRUE),
* we should initialize the status for the next level here.
*/
//if (inGame) /*Lixingbo modified,because when level passed, inGame always OP_FALSE,so the next can't reach.*/
APP_Cargador_Init();
}
break;
case OPUS_TIMER_GAME_TIMING:
OPUS_Stop_Timer(OPUS_TIMER_GAME_TIMING);
if (inGame)
{
switch(state)
{
case UP :
if(style_state ==1)
{
DrawSquare(MX,MY,BMP_CARGADOR_PUSHU);
style_state =0;
}
else
{
DrawSquare(MX,MY,BMP_CARGADOR_BACK_RIGHT);
style_state =1;
}
break;
case DOWN :
if(style_state ==1)
{
DrawSquare(MX,MY,BMP_CARGADOR_PUSHD);
style_state =0;
}
else
{
DrawSquare(MX,MY,BMP_CARGADOR_FORWARD_RIGHT);
style_state =1;
}
break;
case LEFT :
if(style_state ==1)
{
DrawSquare(MX,MY,BMP_CARGADOR_PUSHL);
style_state =0;
}
else
{
DrawSquare(MX,MY,BMP_CARGADOR_LEFT_STOP);
style_state =1;
}
break;
case RIGHT :
if(style_state ==1)
{
DrawSquare(MX,MY,BMP_CARGADOR_PUSHR);
style_state =0;
}
else
{
DrawSquare(MX,MY,BMP_CARGADOR_RIGHT_STOP);
style_state =1;
}
break;
}
}
ds_refresh();
guy_moved_count++;
if (guy_moved_count < MAX_MOVEMENT_COUNT)
{
OPUS_Start_Timer(OPUS_TIMER_GAME_TIMING, 500, 0, PERIODIC);
}
break;
case OPUS_FOCUS_OPERATION:
pOperation_param = (TPO_OPERATION_PARAM_STRUCTURE_T *)pMess;
switch (pOperation_param->op)
{
case OPERATION_ID_SK_CONFIRM:
{
switch(pOperation_param->id)
{
case COMMAND_SOFTKEY_RIGHT:
Games_change_state((OP_UINT8) APP_GAMES_STATE_MENU);
break;
case COMMAND_SOFTKEY_LEFT:
if(inGame)
APP_Cargador_Init();
break;
default:
break;
}
}
break;
default:
break;
}
break;
case OPUS_TIMER_GAME_PEN:
/* When games pen timer arrived,let the guy move.*/
op_debug(DEBUG_MED,"OPUS_TIMER_GAME_PEN\n");
cargador_route_move();
break;
case OPUS_FOCUS_PEN :
/* Record the pen message and run the timer for game pen.*/
pPen = pMess;
if(pPen->state == TP_PEN_STATE_PENDN && pPen->y >= LCD_ANNUN_HIGH)
{
penx = pPen->x;
peny = pPen->y;
OPUS_Stop_Timer(OPUS_TIMER_GAME_PEN);
/*OPUS_Start_Timer(OPUS_TIMER_GAME_PEN, 60, 0, ONE_SHOT);*/
cargador_pen_process(penx, peny);
}
break;
default :
*handle = OP_FALSE;
break;
}
op_debug(DEBUG_LOW,"CAR:App_Cargador_handler\n");
}
/*==================================================================================================
FUNCTION: cargador_route_move
DESCRIPTION:
Description of this specific function.
ARGUMENTS PASSED:
RETURN VALUE:
IMPORTANT NOTES:
==================================================================================================*/
static OP_BOOLEAN cargador_route_move()
{
OP_UINT8 OldMX, OldMY, OldState;
OP_UINT8 OldBox[rowNum][colNum];
OP_INT8 i,j;
OP_BOOLEAN hasMoved = OP_FALSE;
op_debug(DEBUG_MED,"CargadorRouteMove()\n");
/* Record the old message of the cargador map.*/
OldMX = MX;
OldMY = MY;
OldState = state;
for(i=0;i<current_height;i++)
{
for(j=0;j<current_width;j++)
{
OldBox[i][j] = Current_Box[i][j];
}
}
pathstep++;
if(pathstep+2 <= CargadorCurPath)
{
hasMoved = MoveTo(CargadorPath[pathstep].seat.x-MX, CargadorPath[pathstep].seat.y-MY);
}
if (hasMoved)
{
Old_MX = OldMX;
Old_MY = OldMY;
Old_State = OldState;
for(i=0;i<current_height;i++)
{
for(j=0;j<current_width;j++)
{
Old_Box[i][j] = OldBox[i][j];
}
}
}
if(pathstep+2 < CargadorCurPath)
{
OPUS_Start_Timer(OPUS_TIMER_GAME_PEN, 60, 0, ONE_SHOT);
}
return OP_TRUE;
}
/*==================================================================================================
FUNCTION: cargador_pen_process
DESCRIPTION:
Description of this specific function.
ARGUMENTS PASSED:
RETURN VALUE:
IMPORTANT NOTES:
==================================================================================================*/
static OP_BOOLEAN cargador_pen_process(OP_INT16 x,OP_INT16 y)
{
OP_INT8 posx,posy;
PosType start,end;
OP_UINT8 OldMX, OldMY, OldState;
OP_UINT8 OldBox[rowNum][colNum];
OP_BOOLEAN Success=OP_FALSE;
OP_INT8 i,j;
OP_BOOLEAN hasMoved = OP_FALSE;
op_debug(DEBUG_MED,"CargadorPenProcess()\n");
guy_moved_count = 0;
pathstep = 0;
posx = (x -xoffset)/RECTWIDTH;
posy = (y -yoffset-LCD_ANNUN_HIGH)/RECTHEIGHT;
start.x = MX;
start.y = MY;
end.x = posx;
end.y = posy;
/* Record the old message of the cargador map.*/
OldMX = MX;
OldMY = MY;
OldState = state;
for(i=0;i<current_height;i++)
{
for(j=0;j<current_width;j++)
{
OldBox[i][j] = Current_Box[i][j];
}
}
if(Current_Box[end.y][end.x] == GREEN_BLOCK ||
Current_Box[end.y][end.x] == YELLOW_BLOCK)
{
if(end.x == start.x && end.y - start.y == 1
|| end.x == start.x && end.y - start.y == -1
|| end.y == start.y && end.x - start.x == 1
|| end.y == start.y && end.x - start.x == -1)
{
hasMoved = MoveTo(end.x-start.x, end.y-start.y);
}
}
if (hasMoved)
{
Old_MX = OldMX;
Old_MY = OldMY;
Old_State = OldState;
Success=OP_TRUE;
for(i=0;i<current_height;i++)
{
for(j=0;j<current_width;j++)
{
if(Current_Box[i][j]==2||Current_Box[i][j]==3)
{
Success=OP_FALSE;
}
Old_Box[i][j] = OldBox[i][j];
}
}
}
if (Success)
{
ShowLevelPassed();
return OP_TRUE;
}
if(!hasMoved)
{
SearchRoute(start, end);
if(CargadorCurPath != rowNum*colNum
&& CargadorCurPath != 2)
{
OPUS_Start_Timer(OPUS_TIMER_GAME_PEN, 60, 0, ONE_SHOT);
op_debug(DEBUG_MED,"OPUS_Start_Timer:OPUS_TIMER_GAME_PEN\n");
}
else
{
if (gamesApp_data.audio_on == OP_TRUE)
{
SP_Audio_play_request(sound_list[2], gamesApp_data.volume, OP_FALSE);
}
}
}
return OP_TRUE;
}
/*==================================================================================================
FUNCTION: APP_Cargador_select
DESCRIPTION:
Description of this specific function.
ARGUMENTS PASSED:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -