Пример #1
0
        /// <summary>
        /// Load function that unpacks <see cref="Rule"/> from corresponding <see cref="SerializedProperty"/>.
        /// </summary>
        private void LoadRule(bool inSet)
        {
            if (inSet)
            {
                string setName   = SubjectRule.propertyPath.Remove(SubjectRule.propertyPath.IndexOf(".Array")).Replace("Profile.", "");
                int    ruleIndex = int.Parse(SubjectRule.propertyPath.Substring(SubjectRule.propertyPath.IndexOf("[") + 1).Replace("]", ""));

                deserializedRule = RuleSystemUtil.DeserializeRule(SubjectRule, setName, ruleIndex);
            }
            else
            {
                deserializedRule = RuleSystemUtil.DeserializeRule(SubjectRule);
            }
            rootNode = RuleCreator.CreateRoot(deserializedRule.RootGridPosition, OnNodePortContact, OnUpdateRootRequest, OnRemoveAThread, deserializedRule.MandatoryId, deserializedRule.QualityId, deserializedRule.MyAction, NodeSkin);
            if (deserializedRule.MyAction != null)
            {
                actionNode = RuleCreator.CreateActionNode(deserializedRule.ActionGridPosition, OnNodePortContact, OnUpdateActionRequest, OnRemoveNode, OnRemoveAThread, deserializedRule.MyAction, NodeSkin);
            }
            foreach (Decision decision in deserializedRule.MyDecisions)
            {
                ruleDecisions.Add(decision);
                NodeShell rawNode = RuleCreator.CreateNewDecisionNode(decision.identifier, decision.Operator, OnUpdateRuleRequest, OnNodePortContact, OnRemoveNode, OnRemoveAThread, NodeSkin);
                rawNode.Container = new NodeShell.Data
                {
                    FloatValue = decision.FlatValue
                };
                rawNode.Inputs        = decision.inputID;
                rawNode.Rect.position = decision.GridPosition;
                rawNode.activated     = true;
                ruleNodes.Add(rawNode);
            }
        }
Пример #2
0
 /// <summary>
 /// Creates a Root node.
 /// </summary>
 /// <param name="position">Grid position. </param>
 /// <param name="OnPortClick">Event-handle for <see cref="Port"/> clicks. </param>
 /// <param name="OnRootUpdate">Event-handle for updating <see cref="Rule"/> data. </param>
 /// <param name="mandatoryID">Representing Mandatory <see cref="Decision"/> identifier. </param>
 /// <param name="QualityID">Representing Wuality decision identifier. </param>
 /// <param name="skin"><see cref="GUISkin"/> of nodes. </param>
 /// <returns></returns>
 public static RootShell CreateRoot(Vector2 position, Action<Port> OnPortClick, Action<int, int, Vector2> OnRootUpdate, Action<Thread> OnRemoveThread, int mandatoryID, int QualityID, Action action, GUISkin skin)
 {
     RootNodeStyle style = new RootNodeStyle("Root");
     RootShell root = new RootShell
     {
         Id = -1,
         Style = style,
         Rect = style.Rect,
         Skin = skin,
         Action = action,
         OnUpdateRoot = OnRootUpdate
     };
     root.Rect.position = position;
     root.MandatoryID = mandatoryID;
     root.QualityID = QualityID;
     root.Port0 = new Port
     {
         Name = "Mandatory",
         type = PortType.Input,
         MyNode = root,
         nodeSkin = skin,
         OnClickPort = OnPortClick,
         OnRemoveThread = OnRemoveThread,
         rect = new Rect(0, 0, skin.button.fixedWidth, skin.button.fixedHeight),
         isDecision = true
     };
     root.Port1 = new Port
     {
         Name = "Quality",
         type = PortType.Input,
         MyNode = root,
         nodeSkin = skin,
         OnClickPort = OnPortClick,
         OnRemoveThread = OnRemoveThread,
         rect = new Rect(0, 0, skin.button.fixedWidth, skin.button.fixedHeight),
         isDecision = true
     };
     root.Port2 = new Port
     {
         Name = "Action",
         type = PortType.Input,
         MyNode = root,
         nodeSkin = skin,
         OnClickPort = OnPortClick,
         OnRemoveThread = OnRemoveThread,
         rect = new Rect(0, 0, skin.button.fixedWidth, skin.button.fixedHeight),
         isDecision = false
     };
     return root;
 }