WIP

Not published
Этот раздел предназначен для выкладывания и обсуждения разрабатываемых или требующих дополнительного обдумывания идей. Здесь-же будут размещены все сообщения, касающиеся текущего состояния утилиты.


Views: 2 600

prog #1 - 10 years ago 0
Голосов: +0 / -0
В ходе рефакторинга возникла идея попытаться реорганизовать работу с категориями и ввести параметризованные категории.
  • возможно введение нового синтаксиса проверки на принадлежность объекта категории в виде "категория.объект"
  • синтаксис присвоения объекту категории в РО будет дополнен: [категория:параметр]
  • для категорий с параметром при обращении вида "объект.категория" будет возвращаться значение параметра, в случае возникновения конфликтов или введения поддержки множественных параметров, синтаксис будет дополнен
prog #2 - 10 years ago 0
Голосов: +0 / -0
Распараллелил загрузку данных из файла. Стало чуть быстрее, но как-то не очень ощутимо. Попробую выпилить большую часть логирования, должно стать быстрее.
Так и есть, чертов логгер тормозил. Выпилю все лишнее логирование - будет летать.
Все, оставил только самые важные записи в логе. Срабатывает моментально. На все про все уходит меньше секунды.
Первая версия, работающая с плагинами, успешно протестирована. На очереди перенос существующего функционала в плагины.
prog #3 - 10 years ago 0
Голосов: +0 / -0
И так, работа с плагинами практически завершена, в частности доступ к данным в формате РО осуществляется через набор плагинов, каждый из которых отвечает за отдельный файл с данными. Более того, для основных типов плагинов разработаны абстрактные классы, содержащие базовую функциональность, что позволяет минимизировать объем кода непосредственно в классах самих плагинов.
» пример класса файлового плагина
public class UnitLoader extends AbstractDataLoaderPlugin {

    private static final int PLUGIN_ID = 100;
    private static final String PLUGIN_MESSAGE = "unit loader is here";
    private static final Path FILE_PATH = FileSystems.getDefault().getPath("fly", "war3map.w3u");
    private static final DataObjectType OBJECT_TYPE = DataObjectType.UNIT;
        private static final boolean IS_EXTENDED = false;
    @Override
    public String getMessage() {
        return PLUGIN_MESSAGE;
    }

    @Override
    public int getId() {
        return PLUGIN_ID;
    }

    @Override
    public Path getPath() {
        return FILE_PATH;
    }

    @Override
    public boolean isExtended() {
        return IS_EXTENDED;
    }

    @Override
    public DataObjectType getType() {
        return OBJECT_TYPE;
    }
}
Осталось уточнить некоторые особенности формирования модели, используемой библиотекой FreeMarker при обработке шаблонов.
prog #4 - 9 years ago 0
Голосов: +0 / -0
Ввиду малого количества свободного времени работы над утилитой продвигается достаточно медленно, но все-же продвигается. К примеру, недавно был закончен плагин, отвечающий за добавление в модель категорий и категорий с параметрами.
На данный момент конструкция "категория.объект" позволяет проверить принадлежит ли объект к категории(путем неописуемых извращений стало возможным в качестве ссылки на объект использовать в этой конструкции не только равкод, но и шаблонные переменные). Дополнительные параметры, присвоенные объектам через категории, доступны обычным способом - через конструкцию "объект.категория".
Синтаксис задания категорий и параметров объекта через поле "suffixEditor" в РО выглядит так:
произвольный текст список категорий
Категории в списке могут быть разделены пробелами или заключены в квадратные скобки. Название категории от параметра отделяется двоеточием. На данный момент допускается только один параметр для каждой категории.
При попытке получить значение поля suffixEditor будет возвращен только текст до символа @, обозначающего начало списка категорий.
Также немного изменился синтаксис доступа к обычным полям объекта. Для полей, не имеющих уровня все осталось по прежнему, а вот для тех, что могут принимать различные значения на разных уровнях был принят синтаксис "объект.поле[уровень]", как для обращения к элементам массива. Также, в случае если уровень полей объекта заведомо ограничен первым, все поля первого уровня становятся доступными через обычную конструкцию для доступа к полям без уровня: "объект.поле".
Добавлена возможность получать как TRIGSTR_ версию текстовых полей, так и их подлинный текст. Для обращения к подлинному тексту используется конструкция "объект.поле_STR".
Добавлена дополнительная компиляция шаблонов при использовании циклических ссылок первого уровня вложенности. Это позволяет избежать казусов со ссылками в текстовых полях на другие текстовые поля, использующие шаблоны (в таком случае шаблоны из импортированного текстового поля не компилировались). Возможно, в дальнейшем будет введен параметр, отвечающий за глубину обработки циклических ссылок на текстовые поля, позволяющий задать больший допустимый уровень вложенности (каждый уровень вложенности это дополнительный проход по файлу в поисках шаблонов).
prog #5 - 9 years ago 0
Голосов: +0 / -0
Введена в тестовом режиме приятная возможность получить доступ к объекту по его строковому равкоду, полученному из поля другого объекта.
Для начала объявим шаблонную переменную
<assign somethg = "A000">
Как видите, это строковая переменная. Ее поведение полностью соответствует ожиданиям - при использовании в выражениях будет возвращено строковое значение со всеми вытекающими последствиями.
До сегодняшнего дня попытка обратиться к полям такой переменной приводила к возникновению ошибки библиотеки FreeMarker, но с недавних пор есть возможность превратить такую строковую переменную в ссылку на соответствующий объект, что позволит обращаться к полям этого объекта. На данный момент такое преобразование происходит при использовании конструкции "категория.переменная" и выполняется успешно только при условии принадлежности объекта к категории.
Обращение к полям объекта можно производить как сразу в конструкции категория.переменная, так и записав ссылку на объект в переменную.
<assign x = "A000">
${abilities.x.name}
равнозначно
<assign x = "A000">
<assign x = abilities.x>
${x}
prog #6 - 9 years ago 0
Голосов: +0 / -0
Разработка несколько замедлена в связи с большим количеством дел и выходом третьего диабло, но не остановлена. На данный момент идет написание парсера SYLK таблиц для получения данных по стандартным боевым единицам и стандартных значений полей. Также в очередной раз может быть пересмотрена структура хранения данных в памяти и передачи их компилятору шаблонов- существующая не поддерживает ленивую загрузку данных, а загружать данные по всем стандартным юнитам просто на всякий случай не очень эффективно.
Скорее всего не будут поддерживаться стандартные значения текстовых полей или эта возможность будет добавлена позже.