We elaborate on this section a little bit on the concept of Action, following what we have learned in the previous sections.
Each Entity can only perform (at a given time) a given number of different Actions. It is possible for an Entity to learn new ways to influence its environment and thus to expand its number of possible Actions.
Each Entity maintains a list of Actions that it is able to perform. This list is in fact the composition of several different lists. In fact, each Influence can potentially define its own particular list of Actions to which Entities gain access when becoming influenced by this particular Influence.
All of these lists are dynamic and can be modified at runtime to follow the evolution of the Influences. However, the level that is most likely to be altered is Individual level since an Entity's state influence on what it can accomplish. Moreover, for Entities able to learn, their available Actions will follow their progresses. An Entity able to see can become blind... An Entity can learn how to swim. For some Entities, it is likely that they won't have (at least most of the time) an individual level (this is true for Entities that cannot individually evolve).
Actions can be complex objects that act like scripts. They are able to handle a given action by themselves. In this way, Entities don't have to implement numerous interfaces to be able to perform actions. Moreover, the needed code for a given Action is only written once and can be used by numerous entities. This way entities are kept pretty simple and their capabilities can be expanded (or restricted) dynamically.
In fact, Actions could be as simple or as complex as needed. One could start by implementing Actions that do nothing and that just return something like "OK, you did it!" as a result... Moreover, it is possible to think of changing an Action implementation while the game is running. If more realism is needed, it is possible to change the Action implementation and all Entities will be able to use the new, more realistic version in no time and while the game is running! Since the result of an action is computed only in the Action object, it is very easy to modify it. Actions' responsibility is to collect the collection of needed information for the interaction and then compute the result according to the data retrieved.