Je sais, je sais, ça fait longtemps.
En effet, dans GOAP tel qu'implémenté en 2005 par Jeff Orkin dans FEAR (et réutilisé dans les suites, l'extension et ... Shadow Of Mordor), les actions ont des coûts fixes, variant de 0,5 à 8. En général, le coût de l'attaque est beaucoup plus cher que le coût de la défense. Ces coûts sont accessibles dans la base de données de jeu du SDK FEAR gratuit (2008); Les voici:
{{Animate, 1}, {Attack, 6}, {AttackBurstLimited, 5}, {AttackCrouch, 5}, {AttackFromAmbush, 4}, {AttackFromArmored, 4}, {AttackFromArmoredBounded, 4}, {AttackFromCover, 4}, { AttackFromVehicle, 1}, {AttackFromView, 4.5}, {AttackGrenadeFromCover, 2}, {AttackLunge3D, 1}, {AttackLungeMelee, 1}, {AttackLungeSuicide, 1}, {AttackLungeUncloaked, 1}, {AttackMelee, 3}, {Attaque 1}, {AttackMeleeUncloaked, 3}, {AttackReady, 7}, {AttackTurret, 6}, {AttackTurretCeiling, 6}, {BlindFireFromCover, 2}, {Charge, 1}, {DeathOnVehicle, 1}, {DismountNodeUncloaked, 1} , {DismountVehicle, 1}, {DodgeCovered, 1}, {DodgeOnVehicle, 1}, {DodgeRoll, 2}, {DodgeRollParanoid, 2}, {DodgeShuffle, 3}, {DrawWeapon, 1}, {EscapeDanger, 0,5}, { FaceNode, 1}, {FlushOutWithGrenade, 3}, {Follow, 3}, {FollowHeavyArmor, 2}, {FollowPlayer, 2}, {FollowPlayerFidget, 1.8},{FollowWaitAtNode, 4}, {GetOutOfTheWay, 1}, {GotoNode, 1}, {GotoNode3D, 1}, {GotoNodeDirect, 1}, {GotoNodeOfType, 1}, {GotoTarget, 4}, {GotoTarget3D, 4}, {GotoTargetLost , 8}, {GotoValidPosition, 1}, {HolsterWeapon, 1}, {Idle, 2}, {IdleFidget, 1}, {IdleOnVehicle, 1}, {IdleTurret, 2}, {InspectDisturbance, 2}, {InstantDeath, 1 }, {InstantDeathKnockDown, 1}, {KnockDownBullet, 2}, {KnockDownExplosive, 2}, {KnockDownMelee, 2}, {LongRecoilBullet, 3}, {LongRecoilExplosive, 3}, {LongRecoilHelmetPiercing, 3}, {LongRecoilMel, {LookAtDisturbance, 1.5}, {LookAtDisturbanceFromView, 3}, {LopeToTargetUncloaked, 1}, {MountNodeUncloaked, 1}, {MountVehicle, 1}, {ReactToDanger, 1}, {Reload, 5}, {ReloadCovered, 1}, {ReloadC , 5}, {ShortRecoilMelee, 4}, {Stunned, 1}, {SuppressionFire, 2}, {SuppressionFireFromCover, 1}, {SurveyArea, 1},{TraverseBlockedDoor, 1}, {TraverseLink, 2}, {TraverseLinkUncloaked, 1}, {Uncover, 1}, {UseSmartObjectNode, 3}, {UseSmartObjectNodeMounted, 1}}
Mais ce n'est pas le cas dans toutes les implémentations GOAP et, par exemple, les Tomb Raiders ont des coûts variables (par exemple la distance pour une action Goto).
Les actions ont également des conditions préalables et certaines actions doivent être jouées malgré l'architecture GOAP (par exemple, jouer une animation "stupéfaite" en réaction diminuant rapidement la santé - malgré l'objectif "Kill Enemy" et le plan que GOAP retourne pour satisfaire cet objectif). Dans votre exemple, à savoir fuir ou attaquer, le niveau de santé peut être une condition préalable (et pas besoin d'avoir des coûts variables).
Ou une fonction membre Check_Costs () est exécutée avant toute autre chose, en fonction des priorités de Michael, et renvoie le coût dynamique.
Maintenant, veuillez noter que dans Shadow Of Mordor, les développeurs de jeux ont essayé de jouer avec les coûts des actions afin d'influencer ce qui serait exécuté à l'écran. Il s'avère que ce n'est pas si facile et même une action bon marché n'apparaît pas si souvent: l'IA dans un jeu prend en charge le joueur; si le joueur ne fait pas ce qui est attendu, l'IA le supportera juste et ... ce qui apparaîtra à l'écran ne sera pas ce que le design du jeu attend.