← index
libmx2/libmx/vk_skeleton/skeleton.cpp
Source: libmx2/libmx/vk_skeleton/skeleton.cpp
#include <vk.hpp>
#include "SDL.h"
#include <random>

#if defined(__APPLE__) || defined(_WIN32) || defined(__linux__)
#include "argz.hpp"
#endif

class SkeletonWindow : public mx::VKWindow {
public:
    SkeletonWindow(const std::string& path, int wx, int wy, bool full) 
        : mx::VKWindow("-[ Vulkan Skeleton ]-", wx, wy, full) {
        setPath(path);
    }
    virtual ~SkeletonWindow() {}

    void setFileName(const std::string &filename) {
        this->filename = filename;
    }
    
    void initVulkan() override {
        mx::VKWindow::initVulkan();
        logoSprite = createSprite(filename, "");
    }
    
    void proc() override {
        if (logoSprite) {
            logoSprite->drawSpriteRect(0, 0, getWidth(), getHeight());
            std::random_device rd;
            std::mt19937 gen(rd());
            std::uniform_int_distribution<> xDist(0, 1920);
            std::uniform_int_distribution<> yDist(0, 1080);
            std::uniform_int_distribution<> wDist(20, 100);
            std::uniform_int_distribution<> hDist(20, 100);
            spriteData.resize(5000);
            for(auto& sprite : spriteData) {
                sprite.x = xDist(gen);
                sprite.y = yDist(gen);
                sprite.w = wDist(gen);
                sprite.h = hDist(gen);
            }
            for(const auto& sprite : spriteData) {
                logoSprite->drawSpriteRect(sprite.x, sprite.y, sprite.w, sprite.h);
            }
        }

        printText("Hello World", 50, 50, {255, 255, 255, 255});
    }
    void event(SDL_Event& e) override {
        if (e.type == SDL_QUIT || (e.type == SDL_KEYDOWN && e.key.keysym.sym == SDLK_ESCAPE)) {
            quit();
        }
    }
private:
    mx::VKSprite* logoSprite = nullptr;
    struct SpriteData {
        int x, y, w, h;
    };
    std::vector<SpriteData> spriteData;
    std::string filename;
};

int main(int argc, char **argv) {
    Arguments args = proc_args(argc, argv);
    try {
        SkeletonWindow window(args.path, args.width, args.height, args.fullscreen);
        window.setFileName(args.filename);
        window.initVulkan();
        window.loop();
        window.cleanup();
    } catch (mx::Exception &e) {
        SDL_Log("mx: Exception: %s\n", e.text().c_str());
    }
    return EXIT_SUCCESS;
}