TDictionary вслепую / TDictionary blindfold

Промучился с API Generics.Collections. Из-за бага в CodeTools не было возможности взглянуть на объявления элементов, по этому пришлось работать вслепую 🙂 Вспоминал свои первые шаги с Castle Game Engine – но тогда я просто не умел пользоваться документацией и это был первый опыт работы с чужими исходниками. А теперь – та же “голова-ап-стену”, попытка подобрать название и синтаксис функций наугад, поскольку в документации Delphi всё куда более запущено…

Но, в общем, получилось.


Recently I’ve been struggling with Generics.Collections API. Due to CodeTools bug I could not see the definitions of the items, so I had to work blindfold 🙂 Remembered my first steps in Castle Game Engine – but at that point in time it was my inability to use the documentation, and it was the first experience with working with someone’s else code. And now – the same “banging my head on the wall”, trying to guess names and syntax of the functions, because Delphi documentation is very poor.

Well… anyway it worked out eventually.

Advertisements
TDictionary вслепую / TDictionary blindfold

Много, да дурного / Carrying water to sea

За выходные исправил множество мелких задач, самый большой блок работы – по профайлеру. Впрочем, визуального результата никакого нет 🙂 Да и ничего из сделаного не было критично по срокам…


These weekends I’ve solved a lot of small issues, with the largest chunk of work – the profiler. However, there is no actual visual result 🙂 And nothing of the solved tasks ever was urgent…

Много, да дурного / Carrying water to sea

Макросы / Macro

Открыл очень мощный инструмент Паскаля – макросы, которые позволили существенно оптимизировать код. Плотно занимаюсь рефакторингом логгинга и написанием профайлера.


I’ve discovered a very powerful Pascal tool – macro, which enabled a significant code optimization. Now working on logging refactoring and own profiler.

Макросы / Macro

Война с Profiler-ом / Fighting the Profiler

Попытка установить и использовать профайлер (LazProfiler) для игры закончилась весьма неудачно. Отложим его на будущее, вернулся на более стабильную версию лазаруса. Правда, логика его работы предложила механизм создания “своего” профайлера, который может оказаться более удобным, надёжным и эффективным, чем стороннее решение. В любом случае, вернусь к этому вопросу в следующий раз я уже когда буду оптимизировать производительность (FPS). А это произойдёт, скорее всего, после того как заработает интерфейс.


Trying to install a profiler (LazProfiler) for the game failed badly. I’ll postpone it for some future. For now I’ve returned back to a more stable version of Lazarus/FreePascal. Thou the logic of LazProfiler looks very nice and might be a base to create an own profiler that can be more native, reliable and efficient than a third-party solution. Anyway, I’ll return to the issue when I’ll start optimizing efficiency (FPS). And this, in turn, will happen after interface is up and working.

Война с Profiler-ом / Fighting the Profiler

Мир / World

Увы, за последние дни по программированию почти нулевой прогресс.

Переделал логику управления внешнего мира (теперь и внутреннего тоже), поддерживающую многоуровневые LOD. Проблемы ещё есть, особенно с загрузкой-выгрузкой объектов целиком, но их, скорее всего, нужно будет решать уже “в коде”.

Также, красиво сформировалась ещё одна сюжетная линия, однако ну уж слишком спойлерно про неё рассказывать 🙂


Unfortunately nearly zero programming for last few days.

I’ve reworked the algorithm of external world management (now it will work with internal world too), which supports multilevel LODs. There are still problems of loading-unloading of the whole objects, but, they should be better solved “in code”.

Also a very interesting plotline has shaped-out, but it’s too spoilerish to tell about it 🙂

Мир / World

Медленно и непродуктивно / Slow and inefficient

Медленно и непродуктивно продвигаюсь по переписи населения интерфейса. Ещё раз перерисовал структуру, вроде всё относительно сходится без потери функционала, однако получается достаточно сложно (но проще чем было).

Также перерисовал концепцию внешнего мира с промежуточными загрузками. Вроде бы получилось относительно нормально, однако, можно “упереться” в неприемлемо длинные паузы на стыках блоков мира. Может, это “лотерея” и лучше поубавить аппетиты и делать “как проще” (не безшовно)?


Slowly and inefficiently moving on with rewriting interface. Redrawn its structure once again, seems like it’s possible to make it without loss of functionality. Still looks too complex (thou more simple than before).

I’ve also reconsidered the overworld management algorithm with intermediate load-stops. Looks relatively normal, but might “bump” into unacceptably long pauses at chunks borders. Maybe, that’s kind of a “lottery” and I should finally give up and make it “simple” (not seamless)?

Медленно и непродуктивно / Slow and inefficient

Всё ещё не так / Still wrong

Оказалось, что новая архитектура также не обеспечивает необходимой гибкости при выполнении анимации. Перерисовал ещё раз. Что-то я уже не уверен, что в этот раз “всё хорошо” 🙂


It appeared that the new architecture also doesn’t provide for the required flexibility during animations. Redrawn it again. But still unsure if it is “fine” this time 🙂

Всё ещё не так / Still wrong