Exemple #1
0
        private IEnumerator delayInitEditStringView(InspectorStringView stringView, ITweakable tweakable)
        {
            yield return(null);

            object value = tweakable.GetValue();

            if (value != null)
            {
                stringView.InputText.text = value.ToString();
            }
            else
            {
                stringView.InputText.text = "";
            }
            Action <object, object> tweakableValueChanged = delegate(object oldValue, object newValue)
            {
                stringView.InputText.text = newValue.ToString();
            };

            tweakable.ValueChanged += tweakableValueChanged;
            stringView.Destroyed   += delegate
            {
                tweakable.ValueChanged -= tweakableValueChanged;
            };
            stringView.ValueChanged += tweakable.SetValue;
        }
Exemple #2
0
        public ITweakable RegisterTweakable <T>(TweakableInfo <T> info, FieldInfo fieldInfo, object instance = null)
        {
            ITweakable tweakable = TweakableFactory.MakeTweakableFromInfo(info, fieldInfo, instance);

            RegisterTweakable(tweakable);
            return(tweakable);
        }
Exemple #3
0
        public InspectorBoolView MakeEditBoolView(ITweakable tweakable)
        {
            InspectorBoolView boolView = inspectorView.InstantiateInspectorComponent(inspectorView.BoolEditPrefab);
            bool isOn = (bool)tweakable.GetValue();

            boolView.Toggle.isOn     = isOn;
            boolView.ToggleText.text = isOn.ToString();
            boolView.ValueChanged   += delegate(bool newValue)
            {
                tweakable.SetValue(newValue);
                boolView.ToggleText.text = newValue.ToString();
            };
            Action <object, object> tweakableValueChanged = delegate(object oldValue, object newValue)
            {
                boolView.Toggle.isOn     = (bool)newValue;
                boolView.ToggleText.text = newValue.ToString();
            };

            tweakable.ValueChanged += tweakableValueChanged;
            boolView.Destroyed     += delegate
            {
                tweakable.ValueChanged -= tweakableValueChanged;
            };
            boolView.gameObject.SetActive(value: true);
            return(boolView);
        }
        private IEnumerator Start()
        {
            IScanner scanner = new Scanner();

            tweaker = new Tweaker();
            TweakerOptions options = TweakerOptions.GetDefaultWithAdditionalFlags(TweakerOptionFlags.IncludeTests);

            tweaker.Init(options, scanner);
            AutoTweakable.Manager = tweaker.Tweakables;
            new TestClass(disposeTweakable: false);
            ITweakable tweakable = tweaker.Tweakables.GetTweakable(new SearchOptions("TestClass.AutoInt#"));

            IntegrationTest.Assert(tweakable != null);
            uint counter = 0u;

            while (tweaker.Tweakables.GetTweakable(new SearchOptions("TestClass.AutoInt#")) != null)
            {
                GC.Collect();
                counter++;
                if (counter > 1000)
                {
                    IntegrationTest.Fail("Failed to finalize AutoTweakable after " + counter + " frames.");
                    yield break;
                }
                yield return(null);
            }
            IntegrationTest.Pass();
        }
        public void ProcessAttribute(TweakableAttribute input, MemberInfo memberInfo, IBoundInstance instance = null)
        {
            ITweakable          tweakable           = null;
            AutoTweakableResult autoTweakableResult = null;

            if (memberInfo.MemberType == MemberTypes.Field)
            {
                FieldInfo fieldInfo = (FieldInfo)memberInfo;
                if (fieldInfo.FieldType.IsSubclassOf(typeof(AutoTweakable)))
                {
                    AutoTweakable  instance2     = fieldInfo.GetValue(instance.Instance) as AutoTweakable;
                    FieldInfo      field         = fieldInfo.FieldType.GetField("value", BindingFlags.Instance | BindingFlags.Public);
                    IBoundInstance boundInstance = BoundInstanceFactory.Create(instance2, instance.UniqueId);
                    tweakable           = TweakableFactory.MakeTweakable(input, field, boundInstance, memberInfo);
                    autoTweakableResult = new AutoTweakableResult();
                    autoTweakableResult.autoTweakable = boundInstance.Instance as AutoTweakable;
                    autoTweakableResult.tweakble      = tweakable;
                    autoTweakableResult.uniqueId      = boundInstance.UniqueId;
                }
                if (autoTweakableResult != null)
                {
                    ProvideResult(autoTweakableResult);
                }
                return;
            }
            throw new ProcessorException("AutoTweakableProcessor cannot process non FieldInfo types");
        }
Exemple #6
0
        public InspectorToggleValueView MakeToggleValueView(ITweakable tweakable, IToggleTweakable toggleTweakable, int toggleIndex, ToggleGroup group)
        {
            InspectorToggleValueView valueView = inspectorView.InstantiateInspectorComponent(inspectorView.ToggleValuePrefab);

            valueView.Toggle.group    = group;
            valueView.Toggle.isOn     = toggleTweakable.CurrentIndex == toggleIndex;
            valueView.ToggleText.text = toggleTweakable.GetNameByIndex(toggleIndex);
            Action <object, object> tweakableValueChanged = delegate
            {
                if (toggleTweakable.CurrentIndex == toggleIndex && !valueView.Toggle.isOn)
                {
                    valueView.Toggle.isOn = true;
                }
            };

            tweakable.ValueChanged += tweakableValueChanged;
            valueView.Destroyed    += delegate
            {
                tweakable.ValueChanged -= tweakableValueChanged;
            };
            valueView.Toggle.onValueChanged.AddListener(delegate(bool isOn)
            {
                if (isOn && toggleIndex != toggleTweakable.CurrentIndex)
                {
                    toggleTweakable.SetValueByName(toggleTweakable.GetNameByIndex(toggleIndex));
                }
            });
            return(valueView);
        }
 public void Dispose()
 {
     if (tweakable.Manager != null && CheckValidTweakable() && tweakable != null)
     {
         Manager.UnregisterTweakable(tweakable);
     }
     tweakable = null;
 }
Exemple #8
0
        public InspectorStringView MakeEditSerializedStringView(ITweakable tweakable, ITweakerSerializer serializer)
        {
            InspectorStringView inspectorStringView = inspectorView.InstantiateInspectorComponent(inspectorView.StringEditPrefab);

            inspectorStringView.InputText.targetGraphic.color = successColor;
            inspectorStringView.StartCoroutine(delayInitEditSerializedStringView(inspectorStringView, tweakable, serializer));
            return(inspectorStringView);
        }
Exemple #9
0
        public InspectorStringView MakeEditNumericView(ITweakable tweakable)
        {
            InspectorStringView stringView = inspectorView.InstantiateInspectorComponent(inspectorView.StringSmallEditPrefab);

            stringView.InputText.text = tweakable.GetValue().ToString();
            stringView.ValueChanged  += delegate(string newValue)
            {
                object  obj = null;
                double  result2;
                decimal result3;
                if (long.TryParse(newValue, out var result))
                {
                    obj = result;
                }
                else if (double.TryParse(newValue, out result2))
                {
                    obj = result2;
                }
                else if (decimal.TryParse(newValue, out result3))
                {
                    obj = result3;
                }
                if (obj == null)
                {
                    logger.Warn("Failed to parse string to numeric type: {0}", newValue);
                    stringView.InputText.targetGraphic.color = errorColor;
                }
                else
                {
                    object obj2 = Convert.ChangeType(obj, tweakable.TweakableType);
                    if (obj2 == null)
                    {
                        logger.Warn("Failed to convert value '{0}' of type {1} to tweakable of type {2}.", obj.ToString(), obj.GetType().FullName, tweakable.TweakableType.FullName);
                        stringView.InputText.targetGraphic.color = errorColor;
                    }
                    else
                    {
                        tweakable.SetValue(obj2);
                        stringView.InputText.targetGraphic.color = successColor;
                        stringView.InputText.text = tweakable.GetValue().ToString();
                    }
                }
            };
            Action <object, object> tweakableValueChanged = delegate(object oldValue, object newValue)
            {
                stringView.InputText.text = newValue.ToString();
                stringView.InputText.targetGraphic.color = successColor;
            };

            tweakable.ValueChanged += tweakableValueChanged;
            stringView.Destroyed   += delegate
            {
                tweakable.ValueChanged -= tweakableValueChanged;
            };
            stringView.gameObject.SetActive(value: true);
            return(stringView);
        }
Exemple #10
0
 public void RegisterTweakable(ITweakable tweakable)
 {
     if (tweakable.Manager != null && tweakable.Manager != this)
     {
         tweakable.Manager.UnregisterTweakable(tweakable);
     }
     tweakable.Manager = this;
     baseManager.RegisterObject(tweakable);
 }
Exemple #11
0
        public InspectorStringView MakeEditStringView(ITweakable tweakable)
        {
            InspectorStringView inspectorStringView = inspectorView.InstantiateInspectorComponent(inspectorView.StringEditPrefab);

            inspectorStringView.gameObject.SetActive(value: true);
            inspectorStringView.InputText.targetGraphic.color = successColor;
            inspectorStringView.StartCoroutine(delayInitEditStringView(inspectorStringView, tweakable));
            return(inspectorStringView);
        }
 private static void OnResultProvided(object sender, ScanResultArgs <AutoTweakableResult> e)
 {
     if (CheckForManager())
     {
         ITweakable tweakble = e.result.tweakble;
         Manager.RegisterTweakable(tweakble);
         e.result.autoTweakable.tweakable = tweakble;
         e.result.autoTweakable.UniqueId  = e.result.uniqueId;
     }
 }
Exemple #13
0
        private IEnumerable <IInspectorContentView> MakeContentViews(ITweakable tweakable)
        {
            yield return(contentFactory.MakeDescriptionView(tweakable.Description));

            if (tweakable.TweakableType == typeof(string))
            {
                yield return(contentFactory.MakeEditStringView(tweakable));
            }
            else if (tweakable.TweakableType == typeof(bool))
            {
                yield return(contentFactory.MakeEditBoolView(tweakable));
            }
            else if (!tweakable.TweakableType.IsEnum)
            {
                if (tweakable.TweakableType.IsNumericType())
                {
                    yield return(contentFactory.MakeEditNumericView(tweakable));

                    if (tweakable.HasRange && !TweakerFlagsUtil.IsSet(TweakableUIFlags.HideRangeSlider, tweakable))
                    {
                        yield return(contentFactory.MakeSliderView(tweakable));
                    }
                }
                else
                {
                    yield return(contentFactory.MakeEditSerializedStringView(tweakable, gridController.Console.Serializer));
                }
            }
            if (tweakable.HasStep)
            {
                yield return(contentFactory.MakeStepperView(tweakable));
            }
            if (tweakable.HasToggle)
            {
                InspectorToggleGroupView groupView = contentFactory.MakeToggleGroupView();
                yield return(groupView);

                IToggleTweakable toggle = tweakable.Toggle;
                for (int i = 0; i < toggle.ToggleCount; i++)
                {
                    yield return(contentFactory.MakeToggleValueView(tweakable, toggle, i, groupView.ToggleGroup));
                }
            }
        }
Exemple #14
0
 private void BindArgsToTweakables()
 {
     base.Children.Add(new InvokableNode(null));
     Type[] parameterTypes = Invokable.ParameterTypes;
     argTweakables = new ITweakable[parameterTypes.Length];
     for (int i = 0; i < parameterTypes.Length; i++)
     {
         Type          tweakableType = parameterTypes[i];
         ParameterInfo parameterInfo = Invokable.Parameters[i];
         object        virtualFieldRef;
         ITweakable    tweakable = TweakableFactory.MakeTweakable(tweakableType, parameterInfo.Name, Invokable.InvokableInfo.ArgDescriptions[i], parameterInfo.GetCustomAttributes(typeof(Attribute), inherit: true) as Attribute[], out virtualFieldRef);
         argTweakables[i] = tweakable;
         if (parameterInfo.IsOptional && (parameterInfo.Attributes & ParameterAttributes.HasDefault) == ParameterAttributes.HasDefault && !(parameterInfo.DefaultValue is DBNull))
         {
             tweakable.SetValue(parameterInfo.DefaultValue);
         }
         base.Children.Add(new TweakableNode(tweakable, virtualFieldRef));
     }
 }
        public static ITweakable MakeTweakable(Type tweakableType, string name, string description, Attribute[] attributes, out object virtualFieldRef)
        {
            TweakerRangeAttribute            attribute  = null;
            StepSizeAttribute                attribute2 = null;
            List <NamedToggleValueAttribute> list       = new List <NamedToggleValueAttribute>();
            List <ICustomTweakerAttribute>   list2      = new List <ICustomTweakerAttribute>();

            if (attributes != null)
            {
                foreach (Attribute attribute3 in attributes)
                {
                    if (attribute3 is TweakerRangeAttribute)
                    {
                        attribute = (TweakerRangeAttribute)attribute3;
                    }
                    else if (attribute3 is StepSizeAttribute)
                    {
                        attribute2 = (StepSizeAttribute)attribute3;
                    }
                    else if (attribute3 is NamedToggleValueAttribute)
                    {
                        list.Add((NamedToggleValueAttribute)attribute3);
                    }
                    else if (attribute3 is ICustomTweakerAttribute)
                    {
                        list2.Add((ICustomTweakerAttribute)attribute3);
                    }
                }
            }
            object     obj    = MakeTweakableRange(tweakableType, attribute);
            object     obj2   = MakeTweakableStepSize(tweakableType, attribute2, name);
            Array      array  = MakeTweakableToggleValues(tweakableType, list.ToArray());
            Type       type   = typeof(TweakableInfo <>).MakeGenericType(tweakableType);
            Type       type2  = typeof(VirtualField <>).MakeGenericType(tweakableType);
            Type       type3  = typeof(BaseTweakable <>).MakeGenericType(tweakableType);
            object     value  = Activator.CreateInstance(type, name, obj, obj2, array, 0u, list2.ToArray(), description);
            object     obj3   = Activator.CreateInstance(type2);
            ITweakable result = Activator.CreateInstance(type3, Convert.ChangeType(value, type), Convert.ChangeType(obj3, type2)) as ITweakable;

            virtualFieldRef = obj3;
            return(result);
        }
Exemple #16
0
 protected override void OnInspectNode()
 {
     if (base.CurrentNode.Type != BaseNode.NodeType.Tweakable)
     {
         logger.Error("Invalid node type assigned to tweakable controller: {0}", base.CurrentNode.Type);
         return;
     }
     Tweakable = base.CurrentNode.Tweakable;
     base.OnInspectNode();
     view.Header.TypeText.text = Tweakable.TweakableType.FullName;
     foreach (IInspectorContentView item in MakeContentViews(Tweakable))
     {
         if (item != null)
         {
             contentViews.Add(item);
         }
         else
         {
             view.Header.TypeText.text = "[Unsupported] " + Tweakable.TweakableType.FullName;
         }
     }
 }
Exemple #17
0
        public InspectorStepperView MakeStepperView(ITweakable tweakable)
        {
            InspectorStepperView inspectorStepperView = inspectorView.InstantiateInspectorComponent(inspectorView.StepperPrefab);

            inspectorStepperView.NextClicked += delegate
            {
                if (tweakable.HasStep)
                {
                    IStepTweakable step2 = tweakable.Step;
                    step2.StepNext();
                }
            };
            inspectorStepperView.PrevClicked += delegate
            {
                if (tweakable.HasStep)
                {
                    IStepTweakable step = tweakable.Step;
                    step.StepPrevious();
                }
            };
            return(inspectorStepperView);
        }
Exemple #18
0
        public InspectorSliderView MakeSliderView(ITweakable tweakable)
        {
            InspectorSliderView sliderView = inspectorView.InstantiateInspectorComponent(inspectorView.SliderPrefab);
            Type tweakableType             = tweakable.TweakableType;

            if (!tweakableType.IsNumericType())
            {
                return(null);
            }
            if (tweakableType == typeof(int) || tweakableType == typeof(uint) || tweakableType == typeof(long) || tweakableType == typeof(ulong) || tweakableType == typeof(short) || tweakableType == typeof(ushort))
            {
                sliderView.Slider.wholeNumbers = true;
            }
            else
            {
                sliderView.Slider.wholeNumbers = false;
            }
            sliderView.Slider.minValue = (float)Convert.ChangeType(tweakable.MinValue, typeof(float));
            sliderView.Slider.maxValue = (float)Convert.ChangeType(tweakable.MaxValue, typeof(float));
            sliderView.Slider.value    = (float)Convert.ChangeType(tweakable.GetValue(), typeof(float));
            sliderView.ValueChanged   += delegate(float newValue)
            {
                tweakable.SetValue(Convert.ChangeType(newValue, tweakable.TweakableType));
            };
            Action <object, object> tweakableValueChanged = delegate(object oldValue, object newValue)
            {
                sliderView.Slider.value = (float)Convert.ChangeType(newValue, typeof(float));
            };

            tweakable.ValueChanged += tweakableValueChanged;
            sliderView.Destroyed   += delegate
            {
                tweakable.ValueChanged -= tweakableValueChanged;
            };
            return(sliderView);
        }
Exemple #19
0
 public T GetTweakableValue <T>(ITweakable tweakable)
 {
     return((T)tweakable.GetValue());
 }
Exemple #20
0
 public void SetTweakableValue <T>(ITweakable tweakable, T value)
 {
     tweakable.SetValue(value);
 }
Exemple #21
0
 public void UnregisterTweakable(ITweakable tweakable)
 {
     baseManager.UnregisterObject(tweakable);
 }
Exemple #22
0
 public TweakableTileController(IHexGridController console, TweakableTileView view, HexGridCell <BaseNode> cell)
     : base(console, view, cell)
 {
     tweakable = base.Node.Tweakable;
 }
Exemple #23
0
 public TweakableNode(ITweakable tweakable)
     : base(tweakable.Name)
 {
     Tweakable = tweakable;
 }
Exemple #24
0
        public IEnumerator delayInitEditSerializedStringView(InspectorStringView stringView, ITweakable tweakable, ITweakerSerializer serializer)
        {
            yield return(null);

            object value = tweakable.GetValue();

            if (value != null)
            {
                stringView.InputText.text = serializer.Serialize(value);
            }
            else
            {
                stringView.InputText.text = "";
            }
            stringView.ValueChanged += delegate(string newValue)
            {
                object obj = serializer.Deserialize(newValue, tweakable.TweakableType);
                if (obj != null)
                {
                    tweakable.SetValue(obj);
                }
                else
                {
                    logger.Warn("Failed to deserialize string to type '" + tweakable.TweakableType.FullName + "': " + newValue);
                }
            };
            Action <object, object> tweakableValueChanged = delegate(object oldValue, object newValue)
            {
                stringView.InputText.text = serializer.Serialize(newValue);
            };

            tweakable.ValueChanged += tweakableValueChanged;
            stringView.Destroyed   += delegate
            {
                tweakable.ValueChanged -= tweakableValueChanged;
            };
            stringView.gameObject.SetActive(value: true);
        }
Exemple #25
0
 public TweakableNode(ITweakable tweakable, object virtualFieldRef)
     : this(tweakable)
 {
     this.virtualFieldRef = virtualFieldRef;
 }