aboutsummaryrefslogtreecommitdiff
path: root/src/scalevalapokalypsi/Model/Entities/Entity.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/scalevalapokalypsi/Model/Entities/Entity.scala')
-rw-r--r--src/scalevalapokalypsi/Model/Entities/Entity.scala70
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