void ValidateCondition(PractiseStepCondition cond, System.Predicate <object[]> validator)
 {
     if (stepFinished || curStep == null)
     {
         return;
     }
     if (curStep.failCondition != null)
     {
         foreach (KeyValuePair <PractiseStepCondition, object[]> pair in curStep.failCondition)
         {
             if (pair.Key == cond && validator(pair.Value))
             {
                 Debug.Log("PractiseStep, Fail condition:" + cond + " matched. step:" + curStep.ID);
                 stepFailed   = true;
                 stepFinished = true;
                 return;
             }
         }
     }
     if (curStep.endCondition != null)
     {
         foreach (KeyValuePair <PractiseStepCondition, object[]> pair in curStep.endCondition)
         {
             if (pair.Key == cond && validator(pair.Value))
             {
                 Debug.Log("PractiseStep, End condition:" + cond + " matched. step:" + curStep.ID);
                 stepFinished = true;
                 return;
             }
         }
     }
 }
Esempio n. 2
0
    void ParseCondition(string text, out List <KeyValuePair <PractiseStepCondition, object[]> > cond)
    {
        if (string.IsNullOrEmpty(text))
        {
            cond = null;
        }

        cond = new List <KeyValuePair <PractiseStepCondition, object[]> >();
        foreach (string line in CommonFunction.SplitLines(text))
        {
            PractiseStepCondition condition = PractiseStepCondition.None;
            object[] parameters             = null;
            if (string.IsNullOrEmpty(line))
            {
                continue;
            }
            string[] tokens = line.Split(':');
            condition = (PractiseStepCondition)Enum.Parse(PractiseStepCondition.None.GetType(), tokens[0]);
            string[] strParams = null;
            if (tokens.Length == 2)
            {
                strParams = tokens[1].Split(',');
            }
            int index = 0;
            switch (condition)
            {
            case PractiseStepCondition.GrabBall:
            case PractiseStepCondition.CatchBall:
            case PractiseStepCondition.DoubleDribble:
            case PractiseStepCondition.Defended:
            case PractiseStepCondition.Undefended:
            case PractiseStepCondition.OnGround:
            case PractiseStepCondition.ReboundTiming:
                parameters = new object[] { int.Parse(strParams[0]) };
                break;

            case PractiseStepCondition.EnterRow:
                parameters = new object[] { int.Parse(strParams[0]), int.Parse(strParams[1]), int.Parse(strParams[2]) };
                break;

            case PractiseStepCondition.ButtonPress:
            case PractiseStepCondition.ButtonRelease:
                parameters = new object[] { ParseCommand(strParams[0]) };
                break;

            case PractiseStepCondition.EnterArea:
                parameters = new object[] { int.Parse(strParams[0]), ParseArea(strParams[1]) };
                break;

            case PractiseStepCondition.EnterState:
                parameters = new object[] { int.Parse(strParams[0]), ParsePlayerState(strParams[1]) };
                break;

            case PractiseStepCondition.Wait:
                parameters = new object[] { float.Parse(strParams[0]) };
                break;

            case PractiseStepCondition.Rebound:
            case PractiseStepCondition.ReboundInArea:
            case PractiseStepCondition.ReboundTooLate:
            case PractiseStepCondition.Blocked:
            case PractiseStepCondition.BlockInArea:
            case PractiseStepCondition.BlockTooLate:
                parameters = new object[] { int.Parse(strParams[0]), bool.Parse(strParams[1]) };
                break;

            case PractiseStepCondition.InDist:
                parameters = new object[] { int.Parse(strParams[0]), strParams[1], float.Parse(strParams[2]), bool.Parse(strParams[3]) };
                break;

            case PractiseStepCondition.Goal:
            case PractiseStepCondition.HitGround:
            case PractiseStepCondition.BlockTiming:
            case PractiseStepCondition.ClickScreenEffect:
                // no parameter
                break;
            }
            cond.Add(new KeyValuePair <PractiseStepCondition, object[]>(condition, parameters));
        }
    }
 bool HasCondition(PractiseStepCondition cond)
 {
     return(!stepFinished && curStep != null && (
                (curStep.endCondition != null && curStep.endCondition.FindAll((pair) => pair.Key == cond).Count > 0) ||
                (curStep.failCondition != null && curStep.failCondition.FindAll((pair) => pair.Key == cond).Count > 0)));
 }