Fixed dialogue splitLines edge case
This commit is contained in:
@@ -7,7 +7,7 @@ import kotlin.math.ceil
|
|||||||
* Should this not work out for any reason, you should fallback to standard npc and player methods for dialogue.
|
* Should this not work out for any reason, you should fallback to standard npc and player methods for dialogue.
|
||||||
*/
|
*/
|
||||||
fun splitLines(message: String, perLineLimit: Int = 54) : Array<String> {
|
fun splitLines(message: String, perLineLimit: Int = 54) : Array<String> {
|
||||||
val lines = Array(ceil(message.length / perLineLimit.toFloat()).toInt()) {""}
|
var lines = Array(ceil(message.length / perLineLimit.toFloat()).toInt()) {""}
|
||||||
|
|
||||||
//short circuit when possible because it's cheaper.
|
//short circuit when possible because it's cheaper.
|
||||||
if (lines.size == 1) {
|
if (lines.size == 1) {
|
||||||
@@ -22,7 +22,12 @@ fun splitLines(message: String, perLineLimit: Int = 54) : Array<String> {
|
|||||||
|
|
||||||
fun pushLine() {
|
fun pushLine() {
|
||||||
if (line.isEmpty()) return
|
if (line.isEmpty()) return
|
||||||
lines[index++] = line.toString()
|
//allow array to be resized - there are specific edgecases where it becomes necessary. (Check the unit test for example)
|
||||||
|
if (lines.size == index)
|
||||||
|
lines = lines.plus(line.toString())
|
||||||
|
else
|
||||||
|
lines[index] = line.toString()
|
||||||
|
index++
|
||||||
line.clear()
|
line.clear()
|
||||||
accumulator = 0
|
accumulator = 0
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import core.game.node.entity.skill.slayer.Master
|
|||||||
import core.game.node.entity.skill.slayer.Tasks
|
import core.game.node.entity.skill.slayer.Tasks
|
||||||
import org.json.simple.JSONObject
|
import org.json.simple.JSONObject
|
||||||
import org.json.simple.parser.JSONParser
|
import org.json.simple.parser.JSONParser
|
||||||
|
import org.junit.Assert
|
||||||
import org.junit.jupiter.api.Assertions
|
import org.junit.jupiter.api.Assertions
|
||||||
import org.junit.jupiter.api.Test
|
import org.junit.jupiter.api.Test
|
||||||
import rs09.game.node.entity.skill.slayer.SlayerManager
|
import rs09.game.node.entity.skill.slayer.SlayerManager
|
||||||
@@ -162,5 +163,14 @@ class APITests {
|
|||||||
lines = splitLines(testCase)
|
lines = splitLines(testCase)
|
||||||
Assertions.assertEquals(testCase, lines[0])
|
Assertions.assertEquals(testCase, lines[0])
|
||||||
Assertions.assertEquals(1, lines.size)
|
Assertions.assertEquals(1, lines.size)
|
||||||
|
|
||||||
|
testCase = "I just told you: from the Seer. You will need to persuade him to take the time to make a forecast somehow."
|
||||||
|
lines = splitLines(testCase)
|
||||||
|
expectedLine1 = "I just told you: from the Seer. You will need to"
|
||||||
|
expectedLine2 = "persuade him to take the time to make a forecast"
|
||||||
|
expectedLine3 = "somehow."
|
||||||
|
Assertions.assertEquals(expectedLine1, lines.getOrNull(0) ?: "")
|
||||||
|
Assertions.assertEquals(expectedLine2, lines.getOrNull(1) ?: "")
|
||||||
|
Assertions.assertEquals(expectedLine3, lines.getOrNull(2) ?: "")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user