private void Update() { //Debug.Log("currentTricks.Count = " + currentTricks.Count); //If there are any tricks that can possibly be done given the player's recent inputs, if (currentTricks.Count > 0) { currentLeeway += Time.deltaTime; //When the time to enter combos runs out, if (currentLeeway >= trickLeeway) { if (lastInput != null) { if (performedTrickStep != null) { //Perform the last saved trick. TrickStep(performedTrickStep); } performedTrickStep = null; performedTrick = null; lastInput = null; } ResetTricks(); } } else { currentLeeway = 0; } //Clear last frame's input. TrickInput input = null; //This is where we look for input. // //Currently this does not allow for multiple tricks in the same jump. I don't think we want that. if (stateManager.currentState == PlayerStateManager.PlayerState.Airborne) { if (Input.GetKeyDown(upKey)) { input = new TrickInput(TrickStepType.up); } if (Input.GetKeyDown(downKey)) { input = new TrickInput(TrickStepType.down); } if (Input.GetKeyDown(leftKey)) { input = new TrickInput(TrickStepType.left); } if (Input.GetKeyDown(rightKey)) { input = new TrickInput(TrickStepType.right); } if (Input.GetKeyDown(spaceKey)) { input = new TrickInput(TrickStepType.touch); } } //If the player did not input anything, exit update for this frame. if (input == null) { return; } //Store which input the player inputted. lastInput = input; //Create a list of tricks to remove. List <int> remove = new List <int>(); //For every trick that is currently possible. for (int i = 0; i < currentTricks.Count; i++) { Trick t = tricks[currentTricks[i]]; //Call the ContinueTrick method and if the input that was given this frame can complete this given trick. if (t.ContinueTrick(input)) { //Give the player more time to input more TrickSteps currentLeeway = 0; } else { //If that input was not valid for a given trick, get ready to remove that trick from the list of possible tricks. remove.Add(i); } } //if (skip) //{ // skip = false; // return; //} //For every trick that exists for (int i = 0; i < tricks.Count; i++) { //if that trick is already in the currentTricks list, continue the loop if (currentTricks.Contains(i)) { continue; } //if if (tricks[i].ContinueTrick(input)) { currentTricks.Add(i); currentLeeway = 0; } } //Remove all of the tricks that became invalid from the list of possible tricks. foreach (int i in remove) { if (remove.Count < currentTricks.Count) { if (i < currentTricks.Count) { currentTricks.RemoveAt(i); } } } }