Herramientas de usuario

Herramientas del sitio


entidades_abstractas

Entidades abstractas

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:

  1. Toda entidad tiene un nombre único, que no puede coincidir con el de ninguna otra entidad. Podemos obtener una entidad del mundo a partir de su nombre único con 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”)).
  2. Toda entidad puede tener definido código BeanShell.
  3. Toda entidad puede tener propiedades (con un valor y un temporizador) y relaciones con cualquier otra entidad (también con un valor y un temporizador). El sistema AGE decrementa los temporizadores de cada propiedad cada vez que pasa una unidad de tiempo, y cuando uno de estos temporizadores llega a cero, llama a un método de actualización (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:

  1. Una entidad abstracta “tiempo atmosférico” que controle cómo va cambiando el tiempo en las distintas habitaciones del mundo, propagando los cambios de unas a otras mediante cambios de una propiedad en esas habitaciones. Esos cambios de tiempo atmosférico se reflejan en las correspondientes descripciones dinámicas.
  2. Una entidad abstracta “incendio” que haga que las llamas de un incendio se vayan propagando por las habitaciones, esto se utilizó en la aventura “Fuego”.
  3. Una entidad abstracta “guión” que haga que ciertos eventos de una historia vayan sucediendo en momentos prefijados en distintas partes del mundo, esto se utilizó en la aventura “15 meses y un día”.

É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.

entidades_abstractas.txt · Última modificación: 2011/03/13 16:03 por al-khwarizmi