forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Проекты C++ (http://forum.boolean.name/forumdisplay.php?f=56)
-   -   ProLevel (http://forum.boolean.name/showthread.php?t=17509)

mr.DIMAS 11.11.2012 21:59

ProLevel
 
Есть у меня такая самописная система обработки уровней. Позволяет в любом редакторе( макс, милка ) настраивать игровые объекты( пока совместим только с Xors3D ). Триггеры тоже поддерживаются. В общем мысли свои понятно излагать не умею поэтому приведу выдержку из справки к этой "супер" системе.
Параметры записываются в имени объекта
Код:

Справка по ProLevel
  Как правильно записывать параметры объектов.
  Параметр имеет имя и значение. Значение - либо число, либо строка.
  Пример:
  ·                    name=cube;
  ·                    mass=1;
  Параметры отделяются друг от друга точкой с запятой. Пробелов может быть сколь угодно много - при разборе строки лишние пробелы удаляются. Чтобы сохранить пробелы строку нужно окружить кавычками.
  Пример:
  ·                    objective="Receive data";
  Если значение не поместить в кавычки, в качестве значения, параметру objective присвоится только Receive.
 
  Общие параметры - эти параметры могут иметь все объекты в игре
 
  ·        class - класс объекта. Возможны два значения:
  1.      classObject - объект
  2.      classLogic - логика( триггеры и т.п. )
  ·        type - тип объекта
  1.      object - описывает обычный объект
  2.      light - источник света
  3.      trigger - триггер
  4.      sound - звук
  ·        name - имя объекта, используется для обращения к объекту из триггера
  ·        body - тип физического тела
  1.      sphere - сфера - радиус вычисляется автоматически и равен радиусу описанной вокруг объекта сферы
  2.      box - коробка, содержащая объект полностью
  3.      convex - выпуклое тело - строится из вершин объекта, тело не содержит вогнутых частей.
  4.      concave - вогнутое тело - может содержать вогнутые части( углубления и т.п.)
  5.      static - статическое тело( масса = 0 ), используется для описания геометрии уровня.
  ·      constraint *- тип ограничителя
  1.      hinge - петля
  ·      frict - трение ( 0 - нет трения )
  ·      alpha - полупрозрачность ( от 0 до 1 )
  ·      iskill - если 1, то убивает игрока при контакте. Используется для ловушек
 
  Параметры объектов - частные параметры - ими владеют только определенные объекты
 
 
Свет.
                  Пример:
                  class = classObject; type = light; subtype=1; red=120;green=200;blue=255;range=1000;
 
  1.    red - красный цвет - от 0 до 255
  2.    green - зеленый цвет - от 0 до 255
  3.    blue - синий цвет - от 0 до 255
  4.    range - максимальная дальность освещения
  5.    subtype - всегда 1
 
 
Триггеры
  Триггер - объект выполняющий определенные действия. Выключаются при выполнении условия, совершая указанные действия. Каждый триггер выполняет какие-то указанные действия. Чтобы указать действие, нужно написать action№=actionName(actionParameters);
 
 
  Здесь:
  ·        № - номер действия( нумерация может начинаться с любого числа, но последующее действие должно иметь номер на единицу больше чем номер предыдущего действия )
  ·        actionName и actionParameters - любое действие из нижеперечисленных( в скобках параметры )
  1.      Animate( имя_анимируемого_объекта, 3, скорость_анимации, 0); -анимирует объект
  2.      Enable( имя_включаемого_триггера ); - включает триггер
  3.      Disable(имя_выключаемого_триггера); - выключает триггер
  4.      AddForce(имя_объекта,силаПо_X, силаПо_Y, силаПо_Z ); прикладывает силу к объекту
  5.      AddTorque(имя_объекта,врМ_X,врМ_Y, врМ_Z); прикладывает вращающий момент
  6.      Hide(имя_объекта);  - скрывает объект
  7.      Show(имя_объекта);  - показывает объект
  8.      Win( ); -выиграть текущую карту
 
  Пример: class=classLogic;type=trigger;subtype=distanceTrigger;target=Player;distance=20;action0=Animate( pt1, 3,1,0);
 
  Каждый триггер после выполнения действий выключается. Чтобы триггер не выключался нужно добавить параметр nodisable = 1;
 
  Изначально триггер считается включенным - чтобы его отключить нужно добавить isenabled=0;
 
  Конкретный тип триггера указывается параметромsubtype, который может принимать следующие значения:
 
  Типы.
  distanceTrigger - триггер срабатывающий при приближении target объекта на расстояние меньшее distance.
  ·        Параметры:
  1.      target - имя объекта, на приближение которого реагирует триггер
  2.      distance - расстояние до объекта при котором срабатывает триггер
  nullTrigger - триггер без условий выполнения - т.е. делает указанные действия без какого либо условия.
  ·        Параметры:
  1.      только список действий
  timeTrigger- триггер выполняет указанные действия спустя time времени
  ·        Параметры:
  1.      time - время в миллисекундах( 1 секунда = 1000 миллисекунд )
  zoneTrigger - триггер срабатывает при попадании target объекта в триггер( в редакторе триггером становится обычная коробка ( Box ) необходимых размеров )
  ·        Параметры:
  1.      target - имя объекта, на который срабатывает триггер
  keyTrigger - триггер сочетает в себе distanceTrigger, но накладывается дополнительное условие срабатывания - нажатие на определенную кнопку.

Причем справка еще не закончена, есть еще куча триггеров и параметров.

Нужно ли такое кому-нибудь?( за примерами использования можно обратиться к моим недавним "проектам" )

Mr_F_ 11.11.2012 22:07

Ответ: ProLevel
 
ты написал парсер строк с возможностями, которые именно тебе были нужны. такое по-мойму делает каждый новичок с ксорсом/блицем (да, я тоже практически то же самое делал).
нет варианта ответа - "Нет, самому проще написать чем разбираться в твоём" (забывая о годе и других движках).

mr.DIMAS 11.11.2012 22:21

Ответ: ProLevel
 
конечно "проще" написать самому, при условии что будешь потом долго и упорно отлаживать, потеряешь время - а тут уже проверенная несколькими людьми система.

FREE MAN 11.11.2012 22:26

Ответ: ProLevel
 
mr.Dimas лучше б ты написал редактор для Xors3d - толку больше было бы...
Да и людям он бы пригодился кто юзает движок.

mr.DIMAS 11.11.2012 22:30

Ответ: ProLevel
 
писать редактор в одиночку - никогда! я уже пробовал. Проще будет написать плагин для макса.

jimon 11.11.2012 22:50

Ответ: ProLevel
 
не проще ли не имя объекта юзать ? а метаданные, например как я сделал для фотошопа : http://forum.boolean.name/showthread...061#post238061

mr.DIMAS 11.11.2012 22:56

Ответ: ProLevel
 
Честно говоря я об этом не задумывался. Если не трудно, объясни подробнее. Из твоей темы я многое не понял. Где в максе можно разместить эти данные?

jimon 11.11.2012 23:38

Ответ: ProLevel
 
Цитата:

Сообщение от mr.DIMAS (Сообщение 243316)
Честно говоря я об этом не задумывался. Если не трудно, объясни подробнее. Из твоей темы я многое не понял. Где в максе можно разместить эти данные?

скажем есть абстрактный объект, в фотошопе это слой, в максе это любой объект на сцене, у такого объекта есть какие-то параметры, скажем позиция или поворот или имя, зачастую у объекта есть еще параметр user data (или metadata, или еще как-то), вот в нём можно хранить любую нужную информацию

в максе есть метаданные для всего файла :
http://docs.autodesk.com/3DSMAX/15/E...ber=d30e694761

а вот для объекта надо еще поискать

Mr_F_ 11.11.2012 23:57

Ответ: ProLevel
 
есть user defined properties у каждого объекта. токо b3dpipeline их вряд ли экспортит.

mr.DIMAS 12.11.2012 00:34

Ответ: ProLevel
 
Ну именно поэтому и использую имя объекта в качестве хранилища инфы.

Wegox 13.11.2012 02:21

Ответ: ProLevel
 
Цитата:

Сообщение от jimon (Сообщение 243315)
не проще ли не имя объекта юзать ? а метаданные, например как я сделал для фотошопа : http://forum.boolean.name/showthread...061#post238061

Не проще, проще скрипты написать в блокноте и успокоиться, но прятать от читеров скрипты в картинках тоже идея неплохая:-D

radiobutton 13.11.2012 10:54

Ответ: ProLevel
 
В синем канале цвета ? :)

pax 14.11.2012 10:49

Ответ: ProLevel
 
Имхо проще использовать дочерние объекты как контейнеры параметров, а не само имя объекта. Обозначить такие потомки например с символа # и это будет означать что это контейнер параметров для парента. Контейнеров может быть несколько для упрощения редактирования. После загрузки удалять эти чайлды.

impersonalis 15.11.2012 18:06

Ответ: ProLevel
 
Цитата:

Сообщение от pax (Сообщение 243574)
Имхо проще использовать дочерние объекты как контейнеры параметров, а не само имя объекта. Обозначить такие потомки например с символа # и это будет означать что это контейнер параметров для парента. Контейнеров может быть несколько для упрощения редактирования. После загрузки удалять эти чайлды.

да :)


Часовой пояс GMT +4, время: 00:03.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot