示例#1
0
    public float[] RepeatActions(List <float> vectorObs, List <MLAction> actions, bool shouldDodge)
    {
        MLInput input = new MLInput(vectorObs.ToArray());

        // Sequence
        if (input.IsDodgeReady()) // Can punch / dodge
        {
            // Dodging
            if (shouldDodge && lastAction != input.GetOpponentAction() && input.GetOpponentAction() == MLAction.PUNCH_LEFT)
            {
                lastAction = input.GetOpponentAction();
                actionIdx  = 0;
                return(MLActionFactory.GetVectorAction(MLAction.DODGE_RIGHT));
            }

            if (shouldDodge && lastAction != input.GetOpponentAction() && input.GetOpponentAction() == MLAction.PUNCH_RIGHT)
            {
                lastAction = input.GetOpponentAction();
                actionIdx  = 0;
                return(MLActionFactory.GetVectorAction(MLAction.DODGE_LEFT));
            }

            lastAction = input.GetOpponentAction();
        }

        if (input.IsPunchReady())
        {
            int myComboState = input.GetMyComboState();
            if (actions.Count == 2)
            {
                switch (myComboState)
                {
                case 0: return(MLActionFactory.GetVectorAction(actions[0]));

                case 1: return(MLActionFactory.GetVectorAction(actions[1]));

                case 2: return(MLActionFactory.GetVectorAction(actions[1]));

                default: return(MLActionFactory.GetVectorAction(MLAction.NOTHING));
                }
            }
            if (actions.Count == 3)
            {
                switch (myComboState)
                {
                case 0: return(MLActionFactory.GetVectorAction(actions[0]));

                case 1: return(MLActionFactory.GetVectorAction(actions[1]));

                case 2: return(MLActionFactory.GetVectorAction(actions[1]));

                case 3: return(MLActionFactory.GetVectorAction(actions[2]));

                case 4: return(MLActionFactory.GetVectorAction(actions[2]));

                default: return(MLActionFactory.GetVectorAction(MLAction.NOTHING));
                }
            }
            return(MLActionFactory.GetVectorAction(actions[0]));
        }

        return(MLActionFactory.GetVectorAction(MLAction.NOTHING));
    }