En las secciones preliminares de esta documentación, hemos visto que los objetos del mundo que aparecen representados en el mapa de PUCK (habitaciones, cosas, etc.) se denominan entidades. Las entidades son objetos de una clase llamada Entity
, que tiene diferentes subclases (como Room
, Mobile
o Item
) para representar entidades de distintas características y que juegan diferentes papeles en el mundo.
Sin embargo, todas estas entidades tienen unas características en común (que son precisamente lo que hace que sean entidades). Estas características han ido apareciendo poco a poco a lo largo de esta documentación; pero nunca las hemos listado explícitamente. Son las siguientes:
entity(“nombre único”)
(aunque las entidades de cada clase también se puedan obtener llamando a una una función específica, como en item(“mesa”)
o mobile(“orco”)
). update
) si lo hemos definido en BeanShell, que podemos usar para definir lo que sucede al “expirar” la propiedad.Hasta ahora, hemos utilizado todas estas características en entidades como las habitaciones, cosas o criaturas; que además representan objetos “palpables” en el mundo con los que se puede interactuar. Pero en ocasiones, nos puede interesar tener un objeto que también soporte estas características (código BeanShell, propiedades, relaciones y temporizadores) pero que no represente ningún objeto concreto o “palpable” del mundo. Ésta es la función que tienen en AGE las entidades abstractas.
Una entidad abstracta es un objeto de la clase AbstractEntity
, la cual, al igual que Room o Item, es una subclase de la clase Entity
. Podemos agregar entidades abstractas al mapa desde PUCK mediante el botón “Añadir entidad abstracta”, estas entidades tienen un icono y se pueden colocar en el mapa como el resto, y también cuentan con formularios en PUCK al igual que el resto. Sin embargo, el formulario de una entidad abstracta es más sencillo que el de otros tipos de entidad, ya que permite introducir poco más que nombre único, código BeanShell y propiedades.
Así, funcionalmente una entidad abstracta no es más que un contenedor de código BeanShell, propiedades y relaciones; que nos proporciona toda la funcionalidad que nos dan estas características de AGE sin necesidad de traducirse en un objeto concreto y material del mundo que se simula. Sin embargo, como través del código BeanShell de una entidad abstracta podemos referirnos a otras entidades y llamar a métodos que las afecten, una entidad abstracta puede implementar comportamientos que tengan efectos visibles en el mundo.
Algunos ejemplos de comportamientos que se han implementado con entidades abstractas son los siguientes:
Éstos son sólo ejemplos; pero los comportamientos que se pueden implementar con entidades abstractas sólo están limitados por el ingenio del programador.