public void SetState(BasePlayer player, GUIElementBase definition) { var state = GetState(player, definition); if (state == null) { return; } foreach (var kvp in state) { definition.GetType().GetProperty(kvp.Key, BindingFlags.Instance | BindingFlags.Public).SetValue(definition, kvp.Value); } }
public void ChangeState(BasePlayer player, GUIElementBase definition, StateSetter setter) { var state = setter.Invoke(GetState(player, definition)); if (state == null) { return; } _states[player][GetElementHash(definition)] = state; foreach (var kvp in state) { definition.GetType().GetProperty(kvp.Key, BindingFlags.Instance | BindingFlags.Public).SetValue(definition, kvp.Value); } }
public void RegisterDefaultState(GUIElementBase definition, bool full = false) { var key = GetElementHash(definition); var value = new StateCollection(); var props = definition.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public); foreach (var prop in props) { value.Add(prop.Name, prop.GetValue(definition)); } if (full) { var objs = definition.Render(); foreach (var obj in objs) { var name = obj.Name; } } _defaultStates.Add(key, value); }
private string GetElementHash(GUIElementBase element) { return(new StringBuilder().Append(element.GetType().FullName).Append(element.Render()?.First().Name).Append(element.GetHashCode()).ToString()); }