DEADSOFTWARE

Controllers clean architecture
authorfredboy <fredboy@protonmail.com>
Sat, 16 Nov 2024 15:23:07 +0000 (22:23 +0700)
committerfredboy <fredboy@protonmail.com>
Sat, 16 Nov 2024 15:23:35 +0000 (22:23 +0700)
175 files changed:
core/build.gradle.kts
core/common/src/main/kotlin/ru/fredboy/cavedroid/common/utils/CollectionsExtensions.kt [new file with mode: 0644]
core/common/src/main/kotlin/ru/fredboy/cavedroid/common/utils/RenderingUtils.kt
core/data/items/src/main/kotlin/ru/fredboy/cavedroid/data/items/repository/ItemsRepositoryImpl.kt
core/data/save/build.gradle.kts
core/data/save/src/main/kotlin/ru/fredboy/cavedroid/data/save/mapper/ChestMapper.kt
core/data/save/src/main/kotlin/ru/fredboy/cavedroid/data/save/mapper/ContainerControllerMapper.kt
core/data/save/src/main/kotlin/ru/fredboy/cavedroid/data/save/mapper/ControlModeMapper.kt
core/data/save/src/main/kotlin/ru/fredboy/cavedroid/data/save/mapper/DirectionMapper.kt
core/data/save/src/main/kotlin/ru/fredboy/cavedroid/data/save/mapper/DropControllerMapper.kt
core/data/save/src/main/kotlin/ru/fredboy/cavedroid/data/save/mapper/DropMapper.kt
core/data/save/src/main/kotlin/ru/fredboy/cavedroid/data/save/mapper/FallingBlockMapper.kt
core/data/save/src/main/kotlin/ru/fredboy/cavedroid/data/save/mapper/FurnaceMapper.kt
core/data/save/src/main/kotlin/ru/fredboy/cavedroid/data/save/mapper/InventoryItemMapper.kt
core/data/save/src/main/kotlin/ru/fredboy/cavedroid/data/save/mapper/InventoryMapper.kt
core/data/save/src/main/kotlin/ru/fredboy/cavedroid/data/save/mapper/MobControllerMapper.kt
core/data/save/src/main/kotlin/ru/fredboy/cavedroid/data/save/mapper/PigMapper.kt
core/data/save/src/main/kotlin/ru/fredboy/cavedroid/data/save/mapper/PlayerMapper.kt
core/data/save/src/main/kotlin/ru/fredboy/cavedroid/data/save/model/SaveDataDto.kt
core/data/save/src/main/kotlin/ru/fredboy/cavedroid/data/save/repository/SaveDataRepositoryImpl.kt
core/domain/items/src/main/kotlin/ru/fredboy/cavedroid/domain/items/model/craft/CraftingResult.kt
core/domain/items/src/main/kotlin/ru/fredboy/cavedroid/domain/items/model/inventory/Inventory.kt [moved from core/game/controller/mob/src/main/kotlin/ru/fredboy/cavedroid/game/controller/mob/model/Inventory.kt with 62% similarity]
core/domain/items/src/main/kotlin/ru/fredboy/cavedroid/domain/items/model/inventory/InventoryItem.kt [moved from core/domain/items/src/main/kotlin/ru/fredboy/cavedroid/domain/items/model/item/InventoryItem.kt with 97% similarity]
core/domain/items/src/main/kotlin/ru/fredboy/cavedroid/domain/items/model/item/Item.kt
core/domain/items/src/main/kotlin/ru/fredboy/cavedroid/domain/items/repository/ItemsRepository.kt
core/domain/items/src/main/kotlin/ru/fredboy/cavedroid/domain/items/usecase/GetCraftingResultUseCase.kt
core/domain/items/src/main/kotlin/ru/fredboy/cavedroid/domain/items/usecase/GetFallbackBlockUseCase.kt [new file with mode: 0644]
core/domain/save/build.gradle.kts
core/domain/world/build.gradle.kts [new file with mode: 0644]
core/domain/world/src/main/kotlin/ru/fredboy/cavedroid/domain/world/listener/OnBlockDestroyedListener.kt [new file with mode: 0644]
core/domain/world/src/main/kotlin/ru/fredboy/cavedroid/domain/world/listener/OnBlockPlacedListener.kt [new file with mode: 0644]
core/domain/world/src/main/kotlin/ru/fredboy/cavedroid/domain/world/model/Layer.kt [new file with mode: 0644]
core/entity/container/build.gradle.kts [new file with mode: 0644]
core/entity/container/src/main/kotlin/ru/fredboy/cavedroid/entity/container/abstraction/ContainerFactory.kt [new file with mode: 0644]
core/entity/container/src/main/kotlin/ru/fredboy/cavedroid/entity/container/abstraction/ContainerWorldAdapter.kt [new file with mode: 0644]
core/entity/container/src/main/kotlin/ru/fredboy/cavedroid/entity/container/model/Chest.kt [moved from core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/model/Chest.kt with 62% similarity]
core/entity/container/src/main/kotlin/ru/fredboy/cavedroid/entity/container/model/Container.kt [new file with mode: 0644]
core/entity/container/src/main/kotlin/ru/fredboy/cavedroid/entity/container/model/ContainerCoordinates.kt [new file with mode: 0644]
core/entity/container/src/main/kotlin/ru/fredboy/cavedroid/entity/container/model/Furnace.kt [moved from core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/model/Furnace.kt with 91% similarity]
core/entity/drop/build.gradle.kts [new file with mode: 0644]
core/entity/drop/src/main/kotlin/ru/fredboy/cavedroid/entity/drop/abstraction/DropAdapter.kt [new file with mode: 0644]
core/entity/drop/src/main/kotlin/ru/fredboy/cavedroid/entity/drop/abstraction/DropWorldAdapter.kt [new file with mode: 0644]
core/entity/drop/src/main/kotlin/ru/fredboy/cavedroid/entity/drop/model/Drop.kt [moved from core/game/controller/drop/src/main/kotlin/ru/fredboy/cavedroid/game/controller/drop/model/Drop.kt with 67% similarity]
core/entity/mob/build.gradle.kts [new file with mode: 0644]
core/entity/mob/src/main/kotlin/ru/fredboy/cavedroid/entity/mob/abstraction/MobBehavior.kt [new file with mode: 0644]
core/entity/mob/src/main/kotlin/ru/fredboy/cavedroid/entity/mob/abstraction/MobWorldAdapter.kt [new file with mode: 0644]
core/entity/mob/src/main/kotlin/ru/fredboy/cavedroid/entity/mob/model/Direction.kt [moved from core/game/controller/mob/src/main/kotlin/ru/fredboy/cavedroid/game/controller/mob/model/Direction.kt with 81% similarity]
core/entity/mob/src/main/kotlin/ru/fredboy/cavedroid/entity/mob/model/FallingBlock.kt [moved from core/game/controller/mob/src/main/kotlin/ru/fredboy/cavedroid/game/controller/mob/model/FallingBlock.kt with 72% similarity]
core/entity/mob/src/main/kotlin/ru/fredboy/cavedroid/entity/mob/model/Mob.kt [moved from core/game/controller/mob/src/main/kotlin/ru/fredboy/cavedroid/game/controller/mob/model/Mob.kt with 92% similarity]
core/entity/mob/src/main/kotlin/ru/fredboy/cavedroid/entity/mob/model/Pig.kt [moved from core/game/controller/mob/src/main/kotlin/ru/fredboy/cavedroid/game/controller/mob/model/Pig.kt with 88% similarity]
core/entity/mob/src/main/kotlin/ru/fredboy/cavedroid/entity/mob/model/Player.kt [moved from core/game/controller/mob/src/main/kotlin/ru/fredboy/cavedroid/game/controller/mob/model/Player.kt with 83% similarity]
core/game/controller/container/build.gradle.kts
core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/ContainerController.kt
core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/di/ControllerContainerModule.kt
core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/impl/ContainerControllerImpl.kt [deleted file]
core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/impl/ContainerFactoryImpl.kt [new file with mode: 0644]
core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/listener/ContainerAddedListener.kt [deleted file]
core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/listener/ContainerRemovedListener.kt [deleted file]
core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/model/Container.kt [deleted file]
core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/usecase/AddContainerAddedListenerUseCase.kt [deleted file]
core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/usecase/AddContainerRemovedListenerUseCase.kt [deleted file]
core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/usecase/AddContainerUseCase.kt [deleted file]
core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/usecase/DestroyContainerUseCase.kt [deleted file]
core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/usecase/DisposeContainerControllerUseCase.kt [deleted file]
core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/usecase/GetContainerUseCase.kt [deleted file]
core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/usecase/RemoveContainerAddedListenerUseCase.kt [deleted file]
core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/usecase/RemoveContainerRemovedListenerUseCase.kt [deleted file]
core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/usecase/ResetContainerUseCase.kt [deleted file]
core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/usecase/UpdateContainerControllerUseCase.kt [deleted file]
core/game/controller/drop/build.gradle.kts
core/game/controller/drop/src/main/kotlin/ru/fredboy/cavedroid/game/controller/drop/DropController.kt
core/game/controller/drop/src/main/kotlin/ru/fredboy/cavedroid/game/controller/drop/di/ControllerDropModule.kt
core/game/controller/drop/src/main/kotlin/ru/fredboy/cavedroid/game/controller/drop/impl/DropAdapterImpl.kt [new file with mode: 0644]
core/game/controller/drop/src/main/kotlin/ru/fredboy/cavedroid/game/controller/drop/impl/DropControllerImpl.kt [deleted file]
core/game/controller/drop/src/main/kotlin/ru/fredboy/cavedroid/game/controller/drop/listener/DropAddedListener.kt [deleted file]
core/game/controller/drop/src/main/kotlin/ru/fredboy/cavedroid/game/controller/drop/listener/DropRemovedListener.kt [deleted file]
core/game/controller/drop/src/main/kotlin/ru/fredboy/cavedroid/game/controller/drop/usecase/AddDropUseCase.kt [deleted file]
core/game/controller/drop/src/main/kotlin/ru/fredboy/cavedroid/game/controller/drop/usecase/ForEachDropUseCase.kt [deleted file]
core/game/controller/drop/src/main/kotlin/ru/fredboy/cavedroid/game/controller/drop/usecase/UpdateDropController.kt [deleted file]
core/game/controller/mob/build.gradle.kts
core/game/controller/mob/src/main/kotlin/ru/fredboy/cavedroid/game/controller/mob/MobController.kt
core/game/controller/mob/src/main/kotlin/ru/fredboy/cavedroid/game/controller/mob/behavior/BaseMobBehavior.kt [new file with mode: 0644]
core/game/controller/mob/src/main/kotlin/ru/fredboy/cavedroid/game/controller/mob/behavior/FallingBlockMobBehavior.kt [new file with mode: 0644]
core/game/controller/mob/src/main/kotlin/ru/fredboy/cavedroid/game/controller/mob/behavior/PigMobBehavior.kt [new file with mode: 0644]
core/game/controller/mob/src/main/kotlin/ru/fredboy/cavedroid/game/controller/mob/behavior/PlayerMobBehavior.kt [new file with mode: 0644]
core/game/controller/mob/src/main/kotlin/ru/fredboy/cavedroid/game/controller/mob/di/MobControllerModule.kt
core/game/controller/mob/src/main/kotlin/ru/fredboy/cavedroid/game/controller/mob/factory/FallingBlockFactory.kt [new file with mode: 0644]
core/game/controller/mob/src/main/kotlin/ru/fredboy/cavedroid/game/controller/mob/factory/PigFactory.kt [new file with mode: 0644]
core/game/controller/mob/src/main/kotlin/ru/fredboy/cavedroid/game/controller/mob/impl/MobControllerImpl.kt [deleted file]
core/game/world/build.gradle.kts
core/game/world/src/main/kotlin/ru/fredboy/cavedroid/game/world/GameWorld.kt
core/game/world/src/main/kotlin/ru/fredboy/cavedroid/game/world/di/GameWorldModule.kt [new file with mode: 0644]
core/game/world/src/main/kotlin/ru/fredboy/cavedroid/game/world/impl/WorldAdapterImpl.kt [new file with mode: 0644]
core/src/main/java/ru/deadsoftware/cavedroid/game/GameComponent.java
core/src/main/java/ru/deadsoftware/cavedroid/game/GameModule.java
core/src/main/java/ru/deadsoftware/cavedroid/game/GamePhysics.java
core/src/main/java/ru/deadsoftware/cavedroid/game/GameProc.java
core/src/main/java/ru/deadsoftware/cavedroid/game/GameRenderer.java
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/actions/placeblock/PlaceBlockItemToBackgroundAction.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/actions/placeblock/PlaceBlockItemToForegroundAction.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/actions/placeblock/PlaceSlabAction.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/actions/updateblock/UpdateBedLeftAction.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/actions/updateblock/UpdateBedRightAction.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/actions/updateblock/UpdateGrassAction.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/actions/updateblock/UpdateRequiresBlockAction.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/actions/updateblock/UpdateSnowedGrassAction.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/actions/useblock/UseChestAction.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/actions/useblock/UseCraftingTableAction.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/actions/useblock/UseFurnaceAction.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/actions/useitem/UseBedAction.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/actions/useitem/UseEmptyBucketAction.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/actions/useitem/UseLavaBucketAction.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/actions/useitem/UsePigSpawnEggAction.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/actions/useitem/UseWaterBucketAction.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/debug/DebugInfoStringsProvider.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/keyboard/CloseGameWindowKeyboardInputHandler.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/keyboard/DropItemKeyboardInputHandler.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/keyboard/FlyDownKeyboardInputHandler.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/keyboard/FlyUpKeyboardInputHandler.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/keyboard/GoLeftKeyboardInputHandler.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/keyboard/GoRightKeyboardInputHandler.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/keyboard/JumpKeyboardInputHandler.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/keyboard/MoveCursorControlsModeKeyboardInputHandler.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/keyboard/OpenInventoryKeyboardInputHandler.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/keyboard/PauseGameKeyboardInputHandler.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/keyboard/SelectHotbarSlotKeyboardInputHandler.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/keyboard/StopSwimKeyboardInputHandler.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/keyboard/SwimUpKeyboardInputHandler.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/keyboard/ToggleControlsModeKeyboardInputHandler.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/keyboard/ToggleDebugInfoKeyboardInputHandler.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/keyboard/ToggleGameModeKeyboardInputHandler.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/keyboard/ToggleMinimapKeyboardInputHandler.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/keyboard/TurnOnFlyModeKeyboardInputHandler.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/AbstractInventoryItemsMouseInputHandler.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/AttackMouseInputHandler.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/CloseGameWindowMouseInputHandler.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/CreativeInventoryScrollMouseInputHandler.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/CursorMouseInputHandler.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/HotbarMouseInputHandler.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/SelectChestInventoryItemMouseInputHandler.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/SelectCraftingInventoryItemMouseInputHandler.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/SelectCreativeInventoryItemMouseInputHandler.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/SelectFurnaceInventoryItemMouseInputHandler.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/SelectSurvivalInventoryItemMouseInputHandler.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/UseItemMouseInputHandler.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/touch/JoystickInputHandler.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/BackgroundBlocksRenderer.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/BlocksRenderer.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/DebugRenderer.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/DropsRenderer.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/ForegroundBlocksRenderer.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/HudRenderer.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/MobsRenderer.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/TouchControlsRenderer.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/WindowsRenderer.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/windows/AbstractWindowRenderer.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/windows/CraftingWindowRenderer.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/windows/SurvivalWindowRenderer.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/ui/windows/GameWindowsManager.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/ui/windows/inventory/AbstractInventoryWindow.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/ui/windows/inventory/AbstractInventoryWindowWithCraftGrid.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/ui/windows/inventory/ChestInventoryWindow.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/ui/windows/inventory/CraftingInventoryWindow.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/ui/windows/inventory/CreativeInventoryWindow.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/ui/windows/inventory/FurnaceInventoryWindow.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/ui/windows/inventory/SurvivalInventoryWindow.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/world/GameWorldMobDamageControllerTask.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/misc/annotations/multibind/BindKeyboardInputHandler.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/misc/annotations/multibind/BindMouseInputHandler.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/misc/annotations/multibind/BindPlaceBlockAction.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/misc/annotations/multibind/BindRenderer.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/misc/annotations/multibind/BindUpdateBlockAction.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/misc/annotations/multibind/BindUseBlockAction.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/misc/annotations/multibind/BindUseItemAction.kt
settings.gradle.kts

index 17eb33bcf91baf6b81c6862fc8618a57df559af9..8cb843ac3f123079d267c15b36891fff67ab63e2 100644 (file)
@@ -31,8 +31,14 @@ dependencies {
     // domain
     useModule(":core:domain:assets")
     useModule(":core:domain:items")
+    useModule(":core:domain:world")
     useModule(":core:domain:save")
 
+    //entity
+    useModule(":core:entity:container")
+    useModule(":core:entity:drop")
+    useModule(":core:entity:mob")
+
     // controller
     useModule(":core:game:controller:drop")
     useModule(":core:game:controller:container")
diff --git a/core/common/src/main/kotlin/ru/fredboy/cavedroid/common/utils/CollectionsExtensions.kt b/core/common/src/main/kotlin/ru/fredboy/cavedroid/common/utils/CollectionsExtensions.kt
new file mode 100644 (file)
index 0000000..8d8f8f4
--- /dev/null
@@ -0,0 +1,18 @@
+package ru.fredboy.cavedroid.common.utils
+
+fun <T> MutableCollection<T>.retrieveFirst(predicate: (T) -> Boolean): T? {
+    val iterator = this.iterator()
+    while (iterator.hasNext()) {
+        val element = iterator.next()
+        if (predicate.invoke(element)) {
+            iterator.remove()
+            return element
+        }
+    }
+
+    return null
+}
+
+fun <T> MutableCollection<T>.removeFirst(predicate: (T) -> Boolean): Boolean {
+    return retrieveFirst(predicate) != null
+}
\ No newline at end of file
index ef477082630439d999579be9fd96cbef0f101b7b..01822bca3894ec460e003fac7f62baee62d47966 100644 (file)
@@ -102,3 +102,5 @@ fun SpriteBatch.withScissors(
     flush()
     Gdx.gl.glDisable(GL20.GL_SCISSOR_TEST)
 }
+
+fun Int.blockCenterPx() = (toFloat() + .5f).px
index 58f9e05f38645d5a7d28674f899937ddb67e44a3..3560265d361265a0fb7b48c0525f7531587ce864 100644 (file)
@@ -11,7 +11,7 @@ import ru.fredboy.cavedroid.data.items.model.ItemDto
 import ru.fredboy.cavedroid.domain.items.model.block.Block
 import ru.fredboy.cavedroid.domain.items.model.craft.CraftingRecipe
 import ru.fredboy.cavedroid.domain.items.model.craft.CraftingResult
-import ru.fredboy.cavedroid.domain.items.model.item.InventoryItem
+import ru.fredboy.cavedroid.domain.items.model.inventory.InventoryItem
 import ru.fredboy.cavedroid.domain.items.model.item.Item
 import ru.fredboy.cavedroid.domain.items.repository.ItemsRepository
 import java.util.*
index 23aa6d0cc26ed7fea453659bb438ca4885838239..1153b84e1ca9f5dc8dd5684e7ab7fb3c7b3ac91d 100644 (file)
@@ -15,10 +15,16 @@ dependencies {
 
     useModule(":core:domain:assets")
     useModule(":core:domain:items")
+    useModule(":core:domain:world")
     useModule(":core:domain:save")
 
+    useModule(":core:entity:container")
+    useModule(":core:entity:drop")
+    useModule(":core:entity:mob")
+
     useModule(":core:game:controller:container")
     useModule(":core:game:controller:drop")
     useModule(":core:game:controller:mob")
+
     useModule(":core:game:world")
 }
index 81d9d0c363e679954dc88a5a38c9a4ae0560ce65..ee22ec86614285e15abee461f3ae33cd57a972bb 100644 (file)
@@ -3,7 +3,7 @@ package ru.fredboy.cavedroid.data.save.mapper
 import dagger.Reusable
 import ru.fredboy.cavedroid.data.save.model.SaveDataDto
 import ru.fredboy.cavedroid.domain.items.usecase.GetFallbackItemUseCase
-import ru.fredboy.cavedroid.game.controller.container.model.Chest
+import ru.fredboy.cavedroid.entity.container.model.Chest
 import javax.inject.Inject
 
 @Reusable
index 365b91d0770d4473fe97a476727aad1fb51902c9..d30ec79cdd506b87d028aab7769a28048342f962 100644 (file)
@@ -3,9 +3,10 @@ package ru.fredboy.cavedroid.data.save.mapper
 import dagger.Reusable
 import ru.fredboy.cavedroid.data.save.model.SaveDataDto
 import ru.fredboy.cavedroid.domain.items.usecase.GetItemByKeyUseCase
-import ru.fredboy.cavedroid.game.controller.container.impl.ContainerControllerImpl
-import ru.fredboy.cavedroid.game.controller.container.model.Chest
-import ru.fredboy.cavedroid.game.controller.container.model.Furnace
+import ru.fredboy.cavedroid.entity.container.model.Chest
+import ru.fredboy.cavedroid.entity.container.model.ContainerCoordinates
+import ru.fredboy.cavedroid.entity.container.model.Furnace
+import ru.fredboy.cavedroid.game.controller.container.ContainerController
 import javax.inject.Inject
 
 @Reusable
@@ -15,7 +16,7 @@ class ContainerControllerMapper @Inject constructor(
     private val getItemByKeyUseCase: GetItemByKeyUseCase,
 ) {
 
-    fun mapSaveData(containerController: ContainerControllerImpl): SaveDataDto.ContainerControllerSaveDataDto {
+    fun mapSaveData(containerController: ContainerController): SaveDataDto.ContainerControllerSaveDataDto {
         return SaveDataDto.ContainerControllerSaveDataDto(
             version = SAVE_DATA_VERSION,
             containerMap = containerController.containerMap.mapNotNull { (key, container) ->
@@ -23,15 +24,20 @@ class ContainerControllerMapper @Inject constructor(
                     is Furnace -> furnaceMapper.mapSaveData(container)
                     is Chest -> chestMapper.mapSaveData(container)
                     else -> null
-                }?.let { value -> key to value }
+                }?.let { value -> key.toString() to value }
             }.toMap()
         )
     }
 
-    fun mapContainerController(saveDataDto: SaveDataDto.ContainerControllerSaveDataDto): ContainerControllerImpl {
+    fun mapContainerController(saveDataDto: SaveDataDto.ContainerControllerSaveDataDto): ContainerController {
         saveDataDto.verifyVersion(SAVE_DATA_VERSION)
 
-        return ContainerControllerImpl(getItemByKeyUseCase).apply {
+        return ContainerController(
+            getItemByKeyUseCase = getItemByKeyUseCase,
+            containerWorldAdapter = TODO("containerWorldAdapter"),
+            containerFactory = TODO("ContainerFactory"),
+            dropAdapter = TODO("DropAdapter")
+        ).apply {
             saveDataDto.containerMap.forEach { (key, value) ->
                 val container = when (value) {
                     is SaveDataDto.FurnaceSaveDataDto -> furnaceMapper.mapFurnace(value)
@@ -40,7 +46,7 @@ class ContainerControllerMapper @Inject constructor(
                 }
 
                 if (container != null) {
-                    containerMap.put(key, container)
+                    containerMap.put(ContainerCoordinates.fromString(key), container)
                 }
             }
         }
index f28bf7acfce5e7159d7a38d283dcdf68971896fe..e8607dc07b5236145855d168a2d9b167c283bbaf 100644 (file)
@@ -3,7 +3,7 @@ package ru.fredboy.cavedroid.data.save.mapper
 import com.badlogic.gdx.Gdx
 import dagger.Reusable
 import ru.fredboy.cavedroid.data.save.model.SaveDataDto
-import ru.fredboy.cavedroid.game.controller.mob.model.Player
+import ru.fredboy.cavedroid.entity.mob.model.Player
 import javax.inject.Inject
 
 @Reusable
index 1a989aef1b638b21965ae2dc69d7e74f68a86cb7..8a0cc5d529515b311d08cb80427727aee54bf979 100644 (file)
@@ -3,7 +3,7 @@ package ru.fredboy.cavedroid.data.save.mapper
 import com.badlogic.gdx.Gdx
 import dagger.Reusable
 import ru.fredboy.cavedroid.data.save.model.SaveDataDto
-import ru.fredboy.cavedroid.game.controller.mob.model.Direction
+import ru.fredboy.cavedroid.entity.mob.model.Direction
 import javax.inject.Inject
 
 @Reusable
index 4b9e1b64a52b67aa5ea339c6f4f00b19bc10d6e8..200e9e65042e2b7f5654bb831fcfa2c5ee52f503 100644 (file)
@@ -2,13 +2,14 @@ package ru.fredboy.cavedroid.data.save.mapper
 
 import dagger.Reusable
 import ru.fredboy.cavedroid.data.save.model.SaveDataDto
+import ru.fredboy.cavedroid.domain.items.repository.ItemsRepository
 import ru.fredboy.cavedroid.game.controller.drop.DropController
-import ru.fredboy.cavedroid.game.controller.drop.impl.DropControllerImpl
 import javax.inject.Inject
 
 @Reusable
 class DropControllerMapper @Inject constructor(
-    private val dropMapper: DropMapper
+    private val dropMapper: DropMapper,
+    private val itemsRepository: ItemsRepository
 ) {
 
     fun mapSaveData(dropController: DropController): SaveDataDto.DropControllerSaveDataDto {
@@ -21,8 +22,10 @@ class DropControllerMapper @Inject constructor(
     fun mapDropController(saveDataDto: SaveDataDto.DropControllerSaveDataDto): DropController {
         saveDataDto.verifyVersion(SAVE_DATA_VERSION)
 
-        return DropControllerImpl(
-            initialDrop = saveDataDto.drops.map(dropMapper::mapDrop)
+        return DropController(
+            initialDrop = saveDataDto.drops.map(dropMapper::mapDrop),
+            dropWorldAdapter = TODO("dropWorldAdapter"),
+            itemsRepository = itemsRepository,
         )
     }
 
index 14d26d14eee4a605ead48728f701e108eb5d09a8..df90da23c82192e3cbb76353bad6037693f2ed17 100644 (file)
@@ -3,7 +3,7 @@ package ru.fredboy.cavedroid.data.save.mapper
 import dagger.Reusable
 import ru.fredboy.cavedroid.data.save.model.SaveDataDto
 import ru.fredboy.cavedroid.domain.items.usecase.GetItemByKeyUseCase
-import ru.fredboy.cavedroid.game.controller.drop.model.Drop
+import ru.fredboy.cavedroid.entity.drop.model.Drop
 import javax.inject.Inject
 
 @Reusable
@@ -33,7 +33,7 @@ class DropMapper @Inject constructor(
             x = saveDataDto.x,
             y = saveDataDto.y,
             item = getItemByKeyUseCase[saveDataDto.itemKey],
-            _amount = saveDataDto.amount
+            amount = saveDataDto.amount
         ).apply {
             width = saveDataDto.width
             height = saveDataDto.height
index 96a135f9571cdc49bef61900d8bbe89f7d43cca9..21c43e6a667f05713a01acdc0ed8a93060932e0b 100644 (file)
@@ -3,7 +3,8 @@ package ru.fredboy.cavedroid.data.save.mapper
 import dagger.Reusable
 import ru.fredboy.cavedroid.data.save.model.SaveDataDto
 import ru.fredboy.cavedroid.domain.items.usecase.GetBlockByKeyUseCase
-import ru.fredboy.cavedroid.game.controller.mob.model.FallingBlock
+import ru.fredboy.cavedroid.entity.mob.model.FallingBlock
+import ru.fredboy.cavedroid.game.controller.mob.behavior.FallingBlockMobBehavior
 import javax.inject.Inject
 
 @Reusable
@@ -39,7 +40,8 @@ class FallingBlockMapper @Inject constructor(
         return FallingBlock(
             block = getBlockByKeyUseCase[saveDataDto.blockKey],
             x = saveDataDto.x,
-            y = saveDataDto.y
+            y = saveDataDto.y,
+            behavior = FallingBlockMobBehavior(),
         ).apply {
             width = saveDataDto.width
             height = saveDataDto.height
index 1eef88c5bfdea97ad4b57434a421a3e3022234d1..f5c2b82eb6f855a0f17380cb00b3b251bb3b74a3 100644 (file)
@@ -4,7 +4,7 @@ import dagger.Reusable
 import ru.fredboy.cavedroid.data.save.model.SaveDataDto
 import ru.fredboy.cavedroid.domain.items.usecase.GetFallbackItemUseCase
 import ru.fredboy.cavedroid.domain.items.usecase.GetItemByKeyUseCase
-import ru.fredboy.cavedroid.game.controller.container.model.Furnace
+import ru.fredboy.cavedroid.entity.container.model.Furnace
 import javax.inject.Inject
 
 @Reusable
index ab3e0e28640ee9b8c5b44c7f8f554cc289842625..3fa2ac0e7d6b105cecc855c4003715a1136e3d72 100644 (file)
@@ -2,7 +2,7 @@ package ru.fredboy.cavedroid.data.save.mapper
 
 import dagger.Reusable
 import ru.fredboy.cavedroid.data.save.model.SaveDataDto
-import ru.fredboy.cavedroid.domain.items.model.item.InventoryItem
+import ru.fredboy.cavedroid.domain.items.model.inventory.InventoryItem
 import ru.fredboy.cavedroid.domain.items.usecase.GetItemByKeyUseCase
 import javax.inject.Inject
 
index c3b6731ad16e03fed216dd9ac58ecc368137ab8c..a90b03287848fa8e8d1929905bc3964fe107ecc6 100644 (file)
@@ -2,8 +2,8 @@ package ru.fredboy.cavedroid.data.save.mapper
 
 import dagger.Reusable
 import ru.fredboy.cavedroid.data.save.model.SaveDataDto
+import ru.fredboy.cavedroid.domain.items.model.inventory.Inventory
 import ru.fredboy.cavedroid.domain.items.usecase.GetFallbackItemUseCase
-import ru.fredboy.cavedroid.game.controller.mob.model.Inventory
 import javax.inject.Inject
 
 @Reusable
@@ -16,8 +16,6 @@ class InventoryMapper @Inject constructor(
         return SaveDataDto.InventorySaveDataDto(
             version = SAVE_DATA_VERSION,
             size = inventory.size,
-            hotbarSize = inventory.hotbarSize,
-            activeSlot = inventory.activeSlot,
             items = inventory.items.map(inventoryItemMapper::mapSaveData)
         )
     }
@@ -27,12 +25,9 @@ class InventoryMapper @Inject constructor(
 
         return Inventory(
             size = saveDataDto.size,
-            hotbarSize = saveDataDto.hotbarSize,
             fallbackItem = getFallbackItem(),
             initialItems = saveDataDto.items.map(inventoryItemMapper::mapInventoryItem)
-        ).apply {
-            activeSlot = saveDataDto.activeSlot
-        }
+        )
     }
 
     companion object {
index 652123f0d321311bb2040aa2d8ca85f606af89cd..e7661899c03ad7c2865d0d08994e9bcecbbdfd08 100644 (file)
@@ -4,9 +4,9 @@ import dagger.Reusable
 import ru.fredboy.cavedroid.data.save.model.SaveDataDto
 import ru.fredboy.cavedroid.domain.assets.repository.MobAssetsRepository
 import ru.fredboy.cavedroid.domain.items.usecase.GetFallbackItemUseCase
-import ru.fredboy.cavedroid.game.controller.mob.impl.MobControllerImpl
-import ru.fredboy.cavedroid.game.controller.mob.model.FallingBlock
-import ru.fredboy.cavedroid.game.controller.mob.model.Pig
+import ru.fredboy.cavedroid.entity.mob.model.FallingBlock
+import ru.fredboy.cavedroid.entity.mob.model.Pig
+import ru.fredboy.cavedroid.game.controller.mob.MobController
 import javax.inject.Inject
 
 @Reusable
@@ -18,7 +18,7 @@ class MobControllerMapper @Inject constructor(
     private val getFallbackItemUseCase: GetFallbackItemUseCase,
 ) {
 
-    fun mapSaveData(mobController: MobControllerImpl): SaveDataDto.MobControllerSaveDataDto {
+    fun mapSaveData(mobController: MobController): SaveDataDto.MobControllerSaveDataDto {
         return SaveDataDto.MobControllerSaveDataDto(
             version = SAVE_DATA_VERSION,
             mobs = mobController.mobs.mapNotNull { mob ->
@@ -32,12 +32,13 @@ class MobControllerMapper @Inject constructor(
         )
     }
 
-    fun mapMobController(saveDataDto: SaveDataDto.MobControllerSaveDataDto): MobControllerImpl {
+    fun mapMobController(saveDataDto: SaveDataDto.MobControllerSaveDataDto): MobController {
         saveDataDto.verifyVersion(SAVE_DATA_VERSION)
 
-        return MobControllerImpl(
+        return MobController(
             mobAssetsRepository = mobAssetsRepository,
-            getFallbackItemUseCase = getFallbackItemUseCase
+            getFallbackItemUseCase = getFallbackItemUseCase,
+            mobWorldAdapter = TODO("mobWorldAdapter"),
         ).apply {
             (mobs as MutableList).addAll(saveDataDto.mobs.mapNotNull { mob ->
                 when (mob) {
index 1f82bcb87f3f7826c45fbd79de5e46ed3a3e2e24..415262cf9160d6150e069a665c73cbcded95b76f 100644 (file)
@@ -3,7 +3,8 @@ package ru.fredboy.cavedroid.data.save.mapper
 import dagger.Reusable
 import ru.fredboy.cavedroid.data.save.model.SaveDataDto
 import ru.fredboy.cavedroid.domain.assets.usecase.GetPigSpritesUseCase
-import ru.fredboy.cavedroid.game.controller.mob.model.Pig
+import ru.fredboy.cavedroid.entity.mob.model.Pig
+import ru.fredboy.cavedroid.game.controller.mob.behavior.PigMobBehavior
 import javax.inject.Inject
 
 @Reusable
@@ -38,7 +39,8 @@ class PigMapper @Inject constructor(
         return Pig(
             sprite = getPigSpriteUseCase(),
             x = saveDataDto.x,
-            y = saveDataDto.y
+            y = saveDataDto.y,
+            behavior = PigMobBehavior(),
         ).apply {
             width = saveDataDto.width
             height = saveDataDto.height
index 94f2af53f63206830e4f3e9ebfef3ddb07e13f55..95ff279a2bc0a2382084061036038aeb90fd47bc 100644 (file)
@@ -1,10 +1,12 @@
 package ru.fredboy.cavedroid.data.save.mapper
 
+import com.badlogic.gdx.math.Vector2
 import dagger.Reusable
 import ru.fredboy.cavedroid.data.save.model.SaveDataDto
 import ru.fredboy.cavedroid.domain.assets.usecase.GetPlayerSpritesUseCase
 import ru.fredboy.cavedroid.domain.items.usecase.GetFallbackItemUseCase
-import ru.fredboy.cavedroid.game.controller.mob.model.Player
+import ru.fredboy.cavedroid.entity.mob.model.Player
+import ru.fredboy.cavedroid.game.controller.mob.behavior.PlayerMobBehavior
 import javax.inject.Inject
 
 @Reusable
@@ -44,9 +46,10 @@ class PlayerMapper @Inject constructor(
             blockDamage = player.blockDamage,
             cursorX = player.cursorX,
             cursorY = player.cursorY,
-            spawnPointX = 0f,
-            spawnPointY = 0f,
-            controlMode = controlModeMapper.mapSaveData(player.controlMode)
+            spawnPointX = player.spawnPoint?.x ?: 0f,
+            spawnPointY = player.spawnPoint?.y ?: 0f,
+            controlMode = controlModeMapper.mapSaveData(player.controlMode),
+            activeSlot = player.activeSlot,
         )
     }
 
@@ -57,7 +60,8 @@ class PlayerMapper @Inject constructor(
             sprite = getPlayerSpritesUseCase(),
             getFallbackItem = getFallbackItemUseCase,
             x = saveDataDto.x,
-            y = saveDataDto.y
+            y = saveDataDto.y,
+            behavior = PlayerMobBehavior()
         ).apply {
             width = saveDataDto.width
             height = saveDataDto.height
@@ -81,6 +85,8 @@ class PlayerMapper @Inject constructor(
             cursorX = saveDataDto.cursorX
             cursorY = saveDataDto.cursorY
             controlMode = controlModeMapper.mapControlMode(saveDataDto.controlMode)
+            spawnPoint = Vector2(saveDataDto.spawnPointX, saveDataDto.spawnPointY)
+            activeSlot = saveDataDto.activeSlot
         }
     }
 
index 322961d8c806f22b0bb968d60b08d8522ba0bce1..dcd2026df084c4f525caf1ad1b5aaf14aa701d30 100644 (file)
@@ -65,8 +65,6 @@ sealed class SaveDataDto {
     data class InventorySaveDataDto(
         override val version: Int,
         override val size: Int,
-        val hotbarSize: Int,
-        val activeSlot: Int,
         override val items: List<InventoryItemSaveDataDto>,
     ) : ContainerSaveDataDto()
 
@@ -185,6 +183,7 @@ sealed class SaveDataDto {
         val spawnPointX: Float,
         val spawnPointY: Float,
         val controlMode: ControlModeSaveDataDto,
+        val activeSlot: Int,
     ) : MobSaveDataDto()
 
     @Serializable
index 537c4fd377fc3ca7634ea6ae29c275597a4de69f..044cfe955856044ac35ec819aa9180ee308b29b5 100644 (file)
@@ -9,18 +9,13 @@ import ru.fredboy.cavedroid.data.save.mapper.ContainerControllerMapper
 import ru.fredboy.cavedroid.data.save.mapper.DropControllerMapper
 import ru.fredboy.cavedroid.data.save.mapper.MobControllerMapper
 import ru.fredboy.cavedroid.data.save.model.SaveDataDto
-import ru.fredboy.cavedroid.domain.assets.repository.MobAssetsRepository
 import ru.fredboy.cavedroid.domain.items.model.block.Block
 import ru.fredboy.cavedroid.domain.items.repository.ItemsRepository
-import ru.fredboy.cavedroid.domain.items.usecase.GetFallbackItemUseCase
-import ru.fredboy.cavedroid.domain.items.usecase.GetItemByKeyUseCase
 import ru.fredboy.cavedroid.domain.save.model.GameSaveData
 import ru.fredboy.cavedroid.domain.save.repository.SaveDataRepository
 import ru.fredboy.cavedroid.game.controller.container.ContainerController
-import ru.fredboy.cavedroid.game.controller.container.impl.ContainerControllerImpl
 import ru.fredboy.cavedroid.game.controller.drop.DropController
 import ru.fredboy.cavedroid.game.controller.mob.MobController
-import ru.fredboy.cavedroid.game.controller.mob.impl.MobControllerImpl
 import ru.fredboy.cavedroid.game.world.GameWorld
 import java.nio.ByteBuffer
 import java.util.zip.GZIPInputStream
@@ -203,9 +198,9 @@ internal class SaveDataRepositoryImpl @Inject constructor(
         val mobsFile = Gdx.files.absolute("$savesPath$MOBS_FILE")
         val containersFile = Gdx.files.absolute("$savesPath$CONTAINERS_FILE")
 
-        val dropBytes = ProtoBuf.encodeToByteArray(dropControllerMapper.mapSaveData(dropController))
-        val mobsBytes = ProtoBuf.encodeToByteArray(mobControllerMapper.mapSaveData(mobController as MobControllerImpl))
-        val containersBytes = ProtoBuf.encodeToByteArray(containerControllerMapper.mapSaveData(containerController as ContainerControllerImpl))
+        val dropBytes = ProtoBuf.encodeToByteArray(dropControllerMapper.mapSaveData(dropController as DropController))
+        val mobsBytes = ProtoBuf.encodeToByteArray(mobControllerMapper.mapSaveData(mobController as MobController))
+        val containersBytes = ProtoBuf.encodeToByteArray(containerControllerMapper.mapSaveData(containerController as ContainerController))
 
         dropFile.writeBytes(dropBytes, false)
         mobsFile.writeBytes(mobsBytes, false)
index 4d16e98a3541706f409eef2c8b31498d558b476d..b4f5350e43cd58c891de360bd6a9dedc8cbaa69d 100644 (file)
@@ -1,6 +1,6 @@
 package ru.fredboy.cavedroid.domain.items.model.craft
 
-import ru.fredboy.cavedroid.domain.items.model.item.InventoryItem
+import ru.fredboy.cavedroid.domain.items.model.inventory.InventoryItem
 import ru.fredboy.cavedroid.domain.items.model.item.Item
 
 data class CraftingResult(
similarity index 62%
rename from core/game/controller/mob/src/main/kotlin/ru/fredboy/cavedroid/game/controller/mob/model/Inventory.kt
rename to core/domain/items/src/main/kotlin/ru/fredboy/cavedroid/domain/items/model/inventory/Inventory.kt
index 598b2655b32a54f930bfddccbec4012af50c235c..aaf4fdc17684877e82163c899e07d00976dd570b 100644 (file)
@@ -1,41 +1,19 @@
-package ru.fredboy.cavedroid.game.controller.mob.model
+package ru.fredboy.cavedroid.domain.items.model.inventory
 
-import ru.fredboy.cavedroid.domain.items.model.item.InventoryItem
 import ru.fredboy.cavedroid.domain.items.model.item.Item
 
 class Inventory @JvmOverloads constructor(
     val size: Int,
-    val hotbarSize: Int,
     private val fallbackItem: Item.None,
     initialItems: List<InventoryItem>? = null
 ) {
 
-    private val _items: Array<InventoryItem>
-
-    init {
-        if (size < 0 || hotbarSize < 0 || hotbarSize > size) {
-            throw IllegalArgumentException("Invalid inventory sizes: hotbarSize=$hotbarSize; size=$size")
-        }
-
-        _items = Array(size) { index -> initialItems?.getOrNull(index) ?: fallbackItem.toInventoryItem() }
+    private val _items: Array<InventoryItem> = Array(size) { index ->
+        initialItems?.getOrNull(index) ?: fallbackItem.toInventoryItem()
     }
 
     val items get() = _items.asList() as MutableList<InventoryItem>
 
-    val hotbarItems get() = items.subList(0, hotbarSize)
-
-    private var _activeSlot = 0
-
-    var activeSlot
-        get() = _activeSlot
-        set(value) {
-            if (value in 0 ..< hotbarSize) {
-                _activeSlot = value
-            }
-        }
-
-    val activeItem get() = _items[activeSlot]
-
     fun getAvailableSlotForItem(item: Item): Int {
         for (i in _items.indices) {
             val inventoryItem = _items[i]
@@ -71,6 +49,29 @@ class Inventory @JvmOverloads constructor(
         _items[0] = item.toInventoryItem(item.params.maxStack)
     }
 
+    /**
+     * @return true if all amount was picked up
+     */
+    fun pickUpItem(pickingItem: InventoryItem): Boolean {
+        val slot = getAvailableSlotForItem(pickingItem.item).takeIf { it >= 0 } ?: return false
+        val inventoryItem = _items[slot]
+
+        if (inventoryItem.item == pickingItem.item) {
+            if (inventoryItem.canBeAdded(pickingItem.amount)) {
+                inventoryItem.add(pickingItem.amount)
+                return true
+            } else {
+                val addCount = inventoryItem.item.params.maxStack - inventoryItem.amount
+                inventoryItem.add(addCount)
+                pickingItem.subtract(addCount)
+                return false
+            }
+        } else {
+            _items[slot] = pickingItem
+            return true
+        }
+    }
+
     @JvmOverloads
     fun decreaseItemAmount(slot: Int, count: Int = 1) {
         val item = _items[slot]
@@ -80,11 +81,6 @@ class Inventory @JvmOverloads constructor(
         }
     }
 
-    @JvmOverloads
-    fun decreaseCurrentItemAmount(count: Int = 1) {
-        decreaseItemAmount(activeSlot, count)
-    }
-
     fun clear() {
         for (i in _items.indices) {
             _items[i] = fallbackItem.toInventoryItem()
similarity index 97%
rename from core/domain/items/src/main/kotlin/ru/fredboy/cavedroid/domain/items/model/item/InventoryItem.kt
rename to core/domain/items/src/main/kotlin/ru/fredboy/cavedroid/domain/items/model/inventory/InventoryItem.kt
index 2ec69c9c4b27eed6ef959d2ebd3025931dbe6ce8..9d5295c2f7f822d6065e0f4492a6087c96a263b8 100644 (file)
@@ -1,4 +1,4 @@
-package ru.fredboy.cavedroid.domain.items.model.item
+package ru.fredboy.cavedroid.domain.items.model.inventory
 
 import com.badlogic.gdx.graphics.Color
 import com.badlogic.gdx.graphics.g2d.BitmapFont
@@ -7,6 +7,7 @@ import com.badlogic.gdx.graphics.glutils.ShapeRenderer
 import ru.fredboy.cavedroid.common.utils.drawSprite
 import ru.fredboy.cavedroid.common.utils.drawString
 import ru.fredboy.cavedroid.common.utils.px
+import ru.fredboy.cavedroid.domain.items.model.item.Item
 import kotlin.contracts.ExperimentalContracts
 import kotlin.contracts.contract
 
index 86363951030c296e66a130b8f2da73dd2a64f270..c9125584a871844f762e4ea99b7392cddfb0c426 100644 (file)
@@ -1,6 +1,7 @@
 package ru.fredboy.cavedroid.domain.items.model.item
 
 import com.badlogic.gdx.graphics.g2d.Sprite
+import ru.fredboy.cavedroid.domain.items.model.inventory.InventoryItem
 import kotlin.contracts.ExperimentalContracts
 import kotlin.contracts.contract
 import ru.fredboy.cavedroid.domain.items.model.block.Block as DomainBlockModel
index 9cc422bc7b5c6afcf143cf28ba40280e693bd4a0..ebbe9107da2c6804bf6fe09fa3cf13b64d6a295f 100644 (file)
@@ -2,7 +2,7 @@ package ru.fredboy.cavedroid.domain.items.repository
 
 import com.badlogic.gdx.utils.Disposable
 import ru.fredboy.cavedroid.domain.items.model.block.Block
-import ru.fredboy.cavedroid.domain.items.model.item.InventoryItem
+import ru.fredboy.cavedroid.domain.items.model.inventory.InventoryItem
 import ru.fredboy.cavedroid.domain.items.model.item.Item
 
 interface ItemsRepository : Disposable {
index 09af13a61cb2f792d122cd3c63028dfd0de14956..712045d219b7278a2d95ce65b60327f108d70a49 100644 (file)
@@ -1,7 +1,7 @@
 package ru.fredboy.cavedroid.domain.items.usecase
 
 import dagger.Reusable
-import ru.fredboy.cavedroid.domain.items.model.item.InventoryItem
+import ru.fredboy.cavedroid.domain.items.model.inventory.InventoryItem
 import ru.fredboy.cavedroid.domain.items.model.item.Item
 import ru.fredboy.cavedroid.domain.items.repository.ItemsRepository
 import javax.inject.Inject
diff --git a/core/domain/items/src/main/kotlin/ru/fredboy/cavedroid/domain/items/usecase/GetFallbackBlockUseCase.kt b/core/domain/items/src/main/kotlin/ru/fredboy/cavedroid/domain/items/usecase/GetFallbackBlockUseCase.kt
new file mode 100644 (file)
index 0000000..8fdd460
--- /dev/null
@@ -0,0 +1,17 @@
+package ru.fredboy.cavedroid.domain.items.usecase
+
+import dagger.Reusable
+import ru.fredboy.cavedroid.domain.items.model.block.Block
+import ru.fredboy.cavedroid.domain.items.repository.ItemsRepository
+import javax.inject.Inject
+
+@Reusable
+class GetFallbackBlockUseCase @Inject constructor(
+    private val itemsRepository: ItemsRepository,
+) {
+
+    operator fun invoke(): Block.None {
+        return itemsRepository.fallbackBlock
+    }
+
+}
\ No newline at end of file
index bdd2f11f4cd72889963e2857db7c828187ea9774..3dd07075afa9d5a359069f98f691bb047319003e 100644 (file)
@@ -13,6 +13,7 @@ dependencies {
 
     useModule(":core:domain:items")
     useModule(":core:domain:assets")
+    useModule(":core:domain:world")
 
     useModule(":core:game:controller:container")
     useModule(":core:game:controller:drop")
diff --git a/core/domain/world/build.gradle.kts b/core/domain/world/build.gradle.kts
new file mode 100644 (file)
index 0000000..ef847ce
--- /dev/null
@@ -0,0 +1,15 @@
+plugins {
+    kotlin
+    ksp
+}
+
+java.sourceCompatibility = ApplicationInfo.sourceCompatibility
+java.targetCompatibility = ApplicationInfo.sourceCompatibility
+
+dependencies {
+    useLibgdx()
+    useDagger()
+
+    useCommonModule()
+    useModule(":core:domain:items")
+}
diff --git a/core/domain/world/src/main/kotlin/ru/fredboy/cavedroid/domain/world/listener/OnBlockDestroyedListener.kt b/core/domain/world/src/main/kotlin/ru/fredboy/cavedroid/domain/world/listener/OnBlockDestroyedListener.kt
new file mode 100644 (file)
index 0000000..d790ce0
--- /dev/null
@@ -0,0 +1,10 @@
+package ru.fredboy.cavedroid.domain.world.listener
+
+import ru.fredboy.cavedroid.domain.items.model.block.Block
+import ru.fredboy.cavedroid.domain.world.model.Layer
+
+fun interface OnBlockDestroyedListener {
+
+    fun onBlockDestroyed(block: Block, x: Int, y: Int, layer: Layer, withDrop: Boolean)
+
+}
\ No newline at end of file
diff --git a/core/domain/world/src/main/kotlin/ru/fredboy/cavedroid/domain/world/listener/OnBlockPlacedListener.kt b/core/domain/world/src/main/kotlin/ru/fredboy/cavedroid/domain/world/listener/OnBlockPlacedListener.kt
new file mode 100644 (file)
index 0000000..b88bd0b
--- /dev/null
@@ -0,0 +1,10 @@
+package ru.fredboy.cavedroid.domain.world.listener
+
+import ru.fredboy.cavedroid.domain.items.model.block.Block
+import ru.fredboy.cavedroid.domain.world.model.Layer
+
+fun interface OnBlockPlacedListener {
+
+    fun onBlockPlaced(block: Block, x: Int, y: Int, layer: Layer)
+
+}
\ No newline at end of file
diff --git a/core/domain/world/src/main/kotlin/ru/fredboy/cavedroid/domain/world/model/Layer.kt b/core/domain/world/src/main/kotlin/ru/fredboy/cavedroid/domain/world/model/Layer.kt
new file mode 100644 (file)
index 0000000..b9738a3
--- /dev/null
@@ -0,0 +1,6 @@
+package ru.fredboy.cavedroid.domain.world.model
+
+enum class Layer(val z: Int) {
+    FOREGROUND(0),
+    BACKGROUND(1)
+}
diff --git a/core/entity/container/build.gradle.kts b/core/entity/container/build.gradle.kts
new file mode 100644 (file)
index 0000000..1cc022f
--- /dev/null
@@ -0,0 +1,16 @@
+plugins {
+    kotlin
+    ksp
+}
+
+java.sourceCompatibility = ApplicationInfo.sourceCompatibility
+java.targetCompatibility = ApplicationInfo.sourceCompatibility
+
+dependencies {
+    useLibgdx()
+    useDagger()
+
+    useCommonModule()
+    useModule(":core:domain:items")
+    useModule(":core:domain:world")
+}
diff --git a/core/entity/container/src/main/kotlin/ru/fredboy/cavedroid/entity/container/abstraction/ContainerFactory.kt b/core/entity/container/src/main/kotlin/ru/fredboy/cavedroid/entity/container/abstraction/ContainerFactory.kt
new file mode 100644 (file)
index 0000000..995f2b6
--- /dev/null
@@ -0,0 +1,8 @@
+package ru.fredboy.cavedroid.entity.container.abstraction
+
+import ru.fredboy.cavedroid.domain.items.model.block.Block
+import ru.fredboy.cavedroid.entity.container.model.Container
+
+interface ContainerFactory {
+    fun createContainer(type: Block.Container): Container
+}
\ No newline at end of file
diff --git a/core/entity/container/src/main/kotlin/ru/fredboy/cavedroid/entity/container/abstraction/ContainerWorldAdapter.kt b/core/entity/container/src/main/kotlin/ru/fredboy/cavedroid/entity/container/abstraction/ContainerWorldAdapter.kt
new file mode 100644 (file)
index 0000000..09b2bbd
--- /dev/null
@@ -0,0 +1,24 @@
+package ru.fredboy.cavedroid.entity.container.abstraction
+
+import ru.fredboy.cavedroid.domain.items.model.block.Block
+import ru.fredboy.cavedroid.domain.world.listener.OnBlockDestroyedListener
+import ru.fredboy.cavedroid.domain.world.listener.OnBlockPlacedListener
+import ru.fredboy.cavedroid.entity.container.model.ContainerCoordinates
+import kotlin.reflect.KClass
+
+interface ContainerWorldAdapter {
+
+    fun checkContainerAtCoordinates(
+        coordinates: ContainerCoordinates,
+        requiredType: KClass<out Block.Container>
+    ): Boolean
+
+    fun addOnBlockDestroyedListener(listener: OnBlockDestroyedListener)
+
+    fun addOnBlockPlacedListener(listener: OnBlockPlacedListener)
+
+    fun removeOnBlockDestroyedListener(listener: OnBlockDestroyedListener)
+
+    fun removeOnBlockPlacedListener(listener: OnBlockPlacedListener)
+
+}
\ No newline at end of file
similarity index 62%
rename from core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/model/Chest.kt
rename to core/entity/container/src/main/kotlin/ru/fredboy/cavedroid/entity/container/model/Chest.kt
index a20838ff4b1b9c3e0efe7c9e74ebdd3c49a0d4d7..e07e59cc9db24878d120bf9de8bdf2af954b8ffe 100644 (file)
@@ -1,11 +1,12 @@
-package ru.fredboy.cavedroid.game.controller.container.model
+package ru.fredboy.cavedroid.entity.container.model
 
-import ru.fredboy.cavedroid.domain.items.model.item.InventoryItem
+import ru.fredboy.cavedroid.domain.items.model.block.Block
+import ru.fredboy.cavedroid.domain.items.model.inventory.InventoryItem
 import ru.fredboy.cavedroid.domain.items.model.item.Item
 import ru.fredboy.cavedroid.domain.items.usecase.GetItemByKeyUseCase
 
 class Chest(
-    fallbackItem: Item,
+    fallbackItem: Item.None,
     initialItems: List<InventoryItem>? = null,
 ) : Container(
     size = SIZE,
@@ -13,6 +14,8 @@ class Chest(
     initialItems = initialItems
 ) {
 
+    override val type get() = Block.Chest::class
+
     override fun update(itemByKey: GetItemByKeyUseCase) {
         // no-op
     }
diff --git a/core/entity/container/src/main/kotlin/ru/fredboy/cavedroid/entity/container/model/Container.kt b/core/entity/container/src/main/kotlin/ru/fredboy/cavedroid/entity/container/model/Container.kt
new file mode 100644 (file)
index 0000000..8aa330f
--- /dev/null
@@ -0,0 +1,24 @@
+package ru.fredboy.cavedroid.entity.container.model
+
+import ru.fredboy.cavedroid.domain.items.model.block.Block
+import ru.fredboy.cavedroid.domain.items.model.inventory.Inventory
+import ru.fredboy.cavedroid.domain.items.model.inventory.InventoryItem
+import ru.fredboy.cavedroid.domain.items.model.item.Item
+import ru.fredboy.cavedroid.domain.items.usecase.GetItemByKeyUseCase
+import kotlin.reflect.KClass
+
+abstract class Container(
+    val size: Int,
+    protected val fallbackItem: Item.None,
+    initialItems: List<InventoryItem>? = null
+) {
+
+    val inventory = Inventory(size, fallbackItem, initialItems)
+
+    val items get() = inventory.items
+
+    abstract val type: KClass<out Block.Container>
+
+    abstract fun update(itemByKey: GetItemByKeyUseCase)
+
+}
\ No newline at end of file
diff --git a/core/entity/container/src/main/kotlin/ru/fredboy/cavedroid/entity/container/model/ContainerCoordinates.kt b/core/entity/container/src/main/kotlin/ru/fredboy/cavedroid/entity/container/model/ContainerCoordinates.kt
new file mode 100644 (file)
index 0000000..93e4048
--- /dev/null
@@ -0,0 +1,26 @@
+package ru.fredboy.cavedroid.entity.container.model
+
+data class ContainerCoordinates(
+    val x: Int,
+    val y: Int,
+    val z: Int,
+) {
+    override fun toString(): String {
+        return "($x;$y;$z)"
+    }
+
+    companion object {
+
+        fun fromString(string: String): ContainerCoordinates {
+            val xyz = string.trim('(', ')').split(';').map(Integer::valueOf)
+            if (xyz.size != 3) {
+                throw IllegalArgumentException("Invalid ContainerCoordinates format")
+            }
+            return ContainerCoordinates(
+                x = xyz[0],
+                y = xyz[1],
+                z = xyz[2],
+            )
+        }
+    }
+}
\ No newline at end of file
similarity index 91%
rename from core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/model/Furnace.kt
rename to core/entity/container/src/main/kotlin/ru/fredboy/cavedroid/entity/container/model/Furnace.kt
index 6ed18a060075aa0d6f8f21035b66ba072b0e8219..80af694ccc7ab42fc65dd4f25d3253ac128a856e 100644 (file)
@@ -1,15 +1,16 @@
-package ru.fredboy.cavedroid.game.controller.container.model
+package ru.fredboy.cavedroid.entity.container.model
 
 import com.badlogic.gdx.Gdx
 import com.badlogic.gdx.math.MathUtils
 import com.badlogic.gdx.utils.TimeUtils
-import ru.fredboy.cavedroid.domain.items.model.item.InventoryItem
-import ru.fredboy.cavedroid.domain.items.model.item.InventoryItem.Companion.isNoneOrNull
+import ru.fredboy.cavedroid.domain.items.model.block.Block
+import ru.fredboy.cavedroid.domain.items.model.inventory.InventoryItem
+import ru.fredboy.cavedroid.domain.items.model.inventory.InventoryItem.Companion.isNoneOrNull
 import ru.fredboy.cavedroid.domain.items.model.item.Item
 import ru.fredboy.cavedroid.domain.items.usecase.GetItemByKeyUseCase
 
 class Furnace(
-    fallbackItem: Item,
+    fallbackItem: Item.None,
     initialItems: List<InventoryItem>? = null
 ) : Container(
     size = SIZE,
@@ -17,6 +18,8 @@ class Furnace(
     initialItems = initialItems,
 ) {
 
+    override val type get() = Block.Furnace::class
+
     var fuel: InventoryItem
         get() = items[FUEL_INDEX]
         set(value) {
diff --git a/core/entity/drop/build.gradle.kts b/core/entity/drop/build.gradle.kts
new file mode 100644 (file)
index 0000000..1cc022f
--- /dev/null
@@ -0,0 +1,16 @@
+plugins {
+    kotlin
+    ksp
+}
+
+java.sourceCompatibility = ApplicationInfo.sourceCompatibility
+java.targetCompatibility = ApplicationInfo.sourceCompatibility
+
+dependencies {
+    useLibgdx()
+    useDagger()
+
+    useCommonModule()
+    useModule(":core:domain:items")
+    useModule(":core:domain:world")
+}
diff --git a/core/entity/drop/src/main/kotlin/ru/fredboy/cavedroid/entity/drop/abstraction/DropAdapter.kt b/core/entity/drop/src/main/kotlin/ru/fredboy/cavedroid/entity/drop/abstraction/DropAdapter.kt
new file mode 100644 (file)
index 0000000..0215ba7
--- /dev/null
@@ -0,0 +1,9 @@
+package ru.fredboy.cavedroid.entity.drop.abstraction
+
+import ru.fredboy.cavedroid.domain.items.model.inventory.Inventory
+
+interface DropAdapter {
+
+    fun dropInventory(x: Float, y: Float, inventory: Inventory)
+
+}
\ No newline at end of file
diff --git a/core/entity/drop/src/main/kotlin/ru/fredboy/cavedroid/entity/drop/abstraction/DropWorldAdapter.kt b/core/entity/drop/src/main/kotlin/ru/fredboy/cavedroid/entity/drop/abstraction/DropWorldAdapter.kt
new file mode 100644 (file)
index 0000000..693b14e
--- /dev/null
@@ -0,0 +1,16 @@
+package ru.fredboy.cavedroid.entity.drop.abstraction
+
+import ru.fredboy.cavedroid.domain.world.listener.OnBlockDestroyedListener
+import ru.fredboy.cavedroid.domain.world.listener.OnBlockPlacedListener
+
+interface DropWorldAdapter {
+
+    fun addOnBlockDestroyedListener(listener: OnBlockDestroyedListener)
+
+    fun addOnBlockPlacedListener(listener: OnBlockPlacedListener)
+
+    fun removeOnBlockDestroyedListener(listener: OnBlockDestroyedListener)
+
+    fun removeOnBlockPlacedListener(listener: OnBlockPlacedListener)
+
+}
\ No newline at end of file
similarity index 67%
rename from core/game/controller/drop/src/main/kotlin/ru/fredboy/cavedroid/game/controller/drop/model/Drop.kt
rename to core/entity/drop/src/main/kotlin/ru/fredboy/cavedroid/entity/drop/model/Drop.kt
index 376297f00a24e97973dd7c8f8ea7079f81293248..2cc1b96ded0c8a4047bcf1ac750245095721c94e 100644 (file)
@@ -1,41 +1,34 @@
-package ru.fredboy.cavedroid.game.controller.drop.model
+package ru.fredboy.cavedroid.entity.drop.model
 
 import com.badlogic.gdx.math.Intersector
+import com.badlogic.gdx.math.MathUtils
 import com.badlogic.gdx.math.Rectangle
 import com.badlogic.gdx.math.Vector2
 import ru.fredboy.cavedroid.common.utils.BLOCK_SIZE_PX
+import ru.fredboy.cavedroid.domain.items.model.inventory.InventoryItem
 import ru.fredboy.cavedroid.domain.items.model.item.Item
 
 class Drop(
     x: Float,
     y: Float,
-    val item: Item,
-    _amount: Int = 1,
+    val inventoryItem: InventoryItem,
 ) : Rectangle(x, y, DROP_SIZE, DROP_SIZE) {
 
+    constructor(x: Float, y: Float, item: Item, amount: Int = 1) : this(x, y, InventoryItem(item, amount))
+
     val velocity = getInitialVelocity()
 
     var isPickedUp = false
-    var amount = _amount
-        private set
+
+    val item get() = inventoryItem.item
+
+    val amount get() = inventoryItem.amount
 
     fun canMagnetTo(rectangle: Rectangle): Boolean {
         val magnetArea = getMagnetArea()
         return Intersector.overlaps(magnetArea, rectangle)
     }
 
-    fun subtract(count: Int = 1) {
-        if (count < 0) {
-            throw IllegalArgumentException("Can't subtract negative amount")
-        }
-
-        amount -= count
-
-        if (amount <= 0) {
-            isPickedUp = true
-        }
-    }
-
     private fun getMagnetArea(): Rectangle {
         return Rectangle(
             /* x = */ x - MAGNET_DISTANCE,
@@ -47,7 +40,7 @@ class Drop(
 
 
     companion object {
-        private fun getInitialVelocity(): Vector2 = Vector2(0f, -1f)
+        private fun getInitialVelocity(): Vector2 = Vector2(MathUtils.random(-100f, 100f), -100f)
 
         private const val MAGNET_DISTANCE = 8f
 
diff --git a/core/entity/mob/build.gradle.kts b/core/entity/mob/build.gradle.kts
new file mode 100644 (file)
index 0000000..fee0959
--- /dev/null
@@ -0,0 +1,16 @@
+plugins {
+    kotlin
+    ksp
+}
+
+java.sourceCompatibility = ApplicationInfo.sourceCompatibility
+java.targetCompatibility = ApplicationInfo.sourceCompatibility
+
+dependencies {
+    useLibgdx()
+    useDagger()
+
+    useCommonModule()
+    useModule(":core:domain:items")
+    useModule(":core:domain:assets")
+}
diff --git a/core/entity/mob/src/main/kotlin/ru/fredboy/cavedroid/entity/mob/abstraction/MobBehavior.kt b/core/entity/mob/src/main/kotlin/ru/fredboy/cavedroid/entity/mob/abstraction/MobBehavior.kt
new file mode 100644 (file)
index 0000000..400e442
--- /dev/null
@@ -0,0 +1,9 @@
+package ru.fredboy.cavedroid.entity.mob.abstraction
+
+import ru.fredboy.cavedroid.entity.mob.model.Mob
+
+interface MobBehavior {
+
+    fun update(mob: Mob, worldAdapter: MobWorldAdapter, delta: Float)
+
+}
\ No newline at end of file
diff --git a/core/entity/mob/src/main/kotlin/ru/fredboy/cavedroid/entity/mob/abstraction/MobWorldAdapter.kt b/core/entity/mob/src/main/kotlin/ru/fredboy/cavedroid/entity/mob/abstraction/MobWorldAdapter.kt
new file mode 100644 (file)
index 0000000..33bbbbd
--- /dev/null
@@ -0,0 +1,26 @@
+package ru.fredboy.cavedroid.entity.mob.abstraction
+
+import com.badlogic.gdx.math.Vector2
+import ru.fredboy.cavedroid.domain.items.model.block.Block
+
+interface MobWorldAdapter {
+
+    val height: Int
+
+    val width: Int
+
+    fun setForegroundBlock(x: Int, y: Int, block: Block)
+
+    fun setBackgroundBlock(x: Int, y: Int, block: Block)
+
+    fun getForegroundBlock(x: Int, y: Int): Block
+
+    fun getBackgroundBlock(x: Int, y: Int): Block
+
+    fun destroyForegroundBlock(x: Int, y: Int, shouldDrop: Boolean)
+
+    fun destroyBackgroundBlock(x: Int, y: Int, shouldDrop: Boolean)
+
+    fun findSpawnPoint(): Vector2
+
+}
\ No newline at end of file
similarity index 72%
rename from core/game/controller/mob/src/main/kotlin/ru/fredboy/cavedroid/game/controller/mob/model/FallingBlock.kt
rename to core/entity/mob/src/main/kotlin/ru/fredboy/cavedroid/entity/mob/model/FallingBlock.kt
index 7032fc7d06043e886a6fcdcbe2e8786b2f658e86..17dfc538c735869c509060abdefb43d05614da6e 100644 (file)
@@ -1,14 +1,16 @@
-package ru.fredboy.cavedroid.game.controller.mob.model
+package ru.fredboy.cavedroid.entity.mob.model
 
 import com.badlogic.gdx.graphics.g2d.SpriteBatch
 import ru.fredboy.cavedroid.common.utils.px
 import ru.fredboy.cavedroid.domain.items.model.block.Block
+import ru.fredboy.cavedroid.entity.mob.abstraction.MobBehavior
 
 class FallingBlock(
     val block: Block,
     x: Float,
     y: Float,
-) : Mob(x, y, 1.px, 1.px, Direction.RIGHT, Int.MAX_VALUE , {}) {
+    behavior: MobBehavior,
+) : Mob(x, y, 1.px, 1.px, Direction.RIGHT, Int.MAX_VALUE , behavior) {
 
     init {
         velocity.y = 1f
similarity index 92%
rename from core/game/controller/mob/src/main/kotlin/ru/fredboy/cavedroid/game/controller/mob/model/Mob.kt
rename to core/entity/mob/src/main/kotlin/ru/fredboy/cavedroid/entity/mob/model/Mob.kt
index b4015e8f3c0ea972ace788698745a51f6306747d..e64f973305201556278ae68a3430815f565bec2a 100644 (file)
@@ -1,4 +1,4 @@
-package ru.fredboy.cavedroid.game.controller.mob.model
+package ru.fredboy.cavedroid.entity.mob.model
 
 import com.badlogic.gdx.Gdx
 import com.badlogic.gdx.graphics.Color
@@ -8,9 +8,10 @@ import com.badlogic.gdx.math.Rectangle
 import com.badlogic.gdx.math.Vector2
 import com.badlogic.gdx.utils.Timer
 import ru.fredboy.cavedroid.common.utils.bl
-import ru.fredboy.cavedroid.domain.items.model.item.InventoryItem
+import ru.fredboy.cavedroid.domain.items.model.inventory.InventoryItem
 import ru.fredboy.cavedroid.domain.items.usecase.GetItemByKeyUseCase
-import ru.fredboy.cavedroid.game.controller.mob.MobController
+import ru.fredboy.cavedroid.entity.mob.abstraction.MobBehavior
+import ru.fredboy.cavedroid.entity.mob.abstraction.MobWorldAdapter
 import kotlin.math.abs
 
 abstract class Mob(
@@ -20,7 +21,7 @@ abstract class Mob(
     height: Float,
     var direction: Direction,
     val maxHealth: Int,
-    val behaviourStrategy: Mob.(Float) -> Unit,
+    val behavior: MobBehavior,
 ) : Rectangle(x, y, width, height) {
 
     private var resetTakeDamageTask: ResetTakeDamageTask? = null
@@ -165,8 +166,8 @@ abstract class Mob(
         )
     }
 
-    fun update(delta: Float) {
-        this.behaviourStrategy(delta)
+    fun update(mobWorldAdapter: MobWorldAdapter, delta: Float) {
+        behavior.update(this, mobWorldAdapter, delta)
     }
 
     open fun getDropItems(
@@ -175,10 +176,6 @@ abstract class Mob(
         return emptyList()
     }
 
-    fun attachToController(mobController: MobController) {
-        mobController += this
-    }
-
     abstract fun draw(spriteBatch: SpriteBatch, x: Float, y: Float, delta: Float)
 
     abstract fun changeDir()
similarity index 88%
rename from core/game/controller/mob/src/main/kotlin/ru/fredboy/cavedroid/game/controller/mob/model/Pig.kt
rename to core/entity/mob/src/main/kotlin/ru/fredboy/cavedroid/entity/mob/model/Pig.kt
index 4f1585b94c44deca711e1d1774ef16d821d420a4..53593ca7447d7741094a67b50acfae84bb49d78e 100644 (file)
@@ -1,18 +1,20 @@
-package ru.fredboy.cavedroid.game.controller.mob.model
+package ru.fredboy.cavedroid.entity.mob.model
 
 import com.badlogic.gdx.graphics.Color
 import com.badlogic.gdx.graphics.g2d.SpriteBatch
 import com.badlogic.gdx.math.Vector2
 import ru.fredboy.cavedroid.common.utils.drawSprite
 import ru.fredboy.cavedroid.domain.assets.model.MobSprite
-import ru.fredboy.cavedroid.domain.items.model.item.InventoryItem
+import ru.fredboy.cavedroid.domain.items.model.inventory.InventoryItem
 import ru.fredboy.cavedroid.domain.items.usecase.GetItemByKeyUseCase
+import ru.fredboy.cavedroid.entity.mob.abstraction.MobBehavior
 
 class Pig(
     private val sprite: MobSprite.Pig,
     x: Float,
-    y: Float
-) : Mob(x, y, WIDTH, HEIGHT, Direction.random(), MAX_HEALTH, {}) {
+    y: Float,
+    behavior: MobBehavior,
+) : Mob(x, y, WIDTH, HEIGHT, Direction.random(), MAX_HEALTH, behavior) {
 
     override val speed get() = SPEED
     
similarity index 83%
rename from core/game/controller/mob/src/main/kotlin/ru/fredboy/cavedroid/game/controller/mob/model/Player.kt
rename to core/entity/mob/src/main/kotlin/ru/fredboy/cavedroid/entity/mob/model/Player.kt
index 65403576f657a0ce277159a2929f8cfd2d5a829e..1bd0835a59ffac3912bdb40749997d528c7a61bf 100644 (file)
@@ -1,4 +1,4 @@
-package ru.fredboy.cavedroid.game.controller.mob.model
+package ru.fredboy.cavedroid.entity.mob.model
 
 import com.badlogic.gdx.graphics.Color
 import com.badlogic.gdx.graphics.g2d.SpriteBatch
@@ -7,22 +7,25 @@ import com.badlogic.gdx.math.Vector2
 import ru.fredboy.cavedroid.common.utils.applyOrigin
 import ru.fredboy.cavedroid.common.utils.drawSprite
 import ru.fredboy.cavedroid.domain.assets.model.MobSprite
-import ru.fredboy.cavedroid.domain.items.model.item.InventoryItem
+import ru.fredboy.cavedroid.domain.items.model.inventory.Inventory
+import ru.fredboy.cavedroid.domain.items.model.inventory.InventoryItem
 import ru.fredboy.cavedroid.domain.items.model.item.Item
-import ru.fredboy.cavedroid.domain.items.repository.ItemsRepository
 import ru.fredboy.cavedroid.domain.items.usecase.GetFallbackItemUseCase
 import ru.fredboy.cavedroid.domain.items.usecase.GetItemByKeyUseCase
+import ru.fredboy.cavedroid.entity.mob.abstraction.MobBehavior
 
 class Player(
     private val sprite: MobSprite.Player,
     private val getFallbackItem: GetFallbackItemUseCase,
     x: Float,
     y: Float,
-) : Mob(x, y, WIDTH, HEIGHT, Direction.random(), MAX_HEALTH, {}) {
+    behavior: MobBehavior,
+) : Mob(x, y, WIDTH, HEIGHT, Direction.random(), MAX_HEALTH, behavior) {
+
+    var spawnPoint: Vector2? = null
 
     var inventory = Inventory(
         size = INVENTORY_SIZE,
-        hotbarSize = HOTBAR_SIZE,
         fallbackItem = getFallbackItem(),
     )
 
@@ -43,12 +46,23 @@ class Player(
 
     var headRotation = 0f
 
+    private var _activeSlot = 0
+
+    var activeSlot
+        get() = _activeSlot
+        set(value) {
+            if (value in 0 ..< HOTBAR_SIZE) {
+                _activeSlot = value
+            }
+        }
+
+    val hotbarItems get() = inventory.items.subList(0, HOTBAR_SIZE)
+
+    val activeItem get() = inventory.items[activeSlot]
+
     override val speed get() = SPEED
 
-    override fun changeDir() {
-        switchDir()
-        velocity = Vector2(direction.basis * speed, 0f)
-    }
+    override fun changeDir() = Unit
 
     override fun jump() {
         velocity.y = JUMP_VELOCITY
@@ -67,6 +81,8 @@ class Player(
     }
 
     override fun draw(spriteBatch: SpriteBatch, x: Float, y: Float, delta: Float) {
+        updateAnimation(delta)
+
         with(sprite) {
             hand.setFlip(looksRight(), hand.isFlipY)
             leg.setFlip(looksRight(), leg.isFlipY)
@@ -90,7 +106,7 @@ class Player(
                 frontHandAnim = -rightHandAnim
             }
 
-            val backgroundTintColor = tintColor.cpy().sub(Color(0xAAAAAA shl 16))
+            val backgroundTintColor = tintColor.cpy().sub(Color(0xAAAAAA shl 8))
 
             hand.color = backgroundTintColor
             spriteBatch.drawSprite(hand, x + getBodyRelativeX(), y + getBodyRelativeY(), backHandAnim)
@@ -120,6 +136,17 @@ class Player(
         }
     }
 
+    fun respawn(spawnPoint: Vector2) {
+        this.spawnPoint = spawnPoint
+
+        x = spawnPoint.x
+        y = spawnPoint.y
+
+        velocity.setZero()
+        isDead = false
+        heal(maxHealth)
+    }
+
     fun startHitting(withDamage: Boolean = true) {
         if (isHitting) {
             return
@@ -136,24 +163,24 @@ class Player(
         isHitting = false
     }
 
-    fun decreaseCurrentItemCount() {
+    fun decreaseCurrentItemCount(amount: Int = 1) {
         if (gameMode == 1) {
             return
         }
 
-        inventory.activeItem.subtract()
+        activeItem.subtract(amount)
 
-        if (inventory.activeItem.amount <= 0) {
+        if (activeItem.amount <= 0) {
             setCurrentInventorySlotItem(getFallbackItem())
         }
     }
 
     fun setCurrentInventorySlotItem(item: Item) {
-        inventory.items[inventory.activeSlot] = item.toInventoryItem()
+        inventory.items[activeSlot] = item.toInventoryItem()
     }
 
     private fun drawItem(spriteBatch: SpriteBatch, x: Float, y: Float, handAnim: Float) {
-        val item = inventory.activeItem.item.takeIf { !it.isNone() } ?: return
+        val item = activeItem.item.takeIf { !it.isNone() } ?: return
         val itemSprite = item.sprite
         val isSmallSprite = !item.isTool() || item.isShears()
         val originalWidth = itemSprite.width
@@ -236,8 +263,8 @@ class Player(
 
         const val MAX_HEALTH = 20
 
-        private const val WIDTH = 4f
-        private const val HEIGHT = 30f
+        const val WIDTH = 4f
+        const val HEIGHT = 30f
 
         private const val SPEED = 69.072f
         private const val JUMP_VELOCITY = -133.332f
index ef847ce1114547aca7eed7d970e6069ecdb97e02..43efa9b35a3df13eeba6a75a5ab1a7c36685f16e 100644 (file)
@@ -12,4 +12,7 @@ dependencies {
 
     useCommonModule()
     useModule(":core:domain:items")
+    useModule(":core:domain:world")
+    useModule(":core:entity:container")
+    useModule(":core:entity:drop")
 }
index 965835bb00a1ae5b77b51f2ab37d299c68fb1cb7..e05765d32264d8864619ced1743d881c24241917 100644 (file)
 package ru.fredboy.cavedroid.game.controller.container
 
-import ru.fredboy.cavedroid.game.controller.container.listener.ContainerAddedListener
-import ru.fredboy.cavedroid.game.controller.container.listener.ContainerRemovedListener
-import ru.fredboy.cavedroid.game.controller.container.model.Container
+import com.badlogic.gdx.Gdx
+import ru.fredboy.cavedroid.common.di.GameScope
+import ru.fredboy.cavedroid.common.utils.px
+import ru.fredboy.cavedroid.domain.items.model.block.Block
+import ru.fredboy.cavedroid.domain.items.usecase.GetItemByKeyUseCase
+import ru.fredboy.cavedroid.domain.world.listener.OnBlockDestroyedListener
+import ru.fredboy.cavedroid.domain.world.listener.OnBlockPlacedListener
+import ru.fredboy.cavedroid.domain.world.model.Layer
+import ru.fredboy.cavedroid.entity.container.abstraction.ContainerFactory
+import ru.fredboy.cavedroid.entity.container.abstraction.ContainerWorldAdapter
+import ru.fredboy.cavedroid.entity.container.model.Container
+import ru.fredboy.cavedroid.entity.container.model.ContainerCoordinates
+import ru.fredboy.cavedroid.entity.drop.abstraction.DropAdapter
+import javax.inject.Inject
 
-interface ContainerController {
+@GameScope
+class ContainerController @Inject constructor(
+    private val getItemByKeyUseCase: GetItemByKeyUseCase,
+    private val containerWorldAdapter: ContainerWorldAdapter,
+    private val containerFactory: ContainerFactory,
+    private val dropAdapter: DropAdapter,
+): OnBlockPlacedListener, OnBlockDestroyedListener {
 
-    val size: Int
+    val containerMap = mutableMapOf<ContainerCoordinates, Container>()
 
-    fun getContainer(x: Int, y: Int, z: Int): Container?
+    val size get() = containerMap.size
 
-    fun addContainer(x: Int, y: Int, z: Int, container: Container)
+    init {
+        containerWorldAdapter.addOnBlockPlacedListener(this)
+        containerWorldAdapter.addOnBlockDestroyedListener(this)
+    }
 
-    /**
-     * Removes container without notifying listeners
-     */
-    fun resetContainer(x: Int, y: Int, z: Int)
+    private fun getContainerKey(x: Int, y: Int, z: Int): ContainerCoordinates {
+        return ContainerCoordinates(x, y, z)
+    }
 
-    /**
-     * Removes container and notifies listeners
-     */
-    fun destroyContainer(x: Int, y: Int, z: Int)
+    fun getContainer(x: Int, y: Int, z: Int): Container? {
+        return containerMap[getContainerKey(x, y, z)]
+    }
 
-    fun addContainerAddedListener(listener: ContainerAddedListener)
+    fun addContainer(x: Int, y: Int, z: Int, container: Container) {
+        val key = getContainerKey(x, y, z)
+        if (containerMap.containsKey(key)) {
+            resetContainer(x, y, z)
+        }
 
-    fun removeContainerAddedListener(listener: ContainerAddedListener)
+        containerMap[key] = container
+    }
 
-    fun addContainerRemovedListener(listener: ContainerRemovedListener)
+    private fun retrieveContainer(x: Int, y: Int, z: Int): Container? {
+        return containerMap.remove(getContainerKey(x, y, z))
+    }
 
-    fun removeContainerRemovedListener(listener: ContainerRemovedListener)
+    fun resetContainer(x: Int, y: Int, z: Int) {
+        retrieveContainer(x, y, z)
+    }
 
-    fun update(delta: Float)
+    fun destroyContainer(x: Int, y: Int, z: Int) {
+        retrieveContainer(x, y, z)?.let { container ->
+            dropAdapter.dropInventory(x.px, y.px, container.inventory)
+        }
+    }
 
-    fun dispose()
+    fun update(delta: Float) {
+        val iterator = containerMap.iterator()
+        while (iterator.hasNext()) {
+            val (coordinates, container) = iterator.next()
 
+            if (!containerWorldAdapter.checkContainerAtCoordinates(coordinates, container.type)) {
+                Gdx.app.log(TAG, "Removing orphaned ${container::class.simpleName} at $coordinates")
+                iterator.remove()
+            } else {
+                container.update(getItemByKeyUseCase)
+            }
+        }
+    }
+
+    fun dispose() {
+        containerMap.clear()
+        containerWorldAdapter.removeOnBlockPlacedListener(this)
+        containerWorldAdapter.removeOnBlockDestroyedListener(this)
+    }
+
+    override fun onBlockDestroyed(block: Block, x: Int, y: Int, layer: Layer, withDrop: Boolean) {
+        destroyContainer(x, y, layer.z)
+    }
+
+    override fun onBlockPlaced(block: Block, x: Int, y: Int, layer: Layer) {
+        if (block is Block.Container) {
+            val container = containerFactory.createContainer(block)
+            addContainer(x, y, layer.z, container)
+        }
+    }
+
+    companion object {
+        private const val TAG = "ContainerControllerImpl"
+    }
 }
\ No newline at end of file
index 4d2a339a95b7ac26a17827127da9041a4e5bc094..c7cf8b10de62e3bb8b089007c472dc3c32ad2cc4 100644 (file)
@@ -2,13 +2,13 @@ package ru.fredboy.cavedroid.game.controller.container.di
 
 import dagger.Binds
 import dagger.Module
-import ru.fredboy.cavedroid.game.controller.container.ContainerController
-import ru.fredboy.cavedroid.game.controller.container.impl.ContainerControllerImpl
+import ru.fredboy.cavedroid.entity.container.abstraction.ContainerFactory
+import ru.fredboy.cavedroid.game.controller.container.impl.ContainerFactoryImpl
 
 @Module
 abstract class ControllerContainerModule {
 
     @Binds
-    internal abstract fun bindContainerController(impl: ContainerControllerImpl): ContainerController
+    internal abstract fun bindContainerFactory(impl: ContainerFactoryImpl): ContainerFactory
 
 }
\ No newline at end of file
diff --git a/core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/impl/ContainerControllerImpl.kt b/core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/impl/ContainerControllerImpl.kt
deleted file mode 100644 (file)
index 5985682..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-package ru.fredboy.cavedroid.game.controller.container.impl
-
-import ru.fredboy.cavedroid.common.di.GameScope
-import ru.fredboy.cavedroid.game.controller.container.ContainerController
-import ru.fredboy.cavedroid.game.controller.container.listener.ContainerAddedListener
-import ru.fredboy.cavedroid.game.controller.container.listener.ContainerRemovedListener
-import ru.fredboy.cavedroid.game.controller.container.model.Container
-import ru.fredboy.cavedroid.domain.items.usecase.GetItemByKeyUseCase
-import javax.inject.Inject
-
-@GameScope
-class ContainerControllerImpl @Inject constructor(
-    private val itemByKey: GetItemByKeyUseCase,
-) : ContainerController {
-
-    val containerMap = mutableMapOf<String, Container>()
-
-    private val containerAddedListeners = mutableSetOf<ContainerAddedListener>()
-    private val containerRemovedListeners = mutableSetOf<ContainerRemovedListener>()
-
-    override val size get() = containerMap.size
-
-    private fun getContainerKey(x: Int, y: Int, z: Int): String {
-        return "$x;$y;$z"
-    }
-
-    override fun getContainer(x: Int, y: Int, z: Int): Container? {
-        return containerMap[getContainerKey(x, y, z)]
-    }
-
-    override fun addContainer(x: Int, y: Int, z: Int, container: Container) {
-        val key = getContainerKey(x, y, z)
-        if (containerMap.containsKey(key)) {
-            resetContainer(x, y, z)
-        }
-
-        containerMap[key] = container
-
-        containerAddedListeners.forEach { listener ->
-            listener.onContainerAdded(x, y, z, container)
-        }
-    }
-
-    private fun retrieveContainer(x: Int, y: Int, z: Int): Container? {
-        return containerMap.remove(getContainerKey(x, y, z))
-    }
-
-    override fun resetContainer(x: Int, y: Int, z: Int) {
-        retrieveContainer(x, y, z)
-    }
-
-    override fun destroyContainer(x: Int, y: Int, z: Int) {
-        retrieveContainer(x, y, z)?.let { container ->
-            containerRemovedListeners.forEach { listener ->
-                listener.onContainerRemoved(x, y, z, container)
-            }
-        }
-    }
-
-    override fun addContainerAddedListener(listener: ContainerAddedListener) {
-        containerAddedListeners.add(listener)
-    }
-
-    override fun removeContainerAddedListener(listener: ContainerAddedListener) {
-        containerAddedListeners.remove(listener)
-    }
-
-    override fun addContainerRemovedListener(listener: ContainerRemovedListener) {
-        containerRemovedListeners.add(listener)
-    }
-
-    override fun removeContainerRemovedListener(listener: ContainerRemovedListener) {
-        containerRemovedListeners.remove(listener)
-    }
-
-    override fun update(delta: Float) {
-        containerMap.values.forEach { container ->
-            container.update(itemByKey)
-        }
-    }
-
-    override fun dispose() {
-        containerAddedListeners.clear()
-        containerRemovedListeners.clear()
-        containerMap.clear()
-    }
-}
\ No newline at end of file
diff --git a/core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/impl/ContainerFactoryImpl.kt b/core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/impl/ContainerFactoryImpl.kt
new file mode 100644 (file)
index 0000000..e957dd0
--- /dev/null
@@ -0,0 +1,36 @@
+package ru.fredboy.cavedroid.game.controller.container.impl
+
+import ru.fredboy.cavedroid.common.di.GameScope
+import ru.fredboy.cavedroid.domain.items.model.block.Block
+import ru.fredboy.cavedroid.domain.items.usecase.GetFallbackItemUseCase
+import ru.fredboy.cavedroid.entity.container.abstraction.ContainerFactory
+import ru.fredboy.cavedroid.entity.container.model.Chest
+import ru.fredboy.cavedroid.entity.container.model.Container
+import ru.fredboy.cavedroid.entity.container.model.Furnace
+import javax.inject.Inject
+
+@GameScope
+internal class ContainerFactoryImpl @Inject constructor(
+    private val getFallbackItemUseCase: GetFallbackItemUseCase,
+): ContainerFactory {
+
+    override fun createContainer(type: Block.Container): Container {
+        return when (type) {
+            is Block.Furnace -> createFurnace()
+            is Block.Chest -> createChest()
+        }
+    }
+
+    private fun createFurnace(): Furnace {
+        return Furnace(
+            fallbackItem = getFallbackItemUseCase(),
+        )
+    }
+
+    private fun createChest(): Chest {
+        return Chest(
+            fallbackItem = getFallbackItemUseCase(),
+        )
+    }
+
+}
\ No newline at end of file
diff --git a/core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/listener/ContainerAddedListener.kt b/core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/listener/ContainerAddedListener.kt
deleted file mode 100644 (file)
index 7b03354..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-package ru.fredboy.cavedroid.game.controller.container.listener
-
-import ru.fredboy.cavedroid.game.controller.container.model.Container
-
-fun interface ContainerAddedListener {
-
-    fun onContainerAdded(x: Int, y: Int, z: Int, container: Container)
-
-}
diff --git a/core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/listener/ContainerRemovedListener.kt b/core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/listener/ContainerRemovedListener.kt
deleted file mode 100644 (file)
index 878a2bd..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-package ru.fredboy.cavedroid.game.controller.container.listener
-
-import ru.fredboy.cavedroid.game.controller.container.model.Container
-
-fun interface ContainerRemovedListener {
-
-    fun onContainerRemoved(x: Int, y: Int, z: Int, container: Container)
-
-}
diff --git a/core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/model/Container.kt b/core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/model/Container.kt
deleted file mode 100644 (file)
index 65e5729..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-package ru.fredboy.cavedroid.game.controller.container.model
-
-import ru.fredboy.cavedroid.domain.items.model.item.InventoryItem
-import ru.fredboy.cavedroid.domain.items.model.item.Item
-import ru.fredboy.cavedroid.domain.items.usecase.GetItemByKeyUseCase
-
-abstract class Container(
-    val size: Int,
-    protected val fallbackItem: Item,
-    initialItems: List<InventoryItem>? = null
-) {
-
-    private val _items = Array(size) { index ->
-        initialItems?.getOrNull(index) ?: fallbackItem.toInventoryItem()
-    }
-
-    val items get() = _items.asList() as MutableList<InventoryItem>
-
-    abstract fun update(itemByKey: GetItemByKeyUseCase)
-
-}
\ No newline at end of file
diff --git a/core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/usecase/AddContainerAddedListenerUseCase.kt b/core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/usecase/AddContainerAddedListenerUseCase.kt
deleted file mode 100644 (file)
index 95a74dc..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-package ru.fredboy.cavedroid.game.controller.container.usecase
-
-import ru.fredboy.cavedroid.game.controller.container.ContainerController
-import ru.fredboy.cavedroid.game.controller.container.listener.ContainerAddedListener
-import javax.inject.Inject
-
-class AddContainerAddedListenerUseCase @Inject constructor(
-    private val containerController: ContainerController,
-) {
-
-    operator fun invoke(containerAddedListener: ContainerAddedListener) {
-        containerController.addContainerAddedListener(containerAddedListener)
-    }
-
-}
diff --git a/core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/usecase/AddContainerRemovedListenerUseCase.kt b/core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/usecase/AddContainerRemovedListenerUseCase.kt
deleted file mode 100644 (file)
index 03fa499..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-package ru.fredboy.cavedroid.game.controller.container.usecase
-
-import ru.fredboy.cavedroid.game.controller.container.ContainerController
-import ru.fredboy.cavedroid.game.controller.container.listener.ContainerRemovedListener
-import javax.inject.Inject
-
-class AddContainerRemovedListenerUseCase @Inject constructor(
-    private val containerController: ContainerController,
-) {
-
-    operator fun invoke(containerRemovedListener: ContainerRemovedListener) {
-        containerController.addContainerRemovedListener(containerRemovedListener)
-    }
-
-}
diff --git a/core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/usecase/AddContainerUseCase.kt b/core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/usecase/AddContainerUseCase.kt
deleted file mode 100644 (file)
index 60f490a..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-package ru.fredboy.cavedroid.game.controller.container.usecase
-
-import ru.fredboy.cavedroid.game.controller.container.ContainerController
-import ru.fredboy.cavedroid.game.controller.container.model.Container
-import javax.inject.Inject
-
-class AddContainerUseCase @Inject constructor(
-    private val containerController: ContainerController,
-) {
-
-    operator fun invoke(x: Int, y: Int, z: Int, container: Container) {
-        containerController.addContainer(x, y, z, container)
-    }
-
-}
diff --git a/core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/usecase/DestroyContainerUseCase.kt b/core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/usecase/DestroyContainerUseCase.kt
deleted file mode 100644 (file)
index e8c1714..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-package ru.fredboy.cavedroid.game.controller.container.usecase
-
-import ru.fredboy.cavedroid.game.controller.container.ContainerController
-import javax.inject.Inject
-
-class DestroyContainerUseCase @Inject constructor(
-    private val containerController: ContainerController,
-) {
-
-    operator fun invoke(x: Int, y: Int, z: Int) {
-        containerController.destroyContainer(x, y, z)
-    }
-
-}
diff --git a/core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/usecase/DisposeContainerControllerUseCase.kt b/core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/usecase/DisposeContainerControllerUseCase.kt
deleted file mode 100644 (file)
index a8871cc..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-package ru.fredboy.cavedroid.game.controller.container.usecase
-
-import ru.fredboy.cavedroid.game.controller.container.ContainerController
-import javax.inject.Inject
-
-class DisposeContainerControllerUseCase @Inject constructor(
-    private val containerController: ContainerController,
-) {
-
-    operator fun invoke() {
-        containerController.dispose()
-    }
-
-}
diff --git a/core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/usecase/GetContainerUseCase.kt b/core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/usecase/GetContainerUseCase.kt
deleted file mode 100644 (file)
index 8ab149b..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-package ru.fredboy.cavedroid.game.controller.container.usecase
-
-import ru.fredboy.cavedroid.game.controller.container.ContainerController
-import ru.fredboy.cavedroid.game.controller.container.model.Container
-import javax.inject.Inject
-
-class GetContainerUseCase @Inject constructor(
-    private val containerController: ContainerController,
-) {
-
-    operator fun invoke(x: Int, y: Int, z: Int): Container? {
-        return containerController.getContainer(x, y, z)
-    }
-
-}
\ No newline at end of file
diff --git a/core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/usecase/RemoveContainerAddedListenerUseCase.kt b/core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/usecase/RemoveContainerAddedListenerUseCase.kt
deleted file mode 100644 (file)
index 15fb4ec..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-package ru.fredboy.cavedroid.game.controller.container.usecase
-
-import ru.fredboy.cavedroid.game.controller.container.ContainerController
-import ru.fredboy.cavedroid.game.controller.container.listener.ContainerAddedListener
-import javax.inject.Inject
-
-class RemoveContainerAddedListenerUseCase @Inject constructor(
-    private val containerController: ContainerController,
-) {
-
-    operator fun invoke(containerAddedListener: ContainerAddedListener) {
-        containerController.removeContainerAddedListener(containerAddedListener)
-    }
-
-}
diff --git a/core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/usecase/RemoveContainerRemovedListenerUseCase.kt b/core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/usecase/RemoveContainerRemovedListenerUseCase.kt
deleted file mode 100644 (file)
index 070e48f..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-package ru.fredboy.cavedroid.game.controller.container.usecase
-
-import ru.fredboy.cavedroid.game.controller.container.ContainerController
-import ru.fredboy.cavedroid.game.controller.container.listener.ContainerRemovedListener
-import javax.inject.Inject
-
-class RemoveContainerRemovedListenerUseCase @Inject constructor(
-    private val containerController: ContainerController,
-) {
-
-    operator fun invoke(containerRemovedListener: ContainerRemovedListener) {
-        containerController.removeContainerRemovedListener(containerRemovedListener)
-    }
-
-}
diff --git a/core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/usecase/ResetContainerUseCase.kt b/core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/usecase/ResetContainerUseCase.kt
deleted file mode 100644 (file)
index 60f2125..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-package ru.fredboy.cavedroid.game.controller.container.usecase
-
-import ru.fredboy.cavedroid.game.controller.container.ContainerController
-import javax.inject.Inject
-
-class ResetContainerUseCase @Inject constructor(
-    private val containerController: ContainerController,
-) {
-
-    operator fun invoke(x: Int, y: Int, z: Int) {
-        containerController.resetContainer(x, y, z)
-    }
-
-}
diff --git a/core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/usecase/UpdateContainerControllerUseCase.kt b/core/game/controller/container/src/main/kotlin/ru/fredboy/cavedroid/game/controller/container/usecase/UpdateContainerControllerUseCase.kt
deleted file mode 100644 (file)
index f42d6f1..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-package ru.fredboy.cavedroid.game.controller.container.usecase
-
-import ru.fredboy.cavedroid.game.controller.container.ContainerController
-import javax.inject.Inject
-
-class UpdateContainerControllerUseCase @Inject constructor(
-    private val containerController: ContainerController,
-) {
-
-    operator fun invoke(delta: Float) {
-        containerController.update(delta)
-    }
-
-}
index ef847ce1114547aca7eed7d970e6069ecdb97e02..d58c8e55dfbc40a51bb13a0d370055fa57a81007 100644 (file)
@@ -12,4 +12,6 @@ dependencies {
 
     useCommonModule()
     useModule(":core:domain:items")
+    useModule(":core:domain:world")
+    useModule(":core:entity:drop")
 }
index 82209f7a0f5a7753b2f2a339815e32030589e7ab..2ca41cb61aaeca2cebe9db74ced06a4ce158dac2 100644 (file)
@@ -1,35 +1,93 @@
 package ru.fredboy.cavedroid.game.controller.drop
 
-import ru.fredboy.cavedroid.game.controller.drop.listener.DropAddedListener
-import ru.fredboy.cavedroid.game.controller.drop.listener.DropRemovedListener
-import ru.fredboy.cavedroid.game.controller.drop.model.Drop
-import ru.fredboy.cavedroid.domain.items.model.item.InventoryItem
+import ru.fredboy.cavedroid.common.di.GameScope
+import ru.fredboy.cavedroid.common.utils.blockCenterPx
+import ru.fredboy.cavedroid.domain.items.model.block.Block
+import ru.fredboy.cavedroid.domain.items.model.inventory.InventoryItem
 import ru.fredboy.cavedroid.domain.items.model.item.Item
+import ru.fredboy.cavedroid.domain.items.repository.ItemsRepository
+import ru.fredboy.cavedroid.domain.world.listener.OnBlockDestroyedListener
+import ru.fredboy.cavedroid.domain.world.model.Layer
+import ru.fredboy.cavedroid.entity.drop.abstraction.DropWorldAdapter
+import ru.fredboy.cavedroid.entity.drop.model.Drop
+import java.util.*
+import javax.inject.Inject
 
-interface DropController {
+@GameScope
+class DropController @Inject constructor(
+    private val itemsRepository: ItemsRepository,
+    private val dropWorldAdapter: DropWorldAdapter,
+) : OnBlockDestroyedListener {
 
-    val size: Int
+    private val drops = LinkedList<Drop>()
 
-    fun getAllDrop(): Collection<Drop>
+    constructor(
+        itemsRepository: ItemsRepository,
+        dropWorldAdapter: DropWorldAdapter,
+        initialDrop: Collection<Drop>
+    ) : this(itemsRepository, dropWorldAdapter) {
+        drops.addAll(initialDrop.filterNot { drop -> drop.item.isNone() })
+    }
 
-    fun addDrop(drop: Drop)
+    val size get() = drops.size
 
-    fun addDrop(x: Float, y: Float, item: Item, count: Int)
+    init {
+        dropWorldAdapter.addOnBlockDestroyedListener(this)
+    }
 
-    fun addDrop(x: Float, y: Float, inventoryItem: InventoryItem)
+    fun getAllDrop(): Collection<Drop> {
+        return drops
+    }
 
-    fun forEach(action: (Drop) -> Unit)
+    fun addDrop(drop: Drop) {
+        if (drop.item.isNone()) {
+            return
+        }
 
-    fun update(delta: Float)
+        drops.add(drop)
+    }
 
-    fun addDropAddedListener(listener: DropAddedListener)
+    fun addDrop(x: Float, y: Float, item: Item, count: Int) {
+        addDrop(Drop(x, y, item, count))
+    }
 
-    fun removeDropAddedListener(listener: DropAddedListener)
+    fun addDrop(x: Float, y: Float, inventoryItem: InventoryItem) {
+        addDrop(x, y, inventoryItem.item, inventoryItem.amount)
+    }
 
-    fun addDropRemovedListener(listener: DropRemovedListener)
+    fun forEach(action: (Drop) -> Unit) {
+        drops.forEach(action)
+    }
 
-    fun removeDropRemovedListener(listener: DropRemovedListener)
+    fun update(delta: Float) {
+        val iterator = drops.iterator()
 
-    fun dispose()
+        while (iterator.hasNext()) {
+            val drop = iterator.next();
+            if (drop.isPickedUp) {
+                iterator.remove()
+            }
+        }
+    }
+
+    fun dispose() {
+        drops.clear()
+    }
+
+    override fun onBlockDestroyed(block: Block, x: Int, y: Int, layer: Layer, withDrop: Boolean) {
+        if (!withDrop) {
+            return
+        }
+
+        val dropInfo = block.params.dropInfo ?: return
+        val item = itemsRepository.getItemByKey(dropInfo.itemKey).takeIf { !it.isNone() } ?: return
+
+        addDrop(
+            x = x.blockCenterPx() - Drop.DROP_SIZE / 2,
+            y = y.blockCenterPx() - Drop.DROP_SIZE / 2,
+            item = item,
+            count = dropInfo.count
+        )
+    }
 
 }
\ No newline at end of file
index da2f398fba5ad9c0d2e139def82dd2601cd6f5d5..2e07d3811e17a35049c7d93efeda1a420a50347c 100644 (file)
@@ -2,13 +2,13 @@ package ru.fredboy.cavedroid.game.controller.drop.di
 
 import dagger.Binds
 import dagger.Module
-import ru.fredboy.cavedroid.game.controller.drop.DropController
-import ru.fredboy.cavedroid.game.controller.drop.impl.DropControllerImpl
+import ru.fredboy.cavedroid.entity.drop.abstraction.DropAdapter
+import ru.fredboy.cavedroid.game.controller.drop.impl.DropAdapterImpl
 
 @Module
 abstract class ControllerDropModule {
 
     @Binds
-    internal abstract fun bindDropController(impl: DropControllerImpl): DropController
+    internal abstract fun bindDropAdapter(impl: DropAdapterImpl): DropAdapter
 
 }
\ No newline at end of file
diff --git a/core/game/controller/drop/src/main/kotlin/ru/fredboy/cavedroid/game/controller/drop/impl/DropAdapterImpl.kt b/core/game/controller/drop/src/main/kotlin/ru/fredboy/cavedroid/game/controller/drop/impl/DropAdapterImpl.kt
new file mode 100644 (file)
index 0000000..66d558d
--- /dev/null
@@ -0,0 +1,21 @@
+package ru.fredboy.cavedroid.game.controller.drop.impl
+
+import ru.fredboy.cavedroid.common.di.GameScope
+import ru.fredboy.cavedroid.domain.items.model.inventory.Inventory
+import ru.fredboy.cavedroid.entity.drop.abstraction.DropAdapter
+import ru.fredboy.cavedroid.game.controller.drop.DropController
+import javax.inject.Inject
+
+@GameScope
+internal class DropAdapterImpl @Inject constructor(
+    private val dropController: DropController,
+) : DropAdapter {
+
+    override fun dropInventory(x: Float, y: Float, inventory: Inventory) {
+        inventory.items.forEach { item ->
+            dropController.addDrop(x, y, item)
+        }
+        inventory.clear()
+    }
+
+}
\ No newline at end of file
diff --git a/core/game/controller/drop/src/main/kotlin/ru/fredboy/cavedroid/game/controller/drop/impl/DropControllerImpl.kt b/core/game/controller/drop/src/main/kotlin/ru/fredboy/cavedroid/game/controller/drop/impl/DropControllerImpl.kt
deleted file mode 100644 (file)
index 372b9a8..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-package ru.fredboy.cavedroid.game.controller.drop.impl
-
-import ru.fredboy.cavedroid.common.di.GameScope
-import ru.fredboy.cavedroid.game.controller.drop.DropController
-import ru.fredboy.cavedroid.game.controller.drop.listener.DropAddedListener
-import ru.fredboy.cavedroid.game.controller.drop.listener.DropRemovedListener
-import ru.fredboy.cavedroid.game.controller.drop.model.Drop
-import ru.fredboy.cavedroid.domain.items.model.item.InventoryItem
-import ru.fredboy.cavedroid.domain.items.model.item.Item
-import java.util.LinkedList
-import javax.inject.Inject
-
-@GameScope
-class DropControllerImpl @Inject constructor() : DropController {
-
-    private val drops = LinkedList<Drop>()
-
-    private val dropAddedListeners = HashSet<DropAddedListener>()
-    private val dropRemovedListeners = HashSet<DropRemovedListener>()
-
-    constructor(initialDrop: Collection<Drop>) : this() {
-        drops.addAll(initialDrop)
-    }
-
-    override val size get() = drops.size
-
-    override fun getAllDrop(): Collection<Drop> {
-        return drops
-    }
-
-    override fun addDrop(drop: Drop) {
-        drops.add(drop)
-        dropAddedListeners.forEach { listener ->
-            listener.onDropAdded(drop)
-        }
-    }
-
-    override fun addDrop(x: Float, y: Float, item: Item, count: Int) {
-        addDrop(Drop(x, y, item, count))
-    }
-
-    override fun addDrop(x: Float, y: Float, inventoryItem: InventoryItem) {
-        addDrop(x, y, inventoryItem.item, inventoryItem.amount)
-    }
-
-    override fun forEach(action: (Drop) -> Unit) {
-        drops.forEach(action)
-    }
-
-    override fun update(delta: Float) {
-        val iterator = drops.iterator()
-
-        while (iterator.hasNext()) {
-            val drop = iterator.next();
-            if (drop.isPickedUp) {
-                iterator.remove()
-                dropRemovedListeners.forEach { listener ->
-                    listener.onDropRemoved(drop)
-                }
-            }
-        }
-    }
-
-    override fun addDropAddedListener(listener: DropAddedListener) {
-        dropAddedListeners.add(listener)
-    }
-
-    override fun removeDropAddedListener(listener: DropAddedListener) {
-        dropAddedListeners.remove(listener)
-    }
-
-    override fun addDropRemovedListener(listener: DropRemovedListener) {
-        dropRemovedListeners.add(listener)
-    }
-
-    override fun removeDropRemovedListener(listener: DropRemovedListener) {
-        dropRemovedListeners.remove(listener)
-    }
-
-    override fun dispose() {
-        dropAddedListeners.clear()
-        dropAddedListeners.clear()
-        drops.clear()
-    }
-
-}
\ No newline at end of file
diff --git a/core/game/controller/drop/src/main/kotlin/ru/fredboy/cavedroid/game/controller/drop/listener/DropAddedListener.kt b/core/game/controller/drop/src/main/kotlin/ru/fredboy/cavedroid/game/controller/drop/listener/DropAddedListener.kt
deleted file mode 100644 (file)
index 63798b9..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-package ru.fredboy.cavedroid.game.controller.drop.listener
-
-import ru.fredboy.cavedroid.game.controller.drop.model.Drop
-
-fun interface DropAddedListener {
-
-    fun onDropAdded(drop: Drop)
-
-}
\ No newline at end of file
diff --git a/core/game/controller/drop/src/main/kotlin/ru/fredboy/cavedroid/game/controller/drop/listener/DropRemovedListener.kt b/core/game/controller/drop/src/main/kotlin/ru/fredboy/cavedroid/game/controller/drop/listener/DropRemovedListener.kt
deleted file mode 100644 (file)
index 4242e23..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-package ru.fredboy.cavedroid.game.controller.drop.listener
-
-import ru.fredboy.cavedroid.game.controller.drop.model.Drop
-
-fun interface DropRemovedListener {
-
-    fun onDropRemoved(drop: Drop)
-
-}
diff --git a/core/game/controller/drop/src/main/kotlin/ru/fredboy/cavedroid/game/controller/drop/usecase/AddDropUseCase.kt b/core/game/controller/drop/src/main/kotlin/ru/fredboy/cavedroid/game/controller/drop/usecase/AddDropUseCase.kt
deleted file mode 100644 (file)
index 8d08651..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-package ru.fredboy.cavedroid.game.controller.drop.usecase
-
-import ru.fredboy.cavedroid.common.di.GameScope
-import ru.fredboy.cavedroid.game.controller.drop.DropController
-import ru.fredboy.cavedroid.game.controller.drop.model.Drop
-import ru.fredboy.cavedroid.domain.items.model.item.InventoryItem
-import ru.fredboy.cavedroid.domain.items.model.item.Item
-import javax.inject.Inject
-
-@GameScope
-class AddDropUseCase @Inject constructor(
-    private val dropController: DropController,
-) {
-
-    operator fun invoke(drop: Drop) {
-        dropController.addDrop(drop)
-    }
-
-    operator fun invoke(x: Float, y: Float, item: Item, count: Int) {
-        dropController.addDrop(x, y, item, count)
-    }
-
-    operator fun invoke(x: Float, y: Float, inventoryItem: InventoryItem) {
-        dropController.addDrop(x, y, inventoryItem)
-    }
-
-}
\ No newline at end of file
diff --git a/core/game/controller/drop/src/main/kotlin/ru/fredboy/cavedroid/game/controller/drop/usecase/ForEachDropUseCase.kt b/core/game/controller/drop/src/main/kotlin/ru/fredboy/cavedroid/game/controller/drop/usecase/ForEachDropUseCase.kt
deleted file mode 100644 (file)
index 6fe4125..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-package ru.fredboy.cavedroid.game.controller.drop.usecase
-
-import ru.fredboy.cavedroid.common.di.GameScope
-import ru.fredboy.cavedroid.game.controller.drop.DropController
-import ru.fredboy.cavedroid.game.controller.drop.model.Drop
-import javax.inject.Inject
-
-@GameScope
-class ForEachDropUseCase @Inject constructor(
-    private val dropController: DropController
-) {
-
-    operator fun invoke(action: (Drop) -> Unit) {
-        dropController.forEach(action)
-    }
-
-}
\ No newline at end of file
diff --git a/core/game/controller/drop/src/main/kotlin/ru/fredboy/cavedroid/game/controller/drop/usecase/UpdateDropController.kt b/core/game/controller/drop/src/main/kotlin/ru/fredboy/cavedroid/game/controller/drop/usecase/UpdateDropController.kt
deleted file mode 100644 (file)
index 71db977..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-package ru.fredboy.cavedroid.game.controller.drop.usecase
-
-import ru.fredboy.cavedroid.common.di.GameScope
-import ru.fredboy.cavedroid.game.controller.drop.DropController
-import javax.inject.Inject
-
-@GameScope
-class UpdateDropController @Inject constructor(
-    private val dropController: DropController
-) {
-
-    operator fun invoke(delta: Float) {
-        dropController.update(delta)
-    }
-
-}
\ No newline at end of file
index 1ea25f32441c592f11e78ed891b7739beecb9d45..ac2a09245737eab7cd740f409e70ccf57b242bfc 100644 (file)
@@ -13,4 +13,6 @@ dependencies {
     useCommonModule()
     useModule(":core:domain:assets")
     useModule(":core:domain:items")
+    useModule(":core:domain:world:")
+    useModule(":core:entity:mob")
 }
index e29186083c14ee8a8441ffd5e120671f3065b863..88d92016df820ff9cee51e6cfdc7e4c6d8c4bc67 100644 (file)
@@ -1,24 +1,76 @@
 package ru.fredboy.cavedroid.game.controller.mob
 
-import ru.fredboy.cavedroid.game.controller.mob.model.Mob
-import ru.fredboy.cavedroid.game.controller.mob.model.Player
+import com.badlogic.gdx.math.MathUtils
+import ru.fredboy.cavedroid.common.di.GameScope
+import ru.fredboy.cavedroid.domain.assets.repository.MobAssetsRepository
+import ru.fredboy.cavedroid.domain.items.usecase.GetFallbackItemUseCase
+import ru.fredboy.cavedroid.entity.mob.abstraction.MobWorldAdapter
+import ru.fredboy.cavedroid.entity.mob.model.Mob
+import ru.fredboy.cavedroid.entity.mob.model.Player
+import ru.fredboy.cavedroid.game.controller.mob.behavior.PlayerMobBehavior
+import java.util.*
+import javax.inject.Inject
 
-interface MobController {
+@GameScope
+class MobController @Inject constructor(
+    mobAssetsRepository: MobAssetsRepository,
+    getFallbackItemUseCase: GetFallbackItemUseCase,
+    private val mobWorldAdapter: MobWorldAdapter,
+) {
 
-    val mobs: List<Mob>
+    private val _mobs = LinkedList<Mob>()
 
-    val player: Player
+    val mobs: List<Mob> get() = _mobs
 
-    fun addMob(mob: Mob)
+    var player = Player(
+        sprite = mobAssetsRepository.getPlayerSprites(),
+        getFallbackItem = getFallbackItemUseCase,
+        x = 0f,
+        y = 0f,
+        behavior = PlayerMobBehavior()
+    )
 
-    fun removeMob(mob: Mob)
+    init {
+        respawnPlayer()
+    }
+
+    fun addMob(mob: Mob) {
+        // TODO: Probably shouldn't add if already in the list
+        _mobs.add(mob)
+    }
+
+    fun removeMob(mob: Mob) {
+        _mobs.remove(mob)
+    }
 
-    operator fun plusAssign(mob: Mob) {
-        addMob(mob)
+    fun update(delta: Float) {
+        mobs.forEach { mob ->
+            mob.update(mobWorldAdapter, delta)
+        }
+        player.update(mobWorldAdapter, delta)
     }
 
-    operator fun minusAssign(mob: Mob) {
-        removeMob(mob)
+    fun checkPlayerCursorBounds() {
+        with(player) {
+            if (gameMode == 0) {
+                val minCursorX = mapX - SURVIVAL_CURSOR_RANGE
+                val maxCursorX = mapX + SURVIVAL_CURSOR_RANGE
+                val minCursorY = middleMapY - SURVIVAL_CURSOR_RANGE
+                val maxCursorY = middleMapY + SURVIVAL_CURSOR_RANGE
+
+                cursorX = MathUtils.clamp(cursorX, minCursorX, maxCursorX)
+                cursorY = MathUtils.clamp(cursorY, minCursorY, maxCursorY)
+            }
+
+            cursorY = MathUtils.clamp(cursorY, 0, mobWorldAdapter.height)
+        }
     }
 
+    fun respawnPlayer() {
+        player.respawn(player.spawnPoint ?: mobWorldAdapter.findSpawnPoint())
+    }
+
+    companion object {
+        private const val SURVIVAL_CURSOR_RANGE = 4
+    }
 }
\ No newline at end of file
diff --git a/core/game/controller/mob/src/main/kotlin/ru/fredboy/cavedroid/game/controller/mob/behavior/BaseMobBehavior.kt b/core/game/controller/mob/src/main/kotlin/ru/fredboy/cavedroid/game/controller/mob/behavior/BaseMobBehavior.kt
new file mode 100644 (file)
index 0000000..de75a4e
--- /dev/null
@@ -0,0 +1,29 @@
+package ru.fredboy.cavedroid.game.controller.mob.behavior
+
+import ru.fredboy.cavedroid.entity.mob.model.Mob
+import ru.fredboy.cavedroid.entity.mob.abstraction.MobBehavior
+import ru.fredboy.cavedroid.entity.mob.abstraction.MobWorldAdapter
+import kotlin.reflect.KClass
+
+abstract class BaseMobBehavior<MOB : Mob>(
+    val mobType: KClass<MOB>,
+) : MobBehavior {
+
+    final override fun update(mob: Mob, worldAdapter: MobWorldAdapter, delta: Float) {
+        if (mob::class == mobType) {
+            with(mob as MOB) {
+                updateMob(worldAdapter, delta)
+            }
+        } else {
+            throw IllegalArgumentException(
+                "Trying to update mob of type ${mob::class.simpleName} with behavior of ${mobType.simpleName}"
+            )
+        }
+    }
+
+    abstract fun MOB.updateMob(worldAdapter: MobWorldAdapter, delta: Float)
+
+    companion object {
+        private const val TAG = "BaseMobBehavior"
+    }
+}
\ No newline at end of file
diff --git a/core/game/controller/mob/src/main/kotlin/ru/fredboy/cavedroid/game/controller/mob/behavior/FallingBlockMobBehavior.kt b/core/game/controller/mob/src/main/kotlin/ru/fredboy/cavedroid/game/controller/mob/behavior/FallingBlockMobBehavior.kt
new file mode 100644 (file)
index 0000000..bf20234
--- /dev/null
@@ -0,0 +1,17 @@
+package ru.fredboy.cavedroid.game.controller.mob.behavior
+
+import ru.fredboy.cavedroid.entity.mob.abstraction.MobWorldAdapter
+import ru.fredboy.cavedroid.entity.mob.model.FallingBlock
+
+class FallingBlockMobBehavior : BaseMobBehavior<FallingBlock>(
+    mobType = FallingBlock::class,
+) {
+
+    override fun FallingBlock.updateMob(worldAdapter: MobWorldAdapter, delta: Float) {
+        if (velocity.isZero) {
+            worldAdapter.setForegroundBlock(mapX, middleMapY, block)
+            kill()
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/core/game/controller/mob/src/main/kotlin/ru/fredboy/cavedroid/game/controller/mob/behavior/PigMobBehavior.kt b/core/game/controller/mob/src/main/kotlin/ru/fredboy/cavedroid/game/controller/mob/behavior/PigMobBehavior.kt
new file mode 100644 (file)
index 0000000..5eef936
--- /dev/null
@@ -0,0 +1,21 @@
+package ru.fredboy.cavedroid.game.controller.mob.behavior
+
+import com.badlogic.gdx.math.MathUtils
+import ru.fredboy.cavedroid.entity.mob.model.Pig
+import ru.fredboy.cavedroid.entity.mob.abstraction.MobWorldAdapter
+
+class PigMobBehavior : BaseMobBehavior<Pig>(
+    mobType = Pig::class,
+) {
+
+    override fun Pig.updateMob(worldAdapter: MobWorldAdapter, delta: Float) {
+        if (MathUtils.randomBoolean(delta)) {
+            if (velocity.x != 0f) {
+                velocity.x = 0f
+            } else {
+                changeDir()
+            }
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/core/game/controller/mob/src/main/kotlin/ru/fredboy/cavedroid/game/controller/mob/behavior/PlayerMobBehavior.kt b/core/game/controller/mob/src/main/kotlin/ru/fredboy/cavedroid/game/controller/mob/behavior/PlayerMobBehavior.kt
new file mode 100644 (file)
index 0000000..bc9b90c
--- /dev/null
@@ -0,0 +1,91 @@
+package ru.fredboy.cavedroid.game.controller.mob.behavior
+
+import ru.fredboy.cavedroid.domain.items.model.block.Block
+import ru.fredboy.cavedroid.domain.items.model.item.Item
+import ru.fredboy.cavedroid.domain.world.model.Layer
+import ru.fredboy.cavedroid.entity.mob.model.Player
+import ru.fredboy.cavedroid.entity.mob.abstraction.MobWorldAdapter
+
+class PlayerMobBehavior : BaseMobBehavior<Player>(
+    mobType = Player::class,
+) {
+
+    private fun Block?.isHittable() = this != null && !isNone() && params.hitPoints >= 0
+
+    private fun MobWorldAdapter.getTargetBlockWithLayer(x: Int, y: Int): Pair<Block, Layer>? {
+        val foregroundBlock = getForegroundBlock(x, y)
+        val backgroundBlock = getBackgroundBlock(x, y)
+
+        return when {
+            foregroundBlock.isHittable() -> foregroundBlock to Layer.FOREGROUND
+            backgroundBlock.isHittable() -> backgroundBlock to Layer.BACKGROUND
+            else -> null
+        }
+    }
+
+    private fun Player.hitBlock(worldAdapter: MobWorldAdapter) {
+        if (!isHitting || !isHittingWithDamage) {
+            return
+        }
+
+        val (targetBlock, targetLayer) = worldAdapter.getTargetBlockWithLayer(cursorX, cursorY)
+            ?: run {
+                stopHitting()
+                return
+            }
+
+        if (gameMode == 0) {
+            if (blockDamage >= targetBlock.params.hitPoints) {
+                val shouldDrop = activeItem.item.let { itemInHand ->
+                    val toolLevel = (itemInHand as? Item.Tool)?.level?.takeIf {
+                        targetBlock.params.toolType == itemInHand.javaClass
+                    } ?: 0
+
+                    toolLevel >= targetBlock.params.toolLevel
+                }
+
+                decreaseCurrentItemCount()
+
+                when (targetLayer) {
+                    Layer.FOREGROUND -> worldAdapter.destroyForegroundBlock(cursorX, cursorY, shouldDrop)
+                    Layer.BACKGROUND -> worldAdapter.destroyBackgroundBlock(cursorX, cursorY, shouldDrop)
+                }
+                blockDamage = 0f
+            }
+        } else {
+            when (targetLayer) {
+                Layer.FOREGROUND -> worldAdapter.destroyForegroundBlock(cursorX, cursorY, false)
+                Layer.BACKGROUND -> worldAdapter.destroyBackgroundBlock(cursorX, cursorY, false)
+            }
+            stopHitting()
+        }
+    }
+
+    override fun Player.updateMob(worldAdapter: MobWorldAdapter, delta: Float) {
+        hitBlock(worldAdapter)
+
+        if (gameMode == 1) {
+            return
+        }
+
+        val (targetBlock, _) = worldAdapter.getTargetBlockWithLayer(cursorX, cursorY)
+            ?.takeIf { isHitting && isHittingWithDamage }
+            ?: run {
+                blockDamage = 0f
+                return@updateMob
+            }
+
+        var blockDamageMultiplier = 1f
+        (activeItem.item as? Item.Tool)?.let { currentTool ->
+            if (currentTool.javaClass == targetBlock.params.toolType &&
+                currentTool.level >= targetBlock.params.toolLevel) {
+                blockDamageMultiplier = 2f * currentTool.level
+            }
+            blockDamageMultiplier *= currentTool.blockDamageMultiplier
+        }
+
+        if (isHitting && isHittingWithDamage) {
+            blockDamage += 60f * delta * blockDamageMultiplier
+        }
+    }
+}
\ No newline at end of file
index 973ac2fe38a05b250c0e74cfb9319a16b2dff07c..d2ff0af087be7e38855fed837e8f25b215269e8b 100644 (file)
@@ -1,14 +1,8 @@
 package ru.fredboy.cavedroid.game.controller.mob.di
 
-import dagger.Binds
 import dagger.Module
-import ru.fredboy.cavedroid.game.controller.mob.MobController
-import ru.fredboy.cavedroid.game.controller.mob.impl.MobControllerImpl
 
 @Module
 abstract class MobControllerModule {
 
-    @Binds
-    internal abstract fun bindMobController(impl: MobControllerImpl): MobController
-
 }
\ No newline at end of file
diff --git a/core/game/controller/mob/src/main/kotlin/ru/fredboy/cavedroid/game/controller/mob/factory/FallingBlockFactory.kt b/core/game/controller/mob/src/main/kotlin/ru/fredboy/cavedroid/game/controller/mob/factory/FallingBlockFactory.kt
new file mode 100644 (file)
index 0000000..f65bcc6
--- /dev/null
@@ -0,0 +1,29 @@
+package ru.fredboy.cavedroid.game.controller.mob.factory
+
+import ru.fredboy.cavedroid.common.di.GameScope
+import ru.fredboy.cavedroid.common.utils.px
+import ru.fredboy.cavedroid.domain.items.model.block.Block
+import ru.fredboy.cavedroid.entity.mob.model.FallingBlock
+import ru.fredboy.cavedroid.game.controller.mob.MobController
+import ru.fredboy.cavedroid.game.controller.mob.behavior.FallingBlockMobBehavior
+import javax.inject.Inject
+
+@GameScope
+class FallingBlockFactory @Inject constructor(
+    private val mobController: MobController,
+) {
+
+    fun create(x: Int, y: Int, block: Block): FallingBlock {
+        val fallingBlock = FallingBlock(
+            block = block,
+            x = x.px,
+            y = y.px,
+            behavior = FallingBlockMobBehavior(),
+        )
+
+        mobController.addMob(fallingBlock)
+
+        return fallingBlock
+    }
+
+}
\ No newline at end of file
diff --git a/core/game/controller/mob/src/main/kotlin/ru/fredboy/cavedroid/game/controller/mob/factory/PigFactory.kt b/core/game/controller/mob/src/main/kotlin/ru/fredboy/cavedroid/game/controller/mob/factory/PigFactory.kt
new file mode 100644 (file)
index 0000000..9ecabef
--- /dev/null
@@ -0,0 +1,29 @@
+package ru.fredboy.cavedroid.game.controller.mob.factory
+
+import ru.fredboy.cavedroid.common.di.GameScope
+import ru.fredboy.cavedroid.domain.assets.GameAssetsHolder
+import ru.fredboy.cavedroid.entity.mob.model.Pig
+import ru.fredboy.cavedroid.game.controller.mob.MobController
+import ru.fredboy.cavedroid.game.controller.mob.behavior.PigMobBehavior
+import javax.inject.Inject
+
+@GameScope
+class PigFactory @Inject constructor(
+    private val mobController: MobController,
+    private val gameAssetsHolder: GameAssetsHolder,
+) {
+
+    fun create(x: Float, y: Float): Pig {
+        val pig = Pig(
+            x = x,
+            y = y,
+            behavior = PigMobBehavior(),
+            sprite = gameAssetsHolder.getPigSprites(),
+        )
+
+        mobController.addMob(pig)
+
+        return pig
+    }
+
+}
\ No newline at end of file
diff --git a/core/game/controller/mob/src/main/kotlin/ru/fredboy/cavedroid/game/controller/mob/impl/MobControllerImpl.kt b/core/game/controller/mob/src/main/kotlin/ru/fredboy/cavedroid/game/controller/mob/impl/MobControllerImpl.kt
deleted file mode 100644 (file)
index b221631..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-package ru.fredboy.cavedroid.game.controller.mob.impl
-
-import ru.fredboy.cavedroid.common.di.GameScope
-import ru.fredboy.cavedroid.domain.assets.repository.MobAssetsRepository
-import ru.fredboy.cavedroid.domain.items.repository.ItemsRepository
-import ru.fredboy.cavedroid.domain.items.usecase.GetFallbackItemUseCase
-import ru.fredboy.cavedroid.game.controller.mob.MobController
-import ru.fredboy.cavedroid.game.controller.mob.model.Mob
-import ru.fredboy.cavedroid.game.controller.mob.model.Player
-import java.util.LinkedList
-import javax.inject.Inject
-
-@GameScope
-class MobControllerImpl @Inject constructor(
-    mobAssetsRepository: MobAssetsRepository,
-    getFallbackItemUseCase: GetFallbackItemUseCase,
-) : MobController {
-
-    private val _mobs = LinkedList<Mob>()
-
-    override val mobs: List<Mob> get() = _mobs
-
-    override var player = Player(mobAssetsRepository.getPlayerSprites(), getFallbackItemUseCase, 0f, 0f)
-
-    override fun addMob(mob: Mob) {
-        // TODO: Probably shouldn't add if already in the list
-        _mobs.add(mob)
-    }
-
-    override fun removeMob(mob: Mob) {
-        _mobs.remove(mob)
-    }
-}
\ No newline at end of file
index 8c3e673566a081e7d71568f891a7a8cc7ff73b61..317d76b82b3ed246a8fe05936c0ede976193d13c 100644 (file)
@@ -12,8 +12,8 @@ dependencies {
 
     useCommonModule()
     useModule(":core:domain:items")
-
-    useModule(":core:game:controller:container")
-    useModule(":core:game:controller:drop")
-    useModule(":core:game:controller:mob")
+    useModule(":core:domain:world")
+    useModule(":core:entity:container")
+    useModule(":core:entity:drop")
+    useModule(":core:entity:mob")
 }
index a6b0a24fe33f64fd39edb086e4aa14cc3f647430..4e8e0ca20c523fd6c015b7f04c5824e5503d927a 100644 (file)
@@ -1,29 +1,21 @@
 package ru.fredboy.cavedroid.game.world
 
-import com.badlogic.gdx.Gdx
-import com.badlogic.gdx.math.MathUtils
 import ru.fredboy.cavedroid.common.di.GameScope
-import ru.fredboy.cavedroid.common.utils.px
+import ru.fredboy.cavedroid.common.utils.removeFirst
 import ru.fredboy.cavedroid.domain.items.model.block.Block
 import ru.fredboy.cavedroid.domain.items.repository.ItemsRepository
-import ru.fredboy.cavedroid.domain.items.usecase.GetBlockByKeyUseCase
-import ru.fredboy.cavedroid.game.controller.container.ContainerController
-import ru.fredboy.cavedroid.game.controller.container.model.Chest
-import ru.fredboy.cavedroid.game.controller.container.model.Container
-import ru.fredboy.cavedroid.game.controller.container.model.Furnace
-import ru.fredboy.cavedroid.game.controller.drop.DropController
-import ru.fredboy.cavedroid.game.controller.mob.MobController
-import ru.fredboy.cavedroid.game.controller.mob.model.Player
+import ru.fredboy.cavedroid.domain.world.listener.OnBlockDestroyedListener
+import ru.fredboy.cavedroid.domain.world.listener.OnBlockPlacedListener
+import ru.fredboy.cavedroid.domain.world.model.Layer
 import ru.fredboy.cavedroid.game.world.generator.GameWorldGenerator
 import ru.fredboy.cavedroid.game.world.generator.WorldGeneratorConfig
+import java.lang.ref.WeakReference
+import java.util.LinkedList
 import javax.inject.Inject
 
 @GameScope
 class GameWorld @Inject constructor(
     private val itemsRepository: ItemsRepository,
-    private val containerController: ContainerController,
-    private val mobController: MobController,
-    private val dropController: DropController,
     initialForeMap: Array<Array<Block>>?,
     initialBackMap: Array<Array<Block>>?,
 ) {
@@ -35,15 +27,40 @@ class GameWorld @Inject constructor(
 
     val generatorConfig = WorldGeneratorConfig.getDefault()
 
+    private val onBlockPlacedListeners = LinkedList<WeakReference<OnBlockPlacedListener>>()
+    private val onBlockDestroyedListeners = LinkedList<WeakReference<OnBlockDestroyedListener>>()
+
     init {
         width = generatorConfig.width
         height = generatorConfig.height
 
-        val (generatedFore, generatedBack) = GameWorldGenerator(generatorConfig, itemsRepository).generate()
-        foreMap = generatedFore
-        backMap = generatedBack
+        if (initialForeMap != null && initialBackMap != null) {
+            foreMap = initialForeMap
+            backMap = initialBackMap
+        } else {
+            val (generatedFore, generatedBack) = GameWorldGenerator(generatorConfig, itemsRepository).generate()
+            foreMap = generatedFore
+            backMap = generatedBack
+        }
+    }
+
+    fun addBlockPlacedListener(listener: OnBlockPlacedListener) {
+        onBlockPlacedListeners.add(WeakReference(listener))
+    }
+
+    fun addBlockDestroyedListener(listener: OnBlockDestroyedListener) {
+        onBlockDestroyedListeners.add(WeakReference(listener))
     }
 
+    fun removeBlockPlacedListener(listener: OnBlockPlacedListener) {
+        onBlockPlacedListeners.removeFirst { it.get() == listener }
+    }
+
+    fun removeBlockDestroyedListener(listener: OnBlockDestroyedListener) {
+        onBlockDestroyedListeners.removeFirst { it.get() == listener }
+    }
+
+
     private fun transformX(x: Int): Int {
         var transformed = x % width
         if (transformed < 0) {
@@ -52,7 +69,7 @@ class GameWorld @Inject constructor(
         return transformed
     }
 
-    private fun getMap(x: Int, y: Int, layer: Int): Block {
+    private fun getMap(x: Int, y: Int, layer: Layer): Block {
         val fallback = itemsRepository.fallbackBlock
 
         if (y !in 0 ..< height) {
@@ -66,16 +83,24 @@ class GameWorld @Inject constructor(
         }
 
         return when (layer) {
-            FOREGROUND_Z -> foreMap[transformedX][y]
-            BACKGROUND_Z -> backMap[transformedX][y]
-            else -> {
-                Gdx.app.error(TAG, "Unexpected value for layer in getMap ($layer). Returning fallback")
-                fallback
-            }
+            Layer.FOREGROUND -> foreMap[transformedX][y]
+            Layer.BACKGROUND -> backMap[transformedX][y]
+        }
+    }
+
+    private fun notifyBlockPlaced(x: Int, y: Int, layer: Layer, value: Block) {
+        onBlockPlacedListeners.forEach { listener ->
+            listener.get()?.onBlockPlaced(value, x, y, layer)
         }
     }
 
-    private fun setMap(x: Int, y: Int, layer: Int, value: Block) {
+    private fun notifyBlockDestroyed(x: Int, y: Int, layer: Layer, value: Block, withDrop: Boolean) {
+        onBlockDestroyedListeners.forEach { listener ->
+            listener.get()?.onBlockDestroyed(value, x, y, layer, withDrop)
+        }
+    }
+
+    private fun setMap(x: Int, y: Int, layer: Layer, value: Block, dropOld: Boolean) {
         if (y !in 0 ..< height) {
             return
         }
@@ -86,28 +111,18 @@ class GameWorld @Inject constructor(
             return
         }
 
-        containerController.destroyContainer(x, y, layer)
-
-        if (value.isContainer()) {
-            when {
-                value.isChest() -> Chest(itemsRepository.fallbackItem)
-                value.isFurnace() -> Furnace(itemsRepository.fallbackItem)
-                else -> {
-                    Gdx.app.error(TAG, "Unknow container type: ${value::class.simpleName}")
-                    null
-                }
-            }?.let { container ->
-                containerController.addContainer(x, y, layer, container)
+        getMap(x, y, layer)
+            .takeIf { !it.isNone() }
+            ?.let { currentBlock ->
+                notifyBlockDestroyed(x, y, layer, currentBlock, dropOld)
             }
-        }
 
         when (layer) {
-            FOREGROUND_Z -> foreMap[transformedX][y] = value
-            BACKGROUND_Z -> backMap[transformedX][y] = value
-            else -> {
-                Gdx.app.error(TAG, "Unexpected value for layer in setMap ($layer). Returning fallback")
-            }
+            Layer.FOREGROUND -> foreMap[transformedX][y] = value
+            Layer.BACKGROUND -> backMap[transformedX][y] = value
         }
+
+        notifyBlockPlaced(x, y, layer, value)
     }
 
     private fun isSameSlab(slab1: Block, slab2: Block): Boolean {
@@ -116,19 +131,19 @@ class GameWorld @Inject constructor(
     }
 
     fun hasForeAt(x: Int, y: Int): Boolean {
-        return !getMap(x, y, FOREGROUND_Z).isNone()
+        return !getMap(x, y, Layer.FOREGROUND).isNone()
     }
 
     fun hasBackAt(x: Int, y: Int): Boolean {
-        return !getMap(x, y, BACKGROUND_Z).isNone()
+        return !getMap(x, y, Layer.BACKGROUND).isNone()
     }
 
     fun getForeMap(x: Int, y: Int): Block {
-        return getMap(x, y, FOREGROUND_Z)
+        return getMap(x, y, Layer.FOREGROUND)
     }
 
-    fun setForeMap(x: Int, y: Int, block: Block) {
-        setMap(x, y, FOREGROUND_Z, block)
+    fun setForeMap(x: Int, y: Int, block: Block, dropOld: Boolean = false) {
+        setMap(x, y, Layer.FOREGROUND, block, dropOld)
     }
 
     fun resetForeMap(x: Int, y: Int) {
@@ -136,132 +151,52 @@ class GameWorld @Inject constructor(
     }
 
     fun getBackMap(x: Int, y: Int): Block {
-        return getMap(x, y, BACKGROUND_Z)
+        return getMap(x, y, Layer.BACKGROUND)
     }
 
-    fun setBackMap(x: Int, y: Int, block: Block) {
-        setMap(x, y, BACKGROUND_Z, block)
+    fun setBackMap(x: Int, y: Int, block: Block, dropOld: Boolean = false) {
+        setMap(x, y, Layer.BACKGROUND, block, dropOld)
     }
 
     fun canPlaceToForeground(x: Int, y: Int, value: Block): Boolean {
         return !hasForeAt(x, y) || value.isNone() || !getForeMap(x, y).params.hasCollision
     }
 
-    fun placeToForeground(x: Int, y: Int, value: Block): Boolean {
-        return if (canPlaceToForeground(x, y, value)) {
-            setForeMap(x, y, value)
+    fun placeToForeground(x: Int, y: Int, value: Block, dropOld: Boolean = false): Boolean {
+        val wasPlaced = if (canPlaceToForeground(x, y, value)) {
+            setForeMap(x, y, value, dropOld)
             true
         } else if (value is Block.Slab && isSameSlab(value, getForeMap(x, y))) {
-            setForeMap(x, y, itemsRepository.getBlockByKey(value.otherPartBlockKey))
+            setForeMap(x, y, itemsRepository.getBlockByKey(value.otherPartBlockKey), dropOld)
             true
         } else {
             false
         }
+
+        return wasPlaced
     }
 
-    fun placeToBackground(x: Int, y: Int, value: Block): Boolean {
-        return if (value.isNone() || getBackMap(x, y).isNone() && value.params.hasCollision &&
+    fun placeToBackground(x: Int, y: Int, value: Block, dropOld: Boolean = false): Boolean {
+        val wasPlaced = if (value.isNone() || getBackMap(x, y).isNone() && value.params.hasCollision &&
             (!value.params.isTransparent || value.params.key == "glass" || value.isChest() || value.isSlab())) {
-            setBackMap(x, y, value)
+            setBackMap(x, y, value, dropOld)
             true
         } else {
             false
         }
-    }
-
-    fun checkPlayerCursorBounds() {
-        with(mobController.player) {
-            if (gameMode == 0) {
-                val minCursorX = mapX - SURVIVAL_CURSOR_RANGE
-                val maxCursorX = mapX + SURVIVAL_CURSOR_RANGE
-                val minCursorY = middleMapY - SURVIVAL_CURSOR_RANGE
-                val maxCursorY = middleMapY + SURVIVAL_CURSOR_RANGE
 
-                cursorX = MathUtils.clamp(cursorX, minCursorX, maxCursorX)
-                cursorY = MathUtils.clamp(cursorY, minCursorY, maxCursorY)
-            }
-
-            cursorY = MathUtils.clamp(cursorY, 0, this@GameWorld.height)
-        }
+        return wasPlaced
     }
 
-    fun playerDurateTool() {
-        TODO()
+    fun destroyForeMap(x: Int, y: Int, shouldDrop: Boolean) {
+        placeToForeground(x, y, itemsRepository.fallbackBlock, shouldDrop)
     }
 
-    private fun shouldDrop(block: Block): Boolean {
-        TODO()
+    fun destroyBackMap(x: Int, y: Int, shouldDrop: Boolean) {
+        placeToBackground(x, y, itemsRepository.fallbackBlock, shouldDrop)
     }
 
-    private fun spawnInitialMobs() {
-        TODO()
-    }
-
-    fun destroyForeMap(x: Int, y: Int) {
-        val block = getForeMap(x, y)
-
-        if (block.isContainer()) {
-            containerController.destroyContainer(x, y, FOREGROUND_Z)
-        }
-
-        block.params.dropInfo?.takeIf { shouldDrop(block) }?.let { dropInfo ->
-            dropController.addDrop(
-                x = transformX(x).px,
-                y = y.px,
-                item = itemsRepository.getItemByKey(dropInfo.itemKey),
-                count = dropInfo.count,
-            )
-        }
-        playerDurateTool()
-        placeToForeground(x, y, itemsRepository.fallbackBlock)
-    }
-
-    fun destroyBackMap(x: Int, y: Int) {
-        val block = getBackMap(x, y)
-
-        if (block.isContainer()) {
-            containerController.destroyContainer(x, y, BACKGROUND_Z)
-        }
-
-        block.params.dropInfo?.takeIf { shouldDrop(block) }?.let { dropInfo ->
-            dropController.addDrop(
-                x = transformX(x).px,
-                y = y.px,
-                item = itemsRepository.getItemByKey(dropInfo.itemKey),
-                count = dropInfo.count,
-            )
-        }
-        playerDurateTool()
-        placeToBackground(x, y, itemsRepository.fallbackBlock)
-    }
-
-    private fun getContainerAt(x: Int, y: Int, layer: Int): Container? {
-        return containerController.getContainer(x, y, layer)
-    }
-
-    fun getForegroundContainer(x: Int, y: Int): Container? {
-        return getContainerAt(x, y, FOREGROUND_Z)
-    }
-
-    fun getBackgroundContainer(x: Int, y: Int): Container? {
-        return getContainerAt(x, y, BACKGROUND_Z)
-    }
-
-    fun getForegroundFurnace(x: Int, y: Int): Furnace? {
-        return getForegroundContainer(x, y) as? Furnace
-    }
-
-    fun getBackgroundFurnace(x: Int, y: Int): Furnace? {
-        return getBackgroundContainer(x, y) as? Furnace
-    }
-
-
     companion object {
         private const val TAG = "GameWorld"
-
-        private const val FOREGROUND_Z = 0
-        private const val BACKGROUND_Z = 1
-
-        private const val SURVIVAL_CURSOR_RANGE = 4
     }
 }
\ No newline at end of file
diff --git a/core/game/world/src/main/kotlin/ru/fredboy/cavedroid/game/world/di/GameWorldModule.kt b/core/game/world/src/main/kotlin/ru/fredboy/cavedroid/game/world/di/GameWorldModule.kt
new file mode 100644 (file)
index 0000000..5bce171
--- /dev/null
@@ -0,0 +1,21 @@
+package ru.fredboy.cavedroid.game.world.di
+
+import dagger.Binds
+import dagger.Module
+import ru.fredboy.cavedroid.entity.container.abstraction.ContainerWorldAdapter
+import ru.fredboy.cavedroid.entity.drop.abstraction.DropWorldAdapter
+import ru.fredboy.cavedroid.entity.mob.abstraction.MobWorldAdapter
+import ru.fredboy.cavedroid.game.world.impl.WorldAdapterImpl
+
+@Module
+abstract class GameWorldModule {
+
+    @Binds
+    internal abstract fun bindMobWorldAdapter(impl: WorldAdapterImpl): MobWorldAdapter
+
+    @Binds
+    internal abstract fun bindContainerWorldAdapter(impl: WorldAdapterImpl): ContainerWorldAdapter
+
+    @Binds
+    internal abstract fun bindDropWorldAdapter(impl: WorldAdapterImpl): DropWorldAdapter
+}
\ No newline at end of file
diff --git a/core/game/world/src/main/kotlin/ru/fredboy/cavedroid/game/world/impl/WorldAdapterImpl.kt b/core/game/world/src/main/kotlin/ru/fredboy/cavedroid/game/world/impl/WorldAdapterImpl.kt
new file mode 100644 (file)
index 0000000..8736dba
--- /dev/null
@@ -0,0 +1,108 @@
+package ru.fredboy.cavedroid.game.world.impl
+
+import com.badlogic.gdx.math.Vector2
+import ru.fredboy.cavedroid.common.di.GameScope
+import ru.fredboy.cavedroid.common.utils.px
+import ru.fredboy.cavedroid.domain.items.model.block.Block
+import ru.fredboy.cavedroid.domain.items.repository.ItemsRepository
+import ru.fredboy.cavedroid.domain.world.listener.OnBlockDestroyedListener
+import ru.fredboy.cavedroid.domain.world.listener.OnBlockPlacedListener
+import ru.fredboy.cavedroid.domain.world.model.Layer
+import ru.fredboy.cavedroid.entity.container.abstraction.ContainerWorldAdapter
+import ru.fredboy.cavedroid.entity.container.model.ContainerCoordinates
+import ru.fredboy.cavedroid.entity.drop.abstraction.DropWorldAdapter
+import ru.fredboy.cavedroid.entity.mob.model.Player
+import ru.fredboy.cavedroid.entity.mob.abstraction.MobWorldAdapter
+import ru.fredboy.cavedroid.game.world.GameWorld
+import javax.inject.Inject
+import kotlin.reflect.KClass
+
+@GameScope
+internal class WorldAdapterImpl @Inject constructor(
+    private val gameWorld: GameWorld,
+    private val itemsRepository: ItemsRepository,
+) : DropWorldAdapter, ContainerWorldAdapter, MobWorldAdapter {
+
+    override val height: Int
+        get() = gameWorld.height
+
+    override val width: Int
+        get() = gameWorld.width
+
+    override fun setForegroundBlock(x: Int, y: Int, block: Block) {
+        gameWorld.setForeMap(x, y, block)
+    }
+
+    override fun setBackgroundBlock(x: Int, y: Int, block: Block) {
+        gameWorld.setBackMap(x, y, block)
+    }
+
+    override fun getForegroundBlock(x: Int, y: Int): Block {
+        return gameWorld.getForeMap(x, y)
+    }
+
+    override fun getBackgroundBlock(x: Int, y: Int): Block {
+        return gameWorld.getBackMap(x, y)
+    }
+
+    override fun destroyForegroundBlock(x: Int, y: Int, shouldDrop: Boolean) {
+        gameWorld.destroyForeMap(x, y, shouldDrop)
+    }
+
+    override fun destroyBackgroundBlock(x: Int, y: Int, shouldDrop: Boolean) {
+        gameWorld.destroyBackMap(x, y, shouldDrop)
+    }
+
+    override fun findSpawnPoint(): Vector2 {
+        var x = width / 2
+        var y = 0
+
+        while (y++ in 0..gameWorld.generatorConfig.seaLevel) {
+            if (y == gameWorld.generatorConfig.seaLevel) {
+                while (x++ in 0 ..< width) {
+                    if (getForegroundBlock(x, y).params.hasCollision) {
+                        break
+                    } else if (x == width - 1) {
+                        setBackgroundBlock(x, y, itemsRepository.getBlockByKey("grass"))
+                        break
+                    }
+                }
+                break
+            }
+            if (getForegroundBlock(width / 2, y).params.hasCollision) {
+                break
+            }
+        }
+
+        return Vector2(x.px + .5f.px - Player.WIDTH / 2, y.px - Player.HEIGHT)
+    }
+
+    override fun checkContainerAtCoordinates(
+        coordinates: ContainerCoordinates,
+        requiredType: KClass<out Block.Container>
+    ): Boolean {
+        val block = when (coordinates.z) {
+            Layer.FOREGROUND.z -> gameWorld.getForeMap(coordinates.x, coordinates.y)
+            Layer.BACKGROUND.z -> gameWorld.getBackMap(coordinates.x, coordinates.y)
+            else -> itemsRepository.fallbackBlock
+        }
+
+        return block.isContainer() && block::class == requiredType
+    }
+
+    override fun addOnBlockDestroyedListener(listener: OnBlockDestroyedListener) {
+        gameWorld.addBlockDestroyedListener(listener)
+    }
+
+    override fun addOnBlockPlacedListener(listener: OnBlockPlacedListener) {
+        gameWorld.addBlockPlacedListener(listener)
+    }
+
+    override fun removeOnBlockDestroyedListener(listener: OnBlockDestroyedListener) {
+        gameWorld.removeBlockDestroyedListener(listener)
+    }
+
+    override fun removeOnBlockPlacedListener(listener: OnBlockPlacedListener) {
+        gameWorld.removeBlockPlacedListener(listener)
+    }
+}
\ No newline at end of file
index abff53b0889142f9132677d213bb9ba5b4a54b10..43b0b4813759ae06d9352a55eefff0f5b2fe38d1 100644 (file)
@@ -5,6 +5,9 @@ import ru.deadsoftware.cavedroid.MainComponent;
 import ru.deadsoftware.cavedroid.generated.module.*;
 import ru.fredboy.cavedroid.common.di.GameScope;
 import ru.fredboy.cavedroid.domain.items.repository.ItemsRepository;
+import ru.fredboy.cavedroid.game.controller.container.di.ControllerContainerModule;
+import ru.fredboy.cavedroid.game.controller.drop.di.ControllerDropModule;
+import ru.fredboy.cavedroid.game.world.di.GameWorldModule;
 
 @GameScope
 @Component(dependencies = {
@@ -17,7 +20,11 @@ import ru.fredboy.cavedroid.domain.items.repository.ItemsRepository;
                 RenderModule.class,
                 KeyboardInputHandlersModule.class,
                 MouseInputHandlersModule.class,
-                UseBlockActionsModule.class
+                UseBlockActionsModule.class,
+                GameWorldModule.class,
+                ControllerContainerModule.class,
+                ControllerDropModule.class,
+
         })
 public interface GameComponent {
     GameProc getGameProc();
index bc598fb97c45d87fae7fe6867e2e8a38d74cccf6..c83dee2fb7a8c39fd65910129d4f30e618b5f7fa 100644 (file)
@@ -4,23 +4,22 @@ import dagger.Module;
 import dagger.Provides;
 import org.jetbrains.annotations.Nullable;
 import ru.deadsoftware.cavedroid.MainConfig;
-import ru.deadsoftware.cavedroid.game.ui.TooltipManager;
 import ru.fredboy.cavedroid.common.di.GameScope;
 import ru.fredboy.cavedroid.domain.assets.repository.MobAssetsRepository;
-import ru.fredboy.cavedroid.domain.assets.usecase.GetPigSpritesUseCase;
-import ru.fredboy.cavedroid.domain.assets.usecase.GetPlayerSpritesUseCase;
 import ru.fredboy.cavedroid.domain.items.model.block.Block;
 import ru.fredboy.cavedroid.domain.items.repository.ItemsRepository;
 import ru.fredboy.cavedroid.domain.items.usecase.GetFallbackItemUseCase;
 import ru.fredboy.cavedroid.domain.items.usecase.GetItemByKeyUseCase;
 import ru.fredboy.cavedroid.domain.save.model.GameSaveData;
 import ru.fredboy.cavedroid.domain.save.repository.SaveDataRepository;
+import ru.fredboy.cavedroid.entity.container.abstraction.ContainerFactory;
+import ru.fredboy.cavedroid.entity.container.abstraction.ContainerWorldAdapter;
+import ru.fredboy.cavedroid.entity.drop.abstraction.DropAdapter;
+import ru.fredboy.cavedroid.entity.drop.abstraction.DropWorldAdapter;
 import ru.fredboy.cavedroid.game.controller.container.ContainerController;
-import ru.fredboy.cavedroid.game.controller.container.impl.ContainerControllerImpl;
 import ru.fredboy.cavedroid.game.controller.drop.DropController;
-import ru.fredboy.cavedroid.game.controller.drop.impl.DropControllerImpl;
 import ru.fredboy.cavedroid.game.controller.mob.MobController;
-import ru.fredboy.cavedroid.game.controller.mob.impl.MobControllerImpl;
+import ru.fredboy.cavedroid.entity.mob.abstraction.MobWorldAdapter;
 import ru.fredboy.cavedroid.game.world.GameWorld;
 
 @Module
@@ -50,9 +49,13 @@ public class GameModule {
     @Provides
     @GameScope
     public static DropController provideDropController(MainConfig mainConfig,
-                                                       SaveDataRepository saveDataRepository) {
+                                                       SaveDataRepository saveDataRepository,
+                                                       DropWorldAdapter dropWorldAdapter,
+                                                       ItemsRepository itemsRepository) {
         load(mainConfig, saveDataRepository);
-        DropController controller = data != null ? data.retrieveDropController() : new DropControllerImpl();
+        DropController controller = data != null
+                ? data.retrieveDropController()
+                : new DropController(itemsRepository, dropWorldAdapter);
         makeDataNullIfEmpty();
         return controller;
     }
@@ -61,12 +64,15 @@ public class GameModule {
     @GameScope
     public static ContainerController provideFurnaceController(MainConfig mainConfig,
                                                                SaveDataRepository saveDataRepository,
-                                                               GetItemByKeyUseCase getItemByKeyUseCase
+                                                               GetItemByKeyUseCase getItemByKeyUseCase,
+                                                               ContainerWorldAdapter containerWorldAdapter,
+                                                               ContainerFactory containerFactory,
+                                                               DropAdapter dropAdapter
                                                                ) {
         load(mainConfig, saveDataRepository);
         ContainerController controller = data != null
                 ? data.retrieveContainerController()
-                : new ContainerControllerImpl(getItemByKeyUseCase);
+                : new ContainerController(getItemByKeyUseCase, containerWorldAdapter, containerFactory, dropAdapter);
         makeDataNullIfEmpty();
         return controller;
     }
@@ -76,11 +82,13 @@ public class GameModule {
     public static MobController provideMobsController(MainConfig mainConfig,
                                                       SaveDataRepository saveDataRepository,
                                                       MobAssetsRepository mobAssetsRepository,
-                                                      GetFallbackItemUseCase getFallbackItemUseCase) {
+                                                      GetFallbackItemUseCase getFallbackItemUseCase,
+                                                      MobWorldAdapter mobWorldAdapter
+    ) {
         load(mainConfig, saveDataRepository);
         MobController controller = data != null
                 ? data.retrieveMobsController()
-                : new MobControllerImpl(mobAssetsRepository, getFallbackItemUseCase);
+                : new MobController(mobAssetsRepository, getFallbackItemUseCase, mobWorldAdapter);
         makeDataNullIfEmpty();
         return controller;
     }
@@ -89,16 +97,13 @@ public class GameModule {
     @GameScope
     public static GameWorld provideGameWorld(MainConfig mainConfig,
                                              SaveDataRepository saveDataRepository,
-                                             ItemsRepository itemsRepository,
-                                             ContainerController containerController,
-                                             MobController mobController,
-                                             DropController dropController
+                                             ItemsRepository itemsRepository
                                              ) {
         load(mainConfig, saveDataRepository);
         Block[][] fm = data != null ? data.retrieveForeMap() : null;
         Block[][] bm = data != null ? data.retrieveBackMap() : null;
         makeDataNullIfEmpty();
-        return new GameWorld(itemsRepository, containerController, mobController, dropController, fm, bm);
+        return new GameWorld(itemsRepository, fm, bm);
     }
 
 }
index 7e1cbb37c9d1988d2d538bf8e4f7db54232b7918..418877069950fef4039a59306fa43c7947112073 100644 (file)
@@ -4,19 +4,20 @@ import com.badlogic.gdx.math.Intersector;
 import com.badlogic.gdx.math.MathUtils;
 import com.badlogic.gdx.math.Rectangle;
 import com.badlogic.gdx.math.Vector2;
+import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 import ru.deadsoftware.cavedroid.MainConfig;
 import ru.fredboy.cavedroid.common.di.GameScope;
 import ru.fredboy.cavedroid.common.utils.MeasureUnitsUtilsKt;
 import ru.fredboy.cavedroid.domain.items.model.block.Block;
-import ru.fredboy.cavedroid.domain.items.model.item.InventoryItem;
+import ru.fredboy.cavedroid.domain.items.model.inventory.InventoryItem;
 import ru.fredboy.cavedroid.domain.items.usecase.GetItemByKeyUseCase;
+import ru.fredboy.cavedroid.entity.drop.model.Drop;
+import ru.fredboy.cavedroid.entity.mob.model.FallingBlock;
+import ru.fredboy.cavedroid.entity.mob.model.Mob;
+import ru.fredboy.cavedroid.entity.mob.model.Player;
 import ru.fredboy.cavedroid.game.controller.drop.DropController;
-import ru.fredboy.cavedroid.game.controller.drop.model.Drop;
 import ru.fredboy.cavedroid.game.controller.mob.MobController;
-import ru.fredboy.cavedroid.game.controller.mob.model.FallingBlock;
-import ru.fredboy.cavedroid.game.controller.mob.model.Mob;
-import ru.fredboy.cavedroid.game.controller.mob.model.Player;
 import ru.fredboy.cavedroid.game.world.GameWorld;
 
 import javax.inject.Inject;
@@ -153,8 +154,7 @@ public class GamePhysics {
         final Player player = mMobController.getPlayer();
 
         if (Intersector.overlaps(shiftedPlayerTarget, drop)) {
-            // TODO: Pick up drop
-//            player.getInventory().pickDrop(drop);
+            drop.setPickedUp(player.getInventory().pickUpItem(drop.getInventoryItem()));
         }
     }
 
@@ -220,19 +220,20 @@ public class GamePhysics {
                     mob.x = collidingRect.x + collidingRect.width;
                 }
 
-//                mob.x = MathUtils.round(mob.getX());
-//                while (checkColl(mob) != null) {
-//                    mob.x += d;
-//                }
-
                 if (mob.getCanJump()) {
                     mob.changeDir();
                 }
             }
         }
 
-        // TODO: Check World Bounds
-//        mob.checkWorldBounds(mGameWorld);
+        // Check world bounds
+        final float worldWidthPx = MeasureUnitsUtilsKt.getPx(mGameWorld.getWidth());
+        if (mob.getX() + mob.getWidth() / 2 < 0) {
+            mob.x += worldWidthPx;
+        }
+        if (mob.getX() + mob.getWidth() / 2 > worldWidthPx) {
+            mob.x -= worldWidthPx;
+        }
     }
 
     private void mobYColl(Mob mob) {
@@ -260,13 +261,6 @@ public class GamePhysics {
                 mob.y = collidingRect.y + collidingRect.height;
             }
 
-
-//            mob.y = MathUtils.round(mob.getY());
-//
-//            while (checkColl(mob)) {
-//                mob.y += d;
-//            }
-
             mob.getVelocity().y = 0;
 
         } else {
@@ -280,7 +274,7 @@ public class GamePhysics {
         }
     }
 
-    private void playerPhy(Player player, float delta) {
+    private void playerPhy(@NotNull Player player, float delta) {
         if (player.isDead()) {
             return;
         }
@@ -382,12 +376,11 @@ public class GamePhysics {
         //todo : Update player
 //        player.ai(mGameWorld, mGameItemsHolder, mMobController, delta);
         if (player.isDead()) {
-            for (InventoryItem invItem : player.getInventory().getItems()) {
-                mDropController.addDrop(player.x, player.y, invItem);
-            }
+//            for (InventoryItem invItem : player.getInventory().getItems()) {
+//                mDropController.addDrop(player.x, player.y, invItem);
+//            }
             player.getInventory().clear();
-            //todo: Respawn player
-//            player.respawn(mGameWorld, mGameItemsHolder);
+            mMobController.respawnPlayer();
         }
     }
 
index 5c206ff9c45d37b93aee5d58c2bc6458a16dcb19..bae4ef6acbdb8f9ed3ec555c321d8fbf63ae99bf 100644 (file)
@@ -8,9 +8,9 @@ import ru.deadsoftware.cavedroid.game.world.GameWorldBlocksLogicControllerTask;
 import ru.deadsoftware.cavedroid.game.world.GameWorldFluidsLogicControllerTask;
 import ru.deadsoftware.cavedroid.game.world.GameWorldMobDamageControllerTask;
 import ru.fredboy.cavedroid.common.di.GameScope;
+import ru.fredboy.cavedroid.entity.mob.model.Player;
 import ru.fredboy.cavedroid.game.controller.container.ContainerController;
 import ru.fredboy.cavedroid.game.controller.mob.MobController;
-import ru.fredboy.cavedroid.game.controller.mob.model.Player;
 
 import javax.inject.Inject;
 
@@ -60,6 +60,7 @@ public class GameProc implements Disposable {
     }
 
     public void update(float delta) {
+        mMobsController.update(delta);
         mGamePhysics.update(delta);
         mGameRenderer.render(delta);
         mContainerController.update(delta);
index e6de7079eb14c8abeb628bd0ebd0dac2327c1bb5..bd49c1593128e1fe60d25f61961c84256afe1a1b 100644 (file)
@@ -28,8 +28,8 @@ import ru.fredboy.cavedroid.common.utils.RenderingUtilsKt;
 import ru.fredboy.cavedroid.domain.assets.model.TouchButton;
 import ru.fredboy.cavedroid.domain.assets.usecase.GetFontUseCase;
 import ru.fredboy.cavedroid.domain.assets.usecase.GetTouchButtonsUseCase;
+import ru.fredboy.cavedroid.entity.mob.model.Player;
 import ru.fredboy.cavedroid.game.controller.mob.MobController;
-import ru.fredboy.cavedroid.game.controller.mob.model.Player;
 import ru.fredboy.cavedroid.game.world.GameWorld;
 
 import javax.inject.Inject;
index 091a0b6a3ed4dfd4db2204c95cda94922cb73009..f858d64186c11b230c42f5bf59712526cebb79e9 100644 (file)
@@ -1,6 +1,6 @@
 package ru.deadsoftware.cavedroid.game.actions.placeblock
 
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindPlaceBlockAction
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindPlaceBlockAction
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.domain.items.model.item.Item
 import ru.fredboy.cavedroid.game.controller.mob.MobController
index 7e145d34908560d16f31df0c39ef4122226febe3..0fccde09e1458d25b753e1a021793c7502eaf6fa 100644 (file)
@@ -1,6 +1,6 @@
 package ru.deadsoftware.cavedroid.game.actions.placeblock
 
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindPlaceBlockAction
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindPlaceBlockAction
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.domain.items.model.item.Item
 import ru.fredboy.cavedroid.game.controller.mob.MobController
index 74a0b84f9209d11a8996d7aaab5ed38b66761b5b..4be69af071d066f1176169d66ecafd216620b433 100644 (file)
@@ -1,7 +1,7 @@
 package ru.deadsoftware.cavedroid.game.actions.placeblock
 
 import com.badlogic.gdx.Gdx
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindPlaceBlockAction
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindPlaceBlockAction
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.domain.items.model.item.Item
 import ru.fredboy.cavedroid.game.controller.mob.MobController
index 2bd5d2dc633eb3f3093955c9a590e2bdce46f5e8..526efe4fa6f38609237d3f9de8d3c3c6b14b0497 100644 (file)
@@ -1,6 +1,6 @@
 package ru.deadsoftware.cavedroid.game.actions.updateblock
 
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindUpdateBlockAction
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindUpdateBlockAction
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.domain.items.usecase.GetBlockByKeyUseCase
 import ru.fredboy.cavedroid.game.world.GameWorld
index 15b016f24ec96b058f4a5a4919d96b681124b33c..06be12878d8f5781e415d57d24aa0fd5083c5438 100644 (file)
@@ -1,6 +1,6 @@
 package ru.deadsoftware.cavedroid.game.actions.updateblock
 
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindUpdateBlockAction
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindUpdateBlockAction
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.domain.items.usecase.GetBlockByKeyUseCase
 import ru.fredboy.cavedroid.game.world.GameWorld
index 99a45abe0bd5cb3ffa88f96d96904ef8175b983a..286f5d974385787facc1c1a682a2d940028f590f 100644 (file)
@@ -1,6 +1,6 @@
 package ru.deadsoftware.cavedroid.game.actions.updateblock
 
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindUpdateBlockAction
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindUpdateBlockAction
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.domain.items.usecase.GetBlockByKeyUseCase
 import ru.fredboy.cavedroid.game.world.GameWorld
index eb2a624fb88509bdf2a20647e705e9175f0c82e0..bcfc00730a01835ef3c77ec4b4b73696c70c88d4 100644 (file)
@@ -1,10 +1,8 @@
 package ru.deadsoftware.cavedroid.game.actions.updateblock
 
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindUpdateBlockAction
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindUpdateBlockAction
 import ru.fredboy.cavedroid.common.di.GameScope
-import ru.fredboy.cavedroid.common.utils.px
-import ru.fredboy.cavedroid.game.controller.mob.MobController
-import ru.fredboy.cavedroid.game.controller.mob.model.FallingBlock
+import ru.fredboy.cavedroid.game.controller.mob.factory.FallingBlockFactory
 import ru.fredboy.cavedroid.game.world.GameWorld
 import javax.inject.Inject
 
@@ -12,7 +10,7 @@ import javax.inject.Inject
 @BindUpdateBlockAction(stringKey = UpdateRequiresBlockAction.ACTION_KEY)
 class UpdateRequiresBlockAction @Inject constructor(
     private val gameWorld: GameWorld,
-    private val mobController: MobController,
+    private val fallingBlockFactory: FallingBlockFactory,
 ) : IUpdateBlockAction {
 
     override fun update(x: Int, y: Int) {
@@ -21,10 +19,9 @@ class UpdateRequiresBlockAction @Inject constructor(
 
             if (block.params.isFallable) {
                 gameWorld.resetForeMap(x, y)
-                FallingBlock(block, x.px, y.px)
-                    .attachToController(mobController)
+                fallingBlockFactory.create(x, y, block)
             } else {
-                gameWorld.destroyForeMap(x, y)
+                gameWorld.destroyForeMap(x, y, true)
             }
         }
     }
index a8903a4293ebd7f7fcccf9f0de6c36901e866c93..11b783ae658da9a52b338191ce12005bad7d9ee3 100644 (file)
@@ -1,6 +1,6 @@
 package ru.deadsoftware.cavedroid.game.actions.updateblock
 
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindUpdateBlockAction
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindUpdateBlockAction
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.domain.items.usecase.GetBlockByKeyUseCase
 import ru.fredboy.cavedroid.game.world.GameWorld
index f7a2d29f43e1ae8169adcaafe9d8e2db9cd65c86..e8a8e30dce0e5b35a0e3f8f76c8de5774dff03d7 100644 (file)
@@ -1,23 +1,25 @@
 package ru.deadsoftware.cavedroid.game.actions.useblock
 
 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindUseBlockAction
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindUseBlockAction
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.domain.items.model.block.Block
-import ru.fredboy.cavedroid.game.controller.container.model.Chest
-import ru.fredboy.cavedroid.game.world.GameWorld
+import ru.fredboy.cavedroid.domain.world.model.Layer
+import ru.fredboy.cavedroid.entity.container.model.Chest
+import ru.fredboy.cavedroid.game.controller.container.ContainerController
 import javax.inject.Inject
 
 @GameScope
 @BindUseBlockAction(stringKey = UseChestAction.KEY)
 class UseChestAction @Inject constructor(
-    private val gameWorld: GameWorld,
+    private val containerController: ContainerController,
     private val gameWindowsManager: GameWindowsManager,
 ) : IUseBlockAction {
 
     override fun perform(block: Block, x: Int, y: Int) {
-        val chest = (gameWorld.getForegroundContainer(x, y) as? Chest)
-            ?: (gameWorld.getBackgroundContainer(x, y) as? Chest)
+        // TODO: transform x
+        val chest = (containerController.getContainer(x, y, Layer.FOREGROUND.z) as? Chest)
+            ?: (containerController.getContainer(x, y, Layer.BACKGROUND.z)  as? Chest)
             ?: return
         gameWindowsManager.openChest(chest)
     }
index 9c04860ed37d88018dc97140928a36fbf054aba6..95645dc18966eb663306825af1f6c2f88c434dbc 100644 (file)
@@ -1,7 +1,7 @@
 package ru.deadsoftware.cavedroid.game.actions.useblock
 
 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindUseBlockAction
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindUseBlockAction
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.domain.items.model.block.Block
 import javax.inject.Inject
index 8aa1456b1d9a62428f147f51ac19ea96e8b3c99f..22cedbd78894f260b3996f5707793e9672d20f04 100644 (file)
@@ -1,21 +1,28 @@
 package ru.deadsoftware.cavedroid.game.actions.useblock
 
 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindUseBlockAction
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindUseBlockAction
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.domain.items.model.block.Block
+import ru.fredboy.cavedroid.domain.world.model.Layer
+import ru.fredboy.cavedroid.entity.container.model.Furnace
+import ru.fredboy.cavedroid.game.controller.container.ContainerController
 import ru.fredboy.cavedroid.game.world.GameWorld
 import javax.inject.Inject
 
 @GameScope
 @BindUseBlockAction(stringKey = UseFurnaceAction.KEY)
 class UseFurnaceAction @Inject constructor(
-    private val gameWorld: GameWorld,
+    private val containerController: ContainerController,
     private val gameWindowsManager: GameWindowsManager,
 ) : IUseBlockAction {
 
     override fun perform(block: Block, x: Int, y: Int) {
-        val furnace = gameWorld.getForegroundFurnace(x, y) ?: gameWorld.getBackgroundFurnace(x, y) ?: return
+        // TODO: transform x
+        val furnace = (containerController.getContainer(x, y, Layer.FOREGROUND.z)
+            ?: containerController.getContainer(x, y, Layer.FOREGROUND.z)) as? Furnace
+        furnace ?: return
+
         gameWindowsManager.openFurnace(furnace)
     }
 
index ab7232e05acf6ad1e83b7921acb9a923118f45a3..84f6b47ffe74ccb13e9c65f4d7676922a988a4f5 100644 (file)
@@ -1,6 +1,6 @@
 package ru.deadsoftware.cavedroid.game.actions.useitem
 
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindUseItemAction
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindUseItemAction
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.domain.items.model.item.Item
 import ru.fredboy.cavedroid.domain.items.usecase.GetBlockByKeyUseCase
@@ -23,7 +23,7 @@ class UseBedAction @Inject constructor(
         if (gameWorld.canPlaceToForeground(x, y, bedLeft) && gameWorld.canPlaceToForeground(x + 1, y, bedRight)) {
             gameWorld.placeToForeground(x, y, bedLeft)
             gameWorld.placeToForeground(x + 1, y, bedRight)
-            mobController.player.inventory.decreaseCurrentItemAmount()
+            mobController.player.decreaseCurrentItemCount()
         }
     }
 
index 51ad33b0e3cb0a593c9d3c394798d0ac9d20d14f..887de2ac1b5b899f25c419fef62cc6320dc5f219 100644 (file)
@@ -1,6 +1,6 @@
 package ru.deadsoftware.cavedroid.game.actions.useitem
 
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindUseItemAction
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindUseItemAction
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.domain.items.model.block.Block
 import ru.fredboy.cavedroid.domain.items.model.item.Item
index 6eb8a1c2c69fd1f114b69d5ffd39be221673a68b..2c1df5f68c80df457e2f89640dbc03e13d2641a8 100644 (file)
@@ -1,6 +1,6 @@
 package ru.deadsoftware.cavedroid.game.actions.useitem
 
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindUseItemAction
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindUseItemAction
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.domain.items.model.item.Item
 import ru.fredboy.cavedroid.domain.items.usecase.GetBlockByKeyUseCase
index b05c39fb3a584da5ce486dfd6ee5fb163a3379cd..f2fa4c7dbccb9c4bf5cc772dbf960ddde5c8404d 100644 (file)
@@ -1,25 +1,22 @@
 package ru.deadsoftware.cavedroid.game.actions.useitem
 
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindUseItemAction
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindUseItemAction
 import ru.fredboy.cavedroid.common.di.GameScope
-import ru.fredboy.cavedroid.domain.assets.usecase.GetPigSpritesUseCase
 import ru.fredboy.cavedroid.common.utils.px
 import ru.fredboy.cavedroid.domain.items.model.item.Item
 import ru.fredboy.cavedroid.game.controller.mob.MobController
-import ru.fredboy.cavedroid.game.controller.mob.model.Pig
+import ru.fredboy.cavedroid.game.controller.mob.factory.PigFactory
 import javax.inject.Inject
 
 @GameScope
 @BindUseItemAction(UsePigSpawnEggAction.ACTION_KEY)
 class UsePigSpawnEggAction @Inject constructor(
     private val mobController: MobController,
-    private val getPigSprites: GetPigSpritesUseCase,
+    private val pigFactory: PigFactory,
 ) : IUseItemAction {
 
     override fun perform(item: Item.Usable, x: Int, y: Int) {
-        Pig(getPigSprites(), mobController.player.cursorX.px, mobController.player.cursorY.px)
-            .apply { attachToController(mobController) }
-
+        pigFactory.create(mobController.player.cursorX.px, mobController.player.cursorY.px)
         mobController.player.decreaseCurrentItemCount()
     }
 
index a49b5c6237c35d61bbc8a770b44761d9597f77e0..62c26f546689e2db8a701c6be292fdbd7df476ff 100644 (file)
@@ -1,6 +1,6 @@
 package ru.deadsoftware.cavedroid.game.actions.useitem
 
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindUseItemAction
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindUseItemAction
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.domain.items.model.item.Item
 import ru.fredboy.cavedroid.domain.items.usecase.GetBlockByKeyUseCase
index 90246b7b2734bebc7b2765b44b17ab358ad5ea8e..9d69c6927256f754f458013c72505e0fd5140f0b 100644 (file)
@@ -31,7 +31,7 @@ class DebugInfoStringsProvider @Inject constructor(
             "Drops: ${dropController.size}",
             "Containers: ${containerController.size}",
             "Block: ${gameWorld.getForeMap(player.cursorX, player.cursorY).params.key}",
-            "Hand: ${player.inventory.activeItem.item.params.key}",
+            "Hand: ${player.activeItem.item.params.key}",
             "Game mode: ${player.gameMode}",
             "Block damage: ${player.blockDamage}"
         )
index e8d5e9fd3cd2a5a812d28f8ae06ded0ed86c53c7..a1e21e75fe87de8f4125e0cb762b68c4048b17ba 100644 (file)
@@ -5,7 +5,7 @@ import ru.deadsoftware.cavedroid.game.input.IKeyboardInputHandler
 import ru.deadsoftware.cavedroid.game.input.action.KeyboardInputAction
 import ru.deadsoftware.cavedroid.game.input.action.keys.KeyboardInputActionKey
 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindKeyboardInputHandler
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindKeyboardInputHandler
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.game.controller.drop.DropController
 import ru.fredboy.cavedroid.game.controller.mob.MobController
index 7fc60acbc7772943ba1e8bde95bce57c88898929..b546d761e2f6a540b9d65c1c689504df93931d7f 100644 (file)
@@ -5,11 +5,11 @@ import ru.deadsoftware.cavedroid.game.input.IKeyboardInputHandler
 import ru.deadsoftware.cavedroid.game.input.action.KeyboardInputAction
 import ru.deadsoftware.cavedroid.game.input.action.keys.KeyboardInputActionKey
 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindKeyboardInputHandler
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindKeyboardInputHandler
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.domain.items.model.item.Item
+import ru.fredboy.cavedroid.entity.drop.model.Drop
 import ru.fredboy.cavedroid.game.controller.drop.DropController
-import ru.fredboy.cavedroid.game.controller.drop.model.Drop
 import ru.fredboy.cavedroid.game.controller.mob.MobController
 import javax.inject.Inject
 
@@ -24,7 +24,7 @@ class DropItemKeyboardInputHandler @Inject constructor(
     override fun checkConditions(action: KeyboardInputAction): Boolean {
         return action.actionKey is KeyboardInputActionKey.DropItem &&
                 action.isKeyDown && gameWindowsManager.getCurrentWindow() == GameUiWindow.NONE &&
-                !mobController.player.inventory.activeItem.item.isNone()
+                !mobController.player.activeItem.item.isNone()
     }
 
     private fun createDrop(item: Item, playerX: Float, playerY: Float, amount: Int) {
@@ -38,11 +38,11 @@ class DropItemKeyboardInputHandler @Inject constructor(
 
     override fun handle(action: KeyboardInputAction) {
         val player = mobController.player
-        val currentItem = player.inventory.activeItem
+        val currentItem = player.activeItem
         val dropAmount =  if (currentItem.item.isTool()) currentItem.amount else 1
 
         createDrop(currentItem.item, player.x, player.y, dropAmount)
-        player.inventory.decreaseCurrentItemAmount(dropAmount)
+        player.decreaseCurrentItemCount(dropAmount)
     }
 
     companion object {
index a331b67d44925ef0028ad4120b0d7dd22cadbd63..d6523c7868a3557d91da00d86b57a61a6db2ac72 100644 (file)
@@ -4,10 +4,10 @@ import ru.deadsoftware.cavedroid.MainConfig
 import ru.deadsoftware.cavedroid.game.input.IKeyboardInputHandler
 import ru.deadsoftware.cavedroid.game.input.action.KeyboardInputAction
 import ru.deadsoftware.cavedroid.game.input.action.keys.KeyboardInputActionKey
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindKeyboardInputHandler
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindKeyboardInputHandler
 import ru.fredboy.cavedroid.common.di.GameScope
+import ru.fredboy.cavedroid.entity.mob.model.Player
 import ru.fredboy.cavedroid.game.controller.mob.MobController
-import ru.fredboy.cavedroid.game.controller.mob.model.Player
 import javax.inject.Inject
 
 @GameScope
index 0f9c57f60c56d038de6ff69f948bc2e894f32150..73e3d32381c220062816ce669492bcbbde43b4a1 100644 (file)
@@ -4,10 +4,10 @@ import ru.deadsoftware.cavedroid.MainConfig
 import ru.deadsoftware.cavedroid.game.input.IKeyboardInputHandler
 import ru.deadsoftware.cavedroid.game.input.action.KeyboardInputAction
 import ru.deadsoftware.cavedroid.game.input.action.keys.KeyboardInputActionKey
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindKeyboardInputHandler
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindKeyboardInputHandler
 import ru.fredboy.cavedroid.common.di.GameScope
+import ru.fredboy.cavedroid.entity.mob.model.Player
 import ru.fredboy.cavedroid.game.controller.mob.MobController
-import ru.fredboy.cavedroid.game.controller.mob.model.Player
 import javax.inject.Inject
 
 @GameScope
index 2ba1d83c95f2103d3aec8319ef37e0781c5ad6c9..113139b9350c5e2d844f1f3c91ac2aaf6299e178 100644 (file)
@@ -4,11 +4,11 @@ import ru.deadsoftware.cavedroid.MainConfig
 import ru.deadsoftware.cavedroid.game.input.IKeyboardInputHandler
 import ru.deadsoftware.cavedroid.game.input.action.KeyboardInputAction
 import ru.deadsoftware.cavedroid.game.input.action.keys.KeyboardInputActionKey
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindKeyboardInputHandler
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindKeyboardInputHandler
 import ru.fredboy.cavedroid.common.di.GameScope
+import ru.fredboy.cavedroid.entity.mob.model.Direction
+import ru.fredboy.cavedroid.entity.mob.model.Player
 import ru.fredboy.cavedroid.game.controller.mob.MobController
-import ru.fredboy.cavedroid.game.controller.mob.model.Direction
-import ru.fredboy.cavedroid.game.controller.mob.model.Player
 import javax.inject.Inject
 
 @GameScope
index a2434e46b07084c58a12d05941cf9dc41659749d..b39a43400c0d22c24c390a8d4e9dad9eebe09ca2 100644 (file)
@@ -4,11 +4,11 @@ import ru.deadsoftware.cavedroid.MainConfig
 import ru.deadsoftware.cavedroid.game.input.IKeyboardInputHandler
 import ru.deadsoftware.cavedroid.game.input.action.KeyboardInputAction
 import ru.deadsoftware.cavedroid.game.input.action.keys.KeyboardInputActionKey
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindKeyboardInputHandler
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindKeyboardInputHandler
 import ru.fredboy.cavedroid.common.di.GameScope
+import ru.fredboy.cavedroid.entity.mob.model.Direction
+import ru.fredboy.cavedroid.entity.mob.model.Player
 import ru.fredboy.cavedroid.game.controller.mob.MobController
-import ru.fredboy.cavedroid.game.controller.mob.model.Direction
-import ru.fredboy.cavedroid.game.controller.mob.model.Player
 import javax.inject.Inject
 
 @GameScope
index 5594c39be4c1e40b574f9af22775141d49054c04..fc9cddb4df4970be80514eaf91852d2b2ee6651c 100644 (file)
@@ -4,10 +4,10 @@ import ru.deadsoftware.cavedroid.MainConfig
 import ru.deadsoftware.cavedroid.game.input.IKeyboardInputHandler
 import ru.deadsoftware.cavedroid.game.input.action.KeyboardInputAction
 import ru.deadsoftware.cavedroid.game.input.action.keys.KeyboardInputActionKey
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindKeyboardInputHandler
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindKeyboardInputHandler
 import ru.fredboy.cavedroid.common.di.GameScope
+import ru.fredboy.cavedroid.entity.mob.model.Player
 import ru.fredboy.cavedroid.game.controller.mob.MobController
-import ru.fredboy.cavedroid.game.controller.mob.model.Player
 import javax.inject.Inject
 
 @GameScope
index 221469c57e9d9d8b40bc8585783b6a4d2158041f..8658a8924251785fb84f93c96e8491d05c27d8e5 100644 (file)
@@ -4,11 +4,10 @@ import ru.deadsoftware.cavedroid.MainConfig
 import ru.deadsoftware.cavedroid.game.input.IKeyboardInputHandler
 import ru.deadsoftware.cavedroid.game.input.action.KeyboardInputAction
 import ru.deadsoftware.cavedroid.game.input.action.keys.KeyboardInputActionKey
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindKeyboardInputHandler
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindKeyboardInputHandler
 import ru.fredboy.cavedroid.common.di.GameScope
+import ru.fredboy.cavedroid.entity.mob.model.Player
 import ru.fredboy.cavedroid.game.controller.mob.MobController
-import ru.fredboy.cavedroid.game.controller.mob.model.Player
-import ru.fredboy.cavedroid.game.world.GameWorld
 import javax.inject.Inject
 
 @GameScope
@@ -16,7 +15,6 @@ import javax.inject.Inject
 class MoveCursorControlsModeKeyboardInputHandler @Inject constructor(
     private val mainConfig: MainConfig,
     private val mobsController: MobController,
-    private val gameWorld: GameWorld,
 ) : IKeyboardInputHandler {
 
     override fun checkConditions(action: KeyboardInputAction): Boolean {
@@ -39,6 +37,6 @@ class MoveCursorControlsModeKeyboardInputHandler @Inject constructor(
             else -> return
         }
 
-        gameWorld.checkPlayerCursorBounds()
+        mobsController.checkPlayerCursorBounds()
     }
 }
\ No newline at end of file
index 45de0309800a7a53a8a20d4d562f8a813b274877..fb55b6e34b8b4466858df704c7412f02181d49b3 100644 (file)
@@ -5,7 +5,7 @@ import ru.deadsoftware.cavedroid.game.input.IKeyboardInputHandler
 import ru.deadsoftware.cavedroid.game.input.action.KeyboardInputAction
 import ru.deadsoftware.cavedroid.game.input.action.keys.KeyboardInputActionKey
 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindKeyboardInputHandler
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindKeyboardInputHandler
 import ru.fredboy.cavedroid.common.di.GameScope
 import javax.inject.Inject
 
index e72ba870a48e069252ec782c38544a3e830fe811..071056b6c4ee0649217c34894f92a5ee5e0621de 100644 (file)
@@ -6,7 +6,7 @@ import ru.deadsoftware.cavedroid.game.input.IKeyboardInputHandler
 import ru.deadsoftware.cavedroid.game.input.action.KeyboardInputAction
 import ru.deadsoftware.cavedroid.game.input.action.keys.KeyboardInputActionKey
 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindKeyboardInputHandler
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindKeyboardInputHandler
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.domain.save.repository.SaveDataRepository
 import ru.fredboy.cavedroid.game.controller.container.ContainerController
index 09287586e9ba363ba4efd8b2126bcfedfe535f83..01991a8795934c5c0badc606fb71449bab9fb6d9 100644 (file)
@@ -3,7 +3,7 @@ package ru.deadsoftware.cavedroid.game.input.handler.keyboard
 import ru.deadsoftware.cavedroid.game.input.IKeyboardInputHandler
 import ru.deadsoftware.cavedroid.game.input.action.KeyboardInputAction
 import ru.deadsoftware.cavedroid.game.input.action.keys.KeyboardInputActionKey
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindKeyboardInputHandler
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindKeyboardInputHandler
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.game.controller.mob.MobController
 import javax.inject.Inject
@@ -20,7 +20,7 @@ class SelectHotbarSlotKeyboardInputHandler @Inject constructor(
     }
 
     override fun handle(action: KeyboardInputAction) {
-        mobController.player.inventory.activeSlot = (action.actionKey as KeyboardInputActionKey.SelectHotbarSlot).slot
+        mobController.player.activeSlot = (action.actionKey as KeyboardInputActionKey.SelectHotbarSlot).slot
     }
 
 }
\ No newline at end of file
index f98e2ec80522e8d29bc3d67de51e2fe25805bccd..f441b1cb4e9346a34ff65ef5776367188f1600ae 100644 (file)
@@ -4,10 +4,10 @@ import ru.deadsoftware.cavedroid.MainConfig
 import ru.deadsoftware.cavedroid.game.input.IKeyboardInputHandler
 import ru.deadsoftware.cavedroid.game.input.action.KeyboardInputAction
 import ru.deadsoftware.cavedroid.game.input.action.keys.KeyboardInputActionKey
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindKeyboardInputHandler
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindKeyboardInputHandler
 import ru.fredboy.cavedroid.common.di.GameScope
+import ru.fredboy.cavedroid.entity.mob.model.Player
 import ru.fredboy.cavedroid.game.controller.mob.MobController
-import ru.fredboy.cavedroid.game.controller.mob.model.Player
 import javax.inject.Inject
 
 @GameScope
index aa18a7e52c7764f8a319ef68727aebf4c002775f..4369646176113bbb14e7744903c587a7f30a73d1 100644 (file)
@@ -4,10 +4,10 @@ import ru.deadsoftware.cavedroid.MainConfig
 import ru.deadsoftware.cavedroid.game.input.IKeyboardInputHandler
 import ru.deadsoftware.cavedroid.game.input.action.KeyboardInputAction
 import ru.deadsoftware.cavedroid.game.input.action.keys.KeyboardInputActionKey
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindKeyboardInputHandler
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindKeyboardInputHandler
 import ru.fredboy.cavedroid.common.di.GameScope
+import ru.fredboy.cavedroid.entity.mob.model.Player
 import ru.fredboy.cavedroid.game.controller.mob.MobController
-import ru.fredboy.cavedroid.game.controller.mob.model.Player
 import ru.fredboy.cavedroid.game.world.GameWorld
 import javax.inject.Inject
 
index 3ce25517194550b58716f623738b23442ed3dbe1..4d613be4f304fa955d8873171a55e1d3057a1d71 100644 (file)
@@ -4,10 +4,10 @@ import ru.deadsoftware.cavedroid.MainConfig
 import ru.deadsoftware.cavedroid.game.input.IKeyboardInputHandler
 import ru.deadsoftware.cavedroid.game.input.action.KeyboardInputAction
 import ru.deadsoftware.cavedroid.game.input.action.keys.KeyboardInputActionKey
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindKeyboardInputHandler
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindKeyboardInputHandler
 import ru.fredboy.cavedroid.common.di.GameScope
+import ru.fredboy.cavedroid.entity.mob.model.Player
 import ru.fredboy.cavedroid.game.controller.mob.MobController
-import ru.fredboy.cavedroid.game.controller.mob.model.Player
 import javax.inject.Inject
 
 @GameScope
index 69cf4268ef3f04ec40e05cb88475e1b91bf12e7d..c4290f35390e81e543902efae97f77e4ed33ea3c 100644 (file)
@@ -4,7 +4,7 @@ import ru.deadsoftware.cavedroid.MainConfig
 import ru.deadsoftware.cavedroid.game.input.IKeyboardInputHandler
 import ru.deadsoftware.cavedroid.game.input.action.KeyboardInputAction
 import ru.deadsoftware.cavedroid.game.input.action.keys.KeyboardInputActionKey
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindKeyboardInputHandler
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindKeyboardInputHandler
 import ru.fredboy.cavedroid.common.di.GameScope
 import javax.inject.Inject
 
index c86884275e610f8bfdd73e0564978f357444385a..4eaba61f33742bb792c1fa5c6de363044d60eb00 100644 (file)
@@ -3,7 +3,7 @@ package ru.deadsoftware.cavedroid.game.input.handler.keyboard
 import ru.deadsoftware.cavedroid.game.input.IKeyboardInputHandler
 import ru.deadsoftware.cavedroid.game.input.action.KeyboardInputAction
 import ru.deadsoftware.cavedroid.game.input.action.keys.KeyboardInputActionKey
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindKeyboardInputHandler
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindKeyboardInputHandler
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.game.controller.mob.MobController
 import javax.inject.Inject
index af03856ebfbc4fdea66ad409dc49333c03a4d359..ce2b54c9c56094e452ac37333c48eb504518047e 100644 (file)
@@ -4,7 +4,7 @@ import ru.deadsoftware.cavedroid.MainConfig
 import ru.deadsoftware.cavedroid.game.input.IKeyboardInputHandler
 import ru.deadsoftware.cavedroid.game.input.action.KeyboardInputAction
 import ru.deadsoftware.cavedroid.game.input.action.keys.KeyboardInputActionKey
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindKeyboardInputHandler
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindKeyboardInputHandler
 import ru.fredboy.cavedroid.common.di.GameScope
 import javax.inject.Inject
 
index f4fb7cc201ad53279523a078dec216aab9d45cee..9c764da48116ce30085b2854d942091342acee9b 100644 (file)
@@ -4,10 +4,10 @@ import ru.deadsoftware.cavedroid.MainConfig
 import ru.deadsoftware.cavedroid.game.input.IKeyboardInputHandler
 import ru.deadsoftware.cavedroid.game.input.action.KeyboardInputAction
 import ru.deadsoftware.cavedroid.game.input.action.keys.KeyboardInputActionKey
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindKeyboardInputHandler
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindKeyboardInputHandler
 import ru.fredboy.cavedroid.common.di.GameScope
+import ru.fredboy.cavedroid.entity.mob.model.Player
 import ru.fredboy.cavedroid.game.controller.mob.MobController
-import ru.fredboy.cavedroid.game.controller.mob.model.Player
 import javax.inject.Inject
 
 @GameScope
index 120f2799259fd3ea67e2851259c357e320eb9a19..3bf5dae329544f3aa8314f00171d28848e6ba121 100644 (file)
@@ -9,8 +9,8 @@ import ru.deadsoftware.cavedroid.game.input.isInsideWindow
 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager
 import ru.deadsoftware.cavedroid.game.ui.windows.inventory.AbstractInventoryWindow
 import ru.deadsoftware.cavedroid.game.ui.windows.inventory.AbstractInventoryWindowWithCraftGrid
-import ru.fredboy.cavedroid.domain.items.model.item.InventoryItem
-import ru.fredboy.cavedroid.domain.items.model.item.InventoryItem.Companion.isNoneOrNull
+import ru.fredboy.cavedroid.domain.items.model.inventory.InventoryItem
+import ru.fredboy.cavedroid.domain.items.model.inventory.InventoryItem.Companion.isNoneOrNull
 import ru.fredboy.cavedroid.domain.items.repository.ItemsRepository
 
 abstract class AbstractInventoryItemsMouseInputHandler(
index 338eb816d2129dced0dd8d7fd259ac4a1b8fd08f..5a8956f18cfb36da6de2a370c054ed301dd861a6 100644 (file)
@@ -6,7 +6,7 @@ import ru.deadsoftware.cavedroid.game.input.action.MouseInputAction
 import ru.deadsoftware.cavedroid.game.input.action.keys.MouseInputActionKey
 import ru.deadsoftware.cavedroid.game.input.isInsideHotbar
 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindMouseInputHandler
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindMouseInputHandler
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase
 import ru.fredboy.cavedroid.game.controller.mob.MobController
@@ -32,6 +32,6 @@ class AttackMouseInputHandler @Inject constructor(
             mobController.player.stopHitting()
         } else {
             mobController.player.startHitting()
-        };
+        }
     }
 }
\ No newline at end of file
index baaabb77017acf10d6a66cf076896b97699483c6..19819090faae6fb99fc7b15ef9c962524a69fccb 100644 (file)
@@ -1,6 +1,6 @@
 package ru.deadsoftware.cavedroid.game.input.handler.mouse
 
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindMouseInputHandler
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindMouseInputHandler
 import com.badlogic.gdx.graphics.g2d.TextureRegion
 import ru.deadsoftware.cavedroid.game.GameUiWindow
 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager
index d309f6e2504617754f700182c6c042cb833c073f..fcc904893fb46f038a3dd68430ced453fc769f9a 100644 (file)
@@ -1,6 +1,6 @@
 package ru.deadsoftware.cavedroid.game.input.handler.mouse
 
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindMouseInputHandler
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindMouseInputHandler
 import com.badlogic.gdx.math.MathUtils
 import ru.deadsoftware.cavedroid.MainConfig
 import ru.deadsoftware.cavedroid.game.GameUiWindow
index 04fd3a3346b1690c1bae98e174232dd74768518d..ca57b8ae612139add2aff8f280ed466825449b57 100644 (file)
@@ -9,16 +9,16 @@ import ru.deadsoftware.cavedroid.game.input.action.keys.MouseInputActionKey
 import ru.deadsoftware.cavedroid.game.ui.TooltipManager
 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsConfigs
 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindMouseInputHandler
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindMouseInputHandler
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase
 import ru.fredboy.cavedroid.common.utils.bl
 import ru.fredboy.cavedroid.common.utils.px
 import ru.fredboy.cavedroid.domain.items.model.block.Block
 import ru.fredboy.cavedroid.domain.items.usecase.GetItemByIndexUseCase
+import ru.fredboy.cavedroid.entity.mob.model.Direction
+import ru.fredboy.cavedroid.entity.mob.model.Player
 import ru.fredboy.cavedroid.game.controller.mob.MobController
-import ru.fredboy.cavedroid.game.controller.mob.model.Direction
-import ru.fredboy.cavedroid.game.controller.mob.model.Player
 import ru.fredboy.cavedroid.game.world.GameWorld
 import javax.inject.Inject
 
@@ -133,7 +133,7 @@ class CursorMouseInputHandler @Inject constructor(
             !mainConfig.isTouch -> handleMouse(action)
         }
 
-        gameWorld.checkPlayerCursorBounds()
+        mobController.checkPlayerCursorBounds()
 
         if (player.controlMode == Player.ControlMode.WALK && mainConfig.isTouch) {
             setPlayerDirectionToCursor()
index 4efe697b7e700c8533d5ac924369897a1996317f..ae7a3963b41326bf3196f7f701bafa9a4ef9e3d5 100644 (file)
@@ -1,21 +1,21 @@
 package ru.deadsoftware.cavedroid.game.input.handler.mouse
 
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindMouseInputHandler
 import com.badlogic.gdx.utils.Timer
 import ru.deadsoftware.cavedroid.game.GameUiWindow
-import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager
 import ru.deadsoftware.cavedroid.game.input.IMouseInputHandler
 import ru.deadsoftware.cavedroid.game.input.action.MouseInputAction
 import ru.deadsoftware.cavedroid.game.input.action.keys.MouseInputActionKey
 import ru.deadsoftware.cavedroid.game.input.handler.keyboard.DropItemKeyboardInputHandler.Companion.DROP_DISTANCE
 import ru.deadsoftware.cavedroid.game.input.isInsideHotbar
+import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindMouseInputHandler
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase
 import ru.fredboy.cavedroid.domain.items.model.item.Item
+import ru.fredboy.cavedroid.entity.drop.model.Drop
+import ru.fredboy.cavedroid.entity.mob.model.Player
 import ru.fredboy.cavedroid.game.controller.drop.DropController
-import ru.fredboy.cavedroid.game.controller.drop.model.Drop
 import ru.fredboy.cavedroid.game.controller.mob.MobController
-import ru.fredboy.cavedroid.game.controller.mob.model.Player
 import javax.inject.Inject
 
 @GameScope
@@ -82,18 +82,18 @@ class HotbarMouseInputHandler @Inject constructor(
     }
 
     private fun handleUp(action: MouseInputAction) {
-        mobController.player.inventory.activeSlot = getActionSlot(action)
+        mobController.player.activeSlot = getActionSlot(action)
     }
 
     private fun handleScroll(action: MouseInputAction) {
         if (action.actionKey !is MouseInputActionKey.Scroll) {
             return
         }
-        mobController.player.inventory.activeSlot += action.actionKey.amountY.toInt()
-        if (mobController.player.inventory.activeSlot < 0) {
-            mobController.player.inventory.activeSlot = Player.HOTBAR_SIZE - 1
-        } else if (mobController.player.inventory.activeSlot >= Player.HOTBAR_SIZE) {
-            mobController.player.inventory.activeSlot = 0
+        mobController.player.activeSlot += action.actionKey.amountY.toInt()
+        if (mobController.player.activeSlot < 0) {
+            mobController.player.activeSlot = Player.HOTBAR_SIZE - 1
+        } else if (mobController.player.activeSlot >= Player.HOTBAR_SIZE) {
+            mobController.player.activeSlot = 0
         }
     }
 
index d10898993297772a7cc385d6892f2f7a36dd4d3a..da9606e6e6e64472d130e36b3a24da807dd3506b 100644 (file)
@@ -5,7 +5,7 @@ import ru.deadsoftware.cavedroid.game.input.action.MouseInputAction
 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsConfigs
 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager
 import ru.deadsoftware.cavedroid.game.ui.windows.inventory.ChestInventoryWindow
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindMouseInputHandler
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindMouseInputHandler
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase
 import ru.fredboy.cavedroid.domain.items.repository.ItemsRepository
index a67cd1b9b403d482ad04f52bed56c086057e7674..61a888fe70eec25101337fb13f36a3d786a562a0 100644 (file)
@@ -5,7 +5,7 @@ import ru.deadsoftware.cavedroid.game.input.action.MouseInputAction
 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsConfigs
 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager
 import ru.deadsoftware.cavedroid.game.ui.windows.inventory.CraftingInventoryWindow
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindMouseInputHandler
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindMouseInputHandler
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase
 import ru.fredboy.cavedroid.domain.items.repository.ItemsRepository
index 3ec81013fce494a75890c7a3a6ba743f7a74dac4..48974639f3fd03637153e492c1409d47c3ac8c2c 100644 (file)
@@ -7,7 +7,7 @@ import ru.deadsoftware.cavedroid.game.input.action.keys.MouseInputActionKey
 import ru.deadsoftware.cavedroid.game.input.isInsideWindow
 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsConfigs
 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindMouseInputHandler
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindMouseInputHandler
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase
 import ru.fredboy.cavedroid.domain.items.usecase.GetItemByIndexUseCase
index 25fe630521a7839e183ddeb11871857cbe20f3df..ce4f8cee56de016e301246acac5843be1613ff18 100644 (file)
@@ -5,12 +5,12 @@ import ru.deadsoftware.cavedroid.game.input.action.MouseInputAction
 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsConfigs
 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager
 import ru.deadsoftware.cavedroid.game.ui.windows.inventory.FurnaceInventoryWindow
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindMouseInputHandler
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindMouseInputHandler
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase
-import ru.fredboy.cavedroid.domain.items.model.item.InventoryItem.Companion.isNoneOrNull
+import ru.fredboy.cavedroid.domain.items.model.inventory.InventoryItem.Companion.isNoneOrNull
 import ru.fredboy.cavedroid.domain.items.repository.ItemsRepository
-import ru.fredboy.cavedroid.game.controller.container.model.Furnace
+import ru.fredboy.cavedroid.entity.container.model.Furnace
 import ru.fredboy.cavedroid.game.controller.mob.MobController
 import javax.inject.Inject
 
index 9b76241b35423071c129a7d213acdc7707ff1c94..2d63f083d8eb8aa46970c7d6c929d0c20169d9aa 100644 (file)
@@ -5,7 +5,7 @@ import ru.deadsoftware.cavedroid.game.input.action.MouseInputAction
 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsConfigs
 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager
 import ru.deadsoftware.cavedroid.game.ui.windows.inventory.SurvivalInventoryWindow
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindMouseInputHandler
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindMouseInputHandler
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase
 import ru.fredboy.cavedroid.domain.items.repository.ItemsRepository
index fd52882904a3187c5a731d12de7dea6ee7d3a8ae..c20af3591769588ce57ba865c6721be5326bbf6c 100644 (file)
@@ -1,6 +1,6 @@
 package ru.deadsoftware.cavedroid.game.input.handler.mouse
 
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindMouseInputHandler
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindMouseInputHandler
 import com.badlogic.gdx.Gdx
 import com.badlogic.gdx.utils.Timer
 import ru.deadsoftware.cavedroid.game.GameUiWindow
@@ -51,7 +51,7 @@ class UseItemMouseInputHandler @Inject constructor(
         cancelHold()
 
         val player = mobController.player
-        val item = player.inventory.activeItem.item
+        val item = player.activeItem.item
         player.startHitting(false)
         player.stopHitting()
 
@@ -91,7 +91,7 @@ class UseItemMouseInputHandler @Inject constructor(
 
     private fun handleUp(action: MouseInputAction) {
         val player = mobController.player
-        val item = player.inventory.activeItem.item
+        val item = player.activeItem.item
         cancelHold()
 
         player.startHitting(false)
index 7cd22628bf818e25f7a00f3037bd2d4d091afdb5..68444ccba8afb232c67fe8889c3ab33ba86f8828 100644 (file)
@@ -1,6 +1,5 @@
 package ru.deadsoftware.cavedroid.game.input.handler.touch
 
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindMouseInputHandler
 import com.badlogic.gdx.utils.TimeUtils
 import ru.deadsoftware.cavedroid.MainConfig
 import ru.deadsoftware.cavedroid.game.GameUiWindow
@@ -8,11 +7,12 @@ import ru.deadsoftware.cavedroid.game.input.*
 import ru.deadsoftware.cavedroid.game.input.action.MouseInputAction
 import ru.deadsoftware.cavedroid.game.input.action.keys.MouseInputActionKey
 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindMouseInputHandler
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase
+import ru.fredboy.cavedroid.entity.mob.model.Direction
+import ru.fredboy.cavedroid.entity.mob.model.Player
 import ru.fredboy.cavedroid.game.controller.mob.MobController
-import ru.fredboy.cavedroid.game.controller.mob.model.Direction
-import ru.fredboy.cavedroid.game.controller.mob.model.Player
 import ru.fredboy.cavedroid.game.world.GameWorld
 import javax.inject.Inject
 
@@ -95,7 +95,7 @@ class JoystickInputHandler @Inject constructor(
             cursorTimeoutMs = TimeUtils.millis()
         }
 
-        gameWorld.checkPlayerCursorBounds()
+        mobController.checkPlayerCursorBounds()
 
         if (mobController.player.cursorX != pastCursorX || mobController.player.cursorY != pastCursorY) {
             mobController.player.blockDamage = 0f
index 16f9ada952c69a5a3533e1ad107c204f36faaabc..99ee1e034d8e180037a1694f20925b3d9b11620a 100644 (file)
@@ -5,11 +5,12 @@ import com.badlogic.gdx.graphics.GL20
 import com.badlogic.gdx.graphics.g2d.SpriteBatch
 import com.badlogic.gdx.graphics.glutils.ShapeRenderer
 import com.badlogic.gdx.math.Rectangle
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindRenderer
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindRenderer
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.common.utils.forEachBlockInArea
 import ru.fredboy.cavedroid.domain.assets.usecase.GetBlockDamageFrameCountUseCase
 import ru.fredboy.cavedroid.domain.assets.usecase.GetBlockDamageSpriteUseCase
+import ru.fredboy.cavedroid.game.controller.container.ContainerController
 import ru.fredboy.cavedroid.game.controller.mob.MobController
 import ru.fredboy.cavedroid.game.world.GameWorld
 import javax.inject.Inject
@@ -19,9 +20,10 @@ import javax.inject.Inject
 class BackgroundBlocksRenderer @Inject constructor(
     gameWorld: GameWorld,
     mobController: MobController,
+    containerController: ContainerController,
     getBlockDamageFrameCount: GetBlockDamageFrameCountUseCase,
     getBlockDamageSprite: GetBlockDamageSpriteUseCase
-) : BlocksRenderer(gameWorld, mobController, getBlockDamageFrameCount, getBlockDamageSprite) {
+) : BlocksRenderer(gameWorld, mobController, containerController, getBlockDamageFrameCount, getBlockDamageSprite) {
 
     override val renderLayer get() = RENDER_LAYER
 
index a16019682db8307e8e13e6060571538f9f941cef..51a2e1c6d0b79c622a8c0896be6167b6c096d13f 100644 (file)
@@ -9,12 +9,16 @@ import ru.fredboy.cavedroid.domain.assets.usecase.GetBlockDamageFrameCountUseCas
 import ru.fredboy.cavedroid.domain.assets.usecase.GetBlockDamageSpriteUseCase
 import ru.fredboy.cavedroid.common.utils.px
 import ru.fredboy.cavedroid.domain.items.model.block.Block
+import ru.fredboy.cavedroid.domain.world.model.Layer
+import ru.fredboy.cavedroid.entity.container.model.Furnace
+import ru.fredboy.cavedroid.game.controller.container.ContainerController
 import ru.fredboy.cavedroid.game.controller.mob.MobController
 import ru.fredboy.cavedroid.game.world.GameWorld
 
 abstract class BlocksRenderer(
     protected val gameWorld: GameWorld,
     protected val mobsController: MobController,
+    protected val containerController: ContainerController,
     protected val getBlockDamageFrameCount: GetBlockDamageFrameCountUseCase,
     protected val getBlockDamageSprite: GetBlockDamageSpriteUseCase,
 ) : IGameRenderer {
@@ -90,7 +94,8 @@ abstract class BlocksRenderer(
             val drawX = x.px - viewport.x
             val drawY = y.px - viewport.y
             if (backgroundBlock is Block.Furnace) {
-                backgroundBlock.draw(spriteBatch, drawX, drawY, gameWorld.getBackgroundFurnace(x, y)?.isActive ?: false)
+                val furnace = containerController.getContainer(x, y, Layer.BACKGROUND.z) as? Furnace
+                backgroundBlock.draw(spriteBatch, drawX, drawY, furnace?.isActive ?: false)
             } else {
                 backgroundBlock.draw(spriteBatch, drawX, drawY)
             }
@@ -105,7 +110,8 @@ abstract class BlocksRenderer(
             val drawY = y.px - viewport.y
 
             if (foregroundBlock is Block.Furnace) {
-                foregroundBlock.draw(spriteBatch, drawX, drawY, gameWorld.getForegroundFurnace(x, y)?.isActive ?: false)
+                val furnace = containerController.getContainer(x, y, Layer.FOREGROUND.z) as? Furnace
+                foregroundBlock.draw(spriteBatch, drawX, drawY, furnace?.isActive ?: false)
             } else {
                 foregroundBlock.draw(spriteBatch, drawX, drawY)
             }
index 06825c384b377c6d3e3d43fafa96333d664f336c..58a1bda5d338b33ed7e0e7f231f53b3e664f458b 100644 (file)
@@ -6,7 +6,7 @@ import com.badlogic.gdx.graphics.glutils.ShapeRenderer
 import com.badlogic.gdx.math.Rectangle
 import ru.deadsoftware.cavedroid.MainConfig
 import ru.deadsoftware.cavedroid.game.debug.DebugInfoStringsProvider
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindRenderer
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindRenderer
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.domain.assets.usecase.GetFontUseCase
 import ru.fredboy.cavedroid.common.utils.bl
index 7e034e3af2f8c3562a406380eb74dd3b32cdeec6..b4124b1e7599dd3b36dcc17602e2f754f871341d 100644 (file)
@@ -3,7 +3,7 @@ package ru.deadsoftware.cavedroid.game.render
 import com.badlogic.gdx.graphics.g2d.SpriteBatch
 import com.badlogic.gdx.graphics.glutils.ShapeRenderer
 import com.badlogic.gdx.math.Rectangle
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindRenderer
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindRenderer
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.common.utils.cycledInsideWorld
 import ru.fredboy.cavedroid.common.utils.drawSprite
index 9d4cd0ce682ca5bc84300b83c094dde896f3223c..56dda3251cb78fe3b2437d43c12bc05a76bb4a74 100644 (file)
@@ -3,11 +3,12 @@ package ru.deadsoftware.cavedroid.game.render
 import com.badlogic.gdx.graphics.g2d.SpriteBatch
 import com.badlogic.gdx.graphics.glutils.ShapeRenderer
 import com.badlogic.gdx.math.Rectangle
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindRenderer
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindRenderer
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.common.utils.forEachBlockInArea
 import ru.fredboy.cavedroid.domain.assets.usecase.GetBlockDamageFrameCountUseCase
 import ru.fredboy.cavedroid.domain.assets.usecase.GetBlockDamageSpriteUseCase
+import ru.fredboy.cavedroid.game.controller.container.ContainerController
 import ru.fredboy.cavedroid.game.controller.mob.MobController
 import ru.fredboy.cavedroid.game.world.GameWorld
 import javax.inject.Inject
@@ -17,9 +18,10 @@ import javax.inject.Inject
 class ForegroundBlocksRenderer @Inject constructor(
     gameWorld: GameWorld,
     mobController: MobController,
+    containerController: ContainerController,
     getBlockDamageFrameCount: GetBlockDamageFrameCountUseCase,
     getBlockDamageSprite: GetBlockDamageSpriteUseCase
-) : BlocksRenderer(gameWorld, mobController, getBlockDamageFrameCount, getBlockDamageSprite) {
+) : BlocksRenderer(gameWorld, mobController, containerController, getBlockDamageFrameCount, getBlockDamageSprite) {
 
     override val renderLayer get() = RENDER_LAYER
 
index 07b16fc1b9579a45ed932b3503c579890d1f6194..b221c29b413b10032a9d576d6d1a64206798089a 100644 (file)
@@ -4,16 +4,16 @@ import com.badlogic.gdx.graphics.g2d.SpriteBatch
 import com.badlogic.gdx.graphics.glutils.ShapeRenderer
 import com.badlogic.gdx.math.Rectangle
 import ru.deadsoftware.cavedroid.game.ui.TooltipManager
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindRenderer
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindRenderer
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.common.utils.drawString
+import ru.fredboy.cavedroid.common.utils.px
 import ru.fredboy.cavedroid.domain.assets.usecase.GetFontUseCase
 import ru.fredboy.cavedroid.domain.assets.usecase.GetStringHeightUseCase
 import ru.fredboy.cavedroid.domain.assets.usecase.GetStringWidthUseCase
 import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase
-import ru.fredboy.cavedroid.common.utils.px
+import ru.fredboy.cavedroid.entity.mob.model.Player
 import ru.fredboy.cavedroid.game.controller.mob.MobController
-import ru.fredboy.cavedroid.game.controller.mob.model.Player
 import ru.fredboy.cavedroid.game.world.GameWorld
 import javax.inject.Inject
 
@@ -103,7 +103,7 @@ class HudRenderer @Inject constructor(
         spriteBatch.draw(
             /* region = */ hotbarSelectorTexture,
             /* x = */ hotbarX - HotbarSelectorConfig.horizontalPadding
-                    + mobController.player.inventory.activeSlot * (HotbarConfig.itemSeparatorWidth + HotbarConfig.itemSlotSpace),
+                    + mobController.player.activeSlot * (HotbarConfig.itemSeparatorWidth + HotbarConfig.itemSlotSpace),
             /* y = */ -HotbarSelectorConfig.verticalPadding
         )
     }
index 3a8a6bea1f4cc980dc476c6b4f1f0c4921d6a5c3..32383881f381b2428edf45d85f8584ee2ca74140 100644 (file)
@@ -3,12 +3,12 @@ package ru.deadsoftware.cavedroid.game.render
 import com.badlogic.gdx.graphics.g2d.SpriteBatch
 import com.badlogic.gdx.graphics.glutils.ShapeRenderer
 import com.badlogic.gdx.math.Rectangle
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindRenderer
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindRenderer
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.common.utils.cycledInsideWorld
 import ru.fredboy.cavedroid.common.utils.px
+import ru.fredboy.cavedroid.entity.mob.model.Mob
 import ru.fredboy.cavedroid.game.controller.mob.MobController
-import ru.fredboy.cavedroid.game.controller.mob.model.Mob
 import ru.fredboy.cavedroid.game.world.GameWorld
 import javax.inject.Inject
 
index 42b6528abedbdcc28b4260f17163fd60c2474784..f31633792e766a70f8a38e03271aa50b2b85f895 100644 (file)
@@ -8,13 +8,13 @@ import ru.deadsoftware.cavedroid.MainConfig
 import ru.deadsoftware.cavedroid.game.GameUiWindow
 import ru.deadsoftware.cavedroid.game.input.Joystick
 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindRenderer
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindRenderer
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.common.utils.drawSprite
 import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase
 import ru.fredboy.cavedroid.domain.assets.usecase.GetTouchButtonsUseCase
+import ru.fredboy.cavedroid.entity.mob.model.Player
 import ru.fredboy.cavedroid.game.controller.mob.MobController
-import ru.fredboy.cavedroid.game.controller.mob.model.Player
 import javax.inject.Inject
 
 @GameScope
index 4372aa898af6c86f7849231db5c9d7f8cf0a0475..3a5706f5de621f30e4d1cfcfe62d6d895f29a301 100644 (file)
@@ -7,7 +7,7 @@ import com.badlogic.gdx.math.Rectangle
 import ru.deadsoftware.cavedroid.game.GameUiWindow
 import ru.deadsoftware.cavedroid.game.render.windows.*
 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindRenderer
+import ru.deadsoftware.cavedroid.misc.annotations.multibind.BindRenderer
 import ru.fredboy.cavedroid.common.di.GameScope
 import javax.inject.Inject
 
index 9552f44c644590e40bf2f9f63c036094405e3c4f..7cc8ec4bd1be955520c482fec4f39cc628e4d3d5 100644 (file)
@@ -7,7 +7,7 @@ import com.badlogic.gdx.graphics.glutils.ShapeRenderer
 import ru.fredboy.cavedroid.common.utils.drawSprite
 import ru.fredboy.cavedroid.domain.assets.usecase.GetStringHeightUseCase
 import ru.fredboy.cavedroid.domain.assets.usecase.GetStringWidthUseCase
-import ru.fredboy.cavedroid.domain.items.model.item.InventoryItem
+import ru.fredboy.cavedroid.domain.items.model.inventory.InventoryItem
 import ru.fredboy.cavedroid.domain.items.model.item.Item
 
 abstract class AbstractWindowRenderer {
index 7af40ab8c067d637836e89d3f7cadb4e92e10d6b..9e2c1d872554585a90456be39b7315e56a8e8429 100644 (file)
@@ -14,7 +14,6 @@ import ru.fredboy.cavedroid.domain.assets.usecase.GetFontUseCase
 import ru.fredboy.cavedroid.domain.assets.usecase.GetStringHeightUseCase
 import ru.fredboy.cavedroid.domain.assets.usecase.GetStringWidthUseCase
 import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase
-import ru.fredboy.cavedroid.domain.items.repository.ItemsRepository
 import ru.fredboy.cavedroid.game.controller.mob.MobController
 import javax.inject.Inject
 
@@ -22,7 +21,6 @@ import javax.inject.Inject
 class CraftingWindowRenderer @Inject constructor(
     private val mobController: MobController,
     private val gameWindowsManager: GameWindowsManager,
-    private val itemsRepository: ItemsRepository,
     private val textureRegions: GetTextureRegionByNameUseCase,
     private val getStringWidth: GetStringWidthUseCase,
     private val getStringHeight: GetStringHeightUseCase,
index 1084a7c478635620fc0ce1af36a66e5f7f17200b..2b356f697d868001bb4f9e1be5d9cd2e41e54da4 100644 (file)
@@ -16,9 +16,8 @@ import ru.fredboy.cavedroid.domain.assets.usecase.GetFontUseCase
 import ru.fredboy.cavedroid.domain.assets.usecase.GetStringHeightUseCase
 import ru.fredboy.cavedroid.domain.assets.usecase.GetStringWidthUseCase
 import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase
-import ru.fredboy.cavedroid.domain.items.repository.ItemsRepository
+import ru.fredboy.cavedroid.entity.mob.model.Direction
 import ru.fredboy.cavedroid.game.controller.mob.MobController
-import ru.fredboy.cavedroid.game.controller.mob.model.Direction
 import javax.inject.Inject
 import kotlin.math.atan
 
@@ -27,7 +26,6 @@ class SurvivalWindowRenderer @Inject constructor(
     private val mainConfig: MainConfig,
     private val mobController: MobController,
     private val gameWindowsManager: GameWindowsManager,
-    private val itemsRepository: ItemsRepository,
     private val textureRegions: GetTextureRegionByNameUseCase,
     private val getStringWidth: GetStringWidthUseCase,
     private val getStringHeight: GetStringHeightUseCase,
index cb46460913ec90fb65f70a276d11df6c7bb1699f..8585ebabf38b94457d20881234b2161670ac825d 100644 (file)
@@ -5,8 +5,8 @@ import ru.deadsoftware.cavedroid.game.ui.TooltipManager
 import ru.deadsoftware.cavedroid.game.ui.windows.inventory.*
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.domain.items.repository.ItemsRepository
-import ru.fredboy.cavedroid.game.controller.container.model.Chest
-import ru.fredboy.cavedroid.game.controller.container.model.Furnace
+import ru.fredboy.cavedroid.entity.container.model.Chest
+import ru.fredboy.cavedroid.entity.container.model.Furnace
 import ru.fredboy.cavedroid.game.controller.drop.DropController
 import ru.fredboy.cavedroid.game.controller.mob.MobController
 import javax.inject.Inject
index 6ceff75a933d623515b9a07ab835f1eb1da6811f..a41500a24761b37da3fcaeb2597af4410fef75fe 100644 (file)
@@ -2,8 +2,8 @@ package ru.deadsoftware.cavedroid.game.ui.windows.inventory
 
 import com.badlogic.gdx.math.MathUtils
 import ru.deadsoftware.cavedroid.game.GameUiWindow
-import ru.fredboy.cavedroid.domain.items.model.item.InventoryItem
-import ru.fredboy.cavedroid.domain.items.model.item.InventoryItem.Companion.isNoneOrNull
+import ru.fredboy.cavedroid.domain.items.model.inventory.InventoryItem
+import ru.fredboy.cavedroid.domain.items.model.inventory.InventoryItem.Companion.isNoneOrNull
 import ru.fredboy.cavedroid.domain.items.repository.ItemsRepository
 
 abstract class AbstractInventoryWindow {
index 12908f138c19276a7d74acdab04b405174fc68c8..0db9e06c37e5c151d918565459a2ef31b14b8ee2 100644 (file)
@@ -1,6 +1,6 @@
 package ru.deadsoftware.cavedroid.game.ui.windows.inventory
 
-import ru.fredboy.cavedroid.domain.items.model.item.InventoryItem
+import ru.fredboy.cavedroid.domain.items.model.inventory.InventoryItem
 import ru.fredboy.cavedroid.domain.items.repository.ItemsRepository
 
 abstract class AbstractInventoryWindowWithCraftGrid(
index 7900c7e6b5d5201058b0554791808de47723050d..d8c2cbc007106e17b34541aeb4467e758a24ba56 100644 (file)
@@ -1,8 +1,8 @@
 package ru.deadsoftware.cavedroid.game.ui.windows.inventory
 
 import ru.deadsoftware.cavedroid.game.GameUiWindow
-import ru.fredboy.cavedroid.domain.items.model.item.InventoryItem
-import ru.fredboy.cavedroid.game.controller.container.model.Chest
+import ru.fredboy.cavedroid.domain.items.model.inventory.InventoryItem
+import ru.fredboy.cavedroid.entity.container.model.Chest
 
 class ChestInventoryWindow(val chest: Chest) : AbstractInventoryWindow() {
 
index 0ccc011f02020e24107a8f58e58bc61a0ad5c37b..e1c3601d6361d518a3d4ac348bfd44bca22c44b0 100644 (file)
@@ -1,7 +1,7 @@
 package ru.deadsoftware.cavedroid.game.ui.windows.inventory
 
 import ru.deadsoftware.cavedroid.game.GameUiWindow
-import ru.fredboy.cavedroid.domain.items.model.item.InventoryItem
+import ru.fredboy.cavedroid.domain.items.model.inventory.InventoryItem
 import ru.fredboy.cavedroid.domain.items.repository.ItemsRepository
 
 class CraftingInventoryWindow(
index 88b67cdba9f33fba2c9e453c5e95eca5e2e6130c..8be40ca355ba95a774f2b4f05cba835f20436290 100644 (file)
@@ -2,7 +2,7 @@ package ru.deadsoftware.cavedroid.game.ui.windows.inventory
 
 import ru.deadsoftware.cavedroid.game.GameUiWindow
 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsConfigs
-import ru.fredboy.cavedroid.domain.items.model.item.InventoryItem
+import ru.fredboy.cavedroid.domain.items.model.inventory.InventoryItem
 import ru.fredboy.cavedroid.domain.items.repository.ItemsRepository
 
 class CreativeInventoryWindow() : AbstractInventoryWindow() {
index 38851ba620e50eb05d5c829014074b9758cf26ae..adf1f363fb56057900496dbfa0072d29dec2d7ec 100644 (file)
@@ -1,8 +1,8 @@
 package ru.deadsoftware.cavedroid.game.ui.windows.inventory
 
 import ru.deadsoftware.cavedroid.game.GameUiWindow
-import ru.fredboy.cavedroid.domain.items.model.item.InventoryItem
-import ru.fredboy.cavedroid.game.controller.container.model.Furnace
+import ru.fredboy.cavedroid.domain.items.model.inventory.InventoryItem
+import ru.fredboy.cavedroid.entity.container.model.Furnace
 
 class FurnaceInventoryWindow(
     val furnace: Furnace,
index 4c778346c0c8a85b034d6ba033ca878e99f8eec8..b4775fbeb6f97760933008474b71ca646522cdd9 100644 (file)
@@ -1,7 +1,7 @@
 package ru.deadsoftware.cavedroid.game.ui.windows.inventory
 
 import ru.deadsoftware.cavedroid.game.GameUiWindow
-import ru.fredboy.cavedroid.domain.items.model.item.InventoryItem
+import ru.fredboy.cavedroid.domain.items.model.inventory.InventoryItem
 import ru.fredboy.cavedroid.domain.items.repository.ItemsRepository
 
 class SurvivalInventoryWindow(
index 86c4514e0187d3c15cbe81eea6c15f55db75534b..c76e0a02ba0fa9baa78d3fc5f9ef45cb19e52657 100644 (file)
@@ -3,7 +3,6 @@ package ru.deadsoftware.cavedroid.game.world
 import com.badlogic.gdx.utils.Timer
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.common.utils.forEachBlockInArea
-import ru.fredboy.cavedroid.domain.items.repository.ItemsRepository
 import ru.fredboy.cavedroid.game.controller.mob.MobController
 import ru.fredboy.cavedroid.game.world.GameWorld
 import javax.inject.Inject
@@ -13,7 +12,6 @@ import kotlin.math.max
 class GameWorldMobDamageControllerTask @Inject constructor(
     private val mobController: MobController,
     private val gameWorld: GameWorld,
-    private val itemsRepository: ItemsRepository,
 ) : Timer.Task() {
 
     override fun run() {
index e2c9e2725b7221f42a89b22323c21a6d7dc6ec8c..118f2195530923b7ec6dda8ea74672f78c869d50 100644 (file)
@@ -1,7 +1,6 @@
-package ru.deadsoftware.cavedroid.misc.annotations.multibinding
+package ru.deadsoftware.cavedroid.misc.annotations.multibind
 
 import ru.deadsoftware.cavedroid.game.input.IKeyboardInputHandler
-import ru.deadsoftware.cavedroid.misc.annotations.multibind.MultibindingConfig
 import ru.fredboy.automultibind.annotations.BindsIntoSet
 
 @BindsIntoSet(
index 8263fe588cab7b3f8b53bb1f673054ad230cc14f..378086033fee88e0e309a4fc51c1eeeb54c6337c 100644 (file)
@@ -1,4 +1,4 @@
-package ru.deadsoftware.cavedroid.misc.annotations.multibinding
+package ru.deadsoftware.cavedroid.misc.annotations.multibind
 
 import ru.deadsoftware.cavedroid.game.input.IMouseInputHandler
 import ru.deadsoftware.cavedroid.misc.annotations.multibind.MultibindingConfig
index 9535dac0b8d95403bf3c9c569f069fd00ecd102b..a042cd16a5167420f9c63762dd4173e5bd3741b4 100644 (file)
@@ -1,4 +1,4 @@
-package ru.deadsoftware.cavedroid.misc.annotations.multibinding
+package ru.deadsoftware.cavedroid.misc.annotations.multibind
 
 import ru.deadsoftware.cavedroid.game.actions.placeblock.IPlaceBlockAction
 import ru.deadsoftware.cavedroid.misc.annotations.multibind.MultibindingConfig
index 1632b41f524843b503ea651c5d4693411e8847c6..a3e63a8c9f91e420cfe034dc14da7422c86c9f9a 100644 (file)
@@ -1,4 +1,4 @@
-package ru.deadsoftware.cavedroid.misc.annotations.multibinding
+package ru.deadsoftware.cavedroid.misc.annotations.multibind
 
 import ru.deadsoftware.cavedroid.game.render.IGameRenderer
 import ru.deadsoftware.cavedroid.misc.annotations.multibind.MultibindingConfig
index 9c0c8bb6889c70cf744ae759cdd9382c9a72cfa7..aef29b6d46ce448380d3ee6758e2528ba9e1a71b 100644 (file)
@@ -1,4 +1,4 @@
-package ru.deadsoftware.cavedroid.misc.annotations.multibinding
+package ru.deadsoftware.cavedroid.misc.annotations.multibind
 
 import ru.deadsoftware.cavedroid.game.actions.updateblock.IUpdateBlockAction
 import ru.deadsoftware.cavedroid.misc.annotations.multibind.MultibindingConfig
index b02afac219652bb0490d4ecbb0061ecff7663f37..8fae0faec9981b800c8f256ca5937a100f2413dc 100644 (file)
@@ -1,4 +1,4 @@
-package ru.deadsoftware.cavedroid.misc.annotations.multibinding
+package ru.deadsoftware.cavedroid.misc.annotations.multibind
 
 import ru.deadsoftware.cavedroid.game.actions.useblock.IUseBlockAction
 import ru.deadsoftware.cavedroid.misc.annotations.multibind.MultibindingConfig
index fd63378cca2e95c13d6aefa8e4a312db04a2007f..d9ac3f92bc207b71e3bbada073addc9b3b11a2c0 100644 (file)
@@ -1,4 +1,4 @@
-package ru.deadsoftware.cavedroid.misc.annotations.multibinding
+package ru.deadsoftware.cavedroid.misc.annotations.multibind
 
 import ru.deadsoftware.cavedroid.game.actions.useitem.IUseItemAction
 import ru.deadsoftware.cavedroid.misc.annotations.multibind.MultibindingConfig
index 47932ac60ec14ee431097acbc5512073cdf81ea1..9785ab03548f5d9179493137226f9c16e7045b59 100644 (file)
@@ -7,16 +7,28 @@ include("core")
  */
 include("core:common")
 
-// data modules
+/**
+ * Data modules
+ */
 include("core:data:assets")
 include("core:data:items")
 include("core:data:save")
 
-// domain modules
+/**
+ * First level domain models
+ */
 include("core:domain:assets")
 include("core:domain:items")
+include("core:domain:world")
 include("core:domain:save")
 
+/**
+ * Second level domain models
+ */
+include("core:entity:container")
+include("core:entity:drop")
+include("core:entity:mob")
+
 /**
  * Game scope modules
  */