// Creates controller, view and view model for a blackboard item and adds the view to the specified index in the category // By default adds it to the end of the list if no insertionIndex specified internal SGBlackboardRow InsertBlackboardRow(BlackboardItem shaderInput, int insertionIndex = -1) { var shaderInputViewModel = new ShaderInputViewModel() { model = shaderInput, parentView = blackboardCategoryView, }; var blackboardItemController = new BlackboardItemController(shaderInput, shaderInputViewModel, DataStore); m_BlackboardItemControllers.TryGetValue(shaderInput.objectId, out var existingItemController); if (existingItemController == null) { m_BlackboardItemControllers.Add(shaderInput.objectId, blackboardItemController); // If no index specified, add to end of category if (insertionIndex == -1) { blackboardCategoryView.Add(blackboardItemController.BlackboardItemView); } else { blackboardCategoryView.Insert(insertionIndex, blackboardItemController.BlackboardItemView); } blackboardCategoryView.MarkDirtyRepaint(); return(blackboardItemController.BlackboardItemView); } else { AssertHelpers.Fail("Tried to add blackboard item that already exists to category."); return(null); } }
internal BlackboardCategoryController(CategoryData categoryData, BlackboardCategoryViewModel categoryViewModel, GraphDataStore dataStore) : base(categoryData, categoryViewModel, dataStore) { m_BlackboardCategoryView = new SGBlackboardCategory(categoryViewModel, this); blackboard = categoryViewModel.parentView as SGBlackboard; if (blackboard == null) { return; } blackboard.Add(m_BlackboardCategoryView); // These make sure that the drag indicators are disabled whenever a drag action is cancelled without completing a drop blackboard.RegisterCallback <MouseUpEvent>(evt => { m_BlackboardCategoryView.OnDragActionCanceled(); }); blackboard.hideDragIndicatorAction += m_BlackboardCategoryView.OnDragActionCanceled; foreach (var categoryItem in categoryData.Children) { if (categoryItem == null) { AssertHelpers.Fail("Failed to insert blackboard row into category due to shader input being null."); continue; } InsertBlackboardRow(categoryItem); } }
void AddShaderInput(GraphData graphData) { AssertHelpers.IsNotNull(graphData, "GraphData is null while carrying out AddShaderInputAction"); // If type property is valid, create instance of that type if (blackboardItemType != null && blackboardItemType.IsSubclassOf(typeof(BlackboardItem))) { shaderInputReference = (BlackboardItem)Activator.CreateInstance(blackboardItemType, true); } else if (shaderInputReferenceGetter != null) { shaderInputReference = shaderInputReferenceGetter(); } // If type is null a direct override object must have been provided or else we are in an error-state else if (shaderInputReference == null) { AssertHelpers.Fail("BlackboardController: Unable to complete Add Shader Input action."); return; } shaderInputReference.generatePropertyBlock = shaderInputReference.isExposable; graphData.owner.RegisterCompleteObjectUndo("Add Shader Input"); graphData.AddGraphInput(shaderInputReference); }
void InitializeViewModel() { if (Model == null) { AssertHelpers.Fail("Could not initialize shader input view model as shader input was null."); return; } ViewModel.model = Model; ViewModel.isSubGraph = DataStore.State.isSubGraph; ViewModel.isInputExposed = (DataStore.State.isSubGraph || (Model.isExposable && Model.generatePropertyBlock)); ViewModel.inputName = Model.displayName; switch (Model) { case AbstractShaderProperty shaderProperty: ViewModel.inputTypeName = shaderProperty.GetPropertyTypeString(); // Handles upgrade fix for deprecated old Color property shaderProperty.onBeforeVersionChange += (_) => graphData.owner.RegisterCompleteObjectUndo($"Change {shaderProperty.displayName} Version"); break; case ShaderKeyword shaderKeyword: ViewModel.inputTypeName = shaderKeyword.keywordType + " Keyword"; ViewModel.inputTypeName = shaderKeyword.isBuiltIn ? "Built-in " + ViewModel.inputTypeName : ViewModel.inputTypeName; break; case ShaderDropdown shaderDropdown: ViewModel.inputTypeName = "Dropdown"; break; } ViewModel.requestModelChangeAction = this.RequestModelChange; }
void AddShaderInput(GraphData graphData) { AssertHelpers.IsNotNull(graphData, "GraphData is null while carrying out AddShaderInputAction"); // If type property is valid, create instance of that type if (blackboardItemType != null && blackboardItemType.IsSubclassOf(typeof(BlackboardItem))) { shaderInputReference = (BlackboardItem)Activator.CreateInstance(blackboardItemType, true); } else if (m_ShaderInputReferenceGetter != null) { shaderInputReference = m_ShaderInputReferenceGetter(); } // If type is null a direct override object must have been provided or else we are in an error-state else if (shaderInputReference == null) { AssertHelpers.Fail("BlackboardController: Unable to complete Add Shader Input action."); return; } shaderInputReference.generatePropertyBlock = shaderInputReference.isExposable; if (graphData.owner != null) { graphData.owner.RegisterCompleteObjectUndo("Add Shader Input"); } else { AssertHelpers.Fail("GraphObject is null while carrying out AddShaderInputAction"); } graphData.AddGraphInput(shaderInputReference); // If no categoryToAddItemToGuid is provided, add the input to the default category if (categoryToAddItemToGuid == String.Empty) { var defaultCategory = graphData.categories.FirstOrDefault(); AssertHelpers.IsNotNull(defaultCategory, "Default category reference is null."); if (defaultCategory != null) { var addItemToCategoryAction = new AddItemToCategoryAction(); addItemToCategoryAction.categoryGuid = defaultCategory.categoryGuid; addItemToCategoryAction.itemToAdd = shaderInputReference; graphData.owner.graphDataStore.Dispatch(addItemToCategoryAction); } } else { var addItemToCategoryAction = new AddItemToCategoryAction(); addItemToCategoryAction.categoryGuid = categoryToAddItemToGuid; addItemToCategoryAction.itemToAdd = shaderInputReference; graphData.owner.graphDataStore.Dispatch(addItemToCategoryAction); } }
internal void RemoveBlackboardRow(BlackboardItem shaderInput) { m_BlackboardItemControllers.TryGetValue(shaderInput.objectId, out var associatedBlackboardItemController); if (associatedBlackboardItemController != null) { associatedBlackboardItemController.Destroy(); m_BlackboardItemControllers.Remove(shaderInput.objectId); } else { AssertHelpers.Fail("Failed to find associated blackboard item controller for shader input that was just deleted. Cannot clean up view associated with input."); } }
static public ShaderInput GetShaderInput(BlackboardShaderInputOrder order) { ShaderInput output; if (order.isKeyword) { if (order.builtInKeyword == null) { output = new ShaderKeyword(order.keywordType); } else { output = order.builtInKeyword; } } else if (order.isDropdown) { output = new ShaderDropdown(); } else { switch (order.deprecatedPropertyName) { case "Color": output = new ColorShaderProperty(order.version); break; default: output = null; AssertHelpers.Fail("BlackboardShaderInputFactory: Unknown deprecated property type."); break; } } return(output); }