<= Сентябрь 30 : Октябрь 1 : Октябрь 2 =>
[1:10:45]<@AI> У меня такое впечатление, что то-ли ты копировал файлы между папками без участия гита, то-ли твой редактор не заметил, что открытый в нём файл изменился.
[5:12:48]<@AI>
function on_collide(dt, shp_a, shp_b, dx, dy)
-- print('collide!')
end
ҐАААААААААА
[5:20:11]<@AI> Охх, наконец-то.
[6:06:36]<@AI> Вроде починил, что было сломанно. Не считая коллизий — хорошая работа. Разве что по стейтам я ещё буду спорить, но это завтра.
[6:08:03]<@AI> О, добрый утро.
[6:13:42]<Roxy> УТра.
[6:14:59]<@AI> Как проснусь, настрочу тебе краткий курс по юзанью гита.
[6:16:33]<@AI> Насчёт того, чем заняться — у меня не было особого времени подумать, но что актуально — дак это враги и система сущностей. Врагами ты уже занимаешься, сущности в любом случае нужно сделать сегодня.
[6:16:37]<@AI> По ним:
[6:23:44]<@AI> Что требуется — глобально доступный и итерируемый массивохеш, в который должны будут добавляться и удаляться все сущности, вроде вражин или пулек. Что может пригодиться — в качестве ключа для обьекта в массиве может использоваться сам обьект, вроде table[foo] = foo. Что гоже.
[6:25:44]<@AI> Думаю, эту штуку вполне легко можно написать за пару минут (что я, кстати, и сделал, см. lua/emitters.lua на ветке emitters), но сейчас я хочу спать и не-рисковать, так что можешь заняться, как будет нужно для врагов.
[6:26:13]<Roxy> >за пару минут.
Ну я понял, что ты хочешь, да.
[6:26:35]<Roxy> И эта пачка энтитей реализована в тооооом шмапе, который я тебе скидывал. Лол.
[6:27:11]<@AI> Да, таким же образом хранятся шейпы в физдвижке.
[6:29:10]<Roxy> Меня смущает факт.
[6:29:26]<Roxy> Что у тебя в хардоне все хранится.
[6:29:34]<Roxy> Еще и в энтитях будет.
[6:29:41]<@AI> Ничего у меня там не хранится.
[6:29:48]<@AI> Кроме ссылок на тела.
[6:29:56]<Roxy> Ну у тебя отрисовка по ним идёт.
[6:30:02]<Roxy> По коллидирующим телам.
[6:30:12]<@AI> Это поправится, когда будут энтити
[6:30:22]<@AI> Говнокод-заплатка, же.
[6:30:56]<@AI> Нам нужно шмуп писать, у нас нет времени сношаться архитектурирой.
[6:31:24]<@AI> Время сношаться с архитектурой ещё придёт.
[6:32:19]<Roxy> Я программист хипстер. Я сношаюсь с архитектурой еще до того, как это нужно.
[6:34:17]<Roxy> Арузо. Я подсмотрел в SDLке етод прятанья структов от пользователя.
header.h
typedef _struct Struct;
Source.c
_struct {definition};
[6:34:24]<Roxy> Это же норм, да?
[6:34:47]<@AI> Да, так делается.
[6:35:21]<Roxy> Отлично. Тогда юзверям не нужны будт другие либы.
[6:35:29]<Roxy> ВО время сборки.
[6:35:47]<@AI> Они и так не будут нужны если у тебя открытые сырцы.
[6:38:56]<Roxy> Ну дело не в этом. Наличие полноценного описания в хидере и включение других либ в него требует, чтобы эти хидеры были во власти^W у собирающего игру с библиотекой пользователя.
[6:39:09]<Roxy> А я хочу облегчить ему жизнь.
[6:39:26]<Roxy> То есть если у него есть либа, то нужны тольо хидеры либы.
[6:39:56]<@AI> Нуу. Ему и так нужны будут только хидеры либы.
[6:40:10]<@AI> Или ты хочешь дублировать части других хидеров?
[6:41:00]<Roxy> Ум. Я о том, что ему будут нужны только хидеры моей либы. Но не остальных библиотек, если у него есть сборка.
[6:41:07]<@AI> И ты ведь впиливаешь, что на этапе линковки эти „другие либы“ всё-равно понадобятся?
[6:42:01]<Roxy> Хум. В идеале да. Но у сдл наличие сублиб, фритайпов и т.д. не обязательно.
[6:42:11]<Roxy> Их как плагины добавляют.
[6:42:45]<@AI> Путём магии ифдефов и рантаймовых проверок на делелеки.
[6:43:12]<Roxy> Хумм.
[6:43:14]<Roxy> Окай.
[6:43:42]<@AI> И ещё — трюком выше ты можешь передавать только указатели на обьект.
[6:44:00]<Roxy> Окай.
[6:44:04]<Roxy> Можно не стараться.
[6:44:44]<@AI> Не, чего, сам трюк гож. Помогает АБСТРАГИРОВАТЬ.
[6:44:55]<@AI> И МОДУЛЬНОСТЬ тоже гожа.
[6:45:23]<@AI> ОЇОЇ
[6:55:09]<@AI> Ну и таки да, краткий курс по тому, как гожей работат’ в гите:
1: Думаешь о фиче.
2: Создаёшь новый бранч с именем, отражающим суть фичи, вроде 'make-more-bullets'
git checkout -b make-more-bullets
Здесь -b ... говорит гиту перейти в бранч, создав его перед этим.
3: Делаешь коммиты. Коммитишь не всё сразу, а только файлы, изменения в которых связанны чем-то общим. КОММИТЬ ТОЛЬКО НУЖНОЕ СЕЙЧАС, НЕ КОММИТЬ ВСЁ ЧТО ЕСТЬ БЕЗ РАЗБОРУ. Если изменений насобиралось по нескольким разным аспектам фичи — сделай несколько коммитов.
Очень гоже с этим помогает git gui — ты можешь сразу посмотреть диффы и выбрать, что ты хочешь закоммитить (выбирать файлы для коммита можно тыкая по картинкам слева от их имён, к слову).
4: ТОЛКАЕШЬ коммиты ПРОТИВ ТЕЧЕНИЯ. Пушишь в апстрим, тобишь. В свежесозданном тобой бранче первый пуш имеет несколько необычную форму:
git push -u origin make-more-bullets
Так как ты только что создал ветку сам, и сервер сверху (ака оригин) о нём не знает, ты говоришь ему через ключ -u, что хочешь присобачить свой бранч make-more-bullets к бранчу с таким же именем на оригине.
В уже присутствующих наверху бранчах ты юзаешь git pull, как обычно.
5: Повторяешь пункты 3, 4 до полного удовлетворения результатом
6: Переходишь на бранч master, и говоришь:
git merge --no-ff make-more-bullets
Это смержит твою ветку в мастер, попутно создав новый коммит с сообщением о том, что имел место быть факт СЛИЯНИЯ.
*вставьте-традиционное-многоточие-прибыль-здесь*
[7:00:47]<Roxy> ._. спасибо.
[7:01:17]<@AI> Всё, тепер’ я спать.
[7:03:37]<Roxy> Онясуми.
[7:07:23]<ОКУУ> А, точн
[7:07:33]<ОКУУ> о
[7:09:52]<ОКУУ> Переделай стейты в обычные инстансы класса State.
[7:11:21]<ОКУУ> Здесь не сиплюсплюс, и нет никаких причин делать стейты эксплицитными классами.
[7:13:36]<ОКУУ> А то что-то говнокодско выходят эти StateGame и GameInstance.
[7:15:23]<ОКУУ> Добрый утро, сладких снов.
[7:27:20]<Roxy> У них различное содержимое.
[13:30:39]<@AI> Уфф. Как я уже говорил — это не сиплюсплюс.
[13:30:52]<@AI> Ты ведь помнишь, что это всё ещё таблицы?
[13:37:51]<Roxy> Спасибо, чт онапомнил, да.
[13:38:03]<Roxy> У меня крест головного мозга.
[13:38:11]<Roxy> Утра, видимо.
[13:39:44]<@AI> Так что это в любом случае получится что-то вроде ненаследуемых классов.
[14:58:21]<@AI> Как успехи?
[15:02:11]<Roxy> Пока никак.
[15:03:09]<Roxy> Досмотрю серию и запушу то, что ты накодил. (Или пульну?)
[15:03:59]<@AI> Пульнешь.
[15:49:25]<@AI> Пока смотришь, краткий курс по основному устройству гита:
[15:49:47]<Roxy> ТЫ проводил же вчера.
[15:49:51]<Roxy> (Я пуляю!)
[15:50:01]<@AI> Пуляй мастер, кстати.
[15:50:17]<@AI> И то было по пользованию, а это по устройству.
[15:51:10]<Roxy> Ок.
[15:51:11]<Roxy> Алсо.
[15:51:17]<Roxy> ГГ всё еще иисус.
[15:51:22]<Roxy> *имба
[15:51:27]<Roxy> Он неубиваем.
[15:52:03]<Roxy> > <3<
[15:52:07]<Roxy> Я тоже тебя.
[15:52:28]<@AI> Посмотри на Player:picchun, и выпадай стейтом ГеймОвер (или в меню) по истечению жизней.
[15:54:15]<Roxy> А, таки я мертв.
[15:54:23]<Roxy> Это радует.
[15:55:36]<@AI> Так вот по устройству:
Каждый коммит — элемент два-или-три-жды-связанного списка. Кроме диффа и всего прочего, в нём хранятся ссылки на коммит-родитель (с которым и дифф), и коммит-дитё, который диффит этот коммит.
[15:56:43]<@AI> А бранчи — просто указатели на определённые коммиты.
[15:56:55]<@AI> Вот, собственно, и всё устройство.
[15:57:27]<Roxy> Окай.
[16:10:25]<@AI> Добавляю энтити.
[16:16:05]<Roxy> Пушу фикс стейтов.
[16:18:45]<Roxy> done
[16:18:50]<Roxy> Правильно сделал?
[16:23:17]<@AI> Сойдёт. Только забыл выделить в отдельный бранч.
[16:24:09]<@AI> Чем бранчи удобны — их можно мержить в мастер в нужной тебе последовательности.
[16:24:37]<Roxy> Окай.
[16:32:23]<Roxy> Угу.
[16:34:15]<Roxy> Кстати. У меня возникла мысля.
[16:34:22]<Roxy> А что если использовать скриптоязык.
[16:34:28]<Roxy> Но хранить его стек?
[16:34:33]<Roxy> В файл.
[16:35:14]<@AI> Не слишком плохая идея.
[16:35:25]<@AI> С другой стороны, IT DEPENDS
[16:35:53]<Roxy> Ум?
[16:36:51]<@AI> Тебе придётся следить за тем, чтоб внутренний код никак не зависил от приобретённого состояния.
[16:37:10]<@AI> Или наоборот, мог его отслеживать и действовать в зависимости от.
[16:37:46]<@AI> И да, указатели на функции внешнего АПИ, сохранённые на стеке.
[16:38:02]<Roxy> Я тоже об этом думал.
[16:38:05]<Roxy> Хумм.
[16:39:35]<@AI> Не, в принципе можно сделать так, чтоб функции всегда были на тех же адресах.
[16:39:42]<@AI> В линуксе, тоесть.
[16:39:52]<@AI> В виндоўс ОДНИ ПИРОГИ.
[16:45:22]<Roxy> Хумм.
[16:45:37]<Roxy> Похоже мир просит,чтобы я написал что-то своё.
[16:46:46]<@AI> А то.
[16:47:07]<@AI> Почитай четвёртую главу SICP, наконец.
[17:03:51]<@AI> Энтити готовы.
[17:06:04]<@AI> https://github.com/niksaak/machine/network
Выглядит довольно сурово.
[17:07:00]<Roxy> Кстати.
[17:07:04]<Roxy> Кстати.
[17:07:18]<Roxy> Все реквайеры нужны единожды.
[17:07:27]<@AI> И что?
[17:07:39]<Roxy> МОжет их вынести в одельный файл?
[17:07:44]<@AI> Нет.
[17:08:09]<Roxy> окай._.
[17:08:10]<@AI> Пиши код для человеков, а не для конпиляторов.
[17:08:44]<@AI> Прочитав файл модуля я должен узнать, что ему требуется.
[17:09:07]<Roxy> Окай.
[17:09:56]<@AI> Особенно учитывая кучу глобальных штук повсюду.
[17:17:06]<Roxy> Теперь у меня жаббер вылетает и тогда, когда связь подскакивает до максимума.
[17:22:04]<@AI> Хее-хее.
[17:28:33]<Roxy> http://wiki.libsdl.org/SDL_BlitScaled?highlight=%28bCategorySurfaceb%29|%28CategoryEnum%29|%28CategoryStruct%29|%28SGFunctions%29
[17:28:40]<Roxy> Оно теперь и само склит.
[17:28:47]<Roxy> *скейлит
[17:31:38]<Roxy> И модулирует.
[17:31:48]<Roxy> И текстуры вращает.
[17:35:02]<@AI> ХММММ.
[17:35:27]<Roxy> ьМ?
[17:36:13]<@AI> SDL2 таки стал неплох, да.
[19:47:50]<Roxy> Есть идеи по поводу уровней?
[21:26:49]<@AI> Снова тут.
[21:26:52]<@AI> Уровни.
[21:27:08]<@AI> Есть только идеи на финального босса и немного о его данмаку.
[21:28:51]<Roxy> Я об их механизме.
[21:33:07]<@AI> Ивентостеки.
[21:33:20]<@AI> Хмм. Сейчас я буду думат’ о них вслух.
[21:33:23]<@AI> *ввид
[21:33:30]<@AI> **втекст
[21:34:09]<@AI> Уровень в даммаку-шутере — есть последовательность событий
[21:35:19]<@AI> Событиями есть появление врагов, смена картинок, внезапные данмаку взрывы.
[21:35:33]<@AI> Как в TH2..5
[21:37:57]<@AI> События возникают в детерминируемой последовательности, т.е. мы точно знаем что определённое событие возникнет точно после другого, предшествующего ему.
[21:41:55]<@AI> Следующее событие вызывается с завершением текущего. Я бы добавил „по триггеру или истечению таймера“, но мы не можем предусмотреть наверняка по каким причинам должны будут завершаться события.
[22:27:44]<mRoxy> У меня диссонанс между часом ночи, разбором кода кирикири и нежеланием спать.
[22:28:05]<mRoxy> Вот смотри, ты сказал по таймеру илт триггеру.
[22:29:51]<mRoxy> А что мешает сделать список уровней.
И в каждый заносить время жизни.
[22:30:22]<mRoxy> То есть время или условие.
[22:32:30]<mRoxy> Level.Update(dt)
if self.condition then die end
if somerule then self.condition = true end
...
[22:33:20]<mRoxy> Например волна закончится по таймеры, который вызовет смерть ивента.
[22:33:46]<mRoxy> А нанобоссы по триггеру их смерти.
[22:36:32]<mRoxy> Так что предусмотрение есть.
[22:39:54]<mRoxy> Ай?
[22:45:57]<mRoxy> Ну ладно, поддамся морфею. Это единственный мужчина, который меня регулярно затаскивает в кровать.
<= Сентябрь 30 : Октябрь 1 : Октябрь 2 =>