Создание нового нода

Материал из CryWiki Russia

(Различия между версиями)
Перейти к: навигация, поиск
(Добавление портов Input)
Строка 142: Строка 142:
|  
|  
'''Property Editor Type'''
'''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-family:arial,helvetica,sans-serif"><span style="font-size: medium">'''Property Editor Type'''</span></span><br/> =
 
|-
|-

Версия 12:11, 7 февраля 2013

Эта страница страница помечена как находящиеся в процессе перевода с: 13 января 2013.


О статье
ПереводчикAndreyFilantrop
СложностьСредняя
ТребованияMicrosoft Visual Studio 2010
Дата добавления13/01/13



Содержание

Создание нового нода

Статья описывает шаги по внедрению нового нода 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