private void CalculateNextBestSequence() { ActionSequence.allPreconditions playerHealth = isHealthLow(); ActionSequence.allPreconditions playerAmmo = isAmmoLow(); ActionSequence.allPreconditions enemyCloseness = isEnemyClose(); List <ActionSequence.allPreconditions> currentConditions = new List <ActionSequence.allPreconditions> (); currentConditions.Add(playerHealth); currentConditions.Add(playerAmmo); currentConditions.Add(enemyCloseness); List <ActionSequence> suitableSequences = new List <ActionSequence> (); List <float> scores = new List <float> (); int i = 0; foreach (var x in sequenceList) { float score = 0; int satisfiedConditions = 0; foreach (var y in currentConditions) { if (x.IsConditionValid(y)) { score += CalculateConditionScore(y, x); satisfiedConditions++; } else if (x.IsConditionValidForBonus(y)) { score += CalculateConditionScore(y, x) / 2f; } } if (satisfiedConditions == x.preconditions.Count) { suitableSequences.Add(x); scores.Add(score); } } ActionSequence resultingSequence = suitableSequences [FindHighestScore(scores)]; SequenceGoapText.text = resultingSequence.sequenceName; pa.ExecuteSequence(resultingSequence); }
private float CalculateConditionScore(ActionSequence.allPreconditions condition, ActionSequence currentSequence) { switch (condition) { case ActionSequence.allPreconditions.enemyClose: return((2f / (enemyDistanceLimit)) * closestEnemy()); case ActionSequence.allPreconditions.enemyFar: return(CalculateEnemyFarCondition(currentSequence)); case ActionSequence.allPreconditions.lowAmmo: return(CalculateLowAmmoCondition(currentSequence)); case ActionSequence.allPreconditions.highAmmo: return((1f / startingAmmo) * ps.currentAmmo); case ActionSequence.allPreconditions.lowHealth: return(CalculateLowHealthCondition(currentSequence)); case ActionSequence.allPreconditions.highHealth: return((1f / ph.startingHealth) * ph.currentHealth); case ActionSequence.allPreconditions.noEnemy: return(2f + (healthPickups.transform.childCount + ammoPickups.transform.childCount) * 0.1f); default: return(0f); } }