void GERBVIEW_FRAME::HandleBlockPlace( wxDC* DC ) { wxASSERT( m_canvas->IsMouseCaptured() ); GetScreen()->m_BlockLocate.SetState( STATE_BLOCK_STOP ); switch( GetScreen()->m_BlockLocate.GetCommand() ) { case BLOCK_MOVE: /* Move */ if( m_canvas->IsMouseCaptured() ) m_canvas->CallMouseCapture( DC, wxDefaultPosition, false ); Block_Move( DC ); GetScreen()->m_BlockLocate.ClearItemsList(); break; default: wxFAIL_MSG( wxT("HandleBlockPlace: Unexpected block command") ); break; } m_canvas->EndMouseCapture( GetToolId(), m_canvas->GetCurrentCursor(), wxEmptyString, false ); GetScreen()->SetModify(); GetScreen()->ClearBlockCommand(); wxASSERT( GetScreen()->m_BlockLocate.GetCount() == 0 ); DisplayToolMsg( wxEmptyString ); }
static void _TetrisManager_DeleteLines(TetrisManager* tetrisManager, int* indexes, int count){ int i; int j; int k = BOARD_ROW_SIZE - 2; int toDelete; char temp[BOARD_ROW_SIZE][BOARD_COL_SIZE] = { EMPTY, }; for (i = BOARD_ROW_SIZE - 2; i > 0; i--){ toDelete = False; for (j = 0; j < BOARD_COL_SIZE; j++){ if (i == indexes[j]){ toDelete = True; break; } } if (!toDelete){ for (j = 0; j < BOARD_COL_SIZE; j++){ temp[k][j] = tetrisManager->board[i][j]; } k--; } } for (i = 1; i < BOARD_ROW_SIZE - 1; i++){ for (j = 1; j < BOARD_COL_SIZE - 1; j++){ tetrisManager->board[i][j] = temp[i][j]; } } for (i = 0; i < count; i++){ tetrisManager->shadow = Block_Move(tetrisManager->shadow, DOWN); // lower shadow block by deleted count tetrisManager->score += tetrisManager->speedLevel * 100; tetrisManager->deletedLineCount++; if (tetrisManager->deletedLineCount % LEVELP_UP_CONDITION == 0){ _TetrisManager_UpSpeedLevel(tetrisManager); } } }
void PCB_EDIT_FRAME::HandleBlockPlace( wxDC* DC ) { GetBoard()->m_Status_Pcb &= ~DO_NOT_SHOW_GENERAL_RASTNEST; if( !m_canvas->IsMouseCaptured() ) { DisplayError( this, wxT( "Error in HandleBlockPLace : m_mouseCaptureCallback = NULL" ) ); } GetScreen()->m_BlockLocate.SetState( STATE_BLOCK_STOP ); const BLOCK_COMMAND_T command = GetScreen()->m_BlockLocate.GetCommand(); switch( command ) { case BLOCK_IDLE: break; case BLOCK_DRAG: // Drag case BLOCK_MOVE: // Move case BLOCK_PRESELECT_MOVE: // Move with preselection list if( m_canvas->IsMouseCaptured() ) m_canvas->CallMouseCapture( DC, wxDefaultPosition, false ); Block_Move(); GetScreen()->m_BlockLocate.ClearItemsList(); break; case BLOCK_COPY: // Copy case BLOCK_COPY_AND_INCREMENT: if( m_canvas->IsMouseCaptured() ) m_canvas->CallMouseCapture( DC, wxDefaultPosition, false ); Block_Duplicate( command == BLOCK_COPY_AND_INCREMENT ); GetScreen()->m_BlockLocate.ClearItemsList(); break; case BLOCK_PASTE: break; case BLOCK_ZOOM: // Handled by HandleBlockEnd() default: break; } OnModify(); m_canvas->EndMouseCapture( GetToolId(), m_canvas->GetCurrentCursor(), wxEmptyString, false ); GetScreen()->ClearBlockCommand(); if( GetScreen()->m_BlockLocate.GetCount() ) { DisplayError( this, wxT( "Error in HandleBlockPLace some items left in list" ) ); GetScreen()->m_BlockLocate.ClearItemsList(); } }
void PCB_EDIT_FRAME::HandleBlockPlace( wxDC* DC ) { if( !m_canvas->IsMouseCaptured() ) { DisplayError( this, wxT( "Error in HandleBlockPLace : m_mouseCaptureCallback = NULL" ) ); } GetScreen()->m_BlockLocate.m_State = STATE_BLOCK_STOP; switch( GetScreen()->m_BlockLocate.m_Command ) { case BLOCK_IDLE: break; case BLOCK_DRAG: /* Drag */ case BLOCK_MOVE: /* Move */ case BLOCK_PRESELECT_MOVE: /* Move with preselection list*/ if( m_canvas->IsMouseCaptured() ) m_canvas->CallMouseCapture( DC, wxDefaultPosition, false ); Block_Move(); GetScreen()->m_BlockLocate.ClearItemsList(); break; case BLOCK_COPY: /* Copy */ if( m_canvas->IsMouseCaptured() ) m_canvas->CallMouseCapture( DC, wxDefaultPosition, false ); Block_Duplicate(); GetScreen()->m_BlockLocate.ClearItemsList(); break; case BLOCK_PASTE: break; case BLOCK_ZOOM: // Handled by HandleBlockEnd() default: break; } OnModify(); m_canvas->EndMouseCapture( GetToolId(), m_canvas->GetCurrentCursor(), wxEmptyString, false ); GetScreen()->ClearBlockCommand(); if( GetScreen()->m_BlockLocate.GetCount() ) { DisplayError( this, wxT( "Error in HandleBlockPLace some items left in list" ) ); GetScreen()->m_BlockLocate.ClearItemsList(); } }
static void _TetrisManager_ChangeBoardByDirection(TetrisManager* tetrisManager, int blockType, int direction){ int tempDirection = DOWN; int tempCheckResult = EMPTY; int checkResult; _TetrisManager_ChangeBoardByStatus(tetrisManager, blockType, EMPTY); checkResult = _TetrisManager_CheckValidPosition(tetrisManager, blockType, direction); if (checkResult == EMPTY){ if (blockType == MOVING_BLOCK){ tetrisManager->block = Block_Move(tetrisManager->block, direction); } else if (blockType == SHADOW_BLOCK){ tetrisManager->shadow = Block_Move(tetrisManager->shadow, direction); } } else{ if ((direction == UP || direction == LEFT || direction == RIGHT) && checkResult != FIXED_BLOCK){ if (checkResult == TOP_WALL){ tempDirection = DOWN; tempCheckResult = TOP_WALL; } else if (checkResult == RIGHT_WALL){ tempDirection = LEFT; tempCheckResult = RIGHT_WALL; } else if (checkResult == LEFT_WALL){ tempDirection = RIGHT; tempCheckResult = LEFT_WALL; } do{ tetrisManager->block = Block_Move(tetrisManager->block, tempDirection); } while (_TetrisManager_CheckValidPosition(tetrisManager, MOVING_BLOCK, direction) == tempCheckResult); tetrisManager->block = Block_Move(tetrisManager->block, direction); } } _TetrisManager_ChangeBoardByStatus(tetrisManager, blockType, blockType); }
static int _TetrisManager_CheckValidPosition(TetrisManager* tetrisManager, int blockType, int direction){ Block temp = Block_Move(_TetrisManager_GetBlockByType(tetrisManager, blockType), direction); int i; for (i = 0; i < POSITIONS_SIZE; i++){ int x = Block_GetPositions(temp)[i].x; int y = Block_GetPositions(temp)[i].y; //but now, x == 0 is empty //originally, x == 0 is top wall //because we convert the center top wall into empty intentionally if (blockType == MOVING_BLOCK && x == 0){ return TOP_WALL; } if (!(tetrisManager->board[x][y] == EMPTY || tetrisManager->board[x][y] == MOVING_BLOCK || tetrisManager->board[x][y] == SHADOW_BLOCK)){ return tetrisManager->board[x][y]; } } return EMPTY; }
void WinEDA_GerberFrame::HandleBlockPlace(wxDC * DC) /*****************************************************/ /* Routine to handle the BLOCK PLACE commande */ { bool err = FALSE; if(GetScreen()->ManageCurseur == NULL) { err = TRUE; DisplayError(this, "Error in HandleBlockPLace : ManageCurseur = NULL" ); } GetScreen()->BlockLocate.m_State = STATE_BLOCK_STOP; switch(GetScreen()->BlockLocate.m_Command ) { case BLOCK_IDLE: err = TRUE; break; case BLOCK_DRAG: /* Drag */ case BLOCK_MOVE: /* Move */ case BLOCK_PRESELECT_MOVE: /* Move with preselection list*/ if ( GetScreen()->ManageCurseur ) GetScreen()->ManageCurseur(DrawPanel, DC, FALSE); Block_Move(DC); GetScreen()->BlockLocate.m_BlockDrawStruct = NULL; break; case BLOCK_COPY: /* Copy */ if ( GetScreen()->ManageCurseur ) GetScreen()->ManageCurseur(DrawPanel, DC, FALSE); Block_Duplicate(DC); GetScreen()->BlockLocate.m_BlockDrawStruct = NULL; break; case BLOCK_PASTE: break; case BLOCK_ZOOM: // Handle by HandleBlockEnd() case BLOCK_ROTATE: case BLOCK_INVERT: case BLOCK_DELETE: case BLOCK_SAVE: case BLOCK_ABORT: case BLOCK_SELECT_ITEMS_ONLY: break; } GetScreen()->SetModify(); GetScreen()->ManageCurseur = NULL; GetScreen()->ForceCloseManageCurseur = NULL; GetScreen()->BlockLocate.m_Flags = 0; GetScreen()->BlockLocate.m_State = STATE_NO_BLOCK; GetScreen()->BlockLocate.m_Command = BLOCK_IDLE; if ( GetScreen()->BlockLocate.m_BlockDrawStruct ) { DisplayError(this, "Error in HandleBlockPLace DrawStruct != NULL" ); GetScreen()->BlockLocate.m_BlockDrawStruct = NULL; } DisplayToolMsg(""); }