//-------------------------------------------------------------- // set dimensions of image void mgXPSurface::resizeSingleImage( int width, int height) { m_imageWidth = width; m_imageHeight = height; // delete the old bitmap, different size if (m_surfaceBitmap != NULL) { SelectObject(m_surfaceDC, (HBITMAP) NULL); DeleteObject(m_surfaceBitmap); m_surfaceBitmap = NULL; SelectObject(m_alphaDC, (HBITMAP) NULL); DeleteObject(m_alphaBitmap); m_alphaBitmap = NULL; } // create bitmap info header BITMAPINFO *pInfo = (BITMAPINFO *) new char[sizeof(BITMAPINFOHEADER)]; pInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); pInfo->bmiHeader.biPlanes = 1; pInfo->bmiHeader.biBitCount = 32; pInfo->bmiHeader.biCompression = BI_RGB; pInfo->bmiHeader.biSizeImage = 0; pInfo->bmiHeader.biClrUsed = 0; pInfo->bmiHeader.biClrImportant = 0; pInfo->bmiHeader.biWidth = m_imageWidth; pInfo->bmiHeader.biHeight = -m_imageHeight; void *pData; m_surfaceBitmap = CreateDIBSection(m_surfaceDC, pInfo, DIB_PAL_COLORS, &pData, NULL, 0); m_surfaceData = (BYTE*) pData; SelectObject(m_surfaceDC, m_surfaceBitmap); m_alphaBitmap = CreateDIBSection(m_alphaDC, pInfo, DIB_PAL_COLORS, &pData, NULL, 0); m_alphaData = (BYTE*) pData; SelectObject(m_alphaDC, m_alphaBitmap); delete pInfo; deleteTiles(); m_horzTiles = 1; m_vertTiles = 1; m_tiles = new mgTextureImage*[1]; m_tiles[0] = mgDisplay->createTextureMemory(m_imageWidth, m_imageHeight, MG_MEMORY_FORMAT_BGRA, m_inworld); }
//-------------------------------------------------------------- // set dimensions of image void mgTextureSurface::resizeSingleImage( int width, int height) { deleteTiles(); m_horzTiles = 1; m_vertTiles = 1; m_tiles = new mgTextureImage*[1]; m_tiles[0] = mgDisplay->createTextureMemory(width, height, MG_MEMORY_FORMAT_BGRA, m_inworld); }
//-------------------------------------------------------------- // destructor mgXPSurface::~mgXPSurface() { deleteTiles(); // delete the surface bitmap if (m_surfaceBitmap != NULL) { DeleteObject(m_surfaceBitmap); m_surfaceBitmap = NULL; } // delete the surface DC SelectObject(m_surfaceDC, (HBITMAP) NULL); SelectObject(m_surfaceDC, (HFONT) NULL); SelectObject(m_surfaceDC, (HBRUSH) NULL); SelectObject(m_surfaceDC, (HPEN) NULL); DeleteDC(m_surfaceDC); // delete the alpha bitmap if (m_alphaBitmap != NULL) { DeleteObject(m_alphaBitmap); m_alphaBitmap = NULL; } // delete the alpha DC SelectObject(m_alphaDC, (HBITMAP) NULL); SelectObject(m_alphaDC, (HFONT) NULL); SelectObject(m_alphaDC, (HBRUSH) NULL); SelectObject(m_alphaDC, (HPEN) NULL); DeleteDC(m_alphaDC); // delete the cached drawing objects deleteFonts(); deleteBrushes(); deletePens(); }
//-------------------------------------------------------------- // destructor mgTextureSurface::~mgTextureSurface() { deleteTiles(); }
void editLevelScreen() { int currentType = TILE_RED; showType(currentType); Tile *tiles[TOTAL_TILES]; if(loadTiles(tiles) == false) { cleanUp(); exit(0); } while(true) { fps.start(); while(SDL_PollEvent(&event)) { //When the user clicks if( event.type == SDL_MOUSEBUTTONDOWN ) { //Put the tile putTile( tiles, currentType ); } if (event.type == SDL_KEYDOWN) { switch(event.key.keysym.sym) { case SDLK_1: case SDLK_q: { //Scroll forward through tiles currentType--; if( currentType < TILE_RED ) currentType = TILE_TOPLEFT; //Show the current tile type showType( currentType ); break; } case SDLK_2: case SDLK_w: { //Scroll backward through tiles currentType++; if( currentType > TILE_TOPLEFT ) currentType = TILE_RED; //Show the current tile type showType( currentType ); break; } case SDLK_s: { // save the tiles and display a "saved" message saveTiles(tiles); SDL_Color savedMessageColor = {255, 255, 255}; SDL_Surface* savedMessage = NULL; savedMessage = load_font("eva.ttf", "SAVED", savedMessageColor, 24); apply_surface(1, 1, savedMessage, screen); SDL_Delay(500); SDL_FreeSurface(savedMessage); break; } case SDLK_BACKSPACE: { deleteTiles(tiles); startScreen(); break; } default:; } } myWindow.handle_window(); handleMusic(); if( event.type == SDL_QUIT ) { //Quit the program deleteTiles(tiles); cleanUp(); exit(0); } } if (myWindow.error()) { cleanUp(); exit(0); } setEditorCamera(); for (int t = 0; t < TOTAL_TILES; t++) tiles[t]->show(); if (SDL_Flip(screen) == -1) { cleanUp(); exit(0); } //Cap the frame rate if( fps.get_ticks() < 1000 / FRAMES_PER_SECOND ) { SDL_Delay( ( 1000 / FRAMES_PER_SECOND ) - fps.get_ticks() ); } } }
void theGame() { SDL_WM_SetCaption("WASD: Move, BACKSPACE: Start Screen, ENTER: Fullscreen", NULL); Sprite mew("testChar2.png", 32, 156, 0); //load mew and set R 32, G 156, B 0 to be transparent. Set width to 33 and height to 69 Tile *tiles[TOTAL_TILES]; Enemy *enemies[TOTAL_ENEMIES]; enemies[0] = new Enemy(225, 0, ENEMY_ROBOT); enemies[0]->setVelX(50); enemies[1] = new Enemy(225, 0, ENEMY_ROBOT); enemies[1]->setVelX(100); enemies[2] = new Enemy(225, 0, ENEMY_ANDROID); enemies[2]->setVelX(-75); bool playing = true; if(setTiles(tiles) == false) { cleanUp(); exit(0); } //game loop delta.start(); while(playing) { fps.start(); while(SDL_PollEvent(&event)) { mew.handle_input(); myWindow.handle_window(); handleMusic(); if(event.key.keysym.sym == SDLK_BACKSPACE) { deleteTiles(tiles); deleteEnemies(enemies); startScreen(); } if(event.type == SDL_QUIT) playing = false; } if (myWindow.error()) { cleanUp(); exit(0); } mew.move(delta.get_ticks(), tiles, enemies); for (int e = 0; e < TOTAL_ENEMIES; e++) { enemies[e]->walk(delta.get_ticks(), tiles); } delta.start(); //restart delta after movement mew.setCamera(); for( int t = 0; t < TOTAL_TILES; t++ ) tiles[t]->show(); mew.show(); for (int e = 0; e < TOTAL_ENEMIES; e++) enemies[e]->show(); if(SDL_Flip(screen) == -1) { cleanUp(); exit(0); } if(fps.get_ticks() < (1000 / FRAMES_PER_SECOND)) SDL_Delay(1000 / FRAMES_PER_SECOND - fps.get_ticks()); } deleteTiles(tiles); deleteEnemies(enemies); exit(0); }