Exemple #1
0
    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);
        }
    }
Exemple #2
0
    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);
            }
        }
    }
Exemple #3
0
 public SequenceNode(SequenceNode longNode, SequenceNode shortNode, CommandController.Command cmd)
 {
 }