void yeseulMenkmanInstitution::draw(){ unitCounter = 0; brickCounter = 0; squareCounter = 0; for (int i=0; i<dimensions.width; i+=unitSize) { for (int j=0; j<dimensions.height; j+=unitSize) { randomNumber = patternRandomNumberArray[unitCounter]; drawUnit(i, j, randomNumber, randomNumber%4); unitCounter++; } } drawSquare(); int numberOfBrickRows = int((numberOfBricks+numberOfBricksPerRow)/numberOfBricksPerRow); for (int j = 0; j < numberOfBrickRows; j++) { if (j == int(numberOfBrickRows)-1) { for (int i = 0; i < numberOfBricks%numberOfBricksPerRow; i++) { drawBrick(dimensions.width-unitSize*2-i*unitSize*2, dimensions.height-unitSize*2-j*unitSize*2); brickCounter++; } } else { for (int i = 0; i < numberOfBricksPerRow; i++) { drawBrick(dimensions.width-unitSize*2-i*unitSize*2, dimensions.height-unitSize*2-j*unitSize*2); brickCounter++; } } } }
void PixServer::initRoomPixmap() { QPainter paint; roomPix.resize(MAPWIDTH, MAPHEIGHT); bitBlt(&roomPix,0,0, &backPix); paint.begin(&roomPix); for (unsigned int x = 0; x < board->size(); x++) { if (board->isBrick(x)) drawBrick(&paint, x); } paint.end(); cachePix.resize(MAPWIDTH, MAPHEIGHT); bitBlt(&cachePix,0,0, &roomPix); }
void breakoutDraw() { clear(); drawPaddle(paddle); drawBall(ball); u8 row; u8 col; for(row=0; row < FIELD_HEIGHT; ++row) { for(col=0; col < FIELD_WIDTH; ++col) { if(bricks[(row*FIELD_WIDTH) + col].alive) drawBrick(row, col, bricks[(row*FIELD_WIDTH) + col]); } } render(); }
hkDemo::Result DestructibleWallsDemo::stepDemo() { m_world->lock(); { const hkgPad* pad = m_env->m_gamePad; // Cannon control + drawing // check to see if the user has pressed one of the control keys: int x = ((pad->getButtonState() & HKG_PAD_DPAD_LEFT) != 0)? -1:0; x = ((pad->getButtonState() & HKG_PAD_DPAD_RIGHT) != 0)? 1:x; int y = ((pad->getButtonState() & HKG_PAD_DPAD_DOWN) != 0)? -1:0; y = ((pad->getButtonState() & HKG_PAD_DPAD_UP) != 0)? 1:y; m_shootingDirX += x * 0.015f; m_shootingDirY += y * 0.015f; hkVector4 canonStart( m_centerOfScene ); canonStart(2) += m_options.m_WallsWidth*2.0f; hkVector4 canonDir( m_shootingDirX, m_shootingDirY, -1.0f ); canonDir.normalize3(); // display the canon direction { hkpWorldRayCastInput in; in.m_from = canonStart; in.m_to.setAddMul4( in.m_from, canonDir, 100.0f ); in.m_filterInfo = 0; hkpWorldRayCastOutput out; m_world->castRay( in , out ); hkVector4 hit; hit.setInterpolate4( in.m_from, in.m_to, out.m_hitFraction ); HK_DISPLAY_LINE( in.m_from, hit, 0x600000ff ); if ( out.hasHit() ) { HK_DISPLAY_ARROW( hit, out.m_normal, 0x60ff00ff ); } HK_DISPLAY_ARROW( canonStart, canonDir, hkColor::CYAN ); } // Shooting bullets { hkBool shooting = false; if ( pad->wasButtonPressed(HKG_PAD_BUTTON_1)!= 0 ) { shooting = true; } if ( pad->isButtonPressed(HKG_PAD_BUTTON_2)!= 0) { if ( m_gunCounter-- < 0 ) { shooting = true; m_gunCounter = 5; } } if ( shooting ) { hkpMassProperties result; hkpInertiaTensorComputer::computeSphereVolumeMassProperties(m_options.m_cannonBallRadius, m_options.m_cannonBallMass, result); hkpSphereShape* sphereShape = new hkpSphereShape(m_options.m_cannonBallRadius); hkVector4 spherePos(-20.0f, 0.0f + m_options.m_cannonBallRadius, 200.0f); hkpRigidBodyCinfo sphereInfo; sphereInfo.m_mass = result.m_mass; sphereInfo.m_centerOfMass = result.m_centerOfMass; sphereInfo.m_inertiaTensor = result.m_inertiaTensor; sphereInfo.m_shape = sphereShape; sphereInfo.m_motionType = hkpMotion::MOTION_BOX_INERTIA; sphereInfo.m_position = canonStart; sphereInfo.m_qualityType = HK_COLLIDABLE_QUALITY_BULLET; sphereInfo.m_linearVelocity.setMul4( 100.0f, canonDir ); hkpRigidBody* bullet = new hkpRigidBody( sphereInfo ); sphereInfo.m_shape->removeReference(); m_world->addEntity( bullet ); bullet->removeReference(); } } } // release the world m_world->unlock(); // step demo hkDemo::Result res = hkDefaultPhysicsDemo::stepDemo(); //HK_TIMER_BEGIN_LIST( "Update Walls", "Update Walls"/*HK_NULL*/); HK_TIMER_BEGIN( "Update Walls", "update walls"/*HK_NULL*/); if(m_collisionDetectionType == PARALLEL) { HK_ASSERT2(0x7274e9ec, m_fractureUtility!=HK_NULL ,"The parallel simulation wasn't set!!"); // and update walls m_fractureUtility->Update(); } HK_TIMER_END(); HK_TIMER_BEGIN("DebugDisplay", HK_NULL); // DEBUG DISPLAY if(m_fractureUtility->getSimulation() && m_options.m_showDebugDisplay) { // applied impulses for(int i=0; i<m_fractureUtility->getSimulation()->debugImpulses.getSize(); i+=2) { hkVector4 start( m_fractureUtility->getSimulation()->debugImpulses[i] ); hkVector4 end( m_fractureUtility->getSimulation()->debugImpulses[i+1] ); end.mul4( 0.01f ); HK_DISPLAY_ARROW(start, end , 0x00000000); } if(m_fractureUtility->getSimulation()->debugImpulses.getSize() > 100 ) m_fractureUtility->getSimulation()->debugImpulses.clear(); // bricks positions in parallel simulation hkArray<hkVector4> positions; m_fractureUtility->getSimulation()->getAllBricksPositions( positions ); for(int i=0; i<positions.getSize(); ++i) { drawBrick(positions[i] , m_brickHalfExtents); } positions.clear(); // edges of union find for(int i=0; i<m_fractureUtility->getSimulation()->debugEdges.getSize(); i+=2) { HK_DISPLAY_LINE(m_fractureUtility->getSimulation()->debugEdges[i], m_fractureUtility->getSimulation()->debugEdges[i+1] , 0x00000000); } } HK_TIMER_END(); if(m_collisionDetectionType == PARALLEL) { hkArray< hkVector4 > planes; m_fractureUtility->getSimulation()->getAllDebugfracturePlanes(planes); for(int i=0; i< planes.getSize()-2; ++i) { if(planes[i].length3()!=0) { hkVector4 offset(.0f, .5f, .0f/*.5f, .5f, .5f*/); HK_DISPLAY_PLANE(planes[i], offset, 0.5f, 0xffffffff); } } if(!planes.isEmpty() && planes[planes.getSize()-1].length3()!=0) { hkVector4 offset(.0f, .5f, .0f/*.5f, .5f, .5f*/); HK_DISPLAY_PLANE(planes[planes.getSize()-2], offset, 0.5f, 0x00000000); HK_DISPLAY_PLANE(planes[planes.getSize()-1], offset, 0.5f, 0xffff0000); } hkArray<hkVector4> cpts; hkArray<hkVector4> impulses; m_fractureUtility->getSimulation()->getAllDebugImpulsesAndContactPoints(impulses, cpts); for(int i=0; i< cpts.getSize(); ++i) { HK_DISPLAY_ARROW(cpts[i], impulses[i] , 0x00000000); } } return res; }
int main(){ drawBrick(); // draw brick sleep(5000); return 0; i2cWriteRegister(DEVICE_MCU, 0x05, "ayylmao") }
int runEditor(SDL_Surface* screen) { SDL_Rect selBrickRect; getInpPointerState()->escEnable=1; if( editorState == EDITOR_MAIN ) { if(getButton(C_BTNMENU) || isPointerEscapeClicked() ) { resetBtn( C_BTNMENU ); resetMouseBtn(); changed++; //If it was 0 then it will become 1 (saved) exit. If it was 1 it becomes 2 (not saved). if( changed != 2 ) { editorCleanUp(); startTransition(screen, TRANSITION_TYPE_ROLL_IN, 500 ); return(STATEMENU); } } //We detect if the "preview" brick on the left is clicked, we do this now so we can reset the click so that it does not hit the board selBrickRect.x = HSCREENW-125; selBrickRect.y = HSCREENH-85; selBrickRect.w = selBrickRect.x+20; selBrickRect.h = selBrickRect.y+20; //Also, we can only click it if a teleport destination is not being placed. if( isBoxClicked(&selBrickRect) && teleState==0 ) { editorState=EDITOR_BRICKS_SELECTION; resetMouseBtn(); } //We detect mouse-save input here so it won't hit the board. selBrickRect.x = HSCREENW-145; selBrickRect.y = HSCREENH+42; selBrickRect.w = selBrickRect.x+59; selBrickRect.h = selBrickRect.y+24; if( isBoxClicked(&selBrickRect) && changed>0) { changed=EDITOR_SAVEBTN_CLICKED; resetMouseBtn(); } //We check if the cursor is in the field (if it is not, brick-placement is blocked so we don't place bricks when clicking outside of the field). if( isPointerInBox(&fieldRect) || getInpPointerState()->timeSinceMoved > POINTER_SHOW_TIMEOUT ) { allowBrickToBePlaced=1; } else { allowBrickToBePlaced=0; } //Handle movement if(getButton(C_UP)) { resetBtn(C_UP); moveCursor(&cur, 0,DIRUP, 0); } if(getButton(C_DOWN)) { resetBtn(C_DOWN); moveCursor(&cur, 0,DIRDOWN,0); } if(getButton(C_LEFT)) { resetBtn(C_LEFT); moveCursor(&cur, DIRLEFT,0, 0); } if(getButton(C_RIGHT)) { resetBtn(C_RIGHT); moveCursor(&cur, DIRRIGHT,0, 0); } //Handle mouse input if( getInpPointerState()->timeSinceMoved==0 && !cur.lock ) { setCursor(&cur, getInpPointerState()->curX,getInpPointerState()->curY ); } if(getButton(C_BTNB)) { resetBtn(C_BTNB); selBrick++; if(selBrick==RESERVED) selBrick++; if(selBrick>NUMTILES) selBrick=1; } if(getButton(C_BTNA)) { resetBtn(C_BTNA); selBrick--; if(selBrick==RESERVED) selBrick--; if(selBrick<1) selBrick=NUMTILES; } //Is place brick button being pressed, and if it is, are we allowed to place the brick? if( (getButton(C_BTNX) || getInpPointerState()->isDown ) && selBrick != RESERVED && allowBrickToBePlaced ) { //We remove the brick before placing a new one if it's not a teleport or if it's a switch (not switch-target). if( selBrick!=TELESRC && !((editIsSwitch(selBrick)&&teleState==1) ) ) { editorRemoveBrickUnderCursor(); } if(selBrick==TELESRC || editIsSwitch(selBrick) ) { resetMouseBtn(); resetBtn(C_BTNX); if(teleState==0) { //Save source pos teleSrcPos[0] = cur.x; teleSrcPos[1] = cur.y; teleState++; } else { //Add to list if(editIsSwitch(selBrick)) { teleAddToList( pf.levelInfo->switchList, teleSrcPos[0], teleSrcPos[1], cur.x, cur.y ); //printf("Number of members in switchList: %i\n", listSize(pf.levelInfo->switchList) ); cur.x = teleSrcPos[0]; cur.y = teleSrcPos[1]; editAddToBoard(selBrick); } else { teleAddToList( pf.levelInfo->teleList, teleSrcPos[0], teleSrcPos[1], cur.x, cur.y ); } //Reset state teleState=0; } } else { editAddToBoard(selBrick); } //Not a teleport changed=1; } if( getButton(C_BTNY) ) { //If we are trying to remove an empty teleport if(telePresent(pf.levelInfo->teleList, cur.x, cur.y) && selBrick!=TELESRC) { resetBtn(C_BTNY); selBrick=TELESRC; } else { if(selBrick!=RESERVED) { editorPickBrickUnderCursor(); } editorRemoveBrickUnderCursor(); } } if( getInpPointerState()->isDown && selBrick==RESERVED ) { editorRemoveBrickUnderCursor(); } if(getButton(C_BTNSELECT) || changed==EDITOR_SAVEBTN_CLICKED) { resetBtn(C_BTNSELECT); FILE *f = fopen(fileName, "w"); int x,y; sprintf(buf, "#Author of level\nauthor=%s\n\n", pf.levelInfo->author); fputs(buf,f); sprintf(buf, "#Name of the level\nlevelname=%s\n\n", pf.levelInfo->levelName); fputs(buf,f); sprintf(buf, "#Seconds to complete level\nseconds=%i\n\n", pf.levelInfo->time); fputs(buf,f); sprintf(buf, "bgfile=%s\n", pf.levelInfo->bgFile); fputs(buf,f); sprintf(buf, "tilebase=%s\n", pf.levelInfo->tileBase); fputs(buf,f); sprintf(buf, "explbase=%s\n", pf.levelInfo->explBase); fputs(buf,f); sprintf(buf, "wallbase=%s\n", pf.levelInfo->wallBase); fputs(buf,f); sprintf(buf, "sounddir=%s\n", pf.levelInfo->soundDir); fputs(buf,f); sprintf(buf, "charbase=%s\n", pf.levelInfo->fontName); fputs(buf,f); sprintf(buf, "cursorfile=%s\n", pf.levelInfo->cursorFile); fputs(buf,f); sprintf(buf, "startimage=%s\n", (pf.levelInfo->startImg)?pf.levelInfo->startImg:"none"); fputs(buf,f); sprintf(buf, "stopimage=%s\n", (pf.levelInfo->stopImg)?pf.levelInfo->stopImg:"none"); fputs(buf,f); sprintf(buf, "showtelepath=%i\n", (pf.levelInfo->showTelePath) ); fputs(buf,f); sprintf(buf, "showswitchpath=%i\n", (pf.levelInfo->showSwitchPath) ); fputs(buf,f); //Teleports char* str = teleMkStrings(pf.levelInfo->teleList, "teleport"); if(str) //Returns 0 if there's no teleports { fputs("\n#Teleports\n",f); fputs(str,f); free(str); } //Switches str = teleMkStrings(pf.levelInfo->switchList, "switch"); if(str) //Returns 0 if there's no teleports { fputs("\n#Switches\n",f); fputs(str,f); free(str); } fputs("\n#The level-data block\n[data]",f); if(f) { for(y=0; y < FIELDSIZE; y++) { fputc('\n',f); for(x=0; x < FIELDSIZE; x++) { if(pf.board[x][y]) { fprintf(f,"%02i", pf.board[x][y]->type); } else { fprintf(f,"00"); } } } fputc('\n',f); changed=0; fclose(f); //Refresh the list of userLevels. addUserLevel(fileName); } } } //Editor in main state, don't ignore input draw(&cur, &pf, screen); if(changed==2) { txtWriteCenter(screen, FONTMEDIUM, STR_EDIT_NOT_SAVED_WARNING, HSCREENW,HSCREENH-20); txtWriteCenter(screen, FONTSMALL, STR_EDIT_PRESS_EXIT_TO_EXIT, HSCREENW,HSCREENH); txtWriteCenter(screen, FONTSMALL, STR_EDIT_PRESS_SAVE_TO_SAVE, HSCREENW,HSCREENH+10); } txtWriteCenter(screen, FONTSMALL,STR_EDIT_STATUS, HSCREENW-115,HSCREENH+80); txtWriteCenter(screen, FONTSMALL, (changed)?STR_EDIT_UNSAVED:STR_EDIT_SAVED, HSCREENW-115,HSCREENH+89); txtWriteCenter(screen, FONTSMALL,fileName, HSCREENW,HSCREENH+110); txtWriteCenter(screen, FONTSMALL,STR_EDIT_CONTROLS, HSCREENW,HSCREENH-120); //Write which keys are used to cycle selected brick. txtWriteCenter(screen, FONTSMALL,STR_EDIT_PREVBRICK_KEY,HSCREENW-142,HSCREENH-80); txtWriteCenter(screen, FONTSMALL,STR_EDIT_NEXTBRICK_KEY,HSCREENW-88,HSCREENH-80); //Draw the currently selected brick. drawBrick(screen, selBrick,HSCREENW-125,HSCREENH-85); //Write brick name. txtWriteCenter(screen, FONTSMALL, str_brick_names[selBrick], HSCREENW-116,HSCREENH-56 ); //Tell if we're placing teleport source or destination if(selBrick==TELESRC && teleState==0) { txtWriteCenter(screen, FONTSMALL, "(From)", HSCREENW-115,HSCREENH-41); } else if(teleState) { if(selBrick==TELESRC) { txtWriteCenter(screen, FONTSMALL, "(To)", HSCREENW-115,HSCREENH-41); } else { txtWriteCenter(screen, FONTSMALL, "(Target)", HSCREENW-115,HSCREENH-41); } drawPath(screen, teleSrcPos[0], teleSrcPos[1], cur.x, cur.y, 1); } //Draw all the telepaths. drawAllTelePaths(screen, pf.levelInfo->teleList); //Draw switchpath we hover above listItem* t = &pf.levelInfo->switchList->begin; while( LISTFWD(pf.levelInfo->switchList, t) ) { telePort_t* tp=(telePort_t*)t->data; if(cur.x == tp->sx && cur.y == tp->sy) { drawTelePath( screen, tp, 1 ); } } //Draw all switchpaths drawAllTelePaths(screen, pf.levelInfo->switchList); if( (getInpPointerState()->timeSinceMoved < POINTER_SHOW_TIMEOUT) && (changed > 0) ) { drawSprite(screen, saveBtnSprite, HSCREENW-145, HSCREENH+42 ); } //Draw brick-selection if( editorState == EDITOR_BRICKS_SELECTION ) { SDL_BlitSurface(selBrickBG , NULL, screen, &(setting()->bgPos) ); //Draw bricks in a 6*4 grid int px,py,bnum=BRICKSBEGIN; static int brickSelOfX = HSCREENW - 78 + 8; static int brickSelOfY = HSCREENH - 54 + 8; for(py=0;py < 4; py++) { for(px=0; px < 6; px++) { if( bnum > NUMTILES ) break; selBrickRect.x = brickSelOfX+(24*px); selBrickRect.y = brickSelOfY+(24*py); selBrickRect.w = selBrickRect.x+20; selBrickRect.h = selBrickRect.y+20; //We set bricks on mouseover, this way we get the description too (maybe punch a hole in the dots where the text is?) if( isPointerInBox(&selBrickRect) ) { selBrick=bnum; } //We continue back to the main editor if( isPointerClicked() ) { resetMouseBtn(); editorState=EDITOR_MAIN; } drawBrick(screen, bnum, selBrickRect.x, selBrickRect.y ); bnum++; } } } return(STATEEDIT); }