Skip to content

Commit

Permalink
Switched entities to data classes removing TileSystem.kts and switchi…
Browse files Browse the repository at this point in the history
…ng back to inline classes fixing #46
  • Loading branch information
GregHib committed Apr 3, 2020
1 parent cc9c572 commit 8aeb6e0
Show file tree
Hide file tree
Showing 22 changed files with 54 additions and 234 deletions.
6 changes: 6 additions & 0 deletions engine/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
`java-library`
}
Expand All @@ -8,4 +10,8 @@ dependencies {
implementation(project(":utility"))
implementation("io.github.classgraph:classgraph:4.8.65")
implementation(kotlin("script-runtime"))
}
val compileKotlin: KotlinCompile by tasks
compileKotlin.kotlinOptions {
freeCompilerArgs = listOf("-XXLanguage:+InlineClasses")
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package org.redrune.engine.entity.factory

import org.redrune.engine.entity.event.Registered
import org.redrune.engine.entity.model.FloorItem
import org.redrune.engine.entity.tile.Tiles
import org.redrune.engine.event.EventBus
import org.redrune.engine.model.Tile
import org.redrune.utility.inject
Expand All @@ -14,12 +13,10 @@ import org.redrune.utility.inject
class FloorItemFactory {

private val bus: EventBus by inject()
private val tiles: Tiles by inject()

fun spawn(index: Int, x: Int, y: Int, plane: Int): FloorItem {
val floorItem = FloorItem(index)
val floorItem = FloorItem(index, Tile(x, y, plane))
bus.emit(Registered(floorItem))
tiles[floorItem] = Tile(x, y, plane)
return floorItem
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package org.redrune.engine.entity.factory

import org.redrune.engine.entity.event.Registered
import org.redrune.engine.entity.model.NPC
import org.redrune.engine.entity.tile.Tiles
import org.redrune.engine.event.EventBus
import org.redrune.engine.model.Direction
import org.redrune.engine.model.Tile
Expand All @@ -15,12 +14,10 @@ import org.redrune.utility.inject
class NPCFactory {

private val bus: EventBus by inject()
private val tiles: Tiles by inject()

fun spawn(id: Int, x: Int, y: Int, plane: Int, direction: Direction): NPC {
val npc = NPC(id)
val npc = NPC(id, Tile(x, y, plane))
bus.emit(Registered(npc))
tiles[npc] = Tile(x, y, plane)
return npc
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package org.redrune.engine.entity.factory

import org.redrune.engine.entity.event.Registered
import org.redrune.engine.entity.model.IObject
import org.redrune.engine.entity.tile.Tiles
import org.redrune.engine.event.EventBus
import org.redrune.engine.model.Tile
import org.redrune.utility.inject
Expand All @@ -14,12 +13,10 @@ import org.redrune.utility.inject
class ObjectFactory {

private val bus: EventBus by inject()
private val tiles: Tiles by inject()

fun spawn(id: Int, x: Int, y: Int, plane: Int, rotation: Int): IObject {
val obj = IObject(id)
val obj = IObject(id, Tile(x, y, plane))
bus.emit(Registered(obj))
tiles[obj] = Tile(x, y, plane)
return obj
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package org.redrune.engine.entity.factory
import org.redrune.engine.entity.event.Registered
import org.redrune.engine.entity.model.Projectile
import org.redrune.engine.event.EventBus
import org.redrune.engine.model.Tile
import org.redrune.utility.inject

/**
Expand All @@ -14,7 +15,7 @@ class ProjectileFactory {
private val bus: EventBus by inject()

fun spawn(index: Int): Projectile {
val floorItem = Projectile(index)
val floorItem = Projectile(index, Tile(0, 0, 0))
bus.emit(Registered(floorItem))
return floorItem
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,27 +7,24 @@ import org.redrune.engine.entity.list.obj.Objects
import org.redrune.engine.entity.list.player.Players
import org.redrune.engine.entity.list.proj.Projectiles
import org.redrune.engine.entity.model.*
import org.redrune.engine.entity.tile.Tiles
import org.redrune.engine.event.priority
import org.redrune.engine.event.then
import org.redrune.utility.inject

loadKoinModules(entityListModule)

val tiles: Tiles by inject()
val players: Players by inject()
val npcs: NPCs by inject()
val objects: Objects by inject()
val items: FloorItems by inject()
val projectiles: Projectiles by inject()

Registered priority 9 then {
val tile = tiles[entity]
when (entity) {
is Player -> players[tile] = entity
is NPC -> npcs[tile] = entity
is IObject -> objects[tile] = entity
is FloorItem -> items[tile] = entity
is Projectile -> projectiles[tile] = entity
is Player -> players[entity.tile] = entity
is NPC -> npcs[entity.tile] = entity
is IObject -> objects[entity.tile] = entity
is FloorItem -> items[entity.tile] = entity
is Projectile -> projectiles[entity.tile] = entity
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package org.redrune.engine.entity.model

import org.redrune.engine.model.Tile

/**
* An identifiable object with a physical spatial location
* @author Greg Hibberd <greg@greghibberd.com>
* @since March 28, 2020
*/
interface Entity {
val id: Int
var tile: Tile
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package org.redrune.engine.entity.model

import org.redrune.engine.model.Tile

/**
* An [Item] with physical location
* @author Greg Hibberd <greg@greghibberd.com>
* @since March 28, 2020
*/
data class FloorItem(override val id: Int) : Entity
data class FloorItem(override val id: Int, override var tile: Tile) : Entity
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package org.redrune.engine.entity.model

import org.redrune.engine.model.Tile

/**
* Interactive Object
* @author Greg Hibberd <greg@greghibberd.com>
* @since March 28, 2020
*/
data class IObject(override val id: Int) : Entity
data class IObject(override val id: Int, override var tile: Tile) : Entity
11 changes: 11 additions & 0 deletions engine/src/main/kotlin/org/redrune/engine/entity/model/Movable.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package org.redrune.engine.entity.model

import org.redrune.engine.model.Tile

/**
* @author Greg Hibberd <greg@greghibberd.com>
* @since April 03, 2020
*/
interface Movable {
val tile: Tile
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package org.redrune.engine.entity.model

import org.redrune.engine.model.Tile

/**
* A non-player character
* @author Greg Hibberd <greg@greghibberd.com>
* @since March 28, 2020
*/
data class NPC(override val id: Int) : Entity
data class NPC(override val id: Int, override var tile: Tile) : Entity
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
package org.redrune.engine.entity.model

import org.redrune.engine.model.Tile

/**
* A player controlled by client or bot
* @author Greg Hibberd <greg@greghibberd.com>
* @since March 28, 2020
*/
data class Player(override val id: Int) : Entity
data class Player(override var id: Int, override var tile: Tile) : Entity, Movable {

}
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package org.redrune.engine.entity.model

import org.redrune.engine.model.Tile

/**
* @author Greg Hibberd <greg@greghibberd.com>
* @since March 28, 2020
*/
data class Projectile(override val id: Int) : Entity
data class Projectile(override val id: Int, override var tile: Tile) : Entity
24 changes: 0 additions & 24 deletions engine/src/main/kotlin/org/redrune/engine/entity/tile/TileList.kt

This file was deleted.

This file was deleted.

24 changes: 0 additions & 24 deletions engine/src/main/kotlin/org/redrune/engine/entity/tile/Tiles.kt

This file was deleted.

2 changes: 1 addition & 1 deletion engine/src/main/kotlin/org/redrune/engine/model/Tile.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ package org.redrune.engine.model
* @author Greg Hibberd <greg@greghibberd.com>
* @since March 28, 2020
*/
data class Tile(val value: Int) {// FIXME #46
inline class Tile(val value: Int) {

constructor(x: Int, y: Int, plane: Int) : this(y + (x shl 14) + (plane shl 28))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,6 @@ import org.junit.jupiter.api.extension.ExtendWith
import org.koin.dsl.module
import org.koin.test.mock.declareMock
import org.redrune.engine.entity.event.Registered
import org.redrune.engine.entity.model.Entity
import org.redrune.engine.entity.tile.Tiles
import org.redrune.engine.entity.tile.tileModule
import org.redrune.engine.event.EventBus
import org.redrune.engine.event.eventBusModule
import org.redrune.engine.model.Tile
Expand All @@ -30,7 +27,7 @@ internal class FloorItemFactoryTest : KoinMock() {

@BeforeEach
fun setup() {
loadModules(module { single { FloorItemFactory() } }, eventBusModule, tileModule)
loadModules(module { single { FloorItemFactory() } }, eventBusModule)
}

@Test
Expand All @@ -40,15 +37,12 @@ internal class FloorItemFactoryTest : KoinMock() {
val bus: EventBus = declareMock {
every { emit(any<Registered>()) } just Runs
}
val tiles: Tiles = declareMock {
every { this@declareMock[any<Entity>()] = any<Tile>() } just Runs// FIXME https://github.com/mockk/mockk/issues/152
}
// When
val item = factory.spawn(1, 10, 20, 1)
// Then
assertEquals(1, item.id)
verify { bus.emit<Registered>(any()) }
verify { tiles[item] = Tile(10, 20, 1) }
assertEquals(item.tile, Tile(10, 20, 1))
}

}

0 comments on commit 8aeb6e0

Please sign in to comment.