/// <summary>used to enable/ disable an input definition</summary> public void SetActive(InputIdxCache idx, bool active) { inputGroups[idx.groupIdx].inputs[idx.inputIdx].isActive = active; }
/// <summary>will check if the prim/secondary button of the input is active as defined</summary> public bool IsHeld(InputIdxCache idx) { InputDefinition def = inputGroups[idx.groupIdx].inputs[idx.inputIdx]; return ( (def.primaryButton != KeyCode.None && Input.GetKey(def.primaryButton)) || (def.secondaryButton != KeyCode.None && Input.GetKey(def.secondaryButton)) ); }
/// <summary>returns true of the two definitions uses the same buttons</summary> public bool UsesSameButtons(InputIdxCache idx1, InputIdxCache idx2) { return (inputGroups[idx1.groupIdx].inputs[idx1.inputIdx].primaryButton == inputGroups[idx2.groupIdx].inputs[idx2.inputIdx].primaryButton || inputGroups[idx1.groupIdx].inputs[idx1.inputIdx].secondaryButton == inputGroups[idx2.groupIdx].inputs[idx2.inputIdx].secondaryButton); }
/// <summary>Find input and return the idx of the group it is in and input's idx. null if not found</summary> public InputIdxCache GetInputIdx(string groupName, string inputName) { int i = GetInputGroupIdx(groupName); if (i >= 0) { for (int j = 0; j < inputGroups[i].inputs.Count; j++) { if (inputGroups[i].inputs[j].inputName.Equals(inputName)) { InputIdxCache idx = new InputIdxCache() { groupIdx = i, inputIdx = j }; return idx; } } } return new InputIdxCache() { groupIdx = -1, inputIdx = -1 }; }
public InputDefinition GetInputDefinition(InputIdxCache idx) { return inputGroups[idx.groupIdx].inputs[idx.inputIdx]; }
/// <summary>add a new input and return its idx and the idx for the group it is in. will return groupIdx=-1 and inputIdx=-1 if the inputdef was not added</summary> public InputIdxCache AddInput(InputDefinition definition) { if (!definition.isUsed) return new InputIdxCache() { groupIdx = -1, inputIdx = -1 }; // not actually used, dont add InputIdxCache idx = new InputIdxCache(); // get the group idx, else add group idx.groupIdx = GetInputGroupIdx(definition.groupName); if (idx.groupIdx < 0) { InputGroup group = new InputGroup() { name = definition.groupName }; inputGroups.Add(group); idx.groupIdx = inputGroups.IndexOf(group); } // check if the input was already raged before and show warning if so (someone forgot to unload an input binder) int inputIdx = GetInputIdx(idx.groupIdx, definition.inputName); if (inputIdx < 0) { inputGroups[idx.groupIdx].inputs.Add(definition); idx.inputIdx = inputGroups[idx.groupIdx].inputs.IndexOf(definition); if (definition.callback != null) callbackList.Add(definition); // add to special list too else if (definition.isCustom && !string.IsNullOrEmpty(definition.eventGUID)) { RPGEvent e = UniRPGGlobal.DB.GetEvent(new GUID(definition.eventGUID)); if (e != null) { definition.cachedEvent = e; callbackList.Add(definition); } } } else { if (!definition.isCustom) Debug.LogError(string.Format("InputBinder Error. It seems like you are trying to load an InputBinder that is already loaded. Forgot to unload it when you should have? {0} :: {1}", definition.groupName, definition.inputName)); return new InputIdxCache() { groupIdx = -1, inputIdx = -1 }; } return idx; }