-
Notifications
You must be signed in to change notification settings - Fork 0
Key Inheritance
1. Именование ключей и написание путей к нужному ключу
2. Установка строкового имени ключу массива. #Name
3. Вставка уже написанного ключа. #Insert
4. Дополнение вставленного ключа. +
5. Удаление ненужного ключа #Delete
8. Замена значений в во всех подключах
Key1:
Key11: Value11
Key12: Value12
Это простые ключи и их имена: Key1, Key11, Key12. Соотвественно и пути будут перечислением имен с разделением через симовол '/'. Например: Key1/Key12 - до ключа Key12.
Особенности возникают когда у нас описание массива объектов.
Unit: Swordman
MovingParams:
Walk: 10
Run: 15
AngleSpeed: 25
Weapon: Sword
--
Unit: Axeman
MovingParams:
Walk: 10
Run: 15
AngleSpeed: 25
Weapon: Axe
--
Unit: Spearman
MovingParams:
Walk: 10
Run: 15
AngleSpeed: 25
Weapon: Spear
Каждый объект, элемент массива, тоже ключ, но его именем является индекс в этом массиве. Описание объекта Swordman находится в ключе с именем 0, Axeman - 1 и т.д.
Поэтому если нам надо написать путь к угловой скорости Axeman (MovingParams) путь будет такой: 1/MovingParams/AngleSpeed.
Чтобы путь "1/MovingParams/AngleSpeed" был более понятным нам необходимо заменить имя 1 на что-то более привлекательное. Применим команду #Name.
#Name Swordman
Unit: Swordman
MovingParams:
Walk: 10
Run: 15
AngleSpeed: 25
Weapon: Sword
--
#Name Axeman
Unit: Axeman
MovingParams:
Walk: 10
Run: 15
AngleSpeed: 25
Weapon: Axe
--
#Name Spearman
Unit: Spearman
MovingParams:
Walk: 10
Run: 15
AngleSpeed: 25
Weapon: Spear
Теперь путь будет: Axeman/MovingParams/AngleSpeed.
У всех трех объектов выше одинаковые параметры движения. Два нижних могут вставить себе эти параметры определенные у первого объекта.
#Name Swordman
Unit: Swordman
MovingParams:
Walk: 10
Run: 15
AngleSpeed: 25
Weapon: Sword
--
#Name Axeman
Unit: Axeman
MovingParams:
#Insert key: Swordman/MovingParams //первый способ - вставляется только содержимое ключа (его детские ключи)
Weapon: Axe
--
#Name Spearman
Unit: Spearman
#Insert key: Swordman/MovingParams add_key //второй - сам ключ с содержимым
Weapon: Spear
Особенность: в этой команде есть второй ключ "insert_in_parent", который заставляет вставлять не в текущий ключ, а в его родителя (уровень выше). Так удобно вставлять записи как элементы массива. Вот пример, в котором ключ-массив набивается элементами:
BehaviorDescrs:
--
#insert file:New_Passengers/States_1_Waiting.cscdt key:Waiting_Companion_VIP insert_in_parent
#insert file:New_Passengers/States_3_Embarking.cscdt key:Embarking_Standard insert_in_parent
#insert file:New_Passengers/States_4_Fly.cscdt key:Fly_Quest insert_in_parent
#insert file:New_Passengers/States_5_Talk_To_Exit.cscdt key:Talk_To_Exit_Quest insert_in_parent
#insert file:New_Passengers/States_6_Disembarking.cscdt key:Disembarking_Canyon_Researcher insert_in_parent
#insert file:New_Passengers/Behavior_Stuck_Crashed.cscdt key:Crash_Stuck_Standard insert_in_parent
Иногда надо дополнить значение вставленного ключа или дописать ему подключ со своими значениями.
Особенность: После знака + идет имя ключа, которое будет искаться в уже существующих ключах. Дальше, если не написано + в подключах, они будут добавляться с проверкой на уникальность, т.е. таких ключей с таким именем быть не должно
#Name Swordman
Unit: Swordman
MovingParams:
Walk: 10
Run: 15
AngleSpeed: 25
Weapon: Sword
--
Unit: Axeman
#Insert key: Swordman/MovingParams add_key
+MovingParams: //дополняем вставленный ключ MovingParams подключом Size
Size: 8
Weapon: Axe
--
Unit: Spearman
MovingParams: //у Axeman будет также
Walk: 10
Run: 15
AngleSpeed: 25
Size: 8
Weapon: Spear
Вставленный ключ может содержать ненужные подключи и данные. Их можно удалить.
#Name Swordman
Unit: Swordman
MovingParams:
Walk: 10
Run: 15
AngleSpeed: 25
Weapon: Sword
--
Unit: Axeman
#Insert key: Swordman/MovingParams add_key
#Delete MovingParams/Run //удаляем ключ
Weapon: Axe
--
Unit: Spearman
MovingParams: //у Axeman будет также
Walk: 10
AngleSpeed: 25
Weapon: Spear
Замена это убирание ненужного и вставка нужного (#Delete; +), но можно это сделать одной записью.
Особенность: После знака ^ идет имя ключа, которое будет искаться в уже существующих ключах. Дальше, даже если не написано ^ в подключах, они будут свои имена с попыткой заменить и там. Это принципиальное отличие от добавления ключей (+)
#Name Swordman
Unit: Swordman
MovingParams:
Walk: 10
Run: 15
AngleSpeed: 25
Weapon: Sword
--
Unit: Axeman
#Insert key: Swordman/MovingParams add_key
^MovingParams: //Замена ключа
Run: 25
Weapon: Axe
--
Unit: Spearman
MovingParams: //у Axeman будет также
Walk: 10
AngleSpeed: 25
Run: 25
Weapon: Spear
Например в другом файле (MyTemplates.cscd - имя произвольное) лежат шаблоны для использовани и мы собираемся их использовать.
Команда дополняется параметром "file".
#Insert file:MyTemplates.cscd key: Swordman/MovingParams add_key
Предположим есть большое описание где много раз используется одно и тоже значение. Имя города, имя персонажа и т.д. А в поределенном объекте мы его хотим заменить на свое. Менять все ключи это много текста и не факт что в шаблон не допишут еще одно использование этого значения. Гораздо проще заменить именно это значение везде где оно встречается от текущего ключа и во всех его подключах.
#Name Swordman
Unit: Swordman
City: Athens
MovingParams:
Walk: 10
Run: 15
AngleSpeed: 25
Target: Athens
Weapon: Sword
--
#Insert key: Swordman //взяли все из Swordman
^Unit: Axeman //сменили имя
^Weapon: Axe //сменили оружие
#ChangeValue Athens: Sparta //сменили имя города везде
--
Unit: Spearman //Axeman тоже из Спарты как и Spearman
City: Sparta
MovingParams:
Walk: 10
AngleSpeed: 25
Run: 25
Target: Sparta
Weapon: Spear