private void ExecuteRules(List <RulesInterface> rulesEngine) { foreach (RulesInterface rule in rulesEngine) { if (rule.condition(AIConditionChecking.GetConditions()) && !actionTaken) { characterAction = rule.action(); ExecuteAction(); actionTaken = true; } } }
// Update is called once per frame void Update() { if ((currentCharacter.IsAnimationPlaying() && !currentCharacter.GetIsJumping() && !currentCharacter.GetIsHit()) || currentCharacter.GetAnimationStatus() == AnimationStates.STANDING) { //In case the animation goes from walking to other animation, prevents from sliding behaviour rigidBody.velocity = new Vector2(0, 0); } rivalCharacter = rivalCharacters.transform.GetChild(0).GetComponent <CharacterFeatures>(); //Has to be done constantly in case it changes if (!currentCharacter.GetIsBlocked() && !currentCharacter.GetIsDead()) { AIConditionChecking.CheckTimer(currentTimer.GetTimer()); AIConditionChecking.CheckCharacterStates(currentCharacter); AIConditionChecking.CheckDistance(characterActions); AIConditionChecking.CheckCharacterHealth(currentTimer.GetTimer(), characters, rivalCharacters); AIConditionChecking.CheckCharacterSwap(characterAssist, currentCharacter, characters); if (currentCharacter.GetAnimationStatus() != AnimationStates.WALK_BACKWARDS || characterAction != AnimationStates.BLOCKING_JUMPING || characterAction != AnimationStates.BLOCKING_CROUCHING) { characterActions.StopBlocking(); } PerformWalkState(); BugFixStandingIsJumping(); if (Array.IndexOf(AnimationStates.GetIdleMovements(), currentCharacter.GetAnimationStatus()) >= 0) { Invoke("PerformNewAction", 2); ExecuteRules(rulesEngineSwapCharacter); if (Array.IndexOf(AnimationStates.GetAttacks(), rivalCharacter.GetAnimationStatus()) >= 0) { ExecuteRules(rulesEngineRivalAttacks); } if (Array.IndexOf(AnimationStates.GetTakingDamageStates(), rivalCharacter.GetAnimationStatus()) >= 0) { ExecuteRules(rulesEngineRivalIsHit); } if (Array.IndexOf(AnimationStates.GetBlockingStates(), rivalCharacter.GetAnimationStatus()) >= 0) { ExecuteRules(rulesEngineRivalBlocks); } if (rivalCharacter.GetAnimationStatus() == AnimationStates.WALK_BACKWARDS) { ExecuteRules(rulesEngineRivalBackwards); } if (rivalCharacter.GetAnimationStatus() == AnimationStates.WALK_FORWARDS) { ExecuteRules(rulesEngineRivalForwards); } if (rivalCharacter.GetAnimationStatus() == AnimationStates.JUMPING_BACKWARDS) { ExecuteRules(rulesEngineRivalJumpingBackwards); } if (rivalCharacter.GetAnimationStatus() == AnimationStates.JUMPING_FORWARDS) { ExecuteRules(rulesEngineRivalJumpingForwards); } if (rivalCharacter.GetAnimationStatus() == AnimationStates.STANDING || rivalCharacter.GetAnimationStatus() == AnimationStates.CROUCHING || rivalCharacter.GetAnimationStatus() == AnimationStates.JUMPING_DOWN || rivalCharacter.GetAnimationStatus() == AnimationStates.JUMPING_UP || rivalCharacter.GetAnimationStatus() == AnimationStates.CROUCH) { ExecuteRules(rulesEngineRivalIdle); } } } }