public bool PushNewCommand(List <BinarySignalReader.SignalType> sequence, CommandController.Command cmd) { var currNode = RootNode; foreach (var signal in sequence) { if (signal == BinarySignalReader.SignalType.Long) { if (currNode.LongSignalNode == null) { currNode.LongSignalNode = new SequenceNode(null, null, CommandController.Command.Empty); } currNode = currNode.LongSignalNode; } else { if (currNode.ShortSignalNode == null) { currNode.ShortSignalNode = new SequenceNode(null, null, CommandController.Command.Empty); } currNode = currNode.ShortSignalNode; } } if (currNode.Command == CommandController.Command.Empty) { currNode.Command = cmd; return(true); } else { return(false); } }
private void handleOnEndSignalSequence(List <SignalType> sequence) { if (m_StateMachine.CurrentState >= GameState.DefineWalk) { if (m_StateMachine.CurrentState >= GameState.DefineWalk && m_StateMachine.CurrentState <= GameState.DefineDown) { var cmd = m_CommandController.SeqTree.GetCommand(sequence); if (cmd == CommandController.Command.Empty) { m_CacheSequence = sequence; m_StateMachine.IssueCommand(c_ProceedCmd); } else { // re-display hint text changeHintText(m_HintText.text); } } else if (m_StateMachine.CurrentState >= GameState.ConfirmWalk && m_StateMachine.CurrentState <= GameState.ConfirmDown) { if (sequence.Count == 1) { if (sequence[0] == SignalType.Short) { CommandController.Command index = (CommandController.Command)(m_StateMachine.CurrentState - GameState.ConfirmWalk); m_StateMachine.IssueCommand(c_ConfirmCmd); bool success = m_CommandController.SeqTree.PushNewCommand(m_CacheSequence, index); // debug StringBuilder builder = new StringBuilder(index.ToString() + ": "); foreach (var signal in m_CacheSequence) { builder.Append((signal == SignalType.Long)? "_ " : ". "); } cmdList.Add(builder.ToString()); } else if (sequence[0] == SignalType.Long) { m_StateMachine.IssueCommand(c_CancelCmd); } } } } else { if (matchSequences(sequence, m_TargetSequence)) { m_StateMachine.IssueCommand(c_CompleteCmd); } } }
public SequenceNode(SequenceNode longNode, SequenceNode shortNode, CommandController.Command cmd) { }