Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SDL2/SDL.h>
- #include <SDL_image.h>
- #include "Lib/SDL_anigif.h"
- #include "Textures/Texture.h"
- #include <iostream>
- #include "Textures/Animations.h"
- #include "Objects/Level.h"
- #include "Objects/Entity.h"
- #include "Config/Config.h"
- #include "Textures/Sprite.h"
- #include "Objects/Player.h"
- #include "build_defs.h"
- #include "Menus/StartScreen.h"
- #include "Menus/LevelIntro.h"
- #include "Menus/GameGifIntro.h"
- #include "Menus/SelectPlayer.h"
- SDL_Window *window = nullptr;
- SDL_Renderer *renderer = nullptr;
- const int window_width = 764;
- const int window_height = 720;
- Config imagesCfg("Images/images.cfg");
- enum players {
- Rarity = 0,
- Fluttershy,
- AppleJack,
- PinkiePie,
- RainbowDash,
- TwilightSparkle
- };
- bool init_window() {
- Config windowCfg("window.cfg");
- SDL_Init(SDL_INIT_EVERYTHING);
- IMG_Init(IMG_INIT_PNG);
- std::string build_month = std::to_string(BUILD_MONTH).length()<2 ? "0"+std::to_string(BUILD_MONTH) : std::to_string(BUILD_MONTH);
- std::string build_day = std::to_string(BUILD_DAY).length()<2 ? "0"+std::to_string(BUILD_DAY) : std::to_string(BUILD_DAY);
- 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);
- if (window == nullptr) {
- std::cout << "[Error]Can't create window: " << SDL_GetError() << std::endl;
- return false;
- }
- bool useSoftware = false;
- if (windowCfg.isInt("useSoftware"))
- useSoftware = windowCfg.getInt("useSoftware")!=0;
- if (!useSoftware)
- renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
- else
- renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_SOFTWARE);
- if (renderer == nullptr) {
- std::cout << "[Error]Can't create renderer: " << SDL_GetError() << std::endl;
- return false;
- }
- return true;
- }
- void done_window() {
- if (renderer != nullptr)
- SDL_DestroyRenderer(renderer);
- if (window != nullptr)
- SDL_DestroyWindow(window);
- SDL_Quit();
- IMG_Quit();
- }
- Texture *level_background;
- Animations *startScreenImgs;
- Animations *levelIntroImgs;
- Animations *selectPlayerImgs;
- Animations *player_anim[6];
- Level level;
- void load_images() {
- level_background = new Texture(renderer, imagesCfg.getString("bg_level_01-01"));
- startScreenImgs = new Animations();
- for (int i = 0; i < 2; ++i)
- startScreenImgs->addAnimation(AnimationType::Standing, renderer, imagesCfg.getString("start_screen_"+std::to_string(i)));
- startScreenImgs->setDelay(AnimationType::Standing, 500);
- selectPlayerImgs = new Animations();
- selectPlayerImgs->addAnimation(AnimationType::Standing, renderer, imagesCfg.getString("player_selector_bg"));
- for (int i = 0; i<6; i++)
- selectPlayerImgs->addAnimation(AnimationType::Standing, renderer, imagesCfg.getString("selected_player_"+std::to_string(i)));
- levelIntroImgs = new Animations();
- for (char i = 0; i < 3; i++)
- levelIntroImgs->addAnimation(AnimationType::Standing, renderer, imagesCfg.getString("level_intro_"+std::to_string(i)));
- levelIntroImgs->setDelay(AnimationType::Standing, 500);
- player_anim[RainbowDash] = new Animations();
- for (char i = 0; i < 3; i++)
- player_anim[RainbowDash]->addAnimation(AnimationType::Standing, renderer, imagesCfg.getString("rd_standing_"+std::to_string(i)), "");
- player_anim[RainbowDash]->setDelay(AnimationType::Standing, 400);
- for (char i = 0; i < 5; i++)
- player_anim[RainbowDash]->addAnimation(AnimationType::Walking, renderer, imagesCfg.getString("rd_walking_"+std::to_string(i)), "");
- player_anim[RainbowDash]->setDelay(AnimationType::Walking, 100);
- for (char i = 0; i < 3; i++)
- player_anim[RainbowDash]->addAnimation(AnimationType::Jumping, renderer, imagesCfg.getString("rd_jumping_"+std::to_string(i)), "");
- player_anim[RainbowDash]->setDelay(AnimationType::Jumping, 0);
- Texture *zero_block = new Texture(renderer);
- zero_block->setSolid(false);
- level.addBlock(zero_block);
- for (int i = 1; i < 10; ++i)
- level.addBlock(new Sprite(renderer, imagesCfg.getString("block_"+std::to_string(i)), ""));
- }
- void done_images() {
- delete level_background;
- for (auto const& anim : player_anim)
- delete anim;
- delete startScreenImgs;
- delete selectPlayerImgs;
- delete levelIntroImgs;
- }
- int player_type;
- void level_loop() {
- SDL_Event event;
- auto player = new Player();
- player->setTextures(player_anim[player_type]);
- player->setPos(100,500);
- level.setBackground(level_background);
- level.addPlayer(player);
- level.setRenderer(renderer);
- level.loadMap("map.bin");
- level.run();
- }
- void quit_game() {
- done_images();
- done_window();
- }
- #ifdef _WIN32//Костыль, чтобы на винде не создавалось окно с консолью
- #include "windows.h"
- int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
- #else
- int main() {
- #endif
- if (init_window()) {
- load_images();
- /*GameGifIntro gifIntro(renderer, imagesCfg.getString("intro"));*/
- StartScreen startScreen(renderer, startScreenImgs);
- SelectPlayer selectPlayer(renderer, selectPlayerImgs);
- LevelIntro levelIntro(renderer, levelIntroImgs);
- if (/*gifIntro.run() == Menu_Ok && */startScreen.run() == Menu_Ok && selectPlayer.run() == Menu_Ok) {
- player_type = selectPlayer.getPlayer();
- if (levelIntro.run() == Menu_Ok) {
- level_loop();
- }
- }
- quit_game();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement