Создание нового нода
Материал из CryWiki Russia
(→Добавление портов Input) |
(→Добавление портов Input) |
||
Строка 138: | Строка 138: | ||
|- | |- | ||
| | | | ||
+ | '''Prefix''' | ||
+ | |||
+ | | | ||
+ | '''Property Editor Type''' | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | snd_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_SOUND | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | sound_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_SOUND | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | dialogline_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_DIALOG | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | clr_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_COLOR | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | color_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_COLOR | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | tex_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_TEXTURE | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | texture_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_TEXTURE | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | obj_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_OBJECT | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | object_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_OBJECT | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | file_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_FILE | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | text_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_LOCAL_STRING | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | equip_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_EQUIP | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | reverbpreset_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_REVERBPRESET | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | aianchor_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_AI_ANCHOR | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | aibehavior_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_AI_BEHAVIOR | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | aicharacter_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_AI_CHARACTER | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | aipfpropertieslist_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_AI_PFPROPERTIESLIST | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | aiterritory_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_AITERRITORY | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | aiwave_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_AIWAVE | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | soclass_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_SOCLASS | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | soclasses_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_SOCLASSES | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | sostate_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_SOSTATE | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | sostates_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_SOSTATES | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | sopattern_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_SOSTATEPATTERN | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | soaction_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_SOACTION | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | sohelper_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_SOHELPER | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | sonavhelper_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_SONAVHELPER | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | soanimhelper_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_SOANIMHELPER | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | soevent_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_SOEVENT | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | gametoken_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_GAMETOKEN | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | mat_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_MATERIAL | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | seq_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_SEQUENCE | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | mission_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_MISSIONOBJ | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | anim_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_USERITEMCB | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | animstate_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_USERITEMCB | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | animstateEx_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_USERITEMCB | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | bone_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_USERITEMCB | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | attachment_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_USERITEMCB | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | dialog_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_USERITEMCB | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | matparamslot_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_USERITEMCB | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | matparamname_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_USERITEMCB | ||
+ | |||
+ | |- | ||
+ | | | ||
+ | matparamcharatt_ | ||
+ | |||
+ | | | ||
+ | IVariable::DT_USERITEMCB | ||
+ | |||
+ | |} | ||
+ | |||
= <span style="font-size:medium">'''Prefix'''</span><br/> = | = <span style="font-size:medium">'''Prefix'''</span><br/> = | ||
Версия 11:57, 7 февраля 2013
|
Содержание |
Создание нового нода
Статья описывает шаги по внедрению нового нода Flowgraph.
Базовый код
Рекомендуется реализовывать ноды, принадлежащие одинаковой группе в едином cpp файле. Обычно нет необходимости в заголовке, за исключением некоторых специальных нодов. Поместите cpp файл в файл проекта CryAction/Flow System Files/Nodes и в рамках структуры директории файловой системы в Code/CryEngine/CryAction/FlowSystem/Nodes.
В cpp файле добавьте класс используя следующий шаблон кода и замените «MyName» желаемым именем вашего ФГ [сокр. Флоуграф] нода. Замените «FlowNodeGroup» желаемым именем группы и создайте соответствующую подпапку в селекторе редактора нода, где этот тип нода будет располагаться:
#include "stdafx.h" #include "FlowBaseNode.h" class CFlowNode_MyName : public CFlowBaseNode { public: CFlowNode_MyName( SActivationInfo * pActInfo ) { }; virtual void GetConfiguration( SFlowNodeConfig& config ) { static const SInputPortConfig in_config[] = { {0} }; static const SOutputPortConfig out_config[] = { {0} }; config.sDescription = _HELP( "A description of this flow node" ); config.pInputPorts = in_config; config.pOutputPorts = out_config; config.nFlags = 0; } virtual void ProcessEvent( EFlowEvent event, SActivationInfo * pActInfo ) { switch (event) { }; } }; REGISTER_FLOW_NODE("FlowNodeGroup:MyName", CFlowNode_MyName);
Добавление портов Output
ФГ ноды имеют как input (т.е. входящие ) так и output (исходящие) порты. Output порт может быть добавлен за счет изменения GetConfiguration функции, как видно на следующем примере:
class CFlowNode_MyName : public CFlowBaseNode { public: // ... virtual void GetConfiguration( SFlowNodeConfig& config ) { static const SInputPortConfig in_config[] = { {0} }; static const SOutputPortConfig out_config[] = { OutputPortConfig<int>("alertness", _HELP("useful help text")), {0} }; config.sDescription = _HELP( "A description of this flow node" ); config.pInputPorts = in_config; config.pOutputPorts = out_config; config.nFlags = 0; } // ... };
OutputPortConfig является шаблонной вспомогательной функцией, которая полезна для заполнения маленькой структуры соответствующими данными. Могут быть определены разные типы, но в примере тип порта «int». Доступны следующие типы: SFlowSystemVoid, int, float, EntityId, Vec3, string, и bool. SFlowSystemVoid - это специальный тип, который представляет собой «no value» (нет значения). OutputPortConfig принимает три параметра: имя порта output, некоторый описательный вспомогательный текст показываемый в редакторе GUI и по желанию читаемый текст имени порта, который виден и читаем для человека. Убедитесь, что вы выбрали нормальное имя для порта, т.к. смена его в дальнейшем разрушит вам все ФГ, которые используют этот нод. Если вам нужно сменить отображаемое имя, используйте третий параметр.
Чтобы передать значение из порта, вы можете использовать функцию CFlowBaseNode::ActivateOutput( pActInfo, nPort, value ). Эта функция принимает pActInfo (обычно передается в ProcessEvent()) идентификатор порта (отсчет начинается нулевым значением с верху out_config), и значение того же типа, что и порт. Поэтому чтобы активировать нашу «alertness» значением 3 мы можем написать:
ActivateOutput( pActInfo, 0, 3 );
Добавление портов Input
Порт Input может быть добавлен таким же путем, как и «Output» порт за счет изменения GetConfiguration функции:
class CFlowNode_MyName : public CFlowBaseNode { public: // ... virtual void GetConfiguration( SFlowNodeConfig& config ) { static const SInputPortConfig in_config[] = { InputPortConfig<int>("someInput", _HELP("useful help text")), {0} }; static const SOutputPortConfig out_config[] = { {0} }; config.sDescription = _HELP( "A description of this flow node" ); config.pInputPorts = in_config; config.pOutputPorts = out_config; config.nFlags = 0; } // ... };
InputPortConfig такая же шаблонная вспомогательная функция как и OutputPortConfig.
Такие же типы как и для output портов могут быть определены и для input портов. InputPortConfig принимает три или четыре параметра:
- имя input порта, описание порта и читаемое человеком имя порта.
- имя input порта, дефолтное значение порта во время создания нового нода, описание порта и читаемое человеком имя порта.
Снова рекомендуется выбирать имя порта правильно, т.к. смена его позднее сломает ФГ, использующие этот нод. Важно: не используйте символ нижнего подчеркивания «_» в именах портов за исключением случая, когда вы хотите указать, что некоторый определенный редактор свойств должен быть использован. Следующие префиксы в именах входных портов признаются и могут быть использованы:
Prefix |
Property Editor Type |
snd_ |
IVariable::DT_SOUND |
sound_ |
IVariable::DT_SOUND |
dialogline_ |
IVariable::DT_DIALOG |
clr_ |
IVariable::DT_COLOR |
color_ |
IVariable::DT_COLOR |
tex_ |
IVariable::DT_TEXTURE |
texture_ |
IVariable::DT_TEXTURE |
obj_ |
IVariable::DT_OBJECT |
object_ |
IVariable::DT_OBJECT |
file_ |
IVariable::DT_FILE |
text_ |
IVariable::DT_LOCAL_STRING |
equip_ |
IVariable::DT_EQUIP |
reverbpreset_ |
IVariable::DT_REVERBPRESET |
aianchor_ |
IVariable::DT_AI_ANCHOR |
aibehavior_ |
IVariable::DT_AI_BEHAVIOR |
aicharacter_ |
IVariable::DT_AI_CHARACTER |
aipfpropertieslist_ |
IVariable::DT_AI_PFPROPERTIESLIST |
aiterritory_ |
IVariable::DT_AITERRITORY |
aiwave_ |
IVariable::DT_AIWAVE |
soclass_ |
IVariable::DT_SOCLASS |
soclasses_ |
IVariable::DT_SOCLASSES |
sostate_ |
IVariable::DT_SOSTATE |
sostates_ |
IVariable::DT_SOSTATES |
sopattern_ |
IVariable::DT_SOSTATEPATTERN |
soaction_ |
IVariable::DT_SOACTION |
sohelper_ |
IVariable::DT_SOHELPER |
sonavhelper_ |
IVariable::DT_SONAVHELPER |
soanimhelper_ |
IVariable::DT_SOANIMHELPER |
soevent_ |
IVariable::DT_SOEVENT |
gametoken_ |
IVariable::DT_GAMETOKEN |
mat_ |
IVariable::DT_MATERIAL |
seq_ |
IVariable::DT_SEQUENCE |
mission_ |
IVariable::DT_MISSIONOBJ |
anim_ |
IVariable::DT_USERITEMCB |
animstate_ |
IVariable::DT_USERITEMCB |
animstateEx_ |
IVariable::DT_USERITEMCB |
bone_ |
IVariable::DT_USERITEMCB |
attachment_ |
IVariable::DT_USERITEMCB |
dialog_ |
IVariable::DT_USERITEMCB |
matparamslot_ |
IVariable::DT_USERITEMCB |
matparamname_ |
IVariable::DT_USERITEMCB |
matparamcharatt_ |
IVariable::DT_USERITEMCB |
Prefix
|
Property Editor Type
|- | snd_
| IVariable::DT_SOUND
|- | sound_
| IVariable::DT_SOUND
|- | dialogline_
| IVariable::DT_DIALOG
|- | clr_
| IVariable::DT_COLOR
|- | color_
| IVariable::DT_COLOR
|- | tex_
| IVariable::DT_TEXTURE
|- | texture_
| IVariable::DT_TEXTURE
|- | obj_
| IVariable::DT_OBJECT
|- | object_
| IVariable::DT_OBJECT
|- | file_
| IVariable::DT_FILE
|- | text_
| IVariable::DT_LOCAL_STRING
|- | equip_
| IVariable::DT_EQUIP
|- | reverbpreset_
| IVariable::DT_REVERBPRESET
|- | aianchor_
| IVariable::DT_AI_ANCHOR
|- | aibehavior_
| IVariable::DT_AI_BEHAVIOR
|- | aicharacter_
| IVariable::DT_AI_CHARACTER
|- | aipfpropertieslist_
| IVariable::DT_AI_PFPROPERTIESLIST
|- | aiterritory_
| IVariable::DT_AITERRITORY
|- | aiwave_
| IVariable::DT_AIWAVE
|- | soclass_
| IVariable::DT_SOCLASS
|- | soclasses_
| IVariable::DT_SOCLASSES
|- | sostate_
| IVariable::DT_SOSTATE
|- | sostates_
| IVariable::DT_SOSTATES
|- | sopattern_
| IVariable::DT_SOSTATEPATTERN
|- | soaction_
| IVariable::DT_SOACTION
|- | sohelper_
| IVariable::DT_SOHELPER
|- | sonavhelper_
| IVariable::DT_SONAVHELPER
|- | soanimhelper_
| IVariable::DT_SOANIMHELPER
|- | soevent_
| IVariable::DT_SOEVENT
|- | gametoken_
| IVariable::DT_GAMETOKEN
|- | mat_
| IVariable::DT_MATERIAL
|- | seq_
| IVariable::DT_SEQUENCE
|- | mission_
| IVariable::DT_MISSIONOBJ
|- | anim_
| IVariable::DT_USERITEMCB
|- | animstate_
| IVariable::DT_USERITEMCB
|- | animstateEx_
| IVariable::DT_USERITEMCB
|- | bone_
| IVariable::DT_USERITEMCB
|- | attachment_
| IVariable::DT_USERITEMCB
|- | dialog_
| IVariable::DT_USERITEMCB
|- | matparamslot_
| IVariable::DT_USERITEMCB
|- | matparamname_
| IVariable::DT_USERITEMCB
|- | matparamcharatt_
| IVariable::DT_USERITEMCB
|}