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; }
public ITweakable RegisterTweakable <T>(TweakableInfo <T> info, FieldInfo fieldInfo, object instance = null) { ITweakable tweakable = TweakableFactory.MakeTweakableFromInfo(info, fieldInfo, instance); RegisterTweakable(tweakable); return(tweakable); }
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"); }
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; }
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); }
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); }
public void RegisterTweakable(ITweakable tweakable) { if (tweakable.Manager != null && tweakable.Manager != this) { tweakable.Manager.UnregisterTweakable(tweakable); } tweakable.Manager = this; baseManager.RegisterObject(tweakable); }
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; } }
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)); } } }
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); }
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; } } }
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); }
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); }
public T GetTweakableValue <T>(ITweakable tweakable) { return((T)tweakable.GetValue()); }
public void SetTweakableValue <T>(ITweakable tweakable, T value) { tweakable.SetValue(value); }
public void UnregisterTweakable(ITweakable tweakable) { baseManager.UnregisterObject(tweakable); }
public TweakableTileController(IHexGridController console, TweakableTileView view, HexGridCell <BaseNode> cell) : base(console, view, cell) { tweakable = base.Node.Tweakable; }
public TweakableNode(ITweakable tweakable) : base(tweakable.Name) { Tweakable = tweakable; }
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); }
public TweakableNode(ITweakable tweakable, object virtualFieldRef) : this(tweakable) { this.virtualFieldRef = virtualFieldRef; }