package scalevalapokalypsi.Model import scalevalapokalypsi.Model.Entities.Entity import scala.collection.immutable.Map /** A description of an action. * * @param inFirstPersons a Map of descriptions in first person for entities * given as keys * @param inThirdPerson textual description of the event in third person */ class Event( val inFirstPersons: Map[Entity, String], val inThirdPerson: String ): // And why are we not just using a map with a default value? // Wrapping this in an Event creates a more specific abstraction. // It indicates, that instances of this class are precisely descriptions // of events, and it allows changing the private implementation without // touching the public interface. private val values = inFirstPersons.withDefaultValue(inThirdPerson) /** Gets the description of this event as seen by the given * entity. Note that this method does no checks whether the given entity * could even see the event, only what it would have looked like to them. * * @param entity the entity whose perspective to use * @return a textual description of the event */ def descriptionFor(entity: Entity): String = this.values.apply(entity) end Event