Пример #1
0
        public CExplicitCastNode()
        {
            CExecutionPin execute = new CExecutionPin()
            {
                Name       = "In",
                TargetNode = null
            };

            InExecutionPins.Add(execute);

            CExecutionPin success = new CExecutionPin()
            {
                Name       = "Succeeded",
                TargetNode = null
            };

            CExecutionPin failed = new CExecutionPin()
            {
                Name       = "Failed",
                TargetNode = null
            };

            OutExecutionPins.Add(success);
            OutExecutionPins.Add(failed);
        }
        public CExecuteInterfaceFunctionNode(CKlaxScriptInterfaceFunction targetFunction)
        {
            TargetFunctionGuid = targetFunction.Guid;

            Name = targetFunction.Name;

            CExecutionPin inPin = new CExecutionPin("In");

            InExecutionPins.Add(inPin);

            CExecutionPin execPin = new CExecutionPin("Next");

            OutExecutionPins.Add(execPin);

            CInputPin targetInput = new CInputPin("Target", typeof(CEntity));

            InputPins.Add(targetInput);

            foreach (var inputParameter in targetFunction.InputParameters)
            {
                CInputPin input = new CInputPin(inputParameter.Name, inputParameter.Type);
                InputPins.Add(input);
            }

            foreach (var returnParameter in targetFunction.OutputParameters)
            {
                COutputPin output = new COutputPin(returnParameter.Name, returnParameter.Type);
                OutputPins.Add(output);
            }
        }
        public CExecuteCustomFunctionNode(CCustomFunctionGraph functionGraph)
        {
            TargetFunctionGuid = functionGraph.Guid;

            Name = functionGraph.Name;

            CExecutionPin inPin = new CExecutionPin("In");

            InExecutionPins.Add(inPin);

            CExecutionPin execPin = new CExecutionPin("Next");

            OutExecutionPins.Add(execPin);

            foreach (var inputParameter in functionGraph.InputParameters)
            {
                CInputPin input = new CInputPin(inputParameter.Name, inputParameter.Type);
                InputPins.Add(input);
            }

            foreach (var returnParameter in functionGraph.OutputParameters)
            {
                COutputPin output = new COutputPin(returnParameter.Name, returnParameter.Type);
                OutputPins.Add(output);
            }
        }
Пример #4
0
        private void ResolveScriptNodeConnections(IEnumerable <CNode> nodes, Dictionary <CNode, CScriptNodeViewmodel> nodeToViewModel)
        {
            foreach (CNode graphNode in nodes)
            {
                CScriptNodeViewmodel sourceViewModel = nodeToViewModel[graphNode];
                for (int i = 0; i < graphNode.OutExecutionPins.Count; i++)
                {
                    CExecutionPin inExecutionPin = graphNode.OutExecutionPins[i];
                    if (inExecutionPin.TargetNode == null)
                    {
                        continue;
                    }

                    CScriptNodeViewmodel targetViewModel = nodeToViewModel[inExecutionPin.TargetNode];
                    if (targetViewModel.InExecutionPins.Count > 0)
                    {
                        CNodeConnectionViewModel newConnection = new CNodeConnectionViewModel(sourceViewModel.OutExecutionPins[i], targetViewModel.InExecutionPins[inExecutionPin.TargetPinIndex], this);
                        newConnection.Connect();
                    }
                    else
                    {
                        inExecutionPin.TargetNode = null;
                        LogUtility.Log("[ScriptLoadError] node {0} tried to connect to {1} but the target does not have an in execution pin", sourceViewModel.Name, targetViewModel.Name);
                    }
                }

                for (int i = 0; i < graphNode.InputPins.Count; i++)
                {
                    CInputPin inputPin = graphNode.InputPins[i];
                    if (inputPin.SourceNode == null)
                    {
                        continue;
                    }

                    CScriptNodeViewmodel inputSourceVm = nodeToViewModel[inputPin.SourceNode];
                    if (inputSourceVm.OutputPins.Count > inputPin.SourceParameterIndex)
                    {
                        COutputPinViewModel sourcePinVM = inputSourceVm.OutputPins[inputPin.SourceParameterIndex];
                        if (inputPin.Type.IsAssignableFrom(sourcePinVM.ValueType))
                        {
                            CNodeConnectionViewModel newConnection = new CNodeConnectionViewModel(sourcePinVM, sourceViewModel.InputPins[i], this);
                            newConnection.Connect();
                        }
                        else
                        {
                            inputPin.SourceNode           = null;
                            inputPin.SourceParameterIndex = -1;
                            LogUtility.Log("[ScriptLoadWarning] Node {0} tried to connect to {1} at output pin index {2} but the pin types are not compatible, connection removed", sourceViewModel.Name, inputSourceVm.Name, inputPin.SourceParameterIndex);
                        }
                    }
                    else
                    {
                        inputPin.SourceNode           = null;
                        inputPin.SourceParameterIndex = -1;
                        LogUtility.Log("[ScriptLoadError] node {0} tried to connect to {1} at output pin index {2} but there are not enough pins", sourceViewModel.Name, inputSourceVm.Name, inputPin.SourceParameterIndex);
                    }
                }
            }
        }
Пример #5
0
 public CExecutionPinViewModel(CExecutionPin executionPin, CScriptNodeViewmodel nodeViewModel, int pinIndex, bool isIn) : base(nodeViewModel, pinIndex)
 {
     m_pin      = executionPin;
     Name       = executionPin.Name;
     Tooltip    = "Execution Path";
     m_pinColor = PinColorHelpers.GetExecutionPinColor();
     IsIn       = isIn;
 }
 private CExecutionPinViewModel GetOutExecutionPinViewModel(CExecutionPin pin, int pinIndex)
 {
     if (pin is CSwitchExecutionPin switchPin)
     {
         return(new CSwitchExecutionPinViewModel(pin, this, pinIndex, false, switchPin.Type, switchPin.Value));
     }
     else
     {
         return(new CExecutionPinViewModel(pin, this, pinIndex, false));
     }
 }
Пример #7
0
        public CSetKlaxVariableNode()
        {
            IsImplicit = true;

            CExecutionPin inPin = new CExecutionPin("In");

            InExecutionPins.Add(inPin);

            CExecutionPin outPin = new CExecutionPin("Out");

            OutExecutionPins.Add(outPin);
        }
Пример #8
0
        public CReceiveEventNode()
        {
            CExecutionPin invokedPin = new CExecutionPin()
            {
                Name            = "Out",
                TargetNode      = null,
                TargetNodeIndex = -1,
            };

            OutExecutionPins.Add(invokedPin);

            AllowCopy   = false;
            AllowDelete = false;
        }
Пример #9
0
        public CReceiveEventNode(CKlaxScriptEventInfo targetKlaxEvent)
        {
            CExecutionPin invokedPin = new CExecutionPin()
            {
                Name            = "Out",
                TargetNode      = null,
                TargetNodeIndex = -1,
            };

            OutExecutionPins.Add(invokedPin);
            TargetKlaxEvent = targetKlaxEvent;

            AllowCopy   = false;
            AllowDelete = false;
        }
Пример #10
0
        public CFunctionGraphEntryNode(List <CKlaxVariable> inputParameters)
        {
            AllowDelete = false;
            AllowCopy   = false;

            Name = "Entry";

            CExecutionPin execPin = new CExecutionPin("Next");

            OutExecutionPins.Add(execPin);

            foreach (var inputParameter in inputParameters)
            {
                COutputPin output = new COutputPin(inputParameter.Name, inputParameter.Type);
                OutputPins.Add(output);
            }
        }
Пример #11
0
        public CFunctionGraphReturnNode(List <CKlaxVariable> returnParameters)
        {
            AllowDelete = false;
            AllowCopy   = false;

            Name = "Return";

            CExecutionPin inPin = new CExecutionPin("Return");

            InExecutionPins.Add(inPin);

            foreach (var returnParameter in returnParameters)
            {
                CInputPin input = new CInputPin(returnParameter.Name, returnParameter.Type);
                InputPins.Add(input);
            }
        }
Пример #12
0
        public CBranchNode()
        {
            Name = "Branch";

            CExecutionPin inPin = new CExecutionPin("In");

            InExecutionPins.Add(inPin);

            CExecutionPin truePin = new CExecutionPin("True");

            OutExecutionPins.Add(truePin);

            CExecutionPin falsePin = new CExecutionPin("False");

            OutExecutionPins.Add(falsePin);

            CInputPin conditionPin = new CInputPin("Condition", typeof(bool));

            InputPins.Add(conditionPin);
        }
Пример #13
0
        public CForEachLoopNode()
        {
            Name = "Foreach Loop";

            CExecutionPin execute = new CExecutionPin()
            {
                Name       = "In",
                TargetNode = null
            };

            InExecutionPins.Add(execute);

            CExecutionPin breakExec = new CExecutionPin()
            {
                Name       = "Break",
                TargetNode = null
            };

            InExecutionPins.Add(breakExec);

            CExecutionPin loop = new CExecutionPin()
            {
                Name       = "Loop",
                TargetNode = null
            };

            OutExecutionPins.Add(loop);
            CExecutionPin done = new CExecutionPin()
            {
                Name       = "Done",
                TargetNode = null
            };

            OutExecutionPins.Add(done);

            InputPins.Add(new CInputPin("List", typeof(IList)));

            OutputPins.Add(new COutputPin("Index", typeof(int)));
            OutputPins.Add(new COutputPin("Element", typeof(object)));
        }
Пример #14
0
        public CSwitchNode()
        {
            Name             = "Switch";
            CanAddOutputPins = true;

            CExecutionPin execute = new CExecutionPin()
            {
                Name       = "In",
                TargetNode = null
            };

            InExecutionPins.Add(execute);

            CExecutionPin defaultOutExec = new CExecutionPin()
            {
                Name       = "Default",
                TargetNode = null
            };

            OutExecutionPins.Add(defaultOutExec);

            CInputPin typePin = new CInputPin()
            {
                Name           = "Type",
                bIsLiteralOnly = true,
                Type           = typeof(CKlaxScriptTypeInfo),
                Literal        = typeof(string)
            };

            InputPins.Add(typePin);

            CInputPin objectPin = new CInputPin()
            {
                Name = "Object",
                Type = typeof(object)
            };

            InputPins.Add(objectPin);
        }
Пример #15
0
        public CForLoopNode()
        {
            CExecutionPin execute = new CExecutionPin()
            {
                Name       = "In",
                TargetNode = null
            };

            InExecutionPins.Add(execute);

            CExecutionPin breakExec = new CExecutionPin()
            {
                Name       = "Break",
                TargetNode = null
            };

            InExecutionPins.Add(breakExec);

            CExecutionPin loop = new CExecutionPin()
            {
                Name       = "Loop",
                TargetNode = null
            };

            OutExecutionPins.Add(loop);
            CExecutionPin done = new CExecutionPin()
            {
                Name       = "Done",
                TargetNode = null
            };

            OutExecutionPins.Add(done);

            InputPins.Add(new CInputPin("First Index", typeof(int)));
            InputPins.Add(new CInputPin("Last Index", typeof(int)));

            OutputPins.Add(new COutputPin("Index", typeof(int)));
        }
Пример #16
0
 public CSwitchExecutionPinViewModel(CExecutionPin executionPin, CScriptNodeViewmodel nodeViewModel, int pinIndex, bool isIn, Type controlType, object controlValue)
     : base(executionPin, nodeViewModel, pinIndex, isIn)
 {
     m_controlType  = controlType;
     m_controlValue = controlValue;
 }