Blame onefile/shisen-gen.c

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