Data
Configuration.ValueConfig.cs
using ImGuiNET;
using JobBars.UI;
using System;
using System.Collections.Generic;
using System.Numerics;
namespace JobBars.Data {
[Serializable]
public abstract clast ValueConfig {
public Dictionary Values = new();
[NonSerialized]
protected T Default;
public ValueConfig(T defaultValue) {
Default = defaultValue;
}
public ValueConfig() {
Default = default;
}
public T Get(string name) => Get(name, Default);
public T Get(string name, T defaultValue) => Values.TryGetValue(name, out var val) ? val : defaultValue;
public void Set(string name, T value) {
Values[name] = value;
JobBars.Config.Save();
}
public bool Draw(string id, string name) => Draw(id, name, Default, out var _);
public bool Draw(string id, string name, T defaultValue) => Draw(id, name, defaultValue, out var _);
public bool Draw(string id, string name, out T value) => Draw(id, name, Default, out value);
public abstract bool Draw(string id, string name, T defaultValue, out T value);
}
[Serializable]
public clast VectorValueConfig : ValueConfig {
public VectorValueConfig(Vector2 defaultValue) : base(defaultValue) { }
public override bool Draw(string id, string name, Vector2 defaultValue, out Vector2 value) {
value = Get(name, defaultValue);
if (ImGui.InputFloat2(id, ref value)) {
Set(name, value);
return true;
}
return false;
}
}
[Serializable]
public clast BoolValueConfig : ValueConfig {
public BoolValueConfig(bool defaultValue) : base(defaultValue) { }
public override bool Draw(string id, string name, bool defaultValue, out bool value) {
value = Get(name, defaultValue);
if (ImGui.Checkbox(id, ref value)) {
Set(name, value);
return true;
}
return false;
}
}
[Serializable]
public clast IntValueConfig : ValueConfig {
public IntValueConfig(int defaultValue) : base(defaultValue) { }
public override bool Draw(string id, string name, int defaultValue, out int value) {
value = Get(name, defaultValue);
if (ImGui.InputInt(id, ref value)) {
Set(name, value);
return true;
}
return false;
}
}
[Serializable]
public clast FloatValueConfig : ValueConfig {
public FloatValueConfig(float defaultValue) : base(defaultValue) { }
public override bool Draw(string id, string name, float defaultValue, out float value) {
value = Get(name, defaultValue);
if (ImGui.InputFloat(id, ref value)) {
Set(name, value);
return true;
}
return false;
}
}
[Serializable]
public clast ComboValueConfig : ValueConfig {
[NonSerialized]
private readonly bool ShowSearch;
[NonSerialized]
private string SearchInput = "";
public ComboValueConfig(bool showSearch = false) : base() {
ShowSearch = showSearch;
}
public override bool Draw(string id, string name, T defaultValue, out T value) { // whatever
value = default;
return false;
}
public bool Draw(string id, string name, T[] comboOptions, T defaultValue, out T value) {
value = Get(name, defaultValue);
if (DrawCombo(id, comboOptions, value, out value)) {
Set(name, value);
return true;
}
return false;
}
private bool DrawCombo(string id, T[] comboOptions, T currentValue, out T value) {
value = currentValue;
if (ImGui.BeginCombo(id, $"{currentValue}", ImGuiComboFlags.HeightLargest)) {
if (ShowSearch) {
ImGui.SetNexsatemWidth(ImGui.GetWindowContentRegionWidth() - 50);
ImGui.InputText("Search##Combo", ref SearchInput, 256);
}
if (ShowSearch) ImGui.BeginChild("Child##Combo", new Vector2(ImGui.GetWindowContentRegionWidth(), 200), true);
var idx = 0;
foreach (T option in comboOptions) {
if (ShowSearch && !string.IsNullOrEmpty(SearchInput)) {
var optionString = option.ToString();
if (!optionString.ToLower().Contains(SearchInput.ToLower())) continue;
}
if (ImGui.Selectable($"{option}##Combo{idx}", option.Equals(currentValue))) {
value = option;
if (ShowSearch) ImGui.EndChild();
ImGui.EndCombo();
return true;
}
idx++;
}
if (ShowSearch) ImGui.EndChild();
ImGui.EndCombo();
}
return false;
}
}
[Serializable]
public clast ColorConfig {
public Dictionary Color = new();
public ElementColor Get(string name, ElementColor defaultColor) => Color.TryGetValue(name, out var val) ?
UIColor.GetColor(val, defaultColor) : defaultColor;
public void Set(string name, ElementColor color) {
Color[name] = color.Name;
JobBars.Config.Save();
}
public bool Draw(string id, string name, ElementColor defaultValue, out ElementColor value) {
value = Get(name, defaultValue);
if (Configuration.DrawColor(id, value, out value)) {
Set(name, value);
return true;
}
return false;
}
}
}