diff options
Diffstat (limited to 'src/scalevalapokalypsi/Model/Entities/Entity.scala')
-rw-r--r-- | src/scalevalapokalypsi/Model/Entities/Entity.scala | 70 |
1 files changed, 51 insertions, 19 deletions
diff --git a/src/scalevalapokalypsi/Model/Entities/Entity.scala b/src/scalevalapokalypsi/Model/Entities/Entity.scala index aa2a2e2..6a2072d 100644 --- a/src/scalevalapokalypsi/Model/Entities/Entity.scala +++ b/src/scalevalapokalypsi/Model/Entities/Entity.scala @@ -30,7 +30,8 @@ class Entity( * * @return the verse to sing against this entity */ - def getVerseAgainst: String = "Esimerkkirivi laulettavaksi" + def getVerseAgainst: Vector[String] = + Vector("Esimerkkirivi laulettavaksi") def isAlive = this.hp > 0 @@ -42,7 +43,7 @@ class Entity( this.condition(1) ) else - println(s"Could remove myself: ${this.adventure.removeEntity(this.name)}") + this.adventure.removeEntity(this.name) Event( Vector(this -> "Olet täysin menettänyt toimintakykysi. Kaadut elottomana maahan." @@ -97,9 +98,9 @@ class Entity( val leaving = oldEntities.zip( Vector.fill (oldEntities.size) - (s"${this.name} leaves this location.") + (s"${this.name} lähtee $direction") ) - val self = Vector((this, s"You go $direction.")) + val self = Vector((this, s"Menet $direction.")) Some(Event( (leaving ++ self).toMap, s"$name saapuu tänne." @@ -112,8 +113,12 @@ class Entity( val inventoryWeight = items.values.map(p => p(1).weight).sum if inventoryWeight + i.weight > maxInventoryWeight then Event( - immutable.Map.from(Vector((this, s"Voimasi eivät riitä kannattelemaan esinettä ${i.name}, koska kannat liikaa"))), - s"") + Vector(( + this, + s"Voimasi eivät riitä kannattelemaan esinettä ${i.name}, koska kannat liikaa" + )).toMap, + s"" + ) else if items.contains(i.name) then val (current, _) = items(i.name) @@ -121,13 +126,27 @@ class Entity( else this.items += i.name -> (1, i) Event( - immutable.Map.from(Vector((this, s"Poimit esineen ${i.name}"))), + Vector((this, s"Poimit esineen ${i.name}")).toMap, s"$name poimi esineen ${i.name}" ) - case None => Event( - immutable.Map.from(Vector((this, s"Täällä ei ole esinettä $itemName noukittavaksi."))), - s"${this.name} yritti ottaa jotakin, mutta sai vain likaa käsilleen." - ) + case None => + Event( + immutable.Map.from(Vector(( + this, + s"Täällä ei ole esinettä $itemName noukittavaksi." + ))), + s"${this.name} yritti ottaa jotakin, mutta sai vain likaa käsilleen." + ) + + def removeItem(itemName: String): Boolean = + this.items.get(itemName).map((count, item) => + if count > 1 then + this.items.remove(itemName) + else + this.items(itemName) = (count - 1, item) + assert(this.items(itemName)(0) == count - 1) + Some(true) + ).isDefined def drop(itemName: String): Event = this.items.remove(itemName) match @@ -138,12 +157,21 @@ class Entity( this.items += itemName -> (current - 1, item) this.currentLocation.addItem(item) Event( - immutable.Map.from(Vector((this, s"Pudotit esineen $itemName"))), + immutable.Map.from( + Vector((this, s"Pudotit esineen $itemName")) + ), s"$name Pudotti esineen $itemName" ) + case Some((current, item)) => + this.items.remove(item.name) + println(" [virhe] esineitä ei koskaan pitäisi olla nollaa") + Event( + Vector((this, "Sinulla ei ole tuota esinettä.")).toMap, + "" + ) case None => Event( - immutable.Map.from(Vector((this, "Sinulla ei ole tätä esinettä!"))), - s"$name yritti tonkia rpustaan esineen $itemName mutta ei löytänyt sitä." + Vector((this, "Sinulla ei ole tätä esinettä!")).toMap, + s"$name yritti tonkia repustaan esineen $itemName mutta ei löytänyt sitä." ) def sayTo(entity: Entity, message: String): Event = @@ -154,7 +182,7 @@ class Entity( (this, s"Sanot niin henkilölle ${entity.name}."), (entity, s"${this.name}: “${message}”") )), - s"Kuulet henkilön ${this.name} sanovan jotain henkilölle ${entity.name}" + s"Kuulet henkilön ${this.name} sanovan jotain henkilölle ${entity.name}." ) def ponder(message: String): Event = @@ -185,7 +213,14 @@ class Entity( * @param itemName the name to check * @return whether this entity has this item and can drop it */ - def canDrop(itemName: String): Boolean = this.items.contains(itemName) + //def canDrop(itemName: String): Boolean = this.items.contains(itemName) + + def useItem(itemName: String): Event = + val item: Option[Item] = this.items.get(itemName).map(_(1)) + val event: Option[Event] = item.flatMap(_.use(this)) + event.getOrElse( + Event(Vector(this -> "Sinulla ei ole tuota esinettä.").toMap, "") + ) /** Returns a brief description of the player’s state, for debugging purposes. */ override def toString = s"${this.name} at ${this.location.name}" @@ -204,7 +239,4 @@ class Entity( s"") - - - end Entity |