void SetSpatialConstraintEditorAsset(SpatialConstraintAsset spatialAsset, SpatialConstraintsEditorAssignmentState state) { if (spatailWindowState.initialized && spatailWindowState.spatialAsset == spatialAsset && spatailWindowState.assignmentState == state) { // The states are the same. no need to assign return; } spatailWindowState.initialized = true; spatailWindowState.spatialAsset = spatialAsset; spatailWindowState.assignmentState = state; var existingWindow = DungeonEditorHelper.GetWindowIfOpen <SpatialConstraintsEditorWindow>(); // Open a window only if we are assigning if (state == SpatialConstraintsEditorAssignmentState.Assigned && existingWindow == null) { existingWindow = EditorWindow.GetWindow <SpatialConstraintsEditorWindow>(); } if (existingWindow != null) { existingWindow.Init(spatialAsset, state); } }
public void Init(SpatialConstraintAsset assetBeingEdited, SpatialConstraintsEditorAssignmentState assignmentState) { graphEditor = CreateInstance <SpatialConstraintsGraphEditor>(); var graph = (assetBeingEdited != null) ? assetBeingEdited.Graph : null; graphEditor.Init(graph, position); graphEditor.AssignmentState = assignmentState; graphEditor.AssetBeingEdited = assetBeingEdited; Repaint(); }
public static T CreateConstraintRule <T>(SpatialConstraintAsset spatialConstraint) where T : ConstraintRule { if (spatialConstraint == null || spatialConstraint.hostThemeNode == null) { return(null); } var rule = ScriptableObject.CreateInstance <T>(); var assetObject = spatialConstraint.hostThemeNode.Graph; AssetDatabase.AddObjectToAsset(rule, assetObject); return(rule); }
public static T CreateSpatialConstraintNode <T>(SpatialConstraintAsset constraintAsset, Vector2 worldPosition) where T : SCBaseDomainNode { var graph = constraintAsset.Graph; var node = GraphOperations.CreateNode <T>(graph); node.Position = worldPosition; node.SnapNode(); var hostAsset = constraintAsset.hostThemeNode.Graph; AddToAsset(hostAsset, node); return(node); }
public static void DestroySpatialConstraintAsset(SpatialConstraintAsset spatialConstraint) { if (spatialConstraint == null) { return; } if (spatialConstraint.hostThemeNode == null) { return; } var asset = spatialConstraint.hostThemeNode.Graph; Undo.RegisterCompleteObjectUndo(asset, "Delete Node Spatial Constraint"); var objectsToDestroy = new List <ScriptableObject>(); if (spatialConstraint != null && spatialConstraint.Graph != null) { foreach (var node in spatialConstraint.Graph.Nodes) { if (node is SCRuleNode) { var ruleNode = node as SCRuleNode; foreach (var constraint in ruleNode.constraints) { objectsToDestroy.Add(constraint); } } objectsToDestroy.Add(node); } objectsToDestroy.Add(spatialConstraint.Graph); objectsToDestroy.Add(spatialConstraint); } foreach (var objectToDestroy in objectsToDestroy) { if (objectToDestroy != null) { Undo.DestroyObjectImmediate(objectToDestroy); } } }
void UpdateSpatialConstraintEditorWindow(GraphNode[] nodes) { SpatialConstraintAsset spatialAsset = null; SpatialConstraintsEditorAssignmentState assetState; VisualNode node = null; if (nodes.Length == 1 && nodes[0] is VisualNode) { node = nodes[0] as VisualNode; } if (node != null) { if (node.spatialConstraint == null) { Debug.LogError("Spatial Constraint asset not assigned. Please reload the theme editor"); return; } if (node.useSpatialConstraint) { spatialAsset = node.spatialConstraint; assetState = SpatialConstraintsEditorAssignmentState.Assigned; } else { assetState = SpatialConstraintsEditorAssignmentState.ConstraintsDisabled; } } else { assetState = SpatialConstraintsEditorAssignmentState.NotAssigned; } SetSpatialConstraintEditorAsset(spatialAsset, assetState); }
protected virtual bool ProcessSpatialConstraint(SpatialConstraintProcessor constraintProcessor, SpatialConstraintAsset constraint, PropSocket socket, out Matrix4x4 OutOffset, out PropSocket[] outMarkersToRemove) { if (constraintProcessor == null) { OutOffset = Matrix4x4.identity; outMarkersToRemove = new PropSocket[0]; return(false); } var context = new SpatialConstraintProcessorContext(); context.constraintAsset = constraint; context.marker = socket; context.model = model; context.config = config; context.builder = this; context.levelMarkers = propSockets; return(constraintProcessor.ProcessSpatialConstraint(context, out OutOffset, out outMarkersToRemove)); }
public static void CreateDefaultSpatialConstraintNodes(SpatialConstraintAsset constraintAsset) { var position = SCBaseDomainNode.TileSize * 0.5f * Vector2.one; CreateSpatialConstraintNode <SCReferenceNode>(constraintAsset, position); }