2 using System.Collections.Generic;
4 using System.Reflection;
6 using SiliconStudio.Paradox.Effects;
7 using SiliconStudio.Paradox.Games.ViewModel;
8 using Paradox.Framework.Shaders;
14 private readonly ViewModelContext selectedEntitiesContext;
18 this.selectedEntitiesContext = selectedEntitiesContext;
21 public void GenerateChildren(ViewModelContext context, IViewModelNode viewModelNode, ref
bool handled)
23 if (viewModelNode.NodeValue is EffectBuilder)
25 viewModelNode.Children.Add(
new ViewModelNode(
"Name",
new PropertyInfoViewModelContent(
new ParentNodeValueViewModelContent(), typeof(EffectBuilder).GetProperty(
"Name"))));
26 viewModelNode.Children.Add(
new ViewModelNode(
"EventOpen",
new RootViewModelContent((ExecuteCommand)((viewModel2, parameter) =>
28 selectedEntitiesContext.ViewModelByGuid.Clear();
29 selectedEntitiesContext.Root = selectedEntitiesContext.GetModelView(viewModel2.Parent.NodeValue);
32 viewModelNode.Children.Add(
new ViewModelNode(
"Definition",
new AsyncViewModelContent<EffectDefinition>(
new ParentNodeValueViewModelContent(),
33 operand =>
new EffectDefinition
35 Plugins = ((EffectBuilder)operand.Value).Plugins.Select(x =>
37 var pluginDefinition =
new EffectPluginDefinition
39 PluginType = x.GetType().AssemblyQualifiedName,
40 Parameters =
new Dictionary<string, EffectParameterDefinition>()
42 foreach (var property
in x.GetType().GetProperties(BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.Instance))
44 if (property.GetCustomAttributes(typeof(EffectDefinitionPropertyAttribute),
true).Length == 0)
48 var value = property.GetValue(x, null);
51 value = Guid.NewGuid();
53 else if (!typeof(ShaderSource).IsAssignableFrom(property.PropertyType)
54 && !property.PropertyType.IsValueType)
56 throw new NotSupportedException();
58 pluginDefinition.Parameters.Add(property.Name,
new EffectParameterDefinition(property.PropertyType, value));
60 return pluginDefinition;
70 public void GenerateChildren(ViewModelContext context, IViewModelNode viewModelNode, ref
bool handled)
72 if (viewModelNode.NodeValue is EffectOld)
74 viewModelNode.Children.Add(
new ViewModelNode(
"Name",
new PropertyInfoViewModelContent(
new ParentNodeValueViewModelContent(), typeof(EffectOld).GetProperty(
"Name"))));
75 viewModelNode.Children.Add(
new ViewModelNode(
"Plugins",
76 LambdaViewModelContent<EffectPluginDefinition[]>.FromParent<EffectOld>(
77 effect => effect.Plugins.Select(plugin =>
new EffectPluginDefinition { PluginType = plugin.GetType().AssemblyQualifiedName }).ToArray())));
void GenerateChildren(ViewModelContext context, IViewModelNode viewModelNode, ref bool handled)
void GenerateChildren(ViewModelContext context, IViewModelNode viewModelNode, ref bool handled)
EffectEnumerator(ViewModelContext selectedEntitiesContext)