diff --git a/25d_modles.cpp b/25d_modles.cpp new file mode 100644 index 0000000..708af25 --- /dev/null +++ b/25d_modles.cpp @@ -0,0 +1,100 @@ +//2.5D modles! +#include +#include +#include + +// --- Screen settings --- +const int WIDTH = 400; +const int HEIGHT = 300; + +// --- 2.5D models as simple sprites --- +// Enemy sprite (5x5) +const int ENEMY_SIZE = 5; +const char enemy_sprite[ENEMY_SIZE][ENEMY_SIZE] = { + {' ', 'X', 'X', 'X', ' '}, + {'X', 'X', 'X', 'X', 'X'}, + {'X', 'X', 'X', 'X', 'X'}, + {' ', 'X', 'X', 'X', ' '}, + {' ', 'X', ' ', 'X', ' '} +}; + +// Health pack sprite (5x5) +const char health_sprite[ENEMY_SIZE][ENEMY_SIZE] = { + {' ', 'H', 'H', 'H', ' '}, + {'H', 'H', 'H', 'H', 'H'}, + {'H', 'H', 'H', 'H', 'H'}, + {' ', 'H', 'H', 'H', ' '}, + {' ', 'H', ' ', 'H', ' '} +}; + +// --- Function to draw a sprite --- +void draw_sprite(SDL_Renderer* renderer, const char sprite[][ENEMY_SIZE], int x, int y, int scale, SDL_Color color) { + for (int i = 0; i < ENEMY_SIZE; ++i) { + for (int j = 0; j < ENEMY_SIZE; ++j) { + if (sprite[i][j] != ' ') { + SDL_Rect rect = { x + j * scale, y + i * scale, scale, scale }; + SDL_SetRenderDrawColor(renderer, color.r, color.g, color.b, 255); + SDL_RenderFillRect(renderer, &rect); + } + } + } +} + +int main(int argc, char* argv[]) { + if (SDL_Init(SDL_INIT_VIDEO) < 0) { + std::cerr << "SDL could not initialize: " << SDL_GetError() << "\n"; + return 1; + } + + SDL_Window* window = SDL_CreateWindow("2.5D DOOM Models", + SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, + WIDTH, HEIGHT, SDL_WINDOW_SHOWN); + + if (!window) { + std::cerr << "Window could not be created: " << SDL_GetError() << "\n"; + SDL_Quit(); + return 1; + } + + SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); + if (!renderer) { + std::cerr << "Renderer could not be created: " << SDL_GetError() << "\n"; + SDL_DestroyWindow(window); + SDL_Quit(); + return 1; + } + + bool running = true; + SDL_Event event; + + // Example "distances" for 2.5D scaling + int enemy_distance = 10; // smaller = closer + int health_distance = 20; + + while (running) { + while (SDL_PollEvent(&event)) { + if (event.type == SDL_QUIT) running = false; + } + + // Clear screen + SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); + SDL_RenderClear(renderer); + + // Calculate scale based on distance + int enemy_scale = 50 / enemy_distance; // bigger = closer + int health_scale = 50 / health_distance; + + // Draw enemy and health + draw_sprite(renderer, enemy_sprite, 50, 50, enemy_scale, {255, 0, 0, 255}); + draw_sprite(renderer, health_sprite, 200, 50, health_scale, {0, 255, 0, 255}); + + SDL_RenderPresent(renderer); + + SDL_Delay(16); // ~60 FPS + } + + SDL_DestroyRenderer(renderer); + SDL_DestroyWindow(window); + SDL_Quit(); + return 0; +}