private static void UpdateBind(string bindName, string[] controls) { IBind bind = BvBinds.ModifierGroup.GetBind(bindName); if (bind == null) { bind = BvBinds.MainGroup.GetBind(bindName); } if (bind == null) { ExceptionHandler.SendChatMessage("Error: The bind specified could not be found."); } else { bind.TrySetCombo(controls, true, false); } }
/// <summary> /// Replaces current bind combos with combos based on the given <see cref="BindDefinition"/>[]. Does not register new binds. /// </summary> public bool TryLoadBindData(IReadOnlyList <BindDefinition> bindData) { List <IControl> oldUsedControls; List <List <IBind> > oldBindMap; bool bindError = false; if (bindData != null && bindData.Count > 0) { oldUsedControls = usedControls; oldBindMap = bindMap; UnregisterControls(); usedControls = new List <IControl>(bindData.Count); bindMap = new List <List <IBind> >(bindData.Count); foreach (BindDefinition bindDef in bindData) { IBind bind = GetBind(bindDef.name); if (bind != null && !bind.TrySetCombo(bindDef.controlNames, false, false)) { bindError = true; break; } } if (bindError) { UnregisterControls(); usedControls = oldUsedControls; bindMap = oldBindMap; ReregisterControls(); } else { return(true); } } return(false); }
/// <summary> /// Removes the control at the index specified. /// </summary> private void RemoveControl(int index) { List <IControl> combo = new List <IControl>(bind.GetCombo()); if (index < combo.Count) { if (index == 0 && combo.Count == 1) { bind.ClearCombo(); UpdateBindText(); } else { combo.RemoveAt(index); if (bind.TrySetCombo(combo.ToArray(), false)) { UpdateBindText(); } } } }
/// <summary> /// Returns or sets the member associated with the given enum of the bind at the given index . /// </summary> private object GetOrSetBindMember(Vector2I index, object data, int memberEnum) { IBind bind = bindGroups[index.X][index.Y]; switch ((BindAccesssors)memberEnum) { case BindAccesssors.Name: return(bind.Name); case BindAccesssors.Analog: return(bind.Analog); case BindAccesssors.Index: return(bind.Index); case BindAccesssors.IsPressed: return(bind.IsPressed); case BindAccesssors.IsNewPressed: return(bind.IsNewPressed); case BindAccesssors.IsPressedAndHeld: return(bind.IsPressedAndHeld); case BindAccesssors.OnNewPress: { var eventData = (MyTuple <bool, Action>)data; if (eventData.Item1) { bind.NewPressed += eventData.Item2; } else { bind.NewPressed -= eventData.Item2; } break; } case BindAccesssors.OnPressAndHold: { var eventData = (MyTuple <bool, Action>)data; if (eventData.Item1) { bind.PressedAndHeld += eventData.Item2; } else { bind.PressedAndHeld -= eventData.Item2; } break; } case BindAccesssors.OnRelease: { var eventData = (MyTuple <bool, Action>)data; if (eventData.Item1) { bind.Released += eventData.Item2; } else { bind.Released -= eventData.Item2; } break; } case BindAccesssors.GetCombo: return(bind.GetComboIndices()); case BindAccesssors.TrySetComboWithIndices: { var comboData = (MyTuple <IReadOnlyList <int>, bool, bool>)data; return(bind.TrySetCombo(comboData.Item1, comboData.Item2, comboData.Item3)); } case BindAccesssors.TrySetComboWithNames: { var comboData = (MyTuple <IReadOnlyList <string>, bool, bool>)data; return(bind.TrySetCombo(comboData.Item1, comboData.Item2, comboData.Item3)); } case BindAccesssors.ClearCombo: bind.ClearCombo(); break; case BindAccesssors.ClearSubscribers: bind.ClearSubscribers(); break; } return(null); }