public void ChooseAttack(CharacterStates.BaseState currState, CharacterProperties.Attack currAttack, FightingGameInputCodeBut button, FightingGameInputCodeDir direction = FightingGameInputCodeDir.None) { InputNotation notation = SelectInputNotation(button, direction); List <CharacterProperties.Attack> attackCandidates = charData.SelectAttacks(GetOrientation(), GetGroundRelation(), notation); CharacterProperties.Attack attack = charData.ChooseAttackFromSelectability(attackCandidates, currState, currAttack); if (attack != null) { attackState.SetActiveAttack(attack); } }
public Attack ChooseAttackFromSelectability(List <Attack> attacks, CharacterStates.BaseState currState, Attack currAttack) { List <Attack> validAttacks = attacks .Where(atk => attackSelectableCallbackMap[atk].Invoke(currState, currAttack)) .OrderBy(atk => atk.priority) .ToList(); if (validAttacks.Count > 0) { return(validAttacks[0]); } else { return(null); } }