本文整理汇总了C#中Behaviac.Design.Nodes.Node.PreSave方法的典型用法代码示例。如果您正苦于以下问题:C# Node.PreSave方法的具体用法?C# Node.PreSave怎么用?C# Node.PreSave使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Behaviac.Design.Nodes.Node
的用法示例。
在下文中一共展示了Node.PreSave方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: SaveNode
/// <summary>
/// Saves a node to the XML file.
/// </summary>
/// <param name="root">The XML node we want to attach the node to.</param>
/// <param name="node">The node we want to save.</param>
protected void SaveNode(XmlElement root, Node node) {
try {
// allow the node to process its attributes in preparation of the save
node.PreSave(_behavior);
// store the class we have to create when loading
XmlElement elem = _xmlfile.CreateElement("Node");
elem.SetAttribute("Class", node.GetType().FullName);
bool isPrefabInstance = !string.IsNullOrEmpty(node.PrefabName) && !node.IsPrefabDataDirty();
// save attributes
IList<DesignerPropertyInfo> properties = node.GetDesignerProperties();
for (int p = 0; p < properties.Count; ++p) {
if (!properties[p].Attribute.HasFlags(DesignerProperty.DesignerFlags.NoSave)) {
bool bDo = !isPrefabInstance || properties[p].Attribute.HasFlags(DesignerProperty.DesignerFlags.NotPrefabRelated);
if (bDo) {
if (bDo) {
elem.SetAttribute(properties[p].Property.Name, properties[p].GetSaveValue(node));
}
}
}
}
// append node to root
root.AppendChild(elem);
// save comment
if (node.CommentObject != null) {
XmlElement comment = _xmlfile.CreateElement("Comment");
properties = node.CommentObject.GetDesignerProperties();
for (int p = 0; p < properties.Count; ++p) {
if (!properties[p].Attribute.HasFlags(DesignerProperty.DesignerFlags.NoSave))
{ comment.SetAttribute(properties[p].Property.Name, properties[p].GetSaveValue(node.CommentObject)); }
}
elem.AppendChild(comment);
}
if (!isPrefabInstance) {
// save parameters
if (node.LocalVars != null) {
Debug.Check(node is Behavior || node is ReferencedBehavior) ;
SaveParameters(elem, node.LocalVars);
}
// save DescriptorRefs
if (node is Behavior) {
#if QUERY_EANBLED
Behavior b = node as Behavior;
SaveDescriptorRefs(elem, b);
#endif//#if QUERY_EANBLED
}
// save attachments
foreach(Attachments.Attachment attach in node.Attachments) {
XmlElement attelem = _xmlfile.CreateElement("Attachment");
attelem.SetAttribute("Class", attach.GetType().FullName);
// save attributes
properties = attach.GetDesignerProperties();
for (int p = 0; p < properties.Count; ++p) {
if (!properties[p].Attribute.HasFlags(DesignerProperty.DesignerFlags.NoSave))
{ attelem.SetAttribute(properties[p].Property.Name, properties[p].GetSaveValue(attach)); }
}
if (attach.LocalVars != null && attach.LocalVars.Count > 0) {
Debug.Check(attach is Attachments.Event);
SaveParameters(attelem, attach.LocalVars);
}
elem.AppendChild(attelem);
}
// save children if allowed. Disallowed for referenced behaviours.
if (node.SaveChildren) {
// save connectors
foreach(Nodes.Node.Connector connector in node.Connectors) {
// if we have no children to store we can skip the connector
if (connector.ChildCount < 1)
{ continue; }
XmlElement conn = _xmlfile.CreateElement("Connector");
conn.SetAttribute("Identifier", connector.Identifier);
elem.AppendChild(conn);
// save their children
for (int i = 0; i < connector.ChildCount; ++i)
{ SaveNode(conn, (Node)connector.GetChild(i)); }
}
//.........这里部分代码省略.........