Add a DSL for defining ammo types

This commit is contained in:
Gary Tierney
2017-09-24 15:02:51 +01:00
parent 1303c25430
commit 5bd663f505
4 changed files with 453 additions and 0 deletions
@@ -0,0 +1,79 @@
import org.apollo.cache.def.ItemDefinition
import org.apollo.game.model.Graphic
import org.apollo.game.model.Position
import org.apollo.game.model.World
import org.apollo.game.model.entity.Player
import org.apollo.util.security.PlayerCredentials
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
class AmmoDslTests {
private val TEST_AMMO_ID : Int = 0
@Before
fun setupTestAmmo() {
val testItem = ItemDefinition(TEST_AMMO_ID)
testItem.name = "bronze arrow"
ItemDefinition.init(arrayOf(testItem))
ammo("arrow") {
projectile {
startHeight = 10
endHeight = 20
delay = 30
lifetime = 40
pitch = 60
}
"bronze" {
requires level 1
20% dropChance
graphics {
projectile = 10
attack = 20
}
}
}
}
@Test
fun `Ammo variants should inherit projectile parameters from their ammo type`() {
val ammo = AMMO[TEST_AMMO_ID]!!
val world = World()
val target = Player(world, PlayerCredentials("fake", "fake", 1, 1, "fake"), Position(1, 1))
val source = Position(1, 1)
val ammoProjectile = ammo.projectileFactory(World(), source, target)
assertEquals(10, ammoProjectile.startHeight)
assertEquals(20, ammoProjectile.endHeight)
assertEquals(30, ammoProjectile.delay)
assertEquals(40, ammoProjectile.lifetime)
assertEquals(60, ammoProjectile.pitch)
assertEquals(10, ammoProjectile.graphic)
}
@Test
fun `Ammo variants should set their level requirements correctly`() {
val ammo = AMMO[TEST_AMMO_ID]!!
assertEquals(1, ammo.requiredLevel)
}
@Test
fun `Ammo variants should set their drop chance correctly`() {
val ammo = AMMO[TEST_AMMO_ID]!!
assertEquals(ammo.dropChance, 0.2, 0.0)
}
@Test
fun `Ammo variants should set their graphics correctly`() {
val ammo = AMMO[TEST_AMMO_ID]!!
assertEquals(20, ammo.attack?.id)
}
}