WIP

Добавлен , не публикуется
Этот раздел предназначен для выкладывания и обсуждения разрабатываемых или требующих дополнительного обдумывания идей. Здесь-же будут размещены все сообщения, касающиеся текущего состояния утилиты.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
24
12 лет назад
0
В ходе рефакторинга возникла идея попытаться реорганизовать работу с категориями и ввести параметризованные категории.
  • возможно введение нового синтаксиса проверки на принадлежность объекта категории в виде "категория.объект"
  • синтаксис присвоения объекту категории в РО будет дополнен: [категория:параметр]
  • для категорий с параметром при обращении вида "объект.категория" будет возвращаться значение параметра, в случае возникновения конфликтов или введения поддержки множественных параметров, синтаксис будет дополнен
0
24
12 лет назад
0
Распараллелил загрузку данных из файла. Стало чуть быстрее, но как-то не очень ощутимо. Попробую выпилить большую часть логирования, должно стать быстрее.
Так и есть, чертов логгер тормозил. Выпилю все лишнее логирование - будет летать.
Все, оставил только самые важные записи в логе. Срабатывает моментально. На все про все уходит меньше секунды.
Первая версия, работающая с плагинами, успешно протестирована. На очереди перенос существующего функционала в плагины.
0
24
12 лет назад
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 при обработке шаблонов.
0
24
12 лет назад
0
Ввиду малого количества свободного времени работы над утилитой продвигается достаточно медленно, но все-же продвигается. К примеру, недавно был закончен плагин, отвечающий за добавление в модель категорий и категорий с параметрами.
На данный момент конструкция "категория.объект" позволяет проверить принадлежит ли объект к категории(путем неописуемых извращений стало возможным в качестве ссылки на объект использовать в этой конструкции не только равкод, но и шаблонные переменные). Дополнительные параметры, присвоенные объектам через категории, доступны обычным способом - через конструкцию "объект.категория".
Синтаксис задания категорий и параметров объекта через поле "suffixEditor" в РО выглядит так:
произвольный текст список категорий
Категории в списке могут быть разделены пробелами или заключены в квадратные скобки. Название категории от параметра отделяется двоеточием. На данный момент допускается только один параметр для каждой категории.
При попытке получить значение поля suffixEditor будет возвращен только текст до символа @, обозначающего начало списка категорий.
Также немного изменился синтаксис доступа к обычным полям объекта. Для полей, не имеющих уровня все осталось по прежнему, а вот для тех, что могут принимать различные значения на разных уровнях был принят синтаксис "объект.поле[уровень]", как для обращения к элементам массива. Также, в случае если уровень полей объекта заведомо ограничен первым, все поля первого уровня становятся доступными через обычную конструкцию для доступа к полям без уровня: "объект.поле".
Добавлена возможность получать как TRIGSTR_ версию текстовых полей, так и их подлинный текст. Для обращения к подлинному тексту используется конструкция "объект.поле_STR".
Добавлена дополнительная компиляция шаблонов при использовании циклических ссылок первого уровня вложенности. Это позволяет избежать казусов со ссылками в текстовых полях на другие текстовые поля, использующие шаблоны (в таком случае шаблоны из импортированного текстового поля не компилировались). Возможно, в дальнейшем будет введен параметр, отвечающий за глубину обработки циклических ссылок на текстовые поля, позволяющий задать больший допустимый уровень вложенности (каждый уровень вложенности это дополнительный проход по файлу в поисках шаблонов).
0
24
12 лет назад
0
Введена в тестовом режиме приятная возможность получить доступ к объекту по его строковому равкоду, полученному из поля другого объекта.
Для начала объявим шаблонную переменную
<assign somethg = "A000">
Как видите, это строковая переменная. Ее поведение полностью соответствует ожиданиям - при использовании в выражениях будет возвращено строковое значение со всеми вытекающими последствиями.
До сегодняшнего дня попытка обратиться к полям такой переменной приводила к возникновению ошибки библиотеки FreeMarker, но с недавних пор есть возможность превратить такую строковую переменную в ссылку на соответствующий объект, что позволит обращаться к полям этого объекта. На данный момент такое преобразование происходит при использовании конструкции "категория.переменная" и выполняется успешно только при условии принадлежности объекта к категории.
Обращение к полям объекта можно производить как сразу в конструкции категория.переменная, так и записав ссылку на объект в переменную.
<assign x = "A000">
${abilities.x.name}
равнозначно
<assign x = "A000">
<assign x = abilities.x>
${x}
0
24
12 лет назад
0
Разработка несколько замедлена в связи с большим количеством дел и выходом третьего диабло, но не остановлена. На данный момент идет написание парсера SYLK таблиц для получения данных по стандартным боевым единицам и стандартных значений полей. Также в очередной раз может быть пересмотрена структура хранения данных в памяти и передачи их компилятору шаблонов- существующая не поддерживает ленивую загрузку данных, а загружать данные по всем стандартным юнитам просто на всякий случай не очень эффективно.
Скорее всего не будут поддерживаться стандартные значения текстовых полей или эта возможность будет добавлена позже.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.