Example #1
0
void CFlowGraphModule::CancelInstance(TModuleInstanceId instanceId)
{
	// Find the instance, and request cancel
	TInstanceList::iterator i   = m_instances.begin();
	TInstanceList::iterator end = m_instances.end();
	for (; i != end; ++i)
	{
		if (i->instanceId == instanceId)
		{
			IFlowGraph* pGraph = i->pGraph;
			if (pGraph)
			{
				IFlowNodeIteratorPtr pNodeIter = pGraph->CreateNodeIterator();
				if (pNodeIter)
				{
					TFlowNodeId    id = InvalidFlowNodeId;
					IFlowNodeData* pData;
					while (pData = pNodeIter->Next(id))
					{
						// Check if its the starting node
						if (m_startNodeTypeId == pData->GetNodeTypeId())
						{
							CFlowModuleStartNode* pNode = (CFlowModuleStartNode*)pData->GetNode();
							pNode->OnCancel();

							break;
						}
					}
				}
			}

			break;
		}
	}
}
Example #2
0
void CFlowGraphModule::ActivateGraph(IFlowGraph* pGraph, TModuleInstanceId instanceId, TModuleParams const &params) const
{
	if (pGraph)
	{
		IFlowNodeIteratorPtr pNodeIter = pGraph->CreateNodeIterator();
		if (pNodeIter)
		{
			TFlowNodeId    id = InvalidFlowNodeId;
			IFlowNodeData* pData;
			while (pData = pNodeIter->Next(id))
			{
				// Check if its the starting node
				if (m_startNodeTypeId == pData->GetNodeTypeId())
				{
					CFlowModuleStartNode* pNode = (CFlowModuleStartNode*)pData->GetNode();
					pNode->OnActivate(params);
				}

				// Check if its the returning node
				if (m_returnNodeTypeId == pData->GetNodeTypeId())
				{
					CFlowModuleReturnNode* pNode = (CFlowModuleReturnNode*)pData->GetNode();
					pNode->SetModuleId(m_Id, instanceId);
				}
			}
		}
	}
}
Example #3
0
void CMonoFlowNode::ProcessEvent(EFlowEvent event, SActivationInfo *pActInfo)
{	
	m_pActInfo = pActInfo;

	if(m_pHookedGraph && m_pScript != nullptr)
	{
		m_pHookedGraph->UnregisterHook(this);
		m_pHookedGraph = nullptr;
	}

	switch(event)
	{
	case eFE_Activate:
		{
			IFlowNodeData *pNodeData = pActInfo->pGraph->GetNodeData(pActInfo->myID);
			if(!pNodeData)
				return;

			int numInputPorts = pNodeData->GetNumInputPorts();
			if(m_flags & EFLN_TARGET_ENTITY)
				numInputPorts--; // last input is the entity port.

			for(int i = 0; i < numInputPorts; i++)
			{
				if(IsPortActive(i))
				{
					switch(GetPortType(pActInfo, i))
					{
					case eFDT_Void:
						m_pScript->CallMethod("OnPortActivated", i);
						break;
					case eFDT_Int:
						m_pScript->CallMethod("OnPortActivated", i, CFlowBaseNodeInternal::GetPortInt(pActInfo, i));
						break;
					case eFDT_Float:
						m_pScript->CallMethod("OnPortActivated", i, CFlowBaseNodeInternal::GetPortFloat(pActInfo, i));
						break;
					case eFDT_EntityId:
						m_pScript->CallMethod("OnPortActivated", i, CFlowBaseNodeInternal::GetPortEntityId(pActInfo, i));
						break;
					case eFDT_Vec3:
						m_pScript->CallMethod("OnPortActivated", i, CFlowBaseNodeInternal::GetPortVec3(pActInfo, i));
						break;
					case eFDT_String:
						m_pScript->CallMethod("OnPortActivated", i, CFlowBaseNodeInternal::GetPortString(pActInfo, i));
						break;
					case eFDT_Bool:
						m_pScript->CallMethod("OnPortActivated", i, CFlowBaseNodeInternal::GetPortBool(pActInfo, i));
						break;
					default:
						break;
					}
				}
			}

		}
		break;
	case eFE_Initialize:
		m_pScript->CallMethod("OnInit");
		break;
	case eFE_SetEntityId:
		{
			if(pActInfo->pEntity)
			{
				IMonoArray *pParams = CreateMonoArray(2);
				pParams->InsertNativePointer(pActInfo->pEntity);
				pParams->Insert(pActInfo->pEntity->GetId());

				m_pScript->GetClass()->GetMethod("InternalSetTargetEntity", 2)->InvokeArray(m_pScript->GetManagedObject(), pParams);
				pParams->Release();
			}
		}
		break;
	case eFE_Update:
		m_pScript->CallMethod("OnNodeUpdate");
		break;
	}
}
Example #4
0
void CFlowNode::ProcessEvent(EFlowEvent event, SActivationInfo *pActInfo)
{	
	m_pActInfo = pActInfo;

	if(m_pHookedGraph && m_pScript != nullptr)
	{
		m_pHookedGraph->UnregisterHook(this);
		m_pHookedGraph = nullptr;
	}

	switch(event)
	{
	case eFE_Activate:
		{
			IFlowNodeData *pNodeData = pActInfo->pGraph->GetNodeData(pActInfo->myID);
			if(!pNodeData)
				return;

			for(int i = 0; i < pNodeData->GetNumInputPorts(); i++)
			{
				if(IsPortActive(i))
				{
					switch(GetPortType(pActInfo, i))
					{
					case eFDT_Void:
						m_pScript->CallMethod("OnPortActivated", i);
						break;
					case eFDT_Int:
						m_pScript->CallMethod("OnPortActivated", i, CFlowBaseNodeInternal::GetPortInt(pActInfo, i));
						break;
					case eFDT_Float:
						m_pScript->CallMethod("OnPortActivated", i, CFlowBaseNodeInternal::GetPortFloat(pActInfo, i));
						break;
					case eFDT_EntityId:
						m_pScript->CallMethod("OnPortActivated", i, CFlowBaseNodeInternal::GetPortEntityId(pActInfo, i));
						break;
					case eFDT_Vec3:
						m_pScript->CallMethod("OnPortActivated", i, CFlowBaseNodeInternal::GetPortVec3(pActInfo, i));
						break;
					case eFDT_String:
						m_pScript->CallMethod("OnPortActivated", i, CFlowBaseNodeInternal::GetPortString(pActInfo, i));
						break;
					case eFDT_Bool:
						m_pScript->CallMethod("OnPortActivated", i, CFlowBaseNodeInternal::GetPortBool(pActInfo, i));
						break;
					default:
						break;
					}
				}
			}

		}
		break;
	case eFE_Initialize:
		m_pScript->CallMethod("OnInit");
		break;
	/*case eFE_SetEntityId:
		{
			if(m_pNodeType->IsEntityNode())
			{
				IMonoScript *pEntityScript = nullptr;
				EntityId entId = pActInfo->pGraph->GetEntityId(pActInfo->myID);
				if(pActInfo && entId)
				{
					if(IGameObject *pGameObject = gEnv->pGameFramework->GetGameObject(entId))
					{
						if(CEntity *pEntity = static_cast<CEntity *>(pGameObject->QueryExtension("MonoEntity")))
						{
							SAFE_RELEASE(m_pScript);

							m_pScript = pEntity->GetScript();
						}
					}
				}
			}
		}
		break;*/
	}
}