Advertisement
Guest User

main.cpp

a guest
Aug 3rd, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.80 KB | None | 0 0
  1. #include <SDL2/SDL.h>
  2. #include <SDL_image.h>
  3. #include "Lib/SDL_anigif.h"
  4. #include "Textures/Texture.h"
  5. #include <iostream>
  6.  
  7. #include "Textures/Animations.h"
  8. #include "Objects/Level.h"
  9. #include "Objects/Entity.h"
  10. #include "Config/Config.h"
  11. #include "Textures/Sprite.h"
  12. #include "Objects/Player.h"
  13. #include "build_defs.h"
  14. #include "Menus/StartScreen.h"
  15. #include "Menus/LevelIntro.h"
  16. #include "Menus/GameGifIntro.h"
  17. #include "Menus/SelectPlayer.h"
  18.  
  19. SDL_Window *window = nullptr;
  20. SDL_Renderer *renderer = nullptr;
  21.  
  22. const int window_width = 764;
  23. const int window_height = 720;
  24.  
  25. Config imagesCfg("Images/images.cfg");
  26.  
  27. enum players {
  28.     Rarity = 0,
  29.     Fluttershy,
  30.     AppleJack,
  31.     PinkiePie,
  32.     RainbowDash,
  33.     TwilightSparkle
  34. };
  35.  
  36. bool init_window() {
  37.  
  38.     Config windowCfg("window.cfg");
  39.  
  40.     SDL_Init(SDL_INIT_EVERYTHING);
  41.     IMG_Init(IMG_INIT_PNG);
  42.  
  43.     std::string build_month = std::to_string(BUILD_MONTH).length()<2 ? "0"+std::to_string(BUILD_MONTH) : std::to_string(BUILD_MONTH);
  44.     std::string build_day = std::to_string(BUILD_DAY).length()<2 ? "0"+std::to_string(BUILD_DAY) : std::to_string(BUILD_DAY);
  45.  
  46.     window = SDL_CreateWindow((std::string("8bit_SaveEq [build ")+std::to_string(BUILD_YEAR)+build_month+build_day+std::string("]")).c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, window_width, window_height, SDL_WINDOW_SHOWN);
  47.     if (window == nullptr) {
  48.         std::cout << "[Error]Can't create window: " << SDL_GetError() << std::endl;
  49.         return false;
  50.     }
  51.  
  52.     bool useSoftware = false;
  53.     if (windowCfg.isInt("useSoftware"))
  54.         useSoftware = windowCfg.getInt("useSoftware")!=0;
  55.     if (!useSoftware)
  56.         renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
  57.     else
  58.         renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_SOFTWARE);
  59.     if (renderer == nullptr) {
  60.         std::cout << "[Error]Can't create renderer: " << SDL_GetError() << std::endl;
  61.         return false;
  62.     }
  63.  
  64.     return true;
  65. }
  66.  
  67. void done_window() {
  68.     if (renderer != nullptr)
  69.         SDL_DestroyRenderer(renderer);
  70.     if (window != nullptr)
  71.         SDL_DestroyWindow(window);
  72.     SDL_Quit();
  73.     IMG_Quit();
  74. }
  75.  
  76. Texture *level_background;
  77. Animations *startScreenImgs;
  78. Animations *levelIntroImgs;
  79. Animations *selectPlayerImgs;
  80. Animations *player_anim[6];
  81.  
  82. Level level;
  83.  
  84.  
  85. void load_images() {
  86.  
  87.     level_background = new Texture(renderer, imagesCfg.getString("bg_level_01-01"));
  88.  
  89.     startScreenImgs = new Animations();
  90.     for (int i = 0; i < 2; ++i)
  91.         startScreenImgs->addAnimation(AnimationType::Standing, renderer, imagesCfg.getString("start_screen_"+std::to_string(i)));
  92.     startScreenImgs->setDelay(AnimationType::Standing, 500);
  93.  
  94.     selectPlayerImgs = new Animations();
  95.     selectPlayerImgs->addAnimation(AnimationType::Standing, renderer, imagesCfg.getString("player_selector_bg"));
  96.     for (int i = 0; i<6; i++)
  97.         selectPlayerImgs->addAnimation(AnimationType::Standing, renderer, imagesCfg.getString("selected_player_"+std::to_string(i)));
  98.  
  99.     levelIntroImgs = new Animations();
  100.     for (char i = 0; i < 3; i++)
  101.         levelIntroImgs->addAnimation(AnimationType::Standing, renderer, imagesCfg.getString("level_intro_"+std::to_string(i)));
  102.     levelIntroImgs->setDelay(AnimationType::Standing, 500);
  103.  
  104.  
  105.     player_anim[RainbowDash] = new Animations();
  106.  
  107.     for (char i = 0; i < 3; i++)
  108.         player_anim[RainbowDash]->addAnimation(AnimationType::Standing, renderer, imagesCfg.getString("rd_standing_"+std::to_string(i)), "");
  109.     player_anim[RainbowDash]->setDelay(AnimationType::Standing, 400);
  110.  
  111.     for (char i = 0; i < 5; i++)
  112.         player_anim[RainbowDash]->addAnimation(AnimationType::Walking, renderer, imagesCfg.getString("rd_walking_"+std::to_string(i)), "");
  113.     player_anim[RainbowDash]->setDelay(AnimationType::Walking, 100);
  114.  
  115.     for (char i = 0; i < 3; i++)
  116.         player_anim[RainbowDash]->addAnimation(AnimationType::Jumping, renderer, imagesCfg.getString("rd_jumping_"+std::to_string(i)), "");
  117.     player_anim[RainbowDash]->setDelay(AnimationType::Jumping, 0);
  118.  
  119.     Texture *zero_block = new Texture(renderer);
  120.     zero_block->setSolid(false);
  121.     level.addBlock(zero_block);
  122.     for (int i = 1; i < 10; ++i)
  123.         level.addBlock(new Sprite(renderer, imagesCfg.getString("block_"+std::to_string(i)), ""));
  124. }
  125.  
  126. void done_images() {
  127.     delete level_background;
  128.     for (auto const& anim : player_anim)
  129.         delete anim;
  130.     delete startScreenImgs;
  131.     delete selectPlayerImgs;
  132.     delete levelIntroImgs;
  133. }
  134.  
  135. int player_type;
  136.  
  137. void level_loop() {
  138.     SDL_Event event;
  139.     auto player = new Player();
  140.     player->setTextures(player_anim[player_type]);
  141.     player->setPos(100,500);
  142.  
  143.     level.setBackground(level_background);
  144.     level.addPlayer(player);
  145.     level.setRenderer(renderer);
  146.  
  147.     level.loadMap("map.bin");
  148.  
  149.     level.run();
  150.  
  151. }
  152.  
  153. void quit_game() {
  154.     done_images();
  155.     done_window();
  156. }
  157.  
  158. #ifdef _WIN32//Костыль, чтобы на винде не создавалось окно с консолью
  159. #include "windows.h"
  160. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
  161. #else
  162. int main() {
  163. #endif
  164.     if (init_window()) {
  165.         load_images();
  166.         /*GameGifIntro gifIntro(renderer, imagesCfg.getString("intro"));*/
  167.         StartScreen startScreen(renderer, startScreenImgs);
  168.         SelectPlayer selectPlayer(renderer, selectPlayerImgs);
  169.         LevelIntro levelIntro(renderer, levelIntroImgs);
  170.         if (/*gifIntro.run() == Menu_Ok && */startScreen.run() == Menu_Ok && selectPlayer.run() == Menu_Ok) {
  171.             player_type = selectPlayer.getPlayer();
  172.             if (levelIntro.run() == Menu_Ok) {
  173.                 level_loop();
  174.             }
  175.         }
  176.         quit_game();
  177.     }
  178.     return 0;
  179. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement