Files
proyectos-en-sdl2/fez/main.cpp
Daniel Cortes 242e60ff40 Initial commit
2020-05-22 01:54:52 -04:00

161 lines
4.8 KiB
C++

#include <vector>
#include <utility>
#include <string>
#include <sstream>
#include "engine.hpp"
struct symbol {
SDL_Texture* texture;
std::string repr;
};
class Main : public engine {
private:
std::vector<symbol> letters;
std::vector<symbol> numbers;
std::vector<symbol> controls;
SDL_Texture* createTexture(unsigned long pattern) {
SDL_Texture* texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, 5, 5);
std::vector<unsigned char> pixels(5 * 5 * 4, 0);
for(int i = 0; i < 25; i++) {
unsigned int offset = (5 * 4 * (i / 5)) + ((i % 5) * 4);
if((pattern >> i) & 1) {
pixels[offset + 0] = 0x00;
pixels[offset + 1] = 0x00;
pixels[offset + 2] = 0x00;
pixels[offset + 3] = SDL_ALPHA_OPAQUE;
} else{
pixels[offset + 0] = 0xff;
pixels[offset + 1] = 0xff;
pixels[offset + 2] = 0xff;
pixels[offset + 3] = SDL_ALPHA_OPAQUE;
}
}
SDL_UpdateTexture(texture, NULL, &pixels[0], 5 * 4);
return texture;
}
protected:
virtual bool OnUserCreate() {
letters = {
{createTexture(33539231), "A"},
{createTexture(33052223), "B"},
{createTexture(32759039), "C"},
{createTexture(31358975), "D"},
{createTexture(32569247), "E"},
{createTexture(33211071), "F"},
{createTexture(24768119), "G"},
{createTexture(24696383), "H"},
{createTexture(33553973), "I"},
{createTexture(24379391), "J"},
{createTexture(30990071), "K"},
{createTexture(28896831), "L"},
{createTexture(32655359), "M"},
{createTexture(33084479), "N"},
{createTexture(33453983), "O"},
{createTexture(33553655), "P"},
{createTexture(33195711), "R"},
{createTexture(31256381), "S"},
{createTexture(33084989), "T"},
{createTexture(22609919), "V"},
{createTexture(33554333), "W"},
{createTexture(31389239), "X"},
{createTexture(33091131), "Y"},
{createTexture(32759327), "Z"},
{createTexture(33062912), " "}
};
numbers = {
{createTexture(33080895), "0"},
{createTexture(33085119), "1"},
{createTexture(33093183), "2"},
{createTexture(33216063), "3"},
{createTexture(33093311), "3"},
{createTexture(33087039), "4"},
{createTexture(33216191), "4"},
{createTexture(33087167), "5"},
{createTexture(33224255), "5"},
{createTexture(33095231), "6"},
{createTexture(33224383), "6"},
{createTexture(33218111), "7"},
{createTexture(33095359), "7"},
{createTexture(33218239), "8"},
{createTexture(33226303), "9"},
{createTexture(33226431), "10"}
};
controls = {
{createTexture(143488), "UP"},
{createTexture(137344), "DOWN"},
{createTexture(14464), "LEFT"},
{createTexture(145408), "RIGHT"},
{createTexture(71808), "LT"},
{createTexture(274560), "RT"},
{createTexture(405504), "BUTTON A"},
};
return true;
}
void drawLetters() {
int size = 35;
int offset_x = 20;
int offset_y = 20;
int margin = 5;
for(size_t i = 0; i < letters.size(); i++) {
int row = i % 5;
int col = i / 5;
int x = offset_x + (row * size) + (margin * row);
int y = offset_y + (col * size) + (margin * col);
SDL_Rect rect = {x, y, size, size};
SDL_RenderCopy(renderer, letters[i].texture, nullptr, &rect);
}
}
int overLetter(int x, int y){
int size = 35;
int offset_x = 20;
int offset_y = 20;
int margin = 5;
for(size_t i = 0; i < letters.size(); i++) {
int row = i % 5;
int col = i / 5;
int letter_x = offset_x + (row * size) + (margin * row);
int letter_y = offset_y + (col * size) + (margin * col);
if((x >= letter_x && x <= letter_x + size) && (y >= letter_y && y <= letter_y + size)){
return i;
}
}
return -1;
}
virtual bool OnUserUpdate(Uint32 elapsedTime) {
while (SDL_PollEvent(&event)) {
if(event.type == SDL_QUIT) return false;
if(event.type == SDL_MOUSEBUTTONDOWN && event.button.button == SDL_BUTTON_LEFT) {
int i = overLetter(event.button.x, event.button.y);
if(i >= 0){
std::cout << "Over Letter: " << letters[i].repr << std::endl;
}
}
}
SDL_SetRenderDrawColor(renderer, 0xff, 0xff, 0xff, SDL_ALPHA_OPAQUE);
SDL_RenderClear(renderer);
drawLetters();
SDL_RenderPresent(renderer);
return true;
}
};
int main() {
Main main;
main.Init("Test", 640, 480);
main.Run();
return 0;
}