void OnMappingChanged(Dictionary <string, DulibaWaitor.Command> newMap) { // If this happens twice per frame, the second occurance is the new black. leftButtons.ClearNewButtons(); rightButtons.ClearNewButtons(); foreach (var kvp in newMap) { string commandKey = kvp.Key; DulibaWaitor.Command newCommand = kvp.Value; Change change = Change.Create; ButtonGroup buttonsToChange = rightButtons; if (currentMap.ContainsKey(commandKey)) { DulibaWaitor.Command oldCommand = currentMap[commandKey]; if (oldCommand.disabled.HasValue != newCommand.disabled.HasValue) { change = Change.Nothing; } if (oldCommand.callback != newCommand.callback) { change = Change.Create; } } if (newCommand.leftHand) { buttonsToChange = leftButtons; } string quantity = ""; if (dulibaWaitor.workArea is Shelf import) { foreach (var action in dulibaWaitor.actions) { if (action.command == commandKey.ToLower()) { if (!import.items[action.pickupIndex].infinite) { quantity = import.items[action.pickupIndex].itemCount.ToString(); } break; } } } /* * switch (change) * { * * case Change.Nothing: * buttonsToChange.UpdateButton(new ButtonInfo() { name = newCommand.name, button = commandKey, enabled = !newCommand.disabled.HasValue, image = newCommand.image }); * break; * case Change.Create:*/ buttonsToChange.CreateButton(new ButtonInfo() { quantity = quantity, name = newCommand.name, button = commandKey, enabled = !newCommand.disabled.HasValue, image = newCommand.image }); /*break; * } */ //buttonsToChange.DisplayButton(new ButtonInfo() { name = command.name, button = commandKey, enabled = !command.disabled.HasValue, image = command.image }); } /* * foreach (var kvp in currentMap) * { * string commandKey = kvp.Key; * DulibaWaitor.Command command = kvp.Value; * ButtonGroup buttonsToChange = rightButtons; * * if (command.leftHand) * buttonsToChange = leftButtons; * * if (!newMap.ContainsKey(kvp.Key)) * buttonsToChange.DestroyButton(kvp.Key); * }*/ currentMap = newMap; }
void KeyAction(string button, DulibaInputKeys.KeyPress phase) { WorkArea currentWorkArea = waitor.workArea; foreach (var kvp in map) { string key = kvp.Key; DulibaWaitor.Command command = kvp.Value; if (button == key) { switch (phase) { case DulibaInputKeys.KeyPress.Down: if (command.disabled == null) { waitor.actionMap.Add(new DulibaWaitor.ActionMap(key, Time.time, Time.time + command.workTime * (1 / waitor.characterData.workTimeMultiplier), command)); var action = waitor.actionMap.GetByCommandString(key); float perc = Mathf.InverseLerp(action.startAction, action.endAction, Time.time); switch (command.leftHand) { case true: waitor.leftHand.radialImg.gameObject.SetActive(true); waitor.leftHand.radialImg.fillAmount = 0; break; default: waitor.rightHand.radialImg.gameObject.SetActive(true); waitor.rightHand.radialImg.fillAmount = 0; break; } } break; case DulibaInputKeys.KeyPress.Pressed: if (waitor.actionMap.Contains(key)) { if (Time.time > waitor.actionMap.GetByCommandString(key).endAction) { command.callback?.Invoke(); command.lateCallback?.Invoke(); waitor.actionMap.Remove(key); switch (command.leftHand) { case true: waitor.leftHand.radialImg.gameObject.SetActive(false); break; default: waitor.rightHand.radialImg.gameObject.SetActive(false); break; } } else { var action = waitor.actionMap.GetByCommandString(key); float perc = Mathf.InverseLerp(action.startAction, action.endAction, Time.time); switch (command.leftHand) { case true: waitor.leftHand.radialImg.fillAmount = perc; break; default: waitor.rightHand.radialImg.fillAmount = perc; break; } } } break; case DulibaInputKeys.KeyPress.Up: if (waitor.actionMap.Contains(key)) { waitor.actionMap.Remove(key); switch (command.leftHand) { case true: waitor.leftHand.radialImg.gameObject.SetActive(false); break; default: waitor.rightHand.radialImg.gameObject.SetActive(false); break; } } break; } } } }