Краткие сведения

Для игры: Warcraft 3
Тип: Утилита
Сфера применения: работа с данными РО, базы данных
Требования: JNGP, Java 7, руки, мозг
Статус: в разработке
Автор: prog
Данная утилита интегрируется в JNGP экспериментальной сборки и затем при каждом сохранении карты…
37 25 581
0
24
12 лет назад
0
В ближайшее время выложу обновленную версию утилиты. Пока нет интерфейса, зато она стала очень быстрой и очень модульной. Заодно был наведен порядок в файлах - теперь данные вынесены в отдельную папку и не пересекаются с файлами самой утилиты.

WIP

Этот раздел предназначен для выкладывания и обсуждения разрабатываемых или требующих дополнительного обдумывания идей. Здесь-же будут размещены все сообщения, касающиеся текущего состояния утилиты.
6 3 009
0
24
12 лет назад
0
Ввиду малого количества свободного времени работы над утилитой продвигается достаточно медленно, но все-же продвигается. К примеру, недавно был закончен плагин, отвечающий за добавление в модель категорий и категорий с параметрами.
На данный момент конструкция "категория.объект" позволяет проверить принадлежит ли объект к категории(путем неописуемых извращений стало возможным в качестве ссылки на объект использовать в этой конструкции не только равкод, но и шаблонные переменные). Дополнительные параметры, присвоенные объектам через категории, доступны обычным способом - через конструкцию "объект.категория".
Синтаксис задания категорий и параметров объекта через поле "suffixEditor" в РО выглядит так:
произвольный текст список категорий
Категории в списке могут быть разделены пробелами или заключены в квадратные скобки. Название категории от параметра отделяется двоеточием. На данный момент допускается только один параметр для каждой категории.
При попытке получить значение поля suffixEditor будет возвращен только текст до символа @, обозначающего начало списка категорий.
Также немного изменился синтаксис доступа к обычным полям объекта. Для полей, не имеющих уровня все осталось по прежнему, а вот для тех, что могут принимать различные значения на разных уровнях был принят синтаксис "объект.поле[уровень]", как для обращения к элементам массива. Также, в случае если уровень полей объекта заведомо ограничен первым, все поля первого уровня становятся доступными через обычную конструкцию для доступа к полям без уровня: "объект.поле".
Добавлена возможность получать как TRIGSTR_ версию текстовых полей, так и их подлинный текст. Для обращения к подлинному тексту используется конструкция "объект.поле_STR".
Добавлена дополнительная компиляция шаблонов при использовании циклических ссылок первого уровня вложенности. Это позволяет избежать казусов со ссылками в текстовых полях на другие текстовые поля, использующие шаблоны (в таком случае шаблоны из импортированного текстового поля не компилировались). Возможно, в дальнейшем будет введен параметр, отвечающий за глубину обработки циклических ссылок на текстовые поля, позволяющий задать больший допустимый уровень вложенности (каждый уровень вложенности это дополнительный проход по файлу в поисках шаблонов).
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
Распараллелил загрузку данных из файла. Стало чуть быстрее, но как-то не очень ощутимо. Попробую выпилить большую часть логирования, должно стать быстрее.
Так и есть, чертов логгер тормозил. Выпилю все лишнее логирование - будет летать.
Все, оставил только самые важные записи в логе. Срабатывает моментально. На все про все уходит меньше секунды.
Первая версия, работающая с плагинами, успешно протестирована. На очереди перенос существующего функционала в плагины.
Руководство, посвященное использованию утилиты Fly data processor, начиная с установки и заканчивая написанием шаблона для генерации простейшей базы данных.
5 3 777
0
37
12 лет назад
0
Джава ваша =)
0
24
12 лет назад
0
Время работы утилиты сокращено примерно до одной секунды за счет отключения избыточного логирования.