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; } } } }
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))); }