void SetVideoMode(SDL_Surface * psdlsScreen, int nVideoMode) { fprintf(stderr, "Setting video mode to 800x600 %s mode... ", (nVideoMode == MODE_WINDOWED ? "windowed" : "fullscreen")); SDL_WM_SetCaption("Bomns for Linux Level Editor", "Bomns for Linux Level Editor"); switch(nVideoMode) { case MODE_WINDOWED: psdlsScreen = SDL_SetVideoMode(800, 600, 0, SDL_HWSURFACE | SDL_DOUBLEBUF); break; case MODE_FULLSCREEN: psdlsScreen = SDL_SetVideoMode(800, 600, 0, SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_FULLSCREEN); break; } if(!psdlsScreen) QuitWithError("Error setting video mode!\n"); else fprintf(stderr, "Success!\n"); SDL_ShowCursor(false); }
void ClearSurface(SDL_Surface * psdlsSurface) { if(SDL_FillRect(psdlsSurface, NULL, 0) < 0) QuitWithError("Error clearing surface!\n"); }
int main(int argc, char ** argv) { SDL_Surface * psdlsScreen = NULL; SDL_Surface * psdlsWMIcon = NULL; int nVideoMode = MODE_WINDOWED; bool bDone = false; char szFilename[512] = {"default.lvl\0"}; Level level("fuckyou"); Cursor cursor(0, 0); Hud hud; // deal with command line shit if(argc > 2) { ShowUsage(); exit(1); } if(argc == 2) { if(!strcmp("--help", argv[1]) || !strcmp("-h", argv[1]) || !strcmp("-help", argv[1])) { ShowUsage(); exit(0); } sprintf(szFilename, "%s", argv[1]); if(!level.ReadFromFile(szFilename)) fprintf(stderr, "Couldn't read level from: %s, assuming file doesn't exist yet\n", szFilename); else fprintf(stderr, "Level read successfully from: %s\n", szFilename); } else fprintf(stderr, "No file name specified, using: %s\n", szFilename); InitSDL(); // SetVideoMode(psdlsScreen, nVideoMode); fprintf(stderr, "Setting window icon... "); psdlsWMIcon = SDL_LoadBMP(LoadResource("bomn32.bmp", RESOURCE_GRAPHIC)); if(psdlsWMIcon) { Uint32 colorkey; colorkey = SDL_MapRGB(psdlsWMIcon->format, 0, 0, 0); SDL_SetColorKey(psdlsWMIcon, SDL_SRCCOLORKEY, colorkey); SDL_WM_SetIcon(psdlsWMIcon, NULL); fprintf(stderr, "Success!\n"); } else fprintf(stderr, "AW JUNK! Something fishy happened...\n"); // can't f*****g use SetVideoMode here, for SOME REASON fprintf(stderr, "Setting video mode to 800x600 %s mode... ", (nVideoMode == MODE_WINDOWED ? "windowed" : "fullscreen")); SDL_WM_SetCaption("Bomns for Linux Level Editor", "Bomns for Linux Level Editor"); if(nVideoMode == MODE_WINDOWED) psdlsScreen = SDL_SetVideoMode(800, 600, 0, SDL_HWSURFACE | SDL_DOUBLEBUF); else if(nVideoMode == MODE_FULLSCREEN) psdlsScreen = SDL_SetVideoMode(800, 600, 0, SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_FULLSCREEN); else QuitWithError("Que?\n"); if(!psdlsScreen) QuitWithError("Error setting GODDAM VIDEO MODE... for some f*****g reason!\n"); else fprintf(stderr, "Success!\n"); SDL_ShowCursor(false); // do this here so the surfaces can read the display format cursor.CreateSurfaces(); hud.CreateSurfaces(); level.CreateSurfaces(); // main input loop while(!bDone) { SDL_Event sdleEvent; Uint8 * anKeyState = NULL; Uint8 nMouseState = 0; while(SDL_PollEvent(&sdleEvent)) { if(sdleEvent.type == SDL_QUIT) bDone = true; // TODO: use relative mouse motion so it doesn't jump around if(sdleEvent.type == SDL_MOUSEMOTION) cursor.SetPosition(sdleEvent.motion.x / 10, sdleEvent.motion.y / 10); // process mouse input nMouseState = SDL_GetMouseState(NULL, NULL); if(nMouseState & SDL_BUTTON_LMASK) cursor.StampCurrentObject(&level); if(nMouseState & SDL_BUTTON_RMASK) cursor.DeleteUnderCursor(&level); if(sdleEvent.type == SDL_MOUSEBUTTONDOWN) { switch(sdleEvent.button.button) { case SDL_BUTTON_WHEELUP: cursor.ForwardObject(); break; case SDL_BUTTON_WHEELDOWN: cursor.BackwardObject(); break; } } // process keyboard state data anKeyState = SDL_GetKeyState(NULL); if(anKeyState[SDLK_UP]) cursor.MoveUp(); if(anKeyState[SDLK_DOWN]) cursor.MoveDown(); if(anKeyState[SDLK_LEFT]) cursor.MoveLeft(); if(anKeyState[SDLK_RIGHT]) cursor.MoveRight(); if(anKeyState[SDLK_SPACE] || anKeyState[SDLK_RETURN] || anKeyState[SDLK_s]) cursor.StampCurrentObject(&level); if(anKeyState[SDLK_DELETE] || anKeyState[SDLK_d]) cursor.DeleteUnderCursor(&level); if(anKeyState[SDLK_PAGEUP]) cursor.ForwardObject(); if(anKeyState[SDLK_PAGEDOWN]) cursor.BackwardObject(); // 1 - 9 keys select object if(anKeyState[SDLK_1]) cursor.SelectObject(0); if(anKeyState[SDLK_2]) cursor.SelectObject(1); if(anKeyState[SDLK_3]) cursor.SelectObject(2); if(anKeyState[SDLK_4]) cursor.SelectObject(3); if(anKeyState[SDLK_5]) cursor.SelectObject(4); if(anKeyState[SDLK_6]) cursor.SelectObject(5); if(anKeyState[SDLK_7]) cursor.SelectObject(6); if(anKeyState[SDLK_8]) cursor.SelectObject(7); if(anKeyState[SDLK_9]) cursor.SelectObject(8); // buttons that should only be pressed, never held down (keyboard event data) if(sdleEvent.key.state == SDL_PRESSED) { switch(sdleEvent.key.keysym.sym) { case SDLK_ESCAPE: bDone = true; break; case SDLK_f: nVideoMode = !nVideoMode; SetVideoMode(psdlsScreen, nVideoMode); break; case SDLK_l: char szTmp[520]; sprintf(szTmp, "bomns %s", szFilename); if(!level.WriteToFile(szFilename)) fprintf(stderr, "Error writing level to: %s\n", szFilename); else fprintf(stderr, "Level written successfully to: %s\n", szFilename); // can't do this while editor is in fullscreen without a pretty big crash if(nVideoMode == MODE_FULLSCREEN) // not changing the nVideoMode variable so down there... SetVideoMode(psdlsScreen, MODE_WINDOWED); fprintf(stderr, "Launching level in bomns...\n"); system(szTmp); fprintf(stderr, "Back to editing!\n"); if(nVideoMode == MODE_FULLSCREEN) // ...we can just read it again and change accordingly SetVideoMode(psdlsScreen, nVideoMode); break; case SDLK_F2: if(!level.WriteToFile(szFilename)) fprintf(stderr, "Error writing level to: %s\n", szFilename); else fprintf(stderr, "Level successfully written to: %s\n", szFilename); break; case SDLK_F12: // clear the level... F12 is hard to hit by mistake, right? level.DeleteLevel(); break; default: break; } } } // SDL_PollEvent ClearSurface(psdlsScreen); if(!level.DrawLevel(psdlsScreen)) QuitWithError("Error drawing level to screen!\n"); if(!hud.DrawHUD(psdlsScreen, 0, 580)) QuitWithError("Error drawing HUD to screen!\n"); if(!cursor.DrawCursor(psdlsScreen)) QuitWithError("Error drawing cursor to screen!\n"); SDL_Flip(psdlsScreen); } // while(!bDone) ShutDown(); return 0; }
int main(int, char**) { //initialise SDL system and the video subsystem if (SDL_Init(SDL_INIT_VIDEO) != 0) { QuitWithError("SDL_Init Error: "); } //Create a Window SDL_Window *win = SDL_CreateWindow("Hello World!", 100, 100, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); if (win == nullptr) { QuitWithError("SDL_CreateWindow Error: "); } //SDL_SetWindowFullscreen(win, SDL_WINDOW_FULLSCREEN); Mix_Music *music = NULL; Mix_OpenAudio(22050, MIX_DEFAULT_FORMAT, 2, 4096) == -1; std::string basepath(SDL_GetBasePath()); music = Mix_LoadMUS((basepath + "background.wav").c_str()); Mix_PlayMusic(music, -1); Render* renderer = new Render(win); //Main loop flag bool quit = false; b2Vec2 Gravity(0.f, 0.0098f); b2World World(Gravity); string bgPath = basepath + "background22.bmp"; SDL_Surface* back = SDL_LoadBMP(bgPath.c_str()); SDL_Rect* backGroundRect = renderer->AddSurfaceToRenderer(back, 0, -600, 1.0f); Button button = Button(-200, -50, World, renderer); Door door = Door(600, -100, renderer); Level level = Level(World, renderer); Player player = Player(100, 500, World, renderer); vector<Cannon*> cannons; cannons.push_back(new Cannon(170, 350, World, renderer, 1)); cannons.push_back(new Cannon(1010, 50, World, renderer, 2)); cannons.push_back(new Cannon(170, 450, World, renderer, 1)); cannons.push_back(new Cannon(1010, 150, World, renderer, 2)); cannons.push_back(new Cannon(170, 550, World, renderer, 1)); cannons.push_back(new Cannon(1010, 250, World, renderer, 2)); MenuScene* menu = new MenuScene(1200, 100, renderer); SDL_Event e; //thread t1(&Process::run, Process((*(game)))); //Passing references //t1.detach(); //detaches from SDL mainline float prevTicks = SDL_GetTicks(); float currentTicks = SDL_GetTicks(); float FPS = 0; int fpsTimer = 0; SDL_Init(0); //game loop while (!quit) { World.Step(1 / 60.f, 6, 2); while (SDL_PollEvent(&e) != 0) { if (inputHandler.CheckInput(SDLK_ESCAPE, e)) { quit = true; } } if (menu->playBool == false && menu->quitBool == false) { renderer->DrawMenuScene(); menu->Update(renderer); } if (menu->playBool == true) { //PLAY GAME STATE int dir = player.Move(inputHandler, e); for (int i = 0; i < cannons.size(); i++) { cannons.at(i)->Update(); } SDL_Rect rec(player.spriteRect); rec.y = player.GetY(); for (int j = 0; j < cannons.size(); j++) { for (int i = 0; i < cannons.at(j)->fireballs.size(); i++) { if (cannons.at(j)->fireballs.at(i)->CheckCollision(&rec) == true) { std::cout << "Collision Detected!" << std::endl; player.Respawn(); button.setOnce(false); button.buttonBody->SetTransform(b2Vec2(880 / SCALE, 39 / SCALE), 0); door.spriteRect->x = -1000; door.spriteRect->y = -1000; player.prevPosX.clear(); player.prevPosY.clear(); player.count = 0; } } } button.Update(); if (button.CheckCollision(&rec) == true) { std::cout << "Collision Detected!" << std::endl; button.collision = true; button.spriteRect->x = -2000; button.spriteRect->y = -2000; button.buttonBody->SetTransform(b2Vec2(-2000, -2000), 0); //door.Draw(renderer); } if (door.CheckCollision(&rec) == true) { button.buttonBody->SetTransform(b2Vec2(880 / SCALE, 39/ SCALE), 0); std::cout << "Collision Detected!" << std::endl; player.Respawn(); button.setOnce(false); door.spriteRect->x = -1000; door.spriteRect->y = -1000; player.prevPosX.clear(); player.prevPosY.clear(); player.count = 0; player.Respawn(); menu->playBool = false; menu->quitBool = false; menu->backGroundRect->x = 0; menu->current = 0; button.collision = false; } if (button.collision == false) { door.DrawCage(renderer); } if (button.collision == true) { door.DrawNoCage(renderer); } int ticks = SDL_GetTicks(); int seconds = ticks / 50; int sprite = seconds % 8; renderer->Update(player.srcRect, player.dstRect, *player.LeftTexture, *player.RightTexture, *player.StandTexture, sprite, dir, player.moving, player.GetY()); player.dstRect.w = player.spriteRect.w; player.dstRect.h = player.spriteRect.h; player.dstRect.x = player.spriteRect.x; player.dstRect.y = player.spriteRect.y + 5; } if (menu->quitBool == true) { quit = true; } fpsthink(); if (fpsTimer == 60) { printf("%f\n", framespersecond); fpsTimer = 0; } fpsTimer++; } SDL_DestroyRenderer(renderer->ren); SDL_DestroyWindow(win); SDL_DestroyMutex(mutex); SDL_Quit(); return 0; }