Skip to content

Key Inheritance

Andrey Ekimov edited this page Mar 9, 2020 · 9 revisions

Наследование ключей, переопределение и удаление наследованных ключей и значений.

1. Именование ключей и написание путей к нужному ключу

2. Установка строкового имени ключу массива. #Name

3. Вставка уже написанного ключа. #Insert

4. Дополнение вставленного ключа. +

5. Удаление ненужного ключа #Delete

6. Замена ключа ^

7. Вставка из другого файла

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.

Установка строкового имени ключу массива. #Name

Чтобы путь "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.

Вставка уже написанного ключа. #Insert

У всех трех объектов выше одинаковые параметры движения. Два нижних могут вставить себе эти параметры определенные у первого объекта.

#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

Удаление ненужного ключа #Delete

Вставленный ключ может содержать ненужные подключи и данные. Их можно удалить.

#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