crypt of decay - и раз уж я немного ожил... [entries|archive|friends|userinfo]
ketmar

[ userinfo | ljr userinfo ]
[ archive | journal archive ]

и раз уж я немного ожил... [Oct. 3rd, 2017|05:02 pm]
Previous Entry Add to Memories Tell A Friend Next Entry
…расскажу об очередном бесполезном, в рамках проекта «пишем ненужное для интересного».

поскольку все знают, что уже написаный гуй всегда сосёт, то для проекта DooM 2D:Forever я потихоньку запиливаю ещё один гуй с нуля. в качестве раскладывателя — очень простая реализация flexbox'ов, немножко аугментированая «группами»: контролам можно назначить hgroup и vgroup, и в каждой такой группе все контролы будут иметь размер, равный размеру максимального контрола из этой группы. за это раскладыватель не умеет в horizontal wrapping. но зато всего 20 кб кода.



пикча. несмотря на душный вид труповижона — это OpenGL. просто надо было быстро что-то не очень уродливое для тестирования раскладывателя, а потом так и покатилось…



конечно, морды можно делать текстом:
{
  title: "window"
  orientation: vertical
  position: center
  children: {
    hbox: {
      title: "big box"
      frame: true
      align: left
      children: {
        vbox: {
          title: "cbtest"
          id: "cbtest"
          frame: true
          children: {
            checkbox: { caption: "~first checkbox"  checked  expand: true }
            checkbox: { caption: "~second checkbox"          expand: true }
            label: { hgroup: lbl0  caption: "zz label"  textalign: right    expand: true }
          }
        }
        vbox: {
          title: "vbox"
          frame: true
          children: {
            label: { hgroup: lbl0  caption: "first label"  textalign: left    expand: true }
            label: { hgroup: lbl0  caption: "second label" textalign: center  expand: true }
            label: { hgroup: lbl0  caption: "min label"    textalign: right   expand: false  align: center }
            label: { hgroup: lbl0  caption: "last label"   textalign: center  expand: false  align: right }
          }
        }
      }
    }
    hbox: {
      title: "hbox"
      frame: true
      align: right
      children: {
        label: { hgroup: lbl0  caption: "it's first"     expand: true }
        //span: { width: 4 }
        line /*: { width: 5 }*/
        label: { hgroup: lbl0  caption: "this is second" expand: true }
      }
    }
    line /*{ height: 3 }*/
    hbox: {
      id: "btnbox"
      expand: true
      padding: 2  //or: padding: (4 0)
      children: {
        span: { flex: 1 }
        button: { id: "button0"  caption: "~disabled"  disabled }
        button: { id: "button1"  caption: "~button" }
        button: { hgroup: "btn-cancel-apply" id: "cancel"  caption: "cancel"  cancel }
        button: { hgroup: "btn-cancel-apply" id: "apply"  caption: "o~k"  default }
      }
    }
  }
}

есть даже стили:
/* widget style sheet */

// default window color scheme
default {
  back-color: #008;

  #active: {
    text-color: #fff;
    hot-color: #f00;
    switch-color: #fff;
    frame-color: #fff;
    frame-text-color: #fff;
    frame-icon-color: #0f0;
  }

  #inactive: {
    text-color: #aaa;
    hot-color: #a00;
    switch-color: #aaa;
    frame-color: #aaa;
    frame-text-color: #aaa;
    frame-icon-color: #0a0;
  }

  #disabled: {
    text-color: #666;
    hot-color: #600;
    switch-color: #666;
    frame-color: #888;
    frame-text-color: #888;
    frame-icon-color: #080;
  }

  // window
  @window: {
    // darken inactive window
    #inactive(#active): {
      darken: 128;
    }
  }

  // button
  @button-round: {
    back-color: #999;
    text-color: #000;
    hot-color: #600;
    #active: {
      back-color: #fff;
      hot-color: #c00;
    }
    //#inactive(#inactive@$up$): { text-color: #555; }
    #disabled: {
      back-color: #444;
      text-color: #333;
      hot-color: #333;
    }
  }

  // button
  @button: {
    shadow-size: 4;
    add-markers: false; // true: use "[< >]", false: use "< >"
    //hide-markers: true; // totally hide all markers
    back-color: #090;
    //text-color: #000;
    hot-color: #600;
    #active: {
      back-color: #099;
      //text-color: #000;
      text-color: #ff9;
      hot-color: #c00;
    }
    #inactive(#inactive@$up$): {
      text-color: #ff9;
      hot-color: #c00;
    }
    #disabled: {
      //back-color: #444;
      text-color: #333;
      hot-color: #333;
    }
  }

  @label: {
    #active: {
      back-color: #440;
    }
    #inactive(#active);
  }

  @static: {
    text-color: #ff0;
    #inactive(#active);
  }

  @box: {
    #inactive(#active);
  }

  @switchbox: {
    //switch-color: #fff;
    #active: {
      back-color: #080;
    }
    #inactive: {
      switch-color: #fff;
    }
  }

  @checkbox(@switchbox): {}
  @radiobox(@switchbox): {}
}

в дальнейшем там планируется ди-подобный скриптоязык, из которого этой (и многой другой) фигнёй можно будет рулить. язык будет житоваться LibJIT'ом.

внутри оно, как полагается, распилено на рисовальную библиотеку, библиотеку контролов и библиотеку раскладывателя. распилено не совсем сильно: внешний вид контролов от самих контролов не отделён, так что скинование ограничивается сменой шрифта да цветов. возможно, это в процессе допиливания изменится, и я добавлю такие-то скины на картиночках.

если кто-то дочитал до этого места, и всё ещё интересуется, накойхер оно надо в 2д-экшоне, то я расскажу: в основном для будущего навороченого рантайм-инспектора-отладчика-недоредактора. полноценный редактор внутри игры вряд ли будет (хотя кто знает), но почти полноценный (и весь на скриптах) — вполне да. а поскольку ему рано или поздно всё равно понадобятся окна, то я и решил их запилить сразу. пригодятся, чо. оно, конечно, можно и дедовским методом с ручным выводом по координатам, но так неинтересно. и очень больно потом гуй переделывать/наращивать.

на самом деле гуй вполне standalone (хоть и на пацкалике). возможновероятнонеисключено, что в будущем он приобретёт нативные бэкэнды (или нет), и на нём же будет запилен новый standalone редактор уровней (или нет). люди с виндой хотят «нативности», а мне больше нравится в таком виде. но это совсем дальние планы уже. пока что надо его ещё подопиливать, и сдизайнить-реализовать скриптовый язык.

почему не взять готовый скриптовый язык? а потому что мне у них синтаксис не нравится. я хочу его statically typed (в основном), с модулями, UFCS от дишечки, и некоторыми дополнительными фичами для облегчения моддинга. ну, или так: меня просто прёт писать канпеляторы. LuaJIT, конечно, добрая внутри, но на лицо ужасная. и вообще: because i can.

спасибо, что были со мной всё это время. возможно, вам было так же интересно, как и мне.


p.s.: до Зоркого Глаза дошло, что ссылки на репу D2D:F нигде нет, а не все даже знают, что это. вот. игра GPL-ная, а гуй живёт в src/flexui.

саму игру брать где-то тут.
Linkmeow!

Comments:
[User Picture]
From:[info]steinkrauz
Date:October 3rd, 2017 - 09:00 pm
(Link)
Это охуительно. Я кончил.
[User Picture]
From:[info]ketmar
Date:October 3rd, 2017 - 09:35 pm
(Link)
спасибо. на самом деле это примерно четвёртый приступ к подобным гуям, и третья версия раскладывателя. в этот раз Почти Как Надо.

флексбоксы рулят.
From:(Anonymous)
Date:October 3rd, 2017 - 11:03 pm
(Link)
> душный вид труповижона
Я бы попросил! Вид как раз заебись, там вот именно только графического курсора не хватало, ну и в 80×25 банально нихера не влезало.
[User Picture]
From:[info]ketmar
Date:October 3rd, 2017 - 11:07 pm
(Link)
там ещё кривые [x] — заместо текстовых корявки. это тест был, сейчас классические текстовые.

а курсор мой любимый, давно спизженый из классической досовой Death Track, кстати.
[User Picture]
From:[info]ketmar
Date:October 3rd, 2017 - 11:10 pm
(Link)
p.s.: мне, кстати, такой вид окошек очень по нраву. и относительно эстетично, и — главное — их рисовать просто.
[User Picture]
From:[info]tzirechnoy
Date:October 4th, 2017 - 02:02 pm
(Link)
Графический курсор там прикручивался хоть одним из десятков резидентов под это дело, хоть личной реализацыей чего-то подобного на паскакале (это тожэ было довольно примитивно).
[User Picture]
From:[info]ketmar
Date:October 4th, 2017 - 02:16 pm
(Link)
но не цветной, увы.
From:(Anonymous)
Date:October 4th, 2017 - 09:24 am
(Link)
тебе сколько лет?
[User Picture]
From:[info]ketmar
Date:October 4th, 2017 - 11:25 am
(Link)
а тебе?
From:(Anonymous)
Date:October 4th, 2017 - 03:03 pm
(Link)
21
[User Picture]
From:[info]ketmar
Date:October 4th, 2017 - 03:05 pm
(Link)
клёво тебе. умножь на 1.8.
From:(Anonymous)
Date:October 4th, 2017 - 07:06 pm
(Link)
А с чего лучше начать кодить, по-твоему? Какие книжки читать, на что обращать внимание?
[User Picture]
From:[info]ketmar
Date:October 4th, 2017 - 07:50 pm
(Link)
честно говоря, я хуй знает. я учился чему-нибудь и как-нибудь, без особого плана.

к тому же тут имеет значение, чему именно ты хочешь научиться: именно программировать, или навыкам, достаточным, чтобы говнокодить всякую хуйню на какой-нибудь галере. первое — очень времязатратно, и в большинстве случаев не окупается; а иногда тебя и вовсе могут прокатить с работой, как overqualified, лол.

для быдлокодинга — учи всякие питоны, руби и модные на сегодня уеб-фрэймворки. без хлеба с тушёнкой не останешься. но и ламборгини тоже не купишь.

для программирования — как обычно, с азов и выше. SICP, Кнут (но это мозговыламывающая вещь, не пытайся асилить всё сразу, просто почитывай что интересно, и то, что в данный момент надо), Вирт — такая вот классика. и пиши, пиши, пиши, пиши код. потому что без практики ты не научишься программировать даже если вызубришь все книги на свете наизусть.
From:(Anonymous)
Date:October 4th, 2017 - 07:58 pm
(Link)
спасибо за теплый и подробный ответ. А сам чем занимаешься конкретно? Имею в виду про то, чем на хлеб зарабатываешь и каково в этой отрасли?
[User Picture]
From:[info]ketmar
Date:October 4th, 2017 - 08:19 pm
(Link)
если ты почитаешь мой бложег, то увидишь, что на хлеб я побираюсь, потому что не работаю.
From:(Anonymous)
Date:October 4th, 2017 - 08:30 pm
(Link)
периодически фрилансишь или сидишь на шее мамки,жены?
[User Picture]
From:[info]ketmar
Date:October 4th, 2017 - 08:33 pm
(Link)
на шее, конечно. как ебанулся на отличненько — так и.
From:(Anonymous)
Date:October 4th, 2017 - 08:38 pm
(Link)
уважаю
From:(Anonymous)
Date:October 4th, 2017 - 08:49 pm
(Link)
ебанулся - дело прогорело?
[User Picture]
From:[info]ketmar
Date:October 4th, 2017 - 09:04 pm
(Link)
нет. специфические ментальные тараканы.
From:(Anonymous)
Date:October 4th, 2017 - 09:08 pm
(Link)
расскажи,что ли, - анонимно все-таки.
[User Picture]
From:[info]ketmar
Date:October 4th, 2017 - 09:22 pm
(Link)
да чего там рассказывать особо… до меня наконец дошло, что я ебанутый коммунист. а заодно с этим дошла этическая неприемлемость разных вещей, которые раньше были приемлемы. в итоге найти этичный (с моей точки зрения, а не «вообще», понятно, «этики вообще» не существует) проект, за который будут ещё и платить, получилось очень проблематично. с тех пор вот и.
From:(Anonymous)
Date:October 4th, 2017 - 09:33 pm
(Link)
и как давно пришел?
[User Picture]
From:[info]ketmar
Date:October 4th, 2017 - 09:38 pm
(Link)
два, три года, точно не помню. это ж процесс не одномоментный: вчера был номальный, а сегодня проснулся — и опа! коммунист.
From:(Anonymous)
Date:October 4th, 2017 - 09:42 pm
(Link)
а до этого? Веб? Фриланс?
[User Picture]
From:[info]ketmar
Date:October 4th, 2017 - 09:48 pm
(Link)
а до этого всякое разное, kinda self-employed.
From:(Anonymous)
Date:October 4th, 2017 - 10:02 pm
(Link)
Ты - милый человек. Рад был поговорить. Напишу еще как-нибудь. Успехов тебе и желаю, чтобы не пропал из-за финансовых трудностей.
[User Picture]
From:[info]ketmar
Date:October 4th, 2017 - 10:25 pm
(Link)
спасибо. «ну, ты это, заходи, если что…» (ц)
[User Picture]
From:[info]ketmar
Date:October 4th, 2017 - 09:49 pm
(Link)
p.s.: и нет, вебом никогда не занимался, мне это наглухо неинтересно. не то, чтобы в этом было что-то зазорное — просто неинтересно. если это не one man project, то я обычно предпочитаю заниматься «подкапотной механикой».
From:(Anonymous)
Date:October 4th, 2017 - 08:24 pm
(Link)
> кнут, вирт
> 2017

Параллельщина, бигдата и нейросети бороздят большой театр, а хэккеры всё программочки пишут, блять.
[User Picture]
From:[info]ketmar
Date:October 4th, 2017 - 08:26 pm
(Link)
ну да, для этого же уметь программировать не надо, ориентироваться в алгоритмике не надо, это всё хуйня из прошлого века. сейчас надо знать гугель и стековерфлов — и ПИЗДЫК! — ты заебатый ПОГРОМИЗД!
From:(Anonymous)
Date:October 4th, 2017 - 08:46 pm
(Link)
Когда хэккеры поняли, что никакой алгоритмикой 100500 полигонов в секунду не нарисуешь, они сели, подумали, и изобрели GPU. В этот момент они достигли просветления. А другие до сих пор сидят под деревом и страдают.

Я вот не понимаю, что можно в современном мире наалгоритмить. Сортировку пузырьком? Козырьком? Пиздырьком? Хитропиздырьком с подвыверткой в крапинку с полосочкой? Это уже реализовано в vector.h.
[User Picture]
From:[info]ketmar
Date:October 4th, 2017 - 09:04 pm
(Link)
>Я вот не понимаю
потому что ты дебил.
From:(Anonymous)
Date:October 4th, 2017 - 08:08 pm
(Link)
Не слушай этого шизика, слушай меня.

Чтобы начать кодить, поставь себе задачу "сделать продукт X", пусть это будет какая-нибудь мелочь, но реально полезная и работающая.

А дальше всё само получится, если ты не олигофрен.
[User Picture]
From:[info]ketmar
Date:October 4th, 2017 - 08:20 pm
(Link)
угу. только можно потратить на понимание того, как надо писать, десять-пятнадцать лет, а можно пять.
From:(Anonymous)
Date:October 4th, 2017 - 08:28 pm
(Link)
Со скачивания редактора Atom, написания CODE_OF_CONDUCT.md и заливания его на гитхаб.
[User Picture]
From:[info]ketmar
Date:October 4th, 2017 - 08:31 pm
(Link)
на этом же можно и закончить, потому что этого достаточно, чтобы показать Мой Проект На Гитхабе на собеседовании-на-галеру. там похуй, кого брать.
From:(Anonymous)
Date:October 4th, 2017 - 12:31 pm
(Link)
Охуенно же! А можно код посмотреть где-нибудь?
[User Picture]
From:[info]ketmar
Date:October 4th, 2017 - 12:37 pm
(Link)
конечно, D2D:F GPL-ный жы. в src/flexui там куча всего.

правда, standalone примера в репе нету, но там никакой магии.