161 lines
4.8 KiB
C++
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;
|
|
}
|