#include <SDL.h>
#include <SDL_image.h>
#include <iostream>
#include <string>
// Блок описания констант и прочего. Глобальных
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
//Будем использовать тайлы
const int TILE_SIZE = 40;
//Глобальными объявлениями окна и рендерера, чтобы они были доступны из наших функций. Так же мы инициализируем указатели как nullptr для безопасности.
//Если вы не используете C++11, инициализируйте их как NULL
SDL_Window *window = nullptr; //
SDL_Renderer *renderer = nullptr;
void Initialize(){
std::cout << " INITIALIZATION!!!!" << std::endl;
// По идее здесь нужно загрузить текстуры и все что будем использовать в игре
};
void Events(){
std::cout << " EVENTALIZATION!!!!" << std::endl;
};
void Loop(){
std::cout << " LOOPALIZATION!!!!" << std::endl;
};
void Render(){
std::cout << " RENDERALIZATION!!!!" << std::endl;
};
void Cleanup(){
std::cout << " CLEANUPTION!!!!" << std::endl;
};
int main(int argc, char *argv[]){
if (SDL_Init(SDL_INIT_EVERYTHING) == -1){
std::cout << SDL_GetError() << std::endl;
return 1;
}
if ((IMG_Init(IMG_INIT_PNG) & IMG_INIT_PNG) != IMG_INIT_PNG){
//logSDLError(std::cout, "IMG_Init");
std::cout << SDL_GetError() << std::endl;
SDL_Quit();
return 1;
}
std::cout << "works!" << std::endl;
Initialize();
int i = 0;
// Походу надо будет это в INTIALIZE засунуть и возвращать цказатель на созданный в INITIALIZE объект. Либо создавать глобальные переменные в функции.
// создаем окно. Указатель типа SDL_Window, получает видимо ссылку на объект окна со свойствами заданными конструктором
window = SDL_CreateWindow("Game1",500,200,SCREEN_WIDTH,SCREEN_HEIGHT,SDL_WINDOW_SHOWN);
// Теперь надо загрузить в память картинку. Затем ее превратить в текстуру, и затем ее записать в рендер и затем ее вывести в рендере
// Используя библиотеку SDL_image можно сразу загрузить в текстуру. функцией IMG_LoadTexture
// создадим рендерер
// запустим инициализированный нами рендерер
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); // надо бы про параметры описать
//вернем ошибку если не получилось
if (renderer == nullptr){
std::cout << SDL_GetError() << std::endl;
return 3;
}
// запустим постоянный путь к текстуре
const std::string filepath = "./res/circles.png";
SDL_Texture *texture = IMG_LoadTexture(renderer,filepath.c_str());
// Обработка ошибки
if (texture == nullptr){
std::cout << " Error with LoadTexture!!!!" << std::endl;
}
// теперь создали текстуру и надо ее засунуть в рендер
// Мы сделаем такую конструкцию. Что нашу текстуру мы поставим на позицию х,у в нашем рендере и отоброзим нужную нам часть текстуры w,h,
SDL_Rect displ;
displ.x = 0;
displ.y = 0;
displ.w =100;
displ.h =100;
int clipW = 100, clipH = 100;
SDL_Rect clip[4];
for (int j = 0; j < 4; j++){
clip[j].x = ( (int) (j/2)) *clipW;
clip[j].y = ( (int) (j%2)) *clipH;
std::cout << (j / 2) << " " <<(j% 2) << std::endl;
clip[j].w = clipW;
clip[j].h = clipH;
};
// записать нашу текстуру в рендер
//SDL_RenderCopy(renderer, texture, NULL,&displ);
for (int j = 0; j < 4; j++){
SDL_RenderCopy(renderer, texture, &clip[j], &displ);
std::cout << clip[j].x << " " << clip[j].y << " " << clip[j].w << " " << clip[j].h << " " << std::endl;
SDL_RenderPresent(renderer);
SDL_RenderClear(renderer);
SDL_Delay(2000);
};
while (true) {
Events();
Loop();
Render();
i++;
if (i == 1) {
break;
};
}
Cleanup();
return 0;
}