protected internal override IEnumerator RespondToCommandInternal(string inputCommand) { inputCommand = inputCommand.ToLowerInvariant().Trim(); var buttons = new Dictionary <MonoBehaviour, string>(); var wireSeq = (WireSequenceComponent)Module.BombComponent; if (inputCommand.Equals("cycle", StringComparison.InvariantCultureIgnoreCase)) { yield return(null); int page = (int)CurrentPageField.GetValue(Module.BombComponent); for (int i = page - 1; i >= 0; i--) { IEnumerator changePage = wireSeq.ChangePage(i + 1, i); while (changePage.MoveNext()) { yield return(changePage.Current); } } for (int i = 0; i < page; i++) { yield return(new WaitForSecondsWithCancel(3.0f, false)); IEnumerator changePage = wireSeq.ChangePage(i, i + 1); while (changePage.MoveNext()) { yield return(changePage.Current); } } yield return("trycancel The cycle command of Wire Sequences was cancelled"); yield break; } if (inputCommand.EqualsAny("up", "u")) { yield return("up"); yield return(DoInteractionClick(_upButton)); } else if (inputCommand.EqualsAny("down", "d")) { yield return("down"); yield return(DoInteractionClick(_downButton, "attempting to move down.")); } else { if (!inputCommand.StartsWith("cut ", StringComparison.InvariantCultureIgnoreCase) && !inputCommand.StartsWith("c ", StringComparison.InvariantCultureIgnoreCase)) { yield break; } string[] sequence = inputCommand.Split(new[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries); foreach (string wireIndexString in sequence.Skip(1)) { if (wireIndexString.EqualsAny("up", "u")) { buttons.Add(_upButton, "This will never cause a strike Kappa"); break; } if (wireIndexString.EqualsAny("down", "d")) { buttons.Add(_downButton, "attempting to move down."); break; } if (!int.TryParse(wireIndexString, out int wireIndex)) { yield break; } wireIndex--; if (!CanInteractWithWire(wireIndex)) { yield break; } WireSequenceWire wire = GetWire(wireIndex); if (wire == null) { yield break; } if (wire.Snipped || buttons.ContainsKey(wire)) { continue; } buttons.Add(wire, $"cutting Wire {wireIndex + 1}."); } yield return("wire sequence"); foreach (KeyValuePair <MonoBehaviour, string> button in buttons) { yield return("trycancel"); yield return(DoInteractionClick(button.Key, button.Value)); } } }
private bool CanInteractWithWire(int wireIndex) { int wirePageIndex = wireIndex / 3; return(wirePageIndex == (int)CurrentPageField.GetValue(Module.BombComponent)); }