-
Notifications
You must be signed in to change notification settings - Fork 0
/
DoorKeyBuilderExt.scala
45 lines (39 loc) · 1.36 KB
/
DoorKeyBuilderExt.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package io.github.scalaquest.core.model.behaviorBased.commons.builders.impl
import io.github.scalaquest.core.model.behaviorBased.BehaviorBasedModel
import io.github.scalaquest.core.model.behaviorBased.commons.items.CommonItemsExt
import io.github.scalaquest.core.model.{Direction, ItemDescription}
/**
* A convenient implementation for a room, and if present, a key connected to it.
*/
trait DoorKeyBuilderExt extends BehaviorBasedModel with CommonItemsExt {
def lockedDoorBuilder(
keyDesc: ItemDescription,
keyAddBehaviorsBuilders: Seq[I => ItemBehavior] = Seq.empty,
consumeKey: Boolean = false,
doorDesc: ItemDescription,
endRoom: RM,
endRoomDirection: Direction,
onOpenExtra: Option[Reaction] = None,
onEnterExtra: Option[Reaction] = None,
doorAddBehaviorsBuilders: Seq[I => ItemBehavior] = Seq.empty
): (Door, Key) = {
val key = Key(keyDesc, keyAddBehaviorsBuilders)
val door = Door(
description = doorDesc,
RoomLink.builder(
endRoom = endRoom,
endRoomDirection = endRoomDirection,
openableBuilder = Some(
Openable.builder(
consumeKey = consumeKey,
requiredKey = Some(key),
onOpenExtra = onOpenExtra
)
),
onEnterExtra = onEnterExtra
),
addBehaviorsBuilders = doorAddBehaviorsBuilders
)
(door, key)
}
}