#include <math.h>
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <string.h>
#include "helianthus.h"
#define CW 96
#define CH 128
#define CR 16
#define CB 1
#define SW 8
#define FS 64
#define CWW (CW - 2*CB)
#define CHH (CH - 2*CB)
const char *letters[][5] = {
{"Ա", "ա", "а", "", "0"},
{"Բ", "բ", "б", "", "1"},
{"Գ", "գ", "г", "", "1"},
{"Դ", "դ", "д", "", "1"},
{"Ե", "ե", "е", "", "0"},
{"Զ", "զ", "з", "", "1"},
{"Է", "է", "э", "", "0"},
{"Ը", "ը", "ыэ", "", "0"},
{"Թ", "թ", "тх", "", "3"},
{"Ժ", "ժ", "ж", "", "1"},
{"Ի", "ի", "и", "", "0"},
{"Լ", "լ", "л", "", "1"},
{"Խ", "խ", "х", "", "2"},
{"Ծ", "ծ", "тц", "", "2"},
{"Կ", "կ", "к", "", "2"},
{"Հ", "հ", "Հ", "", "3"},
{"Ձ", "ձ", "дз", "", "1"},
{"Ղ", "ղ", "гх", "", "3"},
{"Ճ", "ճ", "тч", "", "2"},
{"Մ", "մ", "м", "", "1"},
{"Յ", "յ", "й", "", "2"},
{"Ն", "ն", "н", "", "1"},
{"Շ", "շ", "ш", "", "2"},
{"Ո", "ո", "(в)о", "", "0"},
{"Չ", "չ", "ч", "", "3"},
{"Պ", "պ", "п", "", "2"},
{"Ջ", "ջ", "дж", "", "1"},
{"Ռ", "ռ", "рр", "", "1"},
{"Ս", "ս", "с", "", "2"},
{"Վ", "վ", "в", "", "1"},
{"Տ", "տ", "т", "", "2"},
{"Ր", "ր", "р", "", "1"},
{"Ց", "ց", "ц", "", "3"},
{"Ու", "ու", "у", "", "0"},
{"Փ", "փ", "пх", "", "3"},
{"Ք", "ք", "кх", "", "3"},
{"Օ", "օ", "о", "", "0"},
{"Ֆ", "ֆ", "ф", "", "2"},
{"և", "և", "ев", "եւ", "0"},
};
Animation bgtex;
Font fontNew;
Font fontHand;
Font fontClassic;
Framebuffer fb;
int seed;
void drawLetter(const char **letter) {
const char *syms[4] = { letter[2], letter[0], letter[1], letter[3] };
Font fonts[4] = { fontNew, fontNew, fontNew, fontHand };
double size[4] = { 0.8, 1, 1, 1 };
double offset[4] = { 0, 0.05, 0, 0 };
if (!strcmp(syms[0], "Հ")) fonts[0] = fontClassic;
if (!syms[3][0]) syms[3] = syms[2];
unsigned int colors[4] = { COLOR_RED, COLOR_BLUE, COLOR_GREEN, COLOR_YELLOW };
int ci = letter[4][0] - '0';
if (ci < 0 || ci >= 4) ci = 2;
unsigned int color = colors[ci];
for(int r = 0, i = 0; r < 2; ++r)
for(int c = 0; c < 2; ++c, ++i) {
if (!syms[i][0]) continue;
saveState();
translate(c*CW + CB, r*CH + CB);
noStroke();
double ts = 512/2;
fillTexture(bgtex, randomFloat()*ts, randomFloat()*ts, ts, ts, FALSE);
rectRounded(0, 0, CWW, CHH, CR);
noFill();
stroke(colorWithAlpha(COLOR_BLACK, 0.5));
strokeWidth(1);
rectRounded(0.5, 0.5, CWW - 1, CHH - 1, CR);
stroke(colorWithAlpha(color, 0.25));
strokeWidth(SW);
rectRounded(0.5*SW, 0.5*SW, CWW - SW, CHH - SW, CR - 0.5*SW);
stroke(colorWithAlpha(COLOR_BLACK, 0.75));
textAlign(HALIGN_CENTER, VALIGN_CENTER);
textFont(fonts[i]);
textSize(FS*size[i]);
text(0.5*CWW, (0.5 + offset[i])*CHH, syms[i]);
restoreState();
}
}
void drawLetters() {
srand(seed);
for(int i = 0; i < sizeof(letters)/sizeof(*letters); ++i) {
saveState();
translate(CW*2*(i%8), CH*2*(i/8));
drawLetter(letters[i]);
restoreState();
}
}
void save(const char *filename) {
saveState();
resetState();
target(fb);
background(COLOR_TRANSPARENT);
clear();
drawLetters();
if (viewportSave(filename))
printf("saved to %s\n", filename);
restoreState();
}
void init() {
fb = createFramebuffer(CW*2*8, CH*2*5);
bgtex = createAnimationEx("data/shisen/wood4.png", TRUE, TRUE, TRUE);
fontNew = createFont("data/shisen/arnamu.ttf");
fontHand = createFont("data/shisen/Vrdznagir.otf");
fontClassic = createFont("data/shisen/Arian_Grqi_i_U.ttf");
seed = rand();
}
void draw() {
saveState();
//zoom(0.5);
drawLetters();
if (keyWentDown("space")) seed = rand();
if (keyWentDown("s")) save("data/shisen/letters-gen.png");
restoreState();
}
int main() {
windowSetResizable(TRUE);
windowSetVariableFrameRate();
windowSetInit(&init);
windowSetDraw(&draw);
windowRun();
}