Skip to content

Commit 6436bb9

Browse files
authored
Merge pull request #17 from benpollarduk/updating-examine
Added ExaminationResult and ExaminationScene
2 parents 878cc17 + 20ffb61 commit 6436bb9

File tree

14 files changed

+79
-29
lines changed

14 files changed

+79
-29
lines changed

ktaf/src/main/kotlin/com/github/benpollarduk/ktaf/assets/Examinable.kt

+3-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ public interface Examinable : PlayerVisible {
2828
public val attributes: AttributeManager
2929

3030
/**
31-
* Examine this object to obtain an [ExaminationResult].
31+
* Examine this object to obtain an [ExaminationResult]. The [scene] that the examination occurs in must be
32+
* specified.
3233
*/
33-
public fun examine(): ExaminationResult
34+
public fun examine(scene: ExaminationScene): ExaminationResult
3435
}

ktaf/src/main/kotlin/com/github/benpollarduk/ktaf/assets/ExaminableObject.kt

+9-9
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,17 @@ public abstract class ExaminableObject : Examinable {
1717
* Provides a callback for handling examination of this object.
1818
*/
1919
public var examination: Examination = {
20-
var description = it.description.getDescription()
20+
var description = it.examinable.description.getDescription()
2121

22-
if (it.commands.any()) {
22+
if (it.examinable.commands.any()) {
2323
if (description != "") {
2424
description += " "
2525
}
2626

2727
val newline = NEWLINE
28-
description += "$newline$newline${it.identifier.name} provides the following commands: "
28+
description += "$newline$newline${it.examinable.identifier.name} provides the following commands: "
2929

30-
it.commands.forEach { command ->
30+
it.examinable.commands.forEach { command ->
3131
description += "$newline \"${command.commandHelp.command}\" - " +
3232
"${command.commandHelp.description.removeSentenceEnd()}, "
3333
}
@@ -39,15 +39,15 @@ public abstract class ExaminableObject : Examinable {
3939
}
4040

4141
if (description == "") {
42-
description = it.identifier.name
42+
description = it.examinable.identifier.name
4343
}
4444

4545
if (description == "") {
46-
description = it::class.simpleName.toString()
46+
description = it.examinable::class.simpleName.toString()
4747
}
4848

4949
if (attributes.count > 0) {
50-
description += "\n\n" + StringUtilities.getAttributesAsString(it.attributes.toMap())
50+
description += "\n\n" + StringUtilities.getAttributesAsString(it.examinable.attributes.toMap())
5151
}
5252

5353
ExaminationResult(description)
@@ -66,8 +66,8 @@ public abstract class ExaminableObject : Examinable {
6666

6767
override var commands: List<CustomCommand> = emptyList()
6868

69-
override fun examine(): ExaminationResult {
70-
return examination(this)
69+
override fun examine(scene: ExaminationScene): ExaminationResult {
70+
return examination(ExaminationRequest(this, scene))
7171
}
7272

7373
override var isPlayerVisible: Boolean = true
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.github.benpollarduk.ktaf.assets
22

33
/**
4-
* Provides a lambda signature for a examining the [examinable] that must return a [ExaminationResult].
4+
* Provides a lambda signature for handling an [examinationRequest] that must return a [ExaminationResult].
55
*/
6-
public typealias Examination = (examinable: Examinable) -> ExaminationResult
6+
public typealias Examination = (examinationRequest: ExaminationRequest) -> ExaminationResult
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.github.benpollarduk.ktaf.assets
2+
3+
/**
4+
* Represents a request to examine an [examinable] in a [scene].
5+
*/
6+
public data class ExaminationRequest(
7+
public val examinable: Examinable,
8+
public val scene: ExaminationScene
9+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.github.benpollarduk.ktaf.assets
2+
3+
import com.github.benpollarduk.ktaf.assets.characters.Character
4+
import com.github.benpollarduk.ktaf.assets.characters.PlayableCharacter
5+
import com.github.benpollarduk.ktaf.assets.locations.Room
6+
7+
/**
8+
* Represents a scene that an examination occurs in with a [examiner] and a [room].
9+
*/
10+
public data class ExaminationScene(
11+
val examiner: Character,
12+
val room: Room
13+
) {
14+
public companion object {
15+
/**
16+
* Provides a value representing no scene.
17+
*/
18+
public val noScene: ExaminationScene = ExaminationScene(
19+
PlayableCharacter("", ""),
20+
Room("", "")
21+
)
22+
}
23+
}

ktaf/src/main/kotlin/com/github/benpollarduk/ktaf/assets/locations/Overworld.kt

+3-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.github.benpollarduk.ktaf.assets.locations
33
import com.github.benpollarduk.ktaf.assets.Description
44
import com.github.benpollarduk.ktaf.assets.ExaminableObject
55
import com.github.benpollarduk.ktaf.assets.ExaminationResult
6+
import com.github.benpollarduk.ktaf.assets.ExaminationScene
67
import com.github.benpollarduk.ktaf.assets.Identifier
78
import com.github.benpollarduk.ktaf.extensions.equalsExaminable
89

@@ -14,7 +15,7 @@ public class Overworld(
1415
override var description: Description
1516
) : ExaminableObject() {
1617
/**
17-
* Provides an overworld which is a container of [Region]. The overwold has an [identifier] and a [description].
18+
* Provides an overlord which is a container of [Region]. The overwold has an [identifier] and a [description].
1819
*/
1920
public constructor(
2021
identifier: String,
@@ -83,7 +84,7 @@ public class Overworld(
8384
return true
8485
}
8586

86-
override fun examine(): ExaminationResult {
87+
override fun examine(scene: ExaminationScene): ExaminationResult {
8788
return ExaminationResult(description.getDescription())
8889
}
8990
}

ktaf/src/main/kotlin/com/github/benpollarduk/ktaf/assets/locations/Region.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.github.benpollarduk.ktaf.assets.locations
22

33
import com.github.benpollarduk.ktaf.assets.ExaminationResult
4+
import com.github.benpollarduk.ktaf.assets.ExaminationScene
45
import com.github.benpollarduk.ktaf.assets.Identifier
56
import com.github.benpollarduk.ktaf.extensions.equalsExaminable
67
import com.github.benpollarduk.ktaf.utilities.RegionMaker
@@ -191,7 +192,7 @@ public class Region(
191192
return jumpToRoom(room)
192193
}
193194

194-
override fun examine(): ExaminationResult {
195+
override fun examine(scene: ExaminationScene): ExaminationResult {
195196
return ExaminationResult("$Identifier: ${description.getDescription()}")
196197
}
197198

ktaf/src/main/kotlin/com/github/benpollarduk/ktaf/assets/locations/Room.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import com.github.benpollarduk.ktaf.assets.ConditionalDescription
44
import com.github.benpollarduk.ktaf.assets.Description
55
import com.github.benpollarduk.ktaf.assets.ExaminableObject
66
import com.github.benpollarduk.ktaf.assets.ExaminationResult
7+
import com.github.benpollarduk.ktaf.assets.ExaminationScene
78
import com.github.benpollarduk.ktaf.assets.Identifier
89
import com.github.benpollarduk.ktaf.assets.Item
910
import com.github.benpollarduk.ktaf.assets.characters.Character
@@ -311,7 +312,7 @@ public class Room(
311312
this.description = description
312313
}
313314

314-
override fun examine(): ExaminationResult {
315+
override fun examine(scene: ExaminationScene): ExaminationResult {
315316
val visibleItems = items.filter { it.isPlayerVisible }
316317

317318
if (visibleItems.isEmpty()) {

ktaf/src/main/kotlin/com/github/benpollarduk/ktaf/commands/game/Examine.kt

+11-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package com.github.benpollarduk.ktaf.commands.game
22

33
import com.github.benpollarduk.ktaf.assets.Examinable
4+
import com.github.benpollarduk.ktaf.assets.ExaminationScene
45
import com.github.benpollarduk.ktaf.assets.interaction.Reaction
56
import com.github.benpollarduk.ktaf.assets.interaction.ReactionResult
7+
import com.github.benpollarduk.ktaf.assets.locations.Room
68
import com.github.benpollarduk.ktaf.commands.Command
79
import com.github.benpollarduk.ktaf.logic.Game
810

@@ -15,6 +17,14 @@ internal class Examine(private val examinable: Examinable?) : Command {
1517
return Reaction(ReactionResult.ERROR, "You must specify an examinable.")
1618
}
1719

18-
return Reaction(ReactionResult.OK, examinable.examine().description)
20+
return Reaction(
21+
ReactionResult.OK,
22+
examinable.examine(
23+
ExaminationScene(
24+
game.player,
25+
game.overworld.currentRegion?.currentRoom ?: Room("", "")
26+
)
27+
).description
28+
)
1929
}
2030
}

ktaf/src/main/kotlin/com/github/benpollarduk/ktaf/rendering/frames/ansi/AnsiSceneFrameBuilder.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.github.benpollarduk.ktaf.rendering.frames.ansi
22

3+
import com.github.benpollarduk.ktaf.assets.ExaminationScene
34
import com.github.benpollarduk.ktaf.assets.Size
45
import com.github.benpollarduk.ktaf.assets.characters.PlayableCharacter
56
import com.github.benpollarduk.ktaf.assets.locations.Region
@@ -89,7 +90,7 @@ public class AnsiSceneFrameBuilder(
8990
)
9091

9192
var extendedDescription: String = if (room.items.any()) {
92-
room.examine().description.ensureFinishedSentence()
93+
room.examine(ExaminationScene(playableCharacter, room)).description.ensureFinishedSentence()
9394
} else {
9495
"There are no items in this area."
9596
}

ktaf/src/main/kotlin/com/github/benpollarduk/ktaf/rendering/frames/html/HtmlSceneFrameBuilder.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.github.benpollarduk.ktaf.rendering.frames.html
22

3+
import com.github.benpollarduk.ktaf.assets.ExaminationScene
34
import com.github.benpollarduk.ktaf.assets.Item
45
import com.github.benpollarduk.ktaf.assets.Size
56
import com.github.benpollarduk.ktaf.assets.attributes.Attribute
@@ -76,7 +77,7 @@ public class HtmlSceneFrameBuilder(
7677
htmlPageBuilder.p(room.description.getDescription().ensureFinishedSentence())
7778

7879
var extendedDescription: String = if (room.items.any()) {
79-
room.examine().description.ensureFinishedSentence()
80+
room.examine(ExaminationScene(playableCharacter, room)).description.ensureFinishedSentence()
8081
} else {
8182
"There are no items in this area."
8283
}

ktaf/src/test/kotlin/com/github/benpollarduk/ktaf/assets/ExaminableObjectTest.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class ExaminableObjectTest {
1414
val examinable = Item("Test", "ABC")
1515

1616
// When
17-
val result = examinable.examine()
17+
val result = examinable.examine(ExaminationScene.noScene)
1818

1919
// Then
2020
Assertions.assertTrue(result.description.contains("ABC"))
@@ -26,7 +26,7 @@ class ExaminableObjectTest {
2626
val examinable = Item("Test", "")
2727

2828
// When
29-
val result = examinable.examine()
29+
val result = examinable.examine(ExaminationScene.noScene)
3030

3131
// Then
3232
Assertions.assertTrue(result.description.contains("Test"))
@@ -38,7 +38,7 @@ class ExaminableObjectTest {
3838
val examinable = Item("", "")
3939

4040
// When
41-
val result = examinable.examine()
41+
val result = examinable.examine(ExaminationScene.noScene)
4242

4343
// Then
4444
Assertions.assertTrue(result.description.contains("Item"))
@@ -55,7 +55,7 @@ class ExaminableObjectTest {
5555
)
5656

5757
// When
58-
val result = examinable.examine()
58+
val result = examinable.examine(ExaminationScene.noScene)
5959

6060
// Then
6161
Assertions.assertTrue(result.description.contains("ABC"))
@@ -68,7 +68,7 @@ class ExaminableObjectTest {
6868
examinable.attributes.add("attribute", 0)
6969

7070
// When
71-
val result = examinable.examine()
71+
val result = examinable.examine(ExaminationScene.noScene)
7272

7373
// Then
7474
Assertions.assertTrue(result.description.contains("attribute"))

ktaf/src/test/kotlin/com/github/benpollarduk/ktaf/assets/characters/NonPlayableCharacterTest.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.github.benpollarduk.ktaf.assets.characters
22

33
import com.github.benpollarduk.ktaf.assets.Examination
44
import com.github.benpollarduk.ktaf.assets.ExaminationResult
5+
import com.github.benpollarduk.ktaf.assets.ExaminationScene
56
import com.github.benpollarduk.ktaf.assets.Item
67
import com.github.benpollarduk.ktaf.assets.interaction.Interaction
78
import com.github.benpollarduk.ktaf.assets.interaction.InteractionEffect
@@ -95,7 +96,7 @@ class NonPlayableCharacterTest {
9596
)
9697

9798
// When
98-
val result = character.examine()
99+
val result = character.examine(ExaminationScene.noScene)
99100

100101
// Then
101102
Assertions.assertEquals("ABC", result.description)

ktaf/src/test/kotlin/com/github/benpollarduk/ktaf/assets/location/RoomTest.kt

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.github.benpollarduk.ktaf.assets.location
22

3+
import com.github.benpollarduk.ktaf.assets.ExaminationScene
34
import com.github.benpollarduk.ktaf.assets.Identifier
45
import com.github.benpollarduk.ktaf.assets.Item
56
import com.github.benpollarduk.ktaf.assets.characters.NonPlayableCharacter
@@ -223,7 +224,7 @@ class RoomTest {
223224
room.addItem(item)
224225

225226
// When
226-
val result = room.examine().description
227+
val result = room.examine(ExaminationScene.noScene).description
227228

228229
// Then
229230
Assertions.assertTrue(result.contains("Item"))
@@ -239,7 +240,7 @@ class RoomTest {
239240
room.addItem(item2)
240241

241242
// When
242-
val result = room.examine().description
243+
val result = room.examine(ExaminationScene.noScene).description
243244

244245
// Then
245246
Assertions.assertTrue(result.contains("Item 1"))
@@ -416,7 +417,7 @@ class RoomTest {
416417
val room = Room("Room", "Room description")
417418

418419
// When
419-
val result = room.examine()
420+
val result = room.examine(ExaminationScene.noScene)
420421

421422
// Then
422423
Assertions.assertEquals("There is nothing to examine.", result.description)

0 commit comments

Comments
 (0)