void UK2Node_Knot::NotifyPinConnectionListChanged(UEdGraphPin* Pin) { const UEdGraphSchema_K2* K2Schema = GetDefault<UEdGraphSchema_K2>(); UEdGraphPin* MyInputPin = GetInputPin(); UEdGraphPin* MyOutputPin = GetOutputPin(); const int32 NumLinks = MyInputPin->LinkedTo.Num() + MyOutputPin->LinkedTo.Num(); if (Pin->LinkedTo.Num() > 0) { // Just made a connection, was it the first? if (NumLinks == 1) { UEdGraphPin* TypeSource = Pin->LinkedTo[0]; MyInputPin->PinType = TypeSource->PinType; MyOutputPin->PinType = TypeSource->PinType; } } else { // Just broke a connection, was it the last? if (NumLinks == 0) { // Revert to wildcard MyInputPin->BreakAllPinLinks(); MyInputPin->PinType.ResetToDefaults(); MyInputPin->PinType.PinCategory = K2Schema->PC_Wildcard; MyOutputPin->BreakAllPinLinks(); MyOutputPin->PinType.ResetToDefaults(); MyOutputPin->PinType.PinCategory = K2Schema->PC_Wildcard; } } }
void UK2Node_CommutativeAssociativeBinaryOperator::ExpandNode(FKismetCompilerContext& CompilerContext, UEdGraph* SourceGraph) { Super::ExpandNode(CompilerContext, SourceGraph); if (NumAdditionalInputs > 0) { const UEdGraphSchema_K2* Schema = CompilerContext.GetSchema(); UEdGraphPin* LastOutPin = NULL; const UFunction* const Function = GetTargetFunction(); const UEdGraphPin* SrcOutPin = FindOutPin(); const UEdGraphPin* SrcSelfPin = FindSelfPin(); UEdGraphPin* SrcFirstInput = GetInputPin(0); check(SrcFirstInput); for(int32 PinIndex = 0; PinIndex < Pins.Num(); PinIndex++) { UEdGraphPin* CurrentPin = Pins[PinIndex]; if( (CurrentPin == SrcFirstInput) || (CurrentPin == SrcOutPin) || (SrcSelfPin == CurrentPin) ) { continue; } UK2Node_CommutativeAssociativeBinaryOperator* NewOperator = SourceGraph->CreateBlankNode<UK2Node_CommutativeAssociativeBinaryOperator>(); NewOperator->SetFromFunction(Function); NewOperator->AllocateDefaultPins(); CompilerContext.MessageLog.NotifyIntermediateObjectCreation(NewOperator, this); UEdGraphPin* NewOperatorInputA = NewOperator->GetInputPin(0); check(NewOperatorInputA); if(LastOutPin) { Schema->TryCreateConnection(LastOutPin, NewOperatorInputA); } else { // handle first created node (SrcFirstInput is skipped, and has no own node). CompilerContext.MovePinLinksToIntermediate(*SrcFirstInput, *NewOperatorInputA); } UEdGraphPin* NewOperatorInputB = NewOperator->GetInputPin(1); check(NewOperatorInputB); CompilerContext.MovePinLinksToIntermediate(*CurrentPin, *NewOperatorInputB); LastOutPin = NewOperator->FindOutPin(); check(LastOutPin); } UEdGraphPin* TrueOutPin = FindOutPin(); check(TrueOutPin); CompilerContext.MovePinLinksToIntermediate(*TrueOutPin, *LastOutPin); BreakAllNodeLinks(); } }
/// 打开 BOOL CAudioPlayer::Open(void) { BOOL bResult = FALSE; do { // 创建GraphBuilder if(!CreateGraphBuilder()) break; HRESULT hr = NOERROR; if(FAILED(m_pGraphBulider->QueryInterface(IID_IBasicAudio, (void **)&m_pBasicAudio))) break; // 创建AudioCaptreu m_pAudioCapture = new CAudioCapture(NULL, &hr); if(NULL == m_pAudioCapture) break; m_pAudioCapture->AddRef(); if (FAILED(m_pGraphBulider->AddFilter(m_pAudioCapture, L"Audio Capture"))) break; // 设置音频信息 if(!SetAudioFormat(m_enFrequency, m_enChannel, m_enSample)) break; // 创建AudioReander hr = CoCreateInstance(CLSID_DSoundRender, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void **)&m_pAudioRender); if (FAILED(hr)) break; if (FAILED(m_pGraphBulider->AddFilter(m_pAudioRender, L"Audio Renderer"))) break; // 连接Filter IPin* pOutPin = GetOutputPin(m_pAudioCapture, (uint16_t)0); IPin* pInPin = GetInputPin(m_pAudioRender, (uint16_t)0); hr = m_pGraphBulider->Connect(pOutPin, pInPin); SAFE_RELEASE(pOutPin); SAFE_RELEASE(pInPin); if(FAILED(hr)) { WCHAR szError[256] = {0}; AMGetErrorText(hr, szError, 256); break; } bResult = TRUE; }while(FALSE); if(!bResult) Close(); return bResult; }
void UK2Node_Knot::ExpandNode(class FKismetCompilerContext& CompilerContext, UEdGraph* SourceGraph) { Super::ExpandNode(CompilerContext, SourceGraph); const UEdGraphSchema_K2* K2Schema = GetDefault<UEdGraphSchema_K2>(); UEdGraphPin* MyInputPin = GetInputPin(); UEdGraphPin* MyOutputPin = GetOutputPin(); K2Schema->CombineTwoPinNetsAndRemoveOldPins(MyInputPin, MyOutputPin); }
void UAnimStateNode::AutowireNewNode(UEdGraphPin* FromPin) { Super::AutowireNewNode(FromPin); //@TODO: If the FromPin is a state, create a transition between us if (FromPin != NULL) { if (GetSchema()->TryCreateConnection(FromPin, GetInputPin())) { FromPin->GetOwningNode()->NodeConnectionListChanged(); } } }
void UBehaviorTreeGraphNode::AutowireNewNode(UEdGraphPin* FromPin) { Super::AutowireNewNode(FromPin); if (FromPin != nullptr) { UEdGraphPin* OutputPin = GetOutputPin(); if (GetSchema()->TryCreateConnection(FromPin, GetInputPin())) { FromPin->GetOwningNode()->NodeConnectionListChanged(); } else if(OutputPin != nullptr && GetSchema()->TryCreateConnection(OutputPin, FromPin)) { NodeConnectionListChanged(); } } }
void UK2Node_Knot::PostReconstructNode() { UEdGraphPin* MyInputPin = GetInputPin(); UEdGraphPin* MyOutputPin = GetOutputPin(); // Find a pin that has connections to use to jumpstart the wildcard process for (int32 PinIndex = 0; PinIndex < Pins.Num(); ++PinIndex) { if (Pins[PinIndex]->LinkedTo.Num() > 0) { // The pin is linked, continue to use its type as the type for all pins. UEdGraphPin* TypeSource = Pins[PinIndex]->LinkedTo[0]; MyInputPin->PinType = TypeSource->PinType; MyOutputPin->PinType = TypeSource->PinType; break; } } }
void UBehaviorTreeDecoratorGraphNode::AutowireNewNode(UEdGraphPin* FromPin) { Super::AutowireNewNode(FromPin); if (FromPin != NULL) { if (GetSchema()->TryCreateConnection(FromPin, FromPin->Direction == EGPD_Input ? GetOutputPin() : GetInputPin())) { FromPin->GetOwningNode()->NodeConnectionListChanged(); } } }
/// 打开音频采集设备 BOOL CAudioCapture::Open(ICaptureEvent* pCaptureEvent, const TCHAR* szDeviceName) { ASSERT(pCaptureEvent); // 参数检查 if(NULL == pCaptureEvent) return FALSE; BOOL bResult = FALSE; do { // 创建GraphBuilder if(!CreateGraphBuilder()) break; // 创建CaptureGraphBuilder HRESULT hr = CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC_SERVER, IID_ICaptureGraphBuilder2, (void**)&m_pCGBuilder); if(FAILED(hr)) { break; } hr = m_pCGBuilder->SetFiltergraph(m_pGraphBulider); if(FAILED(hr)) { break; } // 创建视频采集设备 m_pCaptureFilter = CreateCaptureFiler(szDeviceName); if(NULL == m_pCaptureFilter) break; if (FAILED(m_pGraphBulider->AddFilter(m_pCaptureFilter, L"Audio Capture"))) break; // 设置视频信息 if(!SetAudioFormat(m_enFrequency, m_enChannel, m_enSample)) break; // 创建Read Filter m_pAudioReander = new CAudioRenderer(NULL, &hr); if(NULL == m_pAudioReander) break; m_pAudioReander->AddRef(); m_pAudioReander->SetCaptureEvent(pCaptureEvent); if (FAILED(m_pGraphBulider->AddFilter(m_pAudioReander, L"Audio Render"))) break; // 连接Filter IPin* pOutPin = GetOutputPin(m_pCaptureFilter, (uint16_t)0); IPin* pInPin = GetInputPin(m_pAudioReander, (uint16_t)0); hr = m_pGraphBulider->Connect(pOutPin, pInPin); //AM_MEDIA_TYPE mt; //pOutPin->ConnectionMediaType(&mt); //WAVEFORMATEX* pWF = (WAVEFORMATEX *) mt.pbFormat; SAFE_RELEASE(pOutPin); SAFE_RELEASE(pInPin); if(FAILED(hr)) break; bResult = TRUE; }while(FALSE); if(!bResult) Close(); return bResult; }