Exemplo n.º 1
0
        private void UpdateInstance(IValueEditor editor, object valueOverride, bool committedChange)
        {
            if (lstProperties.SelectedItem is EffectProperty effectProperty)
            {
                // Store this change in the Mini.
                if (frmPersistentEffectPropertyEditor != null)
                {
                    Control childAtPoint = frmPersistentEffectPropertyEditor.GetChildAtPoint(new Point(4, 4));
                    if (childAtPoint is IValueEditor valueEditor)
                    {
                        BasePropertyChanger propertyChanger = valueEditor.GetPropertyChanger();
                        string saveValue = propertyChanger.Value;
                        if (propertyChanger != null)
                        {
                            string[] paths      = effectProperty.Paths.Split(';');
                            bool     needToSave = true;
                            foreach (string path in paths)
                            {
                                propertyChanger.FullPropertyPath = path;
                                propertyChanger.ValueOverride    = valueOverride;
                                propertyChanger.ModifyProperty(Instance);

                                if (needToSave)
                                {
                                    if (committedChange)
                                    {
                                        needToSave = false;
                                        IOldPersistentEffect persistentEffect = Mini.GetPersistentEffect();
                                        if (editor is IScriptEditor scriptEditor)
                                        {
                                            //Talespire.Log.Debug($"");
                                            //Talespire.Log.Warning($"editor is IScriptEditor scriptEditor!!!");
                                            //Talespire.Log.Warning($"effectProperty.Type = {effectProperty.Type?.FullName}");
                                            //Talespire.Log.Warning($"scriptEditor.LastSerializedData = \"{scriptEditor.LastSerializedData}\"");
                                            //Talespire.Log.Debug($"");
                                            if (persistentEffect is SuperPersistentEffect superPersistentEffect)
                                            {
                                                if (effectProperty.Type != null)
                                                {
                                                    superPersistentEffect.ScriptData[effectProperty.Type.FullName] = scriptEditor.LastSerializedData;
                                                    Mini.SavePersistentEffect(persistentEffect);
                                                }
                                            }
                                        }
                                        else
                                        {
                                            string propertyKey;

                                            if (effectProperty.Name.StartsWith("$"))
                                            {
                                                propertyKey = effectProperty.Name;
                                            }
                                            else
                                            {
                                                propertyKey = effectProperty.Paths;
                                            }

                                            if (persistentEffect != null)
                                            {
                                                Talespire.Log.Warning($"Properties[{propertyKey}] = \"{saveValue}\"!!!");

                                                // TODO: Use the correct EffectProperties instead of Properties (based on the prefix of the selected control).
                                                // TODO: Change this to be indexed by the property NAME, not the path (to support multiple linked properties (to a single SmartProperty).
                                                persistentEffect.Properties[propertyKey] = saveValue;                                                 // valueOverride.ToString();
                                                Talespire.Log.Debug($"Mini.SavePersistentEffect();");
                                                Mini.SavePersistentEffect(persistentEffect);
                                            }
                                            else
                                            {
                                                Talespire.Log.Error($"persistentEffect is not found!!");
                                            }
                                        }
                                    }
                                    else
                                    {
                                        //Talespire.Log.Warning($"Not a committed change! Not saving my friend!");
                                    }
                                }
                            }
                        }
                        else
                        {
                            Talespire.Log.Error($"propertyChanger not found!!!");
                        }
                    }
                    else
                    {
                        Talespire.Log.Error($"childAtPoint is not a value editor!");
                    }
                }
                else
                {
                    Talespire.Log.Error($"frmPersistentEffectPropertyEditor is null!");
                }
            }
            else
            {
                Talespire.Log.Error($"effectProperty is NULL!!!");
            }
        }