package scalevalapokalypsi.Model.Entities.NPCs import scalevalapokalypsi.Model.{Area,Event,Item,Adventure} class Villager( adventure: Adventure, name: String, initialLocation: Area, dialogs: Vector[(String, Option[Villager => Event])] ) extends NPC(adventure, name, initialLocation, 100, 100): private var dialogIndex = 0 def getDialog: String = val (dialog, effect) = this.dialogs(dialogIndex) effect.map(_(this)).map(this.location.observeEvent(_)) this.dialogIndex += (if dialogIndex < this.dialogs.length-1 then 1 else 0) dialog def act(): Unit = () end Villager /* package scalevalapokalypsi.Model.Entities.NPCs import scalevalapokalypsi.Model.{Area,Event,Item,Adventure} import scala.math.min class Bartender( adventure: Adventure, initialLocation: Area ) extends NPC( adventure, "baarimikko", initialLocation, 100, 100 ): private var dialogIndex = 0 private val dialogs = Vector( "Onnea matkaan. Tarjoan sinulle tuopin olutta rohkaisuksi.", "Onnea matkaan." ) def getDialog: String = if dialogIndex == 0 then this.location.addItem(Item( "oluttuoppi", "Tuopillinen kuohuvaa ja raikasta olutta. Se tuoksuu aika vahvalta.", 1 )) this.location.observeEvent( Event( Map.empty, "Baarimikko kaataa tuoppiin olutta ja asettaa oluttuopin pöydälle." ) ) dialogIndex = min(dialogIndex + 1, this.dialogs.length) dialogs(dialogIndex - 1) end getDialog def act(): Unit = () end Bartender */