Ejemplo n.º 1
0
        private void lstProperties_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                EffectProperty effectProperty = lstProperties.SelectedItem as EffectProperty;
                if (effectProperty != null)
                {
                    Talespire.Log.Warning($"{effectProperty.Name} selected!");
                    WindowHelper.FocusTaleSpire();
                }

                frmPersistentEffectPropertyEditor.Controls.Clear();

                UserControl valueEditor = ValueEditors.Get(STR_PersistentEffectsEditorKey, effectProperty.Type) as UserControl;
                if (valueEditor != null)
                {
                    // TODO: Set the control's state based on the actual value.
                    frmPersistentEffectPropertyEditor.Controls.Add(valueEditor);
                    frmPersistentEffectPropertyEditor.Height = valueEditor.Height + 8;

                    if (valueEditor is IScriptEditor scriptEditor)
                    {
                        //Talespire.Log.Warning($"Instance = \"{Instance}\"");
                        if (effectProperty.Paths.StartsWith("<") && effectProperty.Paths.EndsWith(">"))
                        {
                            // Could be a script!
                            //Talespire.Log.Debug($"Could be a script!");
                            Type scriptType = KnownScripts.GetType(effectProperty.Paths.Substring(1, effectProperty.Paths.Length - 2));
                            if (scriptType != null)
                            {
                                //Talespire.Log.Debug($"scriptType found {scriptType.FullName}");
                                UnityEngine.Component script = Instance.GetComponent(scriptType.FullName);
                                scriptEditor.InitializeInstance(script as MonoBehaviour);
                            }
                            else
                            {
                                //Talespire.Log.Debug($"{effectProperty.Paths} is not a Script!");
                            }
                        }
                    }

                    if (valueEditor is IValueEditor iValueEditor)
                    {
                        iValueEditor.EditingProperty(effectProperty.Name, effectProperty.Paths);
                        //Talespire.Log.Warning($"effectProperty.Paths = \"{effectProperty.Paths}\"");

                        PropertyModDetails propertyModDetails = BasePropertyChanger.GetPropertyModDetails(Instance, effectProperty.Paths);

                        //Talespire.Log.Warning($"iValueEditor.SetValue(\"{propertyModDetails.GetValue()}\");");
                        object newValue = propertyModDetails.GetValue();
                        if (newValue == null)
                        {
                            BasePropertyChanger propertyChanger = iValueEditor.GetPropertyChanger();
                            newValue = propertyChanger.TryGetValue(Instance, effectProperty.Paths);
                        }
                        iValueEditor.SetValue(newValue);
                    }
                    else
                    {
                        Talespire.Log.Error($"valueEditor is NOT an IValueEditor!!!");
                    }
                }
                else
                {
                    Talespire.Log.Error($"value editor NOT found!!!");
                }

                frmPersistentEffectPropertyEditor.Show();
            }
            catch (Exception ex)
            {
                Talespire.Log.Exception(ex, nameof(lstProperties_SelectedIndexChanged));
            }
        }