1 package ru.fredboy.cavedroid.game.controller.container.impl
3 import ru.fredboy.cavedroid.common.di.GameScope
4 import ru.fredboy.cavedroid.game.controller.container.ContainerController
5 import ru.fredboy.cavedroid.game.controller.container.listener.ContainerAddedListener
6 import ru.fredboy.cavedroid.game.controller.container.listener.ContainerRemovedListener
7 import ru.fredboy.cavedroid.game.controller.container.model.Container
8 import ru.fredboy.cavedroid.domain.items.usecase.GetItemByKeyUseCase
9 import javax.inject.Inject
12 class ContainerControllerImpl @Inject constructor(
13 private val itemByKey: GetItemByKeyUseCase,
14 ) : ContainerController {
16 val containerMap = mutableMapOf<String, Container>()
18 private val containerAddedListeners = mutableSetOf<ContainerAddedListener>()
19 private val containerRemovedListeners = mutableSetOf<ContainerRemovedListener>()
21 override val size get() = containerMap.size
23 private fun getContainerKey(x: Int, y: Int, z: Int): String {
27 override fun getContainer(x: Int, y: Int, z: Int): Container? {
28 return containerMap[getContainerKey(x, y, z)]
31 override fun addContainer(x: Int, y: Int, z: Int, container: Container) {
32 val key = getContainerKey(x, y, z)
33 if (containerMap.containsKey(key)) {
34 resetContainer(x, y, z)
37 containerMap[key] = container
39 containerAddedListeners.forEach { listener ->
40 listener.onContainerAdded(x, y, z, container)
44 private fun retrieveContainer(x: Int, y: Int, z: Int): Container? {
45 return containerMap.remove(getContainerKey(x, y, z))
48 override fun resetContainer(x: Int, y: Int, z: Int) {
49 retrieveContainer(x, y, z)
52 override fun destroyContainer(x: Int, y: Int, z: Int) {
53 retrieveContainer(x, y, z)?.let { container ->
54 containerRemovedListeners.forEach { listener ->
55 listener.onContainerRemoved(x, y, z, container)
60 override fun addContainerAddedListener(listener: ContainerAddedListener) {
61 containerAddedListeners.add(listener)
64 override fun removeContainerAddedListener(listener: ContainerAddedListener) {
65 containerAddedListeners.remove(listener)
68 override fun addContainerRemovedListener(listener: ContainerRemovedListener) {
69 containerRemovedListeners.add(listener)
72 override fun removeContainerRemovedListener(listener: ContainerRemovedListener) {
73 containerRemovedListeners.remove(listener)
76 override fun update(delta: Float) {
77 containerMap.values.forEach { container ->
78 container.update(itemByKey)
82 override fun dispose() {
83 containerAddedListeners.clear()
84 containerRemovedListeners.clear()