/// <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); } }
/// <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; }