private void HackButton_Click(object sender, RoutedEventArgs e) { int texindex = TextureIndex.Value.Value; string texname = TextureRoughSettor.Text; EditorSubsystemManaged.getInstance().QueueAction(new Action(() => { foreach (GameObject g in EngineManagerViewModel.instance.SelectedGameObjects) { CMeshRenderer cm = CastingHelper.CastTo <CMeshRenderer>(g.GetComponentByName("CMeshRenderer")); if (cm != null) { Material mat = cm.GetMaterial() as Material; MaterialAttribNodeMap map = mat.mMaterialData.mAttributeMetaLookup; ObservableCollection <MaterialNodeModel> out_nodes = new ObservableCollection <MaterialNodeModel>(); MaterialAttribNodeVector nodes = map.Values.ElementAt(1); { MatAttribNode node = nodes[texindex]; object castedObj = null; castedObj = CastingHelper.CastTo <TextureNode>(node); if (castedObj != null) { (castedObj as TextureNode).SetTexture(AssetManager.getInstance().GetAsset(texname)); } else { MessageBox.Show("You f****d up the node, this ain't no texture node dummy"); } } } } })); }
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (!(value is Material)) { return(null); } if (value == null) { return(null); } Material mat = value as Material; MaterialAttribNodeMap map = mat.mMaterialData.mAttributeMetaLookup; ObservableCollection <MaterialNodeModel> out_nodes = new ObservableCollection <MaterialNodeModel>(); int texture_node_slot = 0; foreach (MaterialAttribNodeVector nodes in map.Values) { foreach (MatAttribNode node in nodes) { MaterialNodeModel model = new MaterialNodeModel(); object castedObj = null; castedObj = CastingHelper.CastTo <TextureNode>(node); if (castedObj == null) { castedObj = CastingHelper.CastTo <ColorNode>(node); if (castedObj == null) { castedObj = CastingHelper.CastTo <UVTransformNode>(node); if (castedObj == null) { castedObj = CastingHelper.CastTo <ShaderNode>(node); if (castedObj == null) { throw new InvalidOperationException("Node could not find cast target"); } } } } else { //texture node switch (texture_node_slot) { case 0: model.name = "Diffuse"; break; case 1: model.name = "Normal"; break; case 2: model.name = "Specular"; break; case 3: model.name = "Roughness"; break; case 4: model.name = "Metallic"; break; } texture_node_slot++; } model.node = castedObj; out_nodes.Add(model); } } return(out_nodes); }