private void Selector_OnSelectionChanged(object sender, SelectionChangedEventArgs e) { if (!m_bIsLocked) { if (AssetSelector.SelectedIndex >= 0) { CKlaxScriptTypeInfo selectedType = (CKlaxScriptTypeInfo)AssetSelector.SelectedItem; object subtypeValue = Activator.CreateInstance(PropertyInfo.ValueType, selectedType.Type); SetInspectorValue(PropertyInfo, PropertyInfo.Value, subtypeValue); } } }
public override void OnInputLiteralChanged(CNodeChangeContext context, CInputPin pin) { if (pin == InputPins[0]) { CKlaxScriptTypeInfo targetType = ((CKlaxScriptTypeInfo)pin.Literal); ChangePinType(context, OutputPins[0], targetType == null ? typeof(object) : targetType.Type); if (targetType != null) { ChangeNodeName(context, "Cast to " + targetType.Name); } } }
public override void OnInputLiteralChanged(CNodeChangeContext context, CInputPin pin) { if (pin == InputPins[0]) { CKlaxScriptTypeInfo newType = pin.Literal as CKlaxScriptTypeInfo; if (newType != null) { OutExecutionPins.RemoveRange(1, OutExecutionPins.Count - 1); context.Actions.Add(new CSwitchNodeTypeChangeAction(newType.Type)); ChangePinType(context, InputPins[1], newType.Type); ChangeNodeName(context, $"Switch ({newType.Name})"); InputPins[1].Literal = newType.Type.GetDefaultValue(); } } }
private void Selector_OnSelectionChanged(object sender, SelectionChangedEventArgs e) { if (!m_bIsLocked) { if (AssetSelector.SelectedIndex >= 0) { CKlaxScriptTypeInfo selectedAsset = (CKlaxScriptTypeInfo)AssetSelector.SelectedItem; object newValue = selectedAsset; if (m_isRawType) { newValue = selectedAsset.Type; } SetInspectorValue(PropertyInfo, PropertyInfo.Value, newValue); } } }
public override void PropertyInfoChanged(CObjectProperty info) { base.PropertyInfoChanged(info); m_isRawType = false; CKlaxScriptTypeInfo typeInfo = info.Value as CKlaxScriptTypeInfo; if (typeInfo == null && info.ValueType == typeof(Type)) { m_isRawType = true; CKlaxScriptRegistry.Instance.TryGetTypeInfo(info.Value as Type, out typeInfo); } m_bIsLocked = true; if (!m_bItemSourcesSet) { m_availableAssets.Clear(); foreach (CKlaxScriptTypeInfo klaxType in CKlaxScriptRegistry.Instance.Types) { m_availableAssets.Add(klaxType); } AssetSelector.ItemsSource = m_availableAssets; m_bItemSourcesSet = true; } if (typeInfo != m_oldValue) { int selectedIndex = -1; if (info.Value != null) { selectedIndex = m_availableAssets.FindIndex(availableTypeInfo => availableTypeInfo.Type == typeInfo.Type); } AssetSelector.SelectedIndex = selectedIndex; } m_oldValue = typeInfo; m_bIsLocked = false; }
public override void SetValueOnly(object value) { m_isRawType = false; if (value == null) { AssetSelector.SelectedIndex = -1; } else { CKlaxScriptTypeInfo typeInfo = value as CKlaxScriptTypeInfo; if (typeInfo == null && value is Type rawType) { m_isRawType = true; CKlaxScriptRegistry.Instance.TryGetTypeInfo(rawType, out typeInfo); } int selectedIndex = -1; if (value != null) { selectedIndex = m_availableAssets.FindIndex(availableTypeInfo => availableTypeInfo.Type == typeInfo.Type); } AssetSelector.SelectedIndex = selectedIndex; } }