DEADSOFTWARE

Start making clean architecture
authorfredboy <fredboy@protonmail.com>
Sun, 26 May 2024 06:28:39 +0000 (13:28 +0700)
committerfredboy <fredboy@protonmail.com>
Sun, 26 May 2024 06:28:39 +0000 (13:28 +0700)
253 files changed:
.gitignore
assets/json/texture_regions.json
assets/pp/mobs/char/1_0.png [deleted file]
assets/pp/mobs/char/1_1.png [deleted file]
assets/pp/mobs/char/1_2.png [deleted file]
assets/pp/mobs/char/1_3.png [deleted file]
assets/pp/mobs/pig/1_0.png [deleted file]
assets/pp/mobs/pig/1_1.png [deleted file]
assets/shade.png [moved from assets/pp/shade.png with 100% similarity]
assets/textures/allitems.png [moved from assets/pp/allitems.png with 100% similarity]
assets/textures/background.png [moved from assets/pp/background.png with 100% similarity]
assets/textures/background_top.png [moved from assets/pp/background_top.png with 100% similarity]
assets/textures/break.png [moved from assets/pp/break.png with 100% similarity]
assets/textures/buttons.png [moved from assets/pp/buttons.png with 100% similarity]
assets/textures/chest.png [moved from assets/pp/chest.png with 100% similarity]
assets/textures/chest_large.png [moved from assets/pp/chest_large.png with 100% similarity]
assets/textures/crafting_table.png [moved from assets/pp/crafting_table.png with 100% similarity]
assets/textures/furnace.png [moved from assets/pp/furnace.png with 100% similarity]
assets/textures/gui.png [moved from assets/pp/gui.png with 100% similarity]
assets/textures/health.png [moved from assets/pp/health.png with 100% similarity]
assets/textures/inventory.png [moved from assets/pp/inventory.png with 100% similarity]
assets/textures/mobs/char/0.png [moved from assets/pp/mobs/char/0_0.png with 100% similarity]
assets/textures/mobs/char/1.png [moved from assets/pp/mobs/char/0_1.png with 100% similarity]
assets/textures/mobs/char/2.png [moved from assets/pp/mobs/char/0_2.png with 100% similarity]
assets/textures/mobs/char/3.png [moved from assets/pp/mobs/char/0_3.png with 100% similarity]
assets/textures/mobs/pig/0.png [moved from assets/pp/mobs/pig/0_0.png with 100% similarity]
assets/textures/mobs/pig/1.png [moved from assets/pp/mobs/pig/0_1.png with 100% similarity]
assets/textures/textures/blocks/bed_l.png [moved from assets/pp/textures/blocks/bed_l.png with 100% similarity]
assets/textures/textures/blocks/bed_r.png [moved from assets/pp/textures/blocks/bed_r.png with 100% similarity]
assets/textures/textures/blocks/bedrock.png [moved from assets/pp/textures/blocks/bedrock.png with 100% similarity]
assets/textures/textures/blocks/bookshelf.png [moved from assets/pp/textures/blocks/bookshelf.png with 100% similarity]
assets/textures/textures/blocks/bricks.png [moved from assets/pp/textures/blocks/bricks.png with 100% similarity]
assets/textures/textures/blocks/cactus.png [moved from assets/pp/textures/blocks/cactus.png with 100% similarity]
assets/textures/textures/blocks/cake.png [moved from assets/pp/textures/blocks/cake.png with 100% similarity]
assets/textures/textures/blocks/chest.png [moved from assets/pp/textures/blocks/chest.png with 100% similarity]
assets/textures/textures/blocks/clay.png [moved from assets/pp/textures/blocks/clay.png with 100% similarity]
assets/textures/textures/blocks/coal_block.png [moved from assets/pp/textures/blocks/coal_block.png with 100% similarity]
assets/textures/textures/blocks/coal_ore.png [moved from assets/pp/textures/blocks/coal_ore.png with 100% similarity]
assets/textures/textures/blocks/cobblestone.png [moved from assets/pp/textures/blocks/cobblestone.png with 100% similarity]
assets/textures/textures/blocks/cobblestone_mossy.png [moved from assets/pp/textures/blocks/cobblestone_mossy.png with 100% similarity]
assets/textures/textures/blocks/crafting_table.png [moved from assets/pp/textures/blocks/crafting_table.png with 100% similarity]
assets/textures/textures/blocks/dandelion.png [moved from assets/pp/textures/blocks/dandelion.png with 100% similarity]
assets/textures/textures/blocks/deadbush.png [moved from assets/pp/textures/blocks/deadbush.png with 100% similarity]
assets/textures/textures/blocks/diamond_block.png [moved from assets/pp/textures/blocks/diamond_block.png with 100% similarity]
assets/textures/textures/blocks/diamond_ore.png [moved from assets/pp/textures/blocks/diamond_ore.png with 100% similarity]
assets/textures/textures/blocks/dirt.png [moved from assets/pp/textures/blocks/dirt.png with 100% similarity]
assets/textures/textures/blocks/furnace.png [moved from assets/pp/textures/blocks/furnace.png with 100% similarity]
assets/textures/textures/blocks/glass.png [moved from assets/pp/textures/blocks/glass.png with 100% similarity]
assets/textures/textures/blocks/gold_block.png [moved from assets/pp/textures/blocks/gold_block.png with 100% similarity]
assets/textures/textures/blocks/gold_ore.png [moved from assets/pp/textures/blocks/gold_ore.png with 100% similarity]
assets/textures/textures/blocks/grass.png [moved from assets/pp/textures/blocks/grass.png with 100% similarity]
assets/textures/textures/blocks/grass_snowed.png [moved from assets/pp/textures/blocks/grass_snowed.png with 100% similarity]
assets/textures/textures/blocks/gravel.png [moved from assets/pp/textures/blocks/gravel.png with 100% similarity]
assets/textures/textures/blocks/iron_bars.png [moved from assets/pp/textures/blocks/iron_bars.png with 100% similarity]
assets/textures/textures/blocks/iron_block.png [moved from assets/pp/textures/blocks/iron_block.png with 100% similarity]
assets/textures/textures/blocks/iron_ore.png [moved from assets/pp/textures/blocks/iron_ore.png with 100% similarity]
assets/textures/textures/blocks/ladder.png [moved from assets/pp/textures/blocks/ladder.png with 100% similarity]
assets/textures/textures/blocks/lapis_block.png [moved from assets/pp/textures/blocks/lapis_block.png with 100% similarity]
assets/textures/textures/blocks/lapis_ore.png [moved from assets/pp/textures/blocks/lapis_ore.png with 100% similarity]
assets/textures/textures/blocks/lava_flow.png [moved from assets/pp/textures/blocks/lava_flow.png with 100% similarity]
assets/textures/textures/blocks/lava_still.png [moved from assets/pp/textures/blocks/lava_still.png with 100% similarity]
assets/textures/textures/blocks/leaves_oak.png [moved from assets/pp/textures/blocks/leaves_oak.png with 100% similarity]
assets/textures/textures/blocks/leaves_spruce.png [moved from assets/pp/textures/blocks/leaves_spruce.png with 100% similarity]
assets/textures/textures/blocks/log_birch.png [moved from assets/pp/textures/blocks/log_birch.png with 100% similarity]
assets/textures/textures/blocks/log_oak.png [moved from assets/pp/textures/blocks/log_oak.png with 100% similarity]
assets/textures/textures/blocks/log_spruce.png [moved from assets/pp/textures/blocks/log_spruce.png with 100% similarity]
assets/textures/textures/blocks/mushroom_brown.png [moved from assets/pp/textures/blocks/mushroom_brown.png with 100% similarity]
assets/textures/textures/blocks/mushroom_red.png [moved from assets/pp/textures/blocks/mushroom_red.png with 100% similarity]
assets/textures/textures/blocks/noteblock.png [moved from assets/pp/textures/blocks/noteblock.png with 100% similarity]
assets/textures/textures/blocks/obsidian.png [moved from assets/pp/textures/blocks/obsidian.png with 100% similarity]
assets/textures/textures/blocks/planks_birch.png [moved from assets/pp/textures/blocks/planks_birch.png with 100% similarity]
assets/textures/textures/blocks/planks_oak.png [moved from assets/pp/textures/blocks/planks_oak.png with 100% similarity]
assets/textures/textures/blocks/planks_spruce.png [moved from assets/pp/textures/blocks/planks_spruce.png with 100% similarity]
assets/textures/textures/blocks/rose.png [moved from assets/pp/textures/blocks/rose.png with 100% similarity]
assets/textures/textures/blocks/sand.png [moved from assets/pp/textures/blocks/sand.png with 100% similarity]
assets/textures/textures/blocks/sandstone.png [moved from assets/pp/textures/blocks/sandstone.png with 100% similarity]
assets/textures/textures/blocks/sapling_birch.png [moved from assets/pp/textures/blocks/sapling_birch.png with 100% similarity]
assets/textures/textures/blocks/sapling_oak.png [moved from assets/pp/textures/blocks/sapling_oak.png with 100% similarity]
assets/textures/textures/blocks/sapling_spruce.png [moved from assets/pp/textures/blocks/sapling_spruce.png with 100% similarity]
assets/textures/textures/blocks/snow.png [moved from assets/pp/textures/blocks/snow.png with 100% similarity]
assets/textures/textures/blocks/sponge.png [moved from assets/pp/textures/blocks/sponge.png with 100% similarity]
assets/textures/textures/blocks/sponge_wet.png [moved from assets/pp/textures/blocks/sponge_wet.png with 100% similarity]
assets/textures/textures/blocks/stone.png [moved from assets/pp/textures/blocks/stone.png with 100% similarity]
assets/textures/textures/blocks/stone_slab.png [moved from assets/pp/textures/blocks/stone_slab.png with 100% similarity]
assets/textures/textures/blocks/stonebrick.png [moved from assets/pp/textures/blocks/stonebrick.png with 100% similarity]
assets/textures/textures/blocks/tallgrass.png [moved from assets/pp/textures/blocks/tallgrass.png with 100% similarity]
assets/textures/textures/blocks/water_flow.png [moved from assets/pp/textures/blocks/water_flow.png with 100% similarity]
assets/textures/textures/blocks/water_still.png [moved from assets/pp/textures/blocks/water_still.png with 100% similarity]
assets/textures/textures/blocks/web.png [moved from assets/pp/textures/blocks/web.png with 100% similarity]
assets/textures/textures/blocks/wool_colored_black.png [moved from assets/pp/textures/blocks/wool_colored_black.png with 100% similarity]
assets/textures/textures/blocks/wool_colored_blue.png [moved from assets/pp/textures/blocks/wool_colored_blue.png with 100% similarity]
assets/textures/textures/blocks/wool_colored_brown.png [moved from assets/pp/textures/blocks/wool_colored_brown.png with 100% similarity]
assets/textures/textures/blocks/wool_colored_cyan.png [moved from assets/pp/textures/blocks/wool_colored_cyan.png with 100% similarity]
assets/textures/textures/blocks/wool_colored_gray.png [moved from assets/pp/textures/blocks/wool_colored_gray.png with 100% similarity]
assets/textures/textures/blocks/wool_colored_green.png [moved from assets/pp/textures/blocks/wool_colored_green.png with 100% similarity]
assets/textures/textures/blocks/wool_colored_light_blue.png [moved from assets/pp/textures/blocks/wool_colored_light_blue.png with 100% similarity]
assets/textures/textures/blocks/wool_colored_lime.png [moved from assets/pp/textures/blocks/wool_colored_lime.png with 100% similarity]
assets/textures/textures/blocks/wool_colored_magenta.png [moved from assets/pp/textures/blocks/wool_colored_magenta.png with 100% similarity]
assets/textures/textures/blocks/wool_colored_orange.png [moved from assets/pp/textures/blocks/wool_colored_orange.png with 100% similarity]
assets/textures/textures/blocks/wool_colored_pink.png [moved from assets/pp/textures/blocks/wool_colored_pink.png with 100% similarity]
assets/textures/textures/blocks/wool_colored_purple.png [moved from assets/pp/textures/blocks/wool_colored_purple.png with 100% similarity]
assets/textures/textures/blocks/wool_colored_red.png [moved from assets/pp/textures/blocks/wool_colored_red.png with 100% similarity]
assets/textures/textures/blocks/wool_colored_silver.png [moved from assets/pp/textures/blocks/wool_colored_silver.png with 100% similarity]
assets/textures/textures/blocks/wool_colored_white.png [moved from assets/pp/textures/blocks/wool_colored_white.png with 100% similarity]
assets/textures/textures/blocks/wool_colored_yellow.png [moved from assets/pp/textures/blocks/wool_colored_yellow.png with 100% similarity]
assets/textures/textures/items/bed.png [moved from assets/pp/textures/items/bed.png with 100% similarity]
assets/textures/textures/items/bucket_empty.png [moved from assets/pp/textures/items/bucket_empty.png with 100% similarity]
assets/textures/textures/items/bucket_lava.png [moved from assets/pp/textures/items/bucket_lava.png with 100% similarity]
assets/textures/textures/items/bucket_milk.png [moved from assets/pp/textures/items/bucket_milk.png with 100% similarity]
assets/textures/textures/items/bucket_water.png [moved from assets/pp/textures/items/bucket_water.png with 100% similarity]
assets/textures/textures/items/charcoal.png [moved from assets/pp/textures/items/charcoal.png with 100% similarity]
assets/textures/textures/items/coal.png [moved from assets/pp/textures/items/coal.png with 100% similarity]
assets/textures/textures/items/diamond.png [moved from assets/pp/textures/items/diamond.png with 100% similarity]
assets/textures/textures/items/diamond_axe.png [moved from assets/pp/textures/items/diamond_axe.png with 100% similarity]
assets/textures/textures/items/diamond_hoe.png [moved from assets/pp/textures/items/diamond_hoe.png with 100% similarity]
assets/textures/textures/items/diamond_pickaxe.png [moved from assets/pp/textures/items/diamond_pickaxe.png with 100% similarity]
assets/textures/textures/items/diamond_shovel.png [moved from assets/pp/textures/items/diamond_shovel.png with 100% similarity]
assets/textures/textures/items/diamond_sword.png [moved from assets/pp/textures/items/diamond_sword.png with 100% similarity]
assets/textures/textures/items/gold_axe.png [moved from assets/pp/textures/items/gold_axe.png with 100% similarity]
assets/textures/textures/items/gold_hoe.png [moved from assets/pp/textures/items/gold_hoe.png with 100% similarity]
assets/textures/textures/items/gold_ingot.png [moved from assets/pp/textures/items/gold_ingot.png with 100% similarity]
assets/textures/textures/items/gold_pickaxe.png [moved from assets/pp/textures/items/gold_pickaxe.png with 100% similarity]
assets/textures/textures/items/gold_shovel.png [moved from assets/pp/textures/items/gold_shovel.png with 100% similarity]
assets/textures/textures/items/gold_sword.png [moved from assets/pp/textures/items/gold_sword.png with 100% similarity]
assets/textures/textures/items/iron_axe.png [moved from assets/pp/textures/items/iron_axe.png with 100% similarity]
assets/textures/textures/items/iron_hoe.png [moved from assets/pp/textures/items/iron_hoe.png with 100% similarity]
assets/textures/textures/items/iron_ingot.png [moved from assets/pp/textures/items/iron_ingot.png with 100% similarity]
assets/textures/textures/items/iron_pickaxe.png [moved from assets/pp/textures/items/iron_pickaxe.png with 100% similarity]
assets/textures/textures/items/iron_shovel.png [moved from assets/pp/textures/items/iron_shovel.png with 100% similarity]
assets/textures/textures/items/iron_sword.png [moved from assets/pp/textures/items/iron_sword.png with 100% similarity]
assets/textures/textures/items/lapis_lazuli.png [moved from assets/pp/textures/items/lapis_lazuli.png with 100% similarity]
assets/textures/textures/items/porkchop_cooked.png [moved from assets/pp/textures/items/porkchop_cooked.png with 100% similarity]
assets/textures/textures/items/porkchop_raw.png [moved from assets/pp/textures/items/porkchop_raw.png with 100% similarity]
assets/textures/textures/items/shears.png [moved from assets/pp/textures/items/shears.png with 100% similarity]
assets/textures/textures/items/snowball.png [moved from assets/pp/textures/items/snowball.png with 100% similarity]
assets/textures/textures/items/spawn_egg.png [moved from assets/pp/textures/items/spawn_egg.png with 100% similarity]
assets/textures/textures/items/stick.png [moved from assets/pp/textures/items/stick.png with 100% similarity]
assets/textures/textures/items/stone_axe.png [moved from assets/pp/textures/items/stone_axe.png with 100% similarity]
assets/textures/textures/items/stone_hoe.png [moved from assets/pp/textures/items/stone_hoe.png with 100% similarity]
assets/textures/textures/items/stone_pickaxe.png [moved from assets/pp/textures/items/stone_pickaxe.png with 100% similarity]
assets/textures/textures/items/stone_shovel.png [moved from assets/pp/textures/items/stone_shovel.png with 100% similarity]
assets/textures/textures/items/stone_sword.png [moved from assets/pp/textures/items/stone_sword.png with 100% similarity]
assets/textures/textures/items/wood_axe.png [moved from assets/pp/textures/items/wood_axe.png with 100% similarity]
assets/textures/textures/items/wood_hoe.png [moved from assets/pp/textures/items/wood_hoe.png with 100% similarity]
assets/textures/textures/items/wood_pickaxe.png [moved from assets/pp/textures/items/wood_pickaxe.png with 100% similarity]
assets/textures/textures/items/wood_shovel.png [moved from assets/pp/textures/items/wood_shovel.png with 100% similarity]
assets/textures/textures/items/wood_sword.png [moved from assets/pp/textures/items/wood_sword.png with 100% similarity]
buildSrc/src/main/kotlin/Dependencies.kt
buildSrc/src/main/kotlin/DependencyHandlerExtentions.kt [new file with mode: 0644]
buildSrc/src/main/kotlin/PluginDependencySpecScopeExtentions.kt [new file with mode: 0644]
core/base/build.gradle.kts [new file with mode: 0644]
core/base/src/main/kotlin/ru/fredboy/cavedroid/utils/MeasureUnitsUtils.kt [new file with mode: 0644]
core/build.gradle.kts
core/data/assets/build.gradle.kts [new file with mode: 0644]
core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/di/DataAssetsModule.kt [new file with mode: 0644]
core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/internal/BlockAssetsRepositoryImpl.kt [new file with mode: 0644]
core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/internal/BlockDamageAssetsRepositoryImpl.kt [new file with mode: 0644]
core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/internal/FontAssetsRepositoryImpl.kt [new file with mode: 0644]
core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/internal/ItemsAssetsRepositoryImpl.kt [new file with mode: 0644]
core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/internal/MobAssetsRepositoryImpl.kt [new file with mode: 0644]
core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/internal/TextureRegionsAssetsRepositoryImpl.kt [new file with mode: 0644]
core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/internal/TouchButtonsRepositoryImpl.kt [new file with mode: 0644]
core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/model/button/TouchButtonDto.kt [new file with mode: 0644]
core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/model/button/TouchButtonsDto.kt [new file with mode: 0644]
core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/model/region/TextureRegionDto.kt [new file with mode: 0644]
core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/model/region/TextureRegionsDto.kt [new file with mode: 0644]
core/domain/assets/build.gradle.kts [new file with mode: 0644]
core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/GameAssetsHolder.kt [new file with mode: 0644]
core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/model/MobSprite.kt [new file with mode: 0644]
core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/model/TouchButton.kt [new file with mode: 0644]
core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/AssetsRepository.kt [new file with mode: 0644]
core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/BlockAssetsRepository.kt [new file with mode: 0644]
core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/BlockDamageAssetsRepository.kt [new file with mode: 0644]
core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/FontAssetsRepository.kt [new file with mode: 0644]
core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/ItemsAssetsRepository.kt [new file with mode: 0644]
core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/MobAssetsRepository.kt [new file with mode: 0644]
core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/TextureRegionsAssetsRepository.kt [new file with mode: 0644]
core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/TouchButtonsAssetsRepository.kt [new file with mode: 0644]
core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/DisposeAssetsUseCase.kt [new file with mode: 0644]
core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetBlockDamageFrameCountUseCase.kt [new file with mode: 0644]
core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetBlockDamageSpriteUseCase.kt [new file with mode: 0644]
core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetBlockTextureUseCase.kt [new file with mode: 0644]
core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetFontUseCase.kt [new file with mode: 0644]
core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetItemTextureUseCase.kt [new file with mode: 0644]
core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetPigSpritesUseCase.kt [new file with mode: 0644]
core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetPlayerSpritesUseCase.kt [new file with mode: 0644]
core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetStringHeightUseCase.kt [new file with mode: 0644]
core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetStringWidthUseCase.kt [new file with mode: 0644]
core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetTextureRegionByNameUseCase.kt [new file with mode: 0644]
core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetTouchButtonsUseCase.kt [new file with mode: 0644]
core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/InitializeAssetsUseCase.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/GameRenderer.java
core/src/main/java/ru/deadsoftware/cavedroid/game/GameScope.java [deleted file]
core/src/main/java/ru/deadsoftware/cavedroid/game/mobs/Mob.java
core/src/main/java/ru/deadsoftware/cavedroid/game/mobs/player/Player.java
core/src/main/java/ru/deadsoftware/cavedroid/game/objects/TouchButton.java [deleted file]
core/src/main/java/ru/deadsoftware/cavedroid/game/world/GameWorld.java
core/src/main/java/ru/deadsoftware/cavedroid/menu/MenuProc.java
core/src/main/java/ru/deadsoftware/cavedroid/menu/submenus/Menu.java
core/src/main/java/ru/deadsoftware/cavedroid/menu/submenus/MenuMain.java
core/src/main/java/ru/deadsoftware/cavedroid/menu/submenus/MenuNewGame.java
core/src/main/java/ru/deadsoftware/cavedroid/misc/Assets.java
core/src/main/java/ru/deadsoftware/cavedroid/misc/Renderer.java
core/src/main/kotlin/ru/deadsoftware/cavedroid/CaveGame.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/MainComponent.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/GameScope.kt [new file with mode: 0644]
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/actions/updateblock/UpdateRequiresBlockAction.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/actions/useitem/UsePigSpawnEggAction.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/InputUtils.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/mobs/FallingBlock.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/mobs/MobSaveDataMapper.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/mobs/MobsController.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/mobs/Pig.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/model/item/InventoryItem.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/model/mapper/BlockMapper.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/model/mapper/ItemMapper.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/objects/container/ContainerController.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/windows/AbstractWindowRenderer.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/windows/ChestWindowRenderer.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/windows/CraftingWindowRenderer.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/windows/CreativeWindowRenderer.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/windows/FurnaceWindowRenderer.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/windows/SurvivalWindowRenderer.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/save/GameSaveLoader.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/game/world/GameWorldFluidsLogicControllerTask.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/menu/submenus/MenuOptions.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/menu/submenus/MenusFactory.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/misc/utils/MeasureUnitsUtils.kt [deleted file]
core/src/main/kotlin/ru/deadsoftware/cavedroid/misc/utils/RenderingUtils.kt
core/src/main/kotlin/ru/deadsoftware/cavedroid/misc/utils/mobs/MobSprites.kt [deleted file]
settings.gradle.kts

index b24a8edfa256f29fdaa63c65c53aa04125be7892..c6de61ec1fc50947a3aa94cb79548f9a7eb36264 100644 (file)
@@ -120,4 +120,5 @@ Thumbs.db
 release-*/
 keystore.properties
 
-*/build/
+**/build/
+**/_build/
index 3c6e7af2d8a356a88ce9b6d77979d4bcc2e8a0b7..240d1dec96581c8216a99912a66e4b718a38a5e4 100644 (file)
@@ -48,7 +48,7 @@
       "h": 26
     }
   },
-  "pp/allitems": {
+  "textures/allitems": {
     "creative": {
       "w": 176,
       "h": 136
       "h": 15
     }
   },
-  "pp/inventory": {
+  "textures/inventory": {
     "survival": {
       "w": 176,
       "h": 166
     }
   },
-  "pp/crafting_table": {
+  "textures/crafting_table": {
     "crafting_table": {
       "w": 176,
       "h": 166
     }
   },
-  "pp/furnace": {
+  "textures/furnace": {
     "furnace": {
       "w": 176,
       "h": 166
       "h": 14
     }
   },
-  "pp/chest": {
+  "textures/chest": {
     "chest": {
       "w": 176,
       "h": 168
     }
   },
-  "pp/buttons": {
+  "textures/buttons": {
     "button_0": {
       "w": 200,
       "h": 20
       "h": 20
     }
   },
-  "pp/gui": {
+  "textures/gui": {
     "hotbar": {
       "y": 16,
       "w": 182,
       "h": 16
     }
   },
-  "pp/shade": {},
+  "shade": {},
   "gamelogo": {},
-  "pp/background": {},
-  "pp/health":{
+  "textures/background": {},
+  "textures/health":{
     "heart_whole": {
       "w": 9
     },
       "x": 18,
       "w": 9
     }
-  }
+  },
+  "joy_stick": {},
+  "joy_background": {}
 }
\ No newline at end of file
diff --git a/assets/pp/mobs/char/1_0.png b/assets/pp/mobs/char/1_0.png
deleted file mode 100644 (file)
index 2c1a2b2..0000000
Binary files a/assets/pp/mobs/char/1_0.png and /dev/null differ
diff --git a/assets/pp/mobs/char/1_1.png b/assets/pp/mobs/char/1_1.png
deleted file mode 100644 (file)
index eff8cc6..0000000
Binary files a/assets/pp/mobs/char/1_1.png and /dev/null differ
diff --git a/assets/pp/mobs/char/1_2.png b/assets/pp/mobs/char/1_2.png
deleted file mode 100644 (file)
index c173562..0000000
Binary files a/assets/pp/mobs/char/1_2.png and /dev/null differ
diff --git a/assets/pp/mobs/char/1_3.png b/assets/pp/mobs/char/1_3.png
deleted file mode 100644 (file)
index 3ee37e4..0000000
Binary files a/assets/pp/mobs/char/1_3.png and /dev/null differ
diff --git a/assets/pp/mobs/pig/1_0.png b/assets/pp/mobs/pig/1_0.png
deleted file mode 100644 (file)
index ed31acc..0000000
Binary files a/assets/pp/mobs/pig/1_0.png and /dev/null differ
diff --git a/assets/pp/mobs/pig/1_1.png b/assets/pp/mobs/pig/1_1.png
deleted file mode 100644 (file)
index 5a7acc5..0000000
Binary files a/assets/pp/mobs/pig/1_1.png and /dev/null differ
similarity index 100%
rename from assets/pp/shade.png
rename to assets/shade.png
similarity index 100%
rename from assets/pp/gui.png
rename to assets/textures/gui.png
index bfe2c542fd2131b47a0ddcc16fed8067c1437ce6..95d5439d4c50b9ec3489f869bbe8a65304497217 100644 (file)
@@ -1,3 +1,5 @@
+import org.gradle.kotlin.dsl.version
+
 object Dependencies {
 
     object LibGDX {
@@ -27,6 +29,7 @@ object Dependencies {
 
     object Kotlin {
         const val gradlePlugin = "org.jetbrains.kotlin:kotlin-gradle-plugin:${Versions.kotlin}"
+        const val kspPlugin = "com.google.devtools.ksp:${Versions.ksp}"
         const val bom = "org.jetbrains.kotlin:kotlin-bom:${Versions.kotlin}"
         const val stdlib = "org.jetbrains.kotlin:kotlin-stdlib:${Versions.kotlin}"
 
diff --git a/buildSrc/src/main/kotlin/DependencyHandlerExtentions.kt b/buildSrc/src/main/kotlin/DependencyHandlerExtentions.kt
new file mode 100644 (file)
index 0000000..2326301
--- /dev/null
@@ -0,0 +1,38 @@
+import org.gradle.api.artifacts.dsl.DependencyHandler
+import org.gradle.kotlin.dsl.project
+
+private fun DependencyHandler.implementation(dependency: String) =
+    add("implementation", dependency)
+
+private fun DependencyHandler.ksp(dependency: String) =
+    add("ksp", dependency)
+
+fun DependencyHandler.useModule(moduleName: String) {
+    add("implementation", project(moduleName))
+}
+
+fun DependencyHandler.useBaseModule() {
+    useModule(":core:base")
+}
+
+fun DependencyHandler.useAutomultibind() {
+    implementation(Dependencies.Automultibind.annotations)
+    ksp(Dependencies.Automultibind.ksp)
+}
+
+fun DependencyHandler.useLibgdx() {
+    implementation(Dependencies.LibGDX.gdx)
+}
+
+fun DependencyHandler.useDagger() {
+    implementation(Dependencies.Dagger.dagger)
+    ksp(Dependencies.Dagger.compiler)
+}
+
+fun DependencyHandler.useKotlinxSerializationJson() {
+    implementation(Dependencies.Kotlin.Serialization.json)
+}
+
+fun DependencyHandler.useKotlinxSerializationProtobuf() {
+    implementation(Dependencies.Kotlin.Serialization.protobuf)
+}
diff --git a/buildSrc/src/main/kotlin/PluginDependencySpecScopeExtentions.kt b/buildSrc/src/main/kotlin/PluginDependencySpecScopeExtentions.kt
new file mode 100644 (file)
index 0000000..19972d7
--- /dev/null
@@ -0,0 +1,9 @@
+import org.gradle.kotlin.dsl.PluginDependenciesSpecScope
+import org.gradle.kotlin.dsl.version
+
+val PluginDependenciesSpecScope.kotlin
+    get() = id("kotlin")
+val PluginDependenciesSpecScope.ksp
+    get() = id("com.google.devtools.ksp") version Versions.ksp
+val PluginDependenciesSpecScope.kotlinxSerialization
+    get() = id("org.jetbrains.kotlin.plugin.serialization") version Versions.kotlin
diff --git a/core/base/build.gradle.kts b/core/base/build.gradle.kts
new file mode 100644 (file)
index 0000000..114a577
--- /dev/null
@@ -0,0 +1,12 @@
+plugins {
+    kotlin
+    ksp
+}
+
+java.sourceCompatibility = ApplicationInfo.sourceCompatibility
+java.targetCompatibility = ApplicationInfo.sourceCompatibility
+
+dependencies {
+    useLibgdx()
+    useDagger()
+}
diff --git a/core/base/src/main/kotlin/ru/fredboy/cavedroid/utils/MeasureUnitsUtils.kt b/core/base/src/main/kotlin/ru/fredboy/cavedroid/utils/MeasureUnitsUtils.kt
new file mode 100644 (file)
index 0000000..e44c7d4
--- /dev/null
@@ -0,0 +1,25 @@
+package ru.fredboy.cavedroid.utils
+
+import com.badlogic.gdx.math.MathUtils
+
+const val BLOCK_SIZE_PX = 16f
+
+/**
+ * Converts this value in BLOCKS into pixels
+ */
+val Float.px get() = this * BLOCK_SIZE_PX
+
+/**
+ * Converts this value in BLOCKS into pixels
+ */
+val Int.px get() = this * BLOCK_SIZE_PX
+
+/**
+ * Converts this value in PIXELS into blocks
+ */
+val Float.bl get() = MathUtils.floor(this / BLOCK_SIZE_PX)
+
+/**
+ * Converts this value in PIXELS into blocks
+ */
+val Int.bl get() = MathUtils.floor(this / BLOCK_SIZE_PX)
index 276f49d272a99118bc5c95229ed1ebd477c88ce2..5afa43eba7ac1d68dd783ae1b744816bbf12c382 100644 (file)
@@ -10,17 +10,24 @@ plugins {
 java.sourceCompatibility = ApplicationInfo.sourceCompatibility
 java.targetCompatibility = ApplicationInfo.sourceCompatibility
 
+sourceSets {
+    buildDir = file("_build")
+}
+
 dependencies {
-    implementation(Dependencies.Automultibind.annotations)
-    ksp(Dependencies.Automultibind.ksp)
+    useAutomultibind()
+    useDagger()
+    useLibgdx()
+    useKotlinxSerializationJson()
+    useKotlinxSerializationProtobuf()
 
-    implementation(Dependencies.LibGDX.gdx)
-    implementation(Dependencies.Dagger.dagger)
+    useBaseModule()
 
-    implementation(Dependencies.jetbrainsAnnotations)
-    implementation(Dependencies.Kotlin.stdlib)
-    implementation(Dependencies.Kotlin.Serialization.json)
-    implementation(Dependencies.Kotlin.Serialization.protobuf)
+    // data
+    useModule(":core:data:assets")
 
-    ksp(Dependencies.Dagger.compiler)
+    //domain
+    useModule(":core:domain:assets")
+
+    implementation(Dependencies.jetbrainsAnnotations)
 }
\ No newline at end of file
diff --git a/core/data/assets/build.gradle.kts b/core/data/assets/build.gradle.kts
new file mode 100644 (file)
index 0000000..096f367
--- /dev/null
@@ -0,0 +1,16 @@
+plugins {
+    kotlin
+    ksp
+    kotlinxSerialization
+}
+
+java.sourceCompatibility = ApplicationInfo.sourceCompatibility
+java.targetCompatibility = ApplicationInfo.sourceCompatibility
+
+dependencies {
+    useBaseModule()
+    useModule(":core:domain:assets")
+    useLibgdx()
+    useKotlinxSerializationJson()
+    useDagger()
+}
diff --git a/core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/di/DataAssetsModule.kt b/core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/di/DataAssetsModule.kt
new file mode 100644 (file)
index 0000000..73dc017
--- /dev/null
@@ -0,0 +1,50 @@
+package ru.fredboy.cavedroid.data.assets.di
+
+import dagger.Binds
+import dagger.Module
+import ru.fredboy.cavedroid.data.assets.internal.*
+import ru.fredboy.cavedroid.data.assets.internal.BlockDamageAssetsRepositoryImpl
+import ru.fredboy.cavedroid.data.assets.internal.FontAssetsRepositoryImpl
+import ru.fredboy.cavedroid.data.assets.internal.MobAssetsRepositoryImpl
+import ru.fredboy.cavedroid.data.assets.internal.TextureRegionsAssetsRepositoryImpl
+import ru.fredboy.cavedroid.domain.assets.repository.*
+
+@Module
+abstract class DataAssetsModule {
+
+    @Binds
+    internal abstract fun bindBlockDamageAssetsRepository(
+        impl: BlockDamageAssetsRepositoryImpl
+    ): BlockDamageAssetsRepository
+
+    @Binds
+    internal abstract fun bindMobAssetsRepository(
+        impl: MobAssetsRepositoryImpl
+    ): MobAssetsRepository
+
+    @Binds
+    internal abstract fun bindTextureRegionsAssetsRepository(
+        impl: TextureRegionsAssetsRepositoryImpl
+    ): TextureRegionsAssetsRepository
+
+    @Binds
+    internal abstract fun bindFontAssetsRepository(
+        impl: FontAssetsRepositoryImpl
+    ): FontAssetsRepository
+
+    @Binds
+    internal abstract fun bindBlockAssetsRepository(
+        impl: BlockAssetsRepositoryImpl
+    ): BlockAssetsRepository
+
+    @Binds
+    internal abstract fun bindItemsAssetsRepository(
+        impl: ItemsAssetsRepositoryImpl
+    ): ItemsAssetsRepository
+
+    @Binds
+    internal abstract fun bindTouchButtonsAssetsRepository(
+        impl: TouchButtonsRepositoryImpl
+    ): TouchButtonsAssetsRepository
+
+}
\ No newline at end of file
diff --git a/core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/internal/BlockAssetsRepositoryImpl.kt b/core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/internal/BlockAssetsRepositoryImpl.kt
new file mode 100644 (file)
index 0000000..4bf0cab
--- /dev/null
@@ -0,0 +1,30 @@
+package ru.fredboy.cavedroid.data.assets.internal
+
+import com.badlogic.gdx.graphics.Texture
+import ru.fredboy.cavedroid.domain.assets.repository.BlockAssetsRepository
+import javax.inject.Inject
+import javax.inject.Singleton
+
+@Singleton
+internal class BlockAssetsRepositoryImpl @Inject constructor() : BlockAssetsRepository() {
+
+    private val blockTexturesCache = HashMap<String, Texture>()
+
+    override fun getBlockTexture(textureName: String): Texture {
+        return resolveTexture(textureName, BLOCKS_TEXTURES_PATH, blockTexturesCache)
+    }
+
+    override fun initialize() {
+        // no-op
+    }
+
+    override fun dispose() {
+        super.dispose()
+        blockTexturesCache.clear()
+    }
+
+    companion object {
+        private const val BLOCKS_TEXTURES_PATH = "textures/textures/blocks"
+    }
+
+}
\ No newline at end of file
diff --git a/core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/internal/BlockDamageAssetsRepositoryImpl.kt b/core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/internal/BlockDamageAssetsRepositoryImpl.kt
new file mode 100644 (file)
index 0000000..507034f
--- /dev/null
@@ -0,0 +1,52 @@
+package ru.fredboy.cavedroid.data.assets.internal
+
+import com.badlogic.gdx.graphics.g2d.Sprite
+import ru.fredboy.cavedroid.domain.assets.repository.BlockDamageAssetsRepository
+import ru.fredboy.cavedroid.utils.BLOCK_SIZE_PX
+import ru.fredboy.cavedroid.utils.bl
+import ru.fredboy.cavedroid.utils.px
+import javax.inject.Inject
+import javax.inject.Singleton
+
+@Singleton
+internal class BlockDamageAssetsRepositoryImpl @Inject constructor() : BlockDamageAssetsRepository() {
+
+    private var blockDamageSprites: Array<Sprite>? = null
+
+    override val damageStages: Int
+        get() = requireNotNull(blockDamageSprites).size
+
+    private fun loadBlockDamage() {
+        val blockDamageTexture = loadTexture(BLOCK_DAMAGE_SHEET_PATH)
+        val size = blockDamageTexture.width.bl
+        val blockSize = BLOCK_SIZE_PX.toInt()
+
+        blockDamageSprites = Array(size) { index ->
+            flippedSprite(
+                texture = blockDamageTexture,
+                x = index.px.toInt(),
+                y = 0,
+                width = blockSize,
+                height = blockSize
+            )
+        }
+    }
+
+    override fun getBlockDamageSprite(stage: Int): Sprite {
+        return requireNotNull(blockDamageSprites)[stage]
+    }
+
+    override fun initialize() {
+        loadBlockDamage()
+    }
+
+    override fun dispose() {
+        super.dispose()
+        blockDamageSprites = null
+    }
+
+    companion object {
+        private const val BLOCK_DAMAGE_SHEET_PATH = "textures/break.png"
+    }
+
+}
\ No newline at end of file
diff --git a/core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/internal/FontAssetsRepositoryImpl.kt b/core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/internal/FontAssetsRepositoryImpl.kt
new file mode 100644 (file)
index 0000000..c5e2eb3
--- /dev/null
@@ -0,0 +1,48 @@
+package ru.fredboy.cavedroid.data.assets.internal
+
+import com.badlogic.gdx.Gdx
+import com.badlogic.gdx.graphics.g2d.BitmapFont
+import com.badlogic.gdx.graphics.g2d.GlyphLayout
+import ru.fredboy.cavedroid.domain.assets.repository.FontAssetsRepository
+import javax.inject.Inject
+import javax.inject.Singleton
+
+@Singleton
+internal class FontAssetsRepositoryImpl @Inject constructor() : FontAssetsRepository() {
+
+    private val glyphLayout = GlyphLayout()
+
+    private var font: BitmapFont? = null
+
+    override fun getStringWidth(string: String): Float {
+        glyphLayout.setText(font, string)
+        return glyphLayout.width
+    }
+
+    override fun getStringHeight(string: String): Float {
+        glyphLayout.setText(font, string)
+        return glyphLayout.height
+    }
+
+    override fun getFont(): BitmapFont {
+        return requireNotNull(font)
+    }
+
+    override fun initialize() {
+        font = BitmapFont(Gdx.files.internal(FONT_FILE_PATH), true)
+            .apply {
+                data.setScale(.375f)
+                setUseIntegerPositions(false)
+            }
+    }
+
+    override fun dispose() {
+        super.dispose()
+        font?.dispose()
+    }
+
+    companion object {
+        private const val FONT_FILE_PATH = "font.fnt"
+        private const val FONT_SCALE = .375f
+    }
+}
\ No newline at end of file
diff --git a/core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/internal/ItemsAssetsRepositoryImpl.kt b/core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/internal/ItemsAssetsRepositoryImpl.kt
new file mode 100644 (file)
index 0000000..0a44ff6
--- /dev/null
@@ -0,0 +1,30 @@
+package ru.fredboy.cavedroid.data.assets.internal
+
+import com.badlogic.gdx.graphics.Texture
+import ru.fredboy.cavedroid.domain.assets.repository.ItemsAssetsRepository
+import javax.inject.Inject
+import javax.inject.Singleton
+
+@Singleton
+internal class ItemsAssetsRepositoryImpl @Inject constructor() : ItemsAssetsRepository() {
+
+    private val itemTexturesCache = HashMap<String, Texture>()
+
+    override fun getItemTexture(textureName: String): Texture {
+        return resolveTexture(textureName, ITEMS_TEXTURES_PATH, itemTexturesCache)
+    }
+
+    override fun initialize() {
+        // no-op
+    }
+
+    override fun dispose() {
+        super.dispose()
+        itemTexturesCache.clear()
+    }
+
+    companion object {
+        private const val ITEMS_TEXTURES_PATH = "textures/textures/items"
+    }
+
+}
\ No newline at end of file
diff --git a/core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/internal/MobAssetsRepositoryImpl.kt b/core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/internal/MobAssetsRepositoryImpl.kt
new file mode 100644 (file)
index 0000000..7947cbd
--- /dev/null
@@ -0,0 +1,63 @@
+package ru.fredboy.cavedroid.data.assets.internal
+
+import ru.fredboy.cavedroid.domain.assets.model.MobSprite
+import ru.fredboy.cavedroid.domain.assets.repository.MobAssetsRepository
+import javax.inject.Inject
+import javax.inject.Singleton
+
+@Singleton
+internal class MobAssetsRepositoryImpl @Inject constructor(): MobAssetsRepository() {
+
+    private var playerSprite: MobSprite.Player? = null
+
+    private var pigSprite: MobSprite.Pig? = null
+
+    private fun loadPlayerSprite() {
+        val (headTexture, bodyTexture, handTexture, legTexture) = List(4) { index ->
+            loadTexture("$PLAYER_SPRITES_PATH/$index.png")
+        }
+
+        playerSprite = MobSprite.Player(
+            head = flippedSprite(headTexture),
+            hand = flippedSprite(handTexture),
+            body = flippedSprite(bodyTexture),
+            leg = flippedSprite(legTexture),
+        )
+    }
+
+    private fun loadPigSprite() {
+        val (bodyTexture, legTexture) = List(2) { index ->
+            loadTexture("$PIG_SPRITES_PATH/$index.png")
+        }
+
+        pigSprite = MobSprite.Pig(
+            headAndBody = flippedSprite(bodyTexture),
+            leg = flippedSprite(legTexture),
+        )
+    }
+
+    override fun getPlayerSprites(): MobSprite.Player {
+        return requireNotNull(playerSprite)
+    }
+
+    override fun getPigSprites(): MobSprite.Pig {
+        return requireNotNull(pigSprite)
+    }
+
+    override fun initialize() {
+        loadPlayerSprite()
+        loadPigSprite()
+    }
+
+    override fun dispose() {
+        super.dispose()
+        playerSprite = null
+        pigSprite = null
+    }
+
+    companion object {
+        private const val PLAYER_SPRITES_PATH = "textures/mobs/char"
+        private const val PIG_SPRITES_PATH = "textures/mobs/pig"
+    }
+
+}
\ No newline at end of file
diff --git a/core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/internal/TextureRegionsAssetsRepositoryImpl.kt b/core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/internal/TextureRegionsAssetsRepositoryImpl.kt
new file mode 100644 (file)
index 0000000..f479816
--- /dev/null
@@ -0,0 +1,70 @@
+package ru.fredboy.cavedroid.data.assets.internal
+
+import com.badlogic.gdx.Gdx
+import com.badlogic.gdx.graphics.g2d.TextureRegion
+import kotlinx.serialization.json.Json
+import ru.fredboy.cavedroid.data.assets.model.region.TextureRegionsDto
+import ru.fredboy.cavedroid.domain.assets.repository.TextureRegionsAssetsRepository
+import java.io.File
+import java.util.*
+import javax.inject.Inject
+import javax.inject.Singleton
+
+@Singleton
+internal class TextureRegionsAssetsRepositoryImpl @Inject constructor() : TextureRegionsAssetsRepository() {
+
+    private var textureRegions: HashMap<String, TextureRegion>? = null
+
+    private fun loadTextureRegions() {
+        val file = Gdx.files.internal(JSON_TEXTURE_REGIONS)
+        val dto = JsonFormat.decodeFromString<TextureRegionsDto>(file.readString())
+
+        val regions = HashMap<String, TextureRegion>()
+
+        dto.forEach { (fileName, fileData) ->
+            val texture = loadTexture("$fileName.png")
+
+            if (fileData.isEmpty()) {
+                regions[fileName.split(File.separator).last()] = flippedRegion(
+                    texture = texture,
+                    x = 0,
+                    y = 0,
+                    width = texture.width,
+                    height = texture.height
+                )
+            } else {
+                fileData.forEach { (regionName, regionData) ->
+                    regions[regionName.split(File.separator).last()] = flippedRegion(
+                        texture = texture,
+                        x = regionData.x,
+                        y = regionData.y,
+                        width = regionData.width ?: texture.width,
+                        height = regionData.height ?: texture.height
+                    )
+                }
+            }
+        }
+
+        textureRegions = regions
+    }
+
+    override fun initialize() {
+        loadTextureRegions()
+    }
+
+    override fun getTextureRegionByName(name: String): TextureRegion? {
+        return requireNotNull(textureRegions)[name]
+    }
+
+    override fun dispose() {
+        super.dispose()
+        textureRegions = null
+    }
+
+    companion object {
+        private val JsonFormat = Json { ignoreUnknownKeys = true }
+
+        private const val JSON_TEXTURE_REGIONS = "json/texture_regions.json"
+    }
+
+}
diff --git a/core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/internal/TouchButtonsRepositoryImpl.kt b/core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/internal/TouchButtonsRepositoryImpl.kt
new file mode 100644 (file)
index 0000000..616f646
--- /dev/null
@@ -0,0 +1,60 @@
+package ru.fredboy.cavedroid.data.assets.internal
+
+import com.badlogic.gdx.Gdx
+import com.badlogic.gdx.Input
+import com.badlogic.gdx.math.Rectangle
+import kotlinx.serialization.json.Json
+import ru.fredboy.cavedroid.data.assets.model.button.TouchButtonsDto
+import ru.fredboy.cavedroid.domain.assets.model.TouchButton
+import ru.fredboy.cavedroid.domain.assets.repository.TouchButtonsAssetsRepository
+import javax.inject.Inject
+import javax.inject.Singleton
+
+@Singleton
+internal class TouchButtonsRepositoryImpl @Inject constructor() : TouchButtonsAssetsRepository() {
+
+    private val guiMap = HashMap<String, TouchButton>()
+
+    override fun getTouchButtons(): Map<String, TouchButton> {
+        return guiMap
+    }
+
+    private fun getMouseKey(name: String): Int {
+        return when (name) {
+            "Left" -> Input.Buttons.LEFT
+            "Right" -> Input.Buttons.RIGHT
+            "Middle" -> Input.Buttons.MIDDLE
+            "Back" -> Input.Buttons.BACK
+            "Forward" -> Input.Buttons.FORWARD
+            else -> -1
+        }
+    }
+
+    private fun loadTouchButtons() {
+        val file = Gdx.files.internal(JSON_TOUCH_BUTTONS)
+        val buttons = JsonFormat.decodeFromString<TouchButtonsDto>(file.readString())
+
+        buttons.forEach { (name, data) ->
+            guiMap[name] = TouchButton(
+                rectangle = Rectangle(data.x, data.y, data.width, data.height),
+                code = if (data.isMouse) getMouseKey(name) else Input.Keys.valueOf(name),
+                isMouse = data.isMouse,
+            )
+        }
+    }
+
+    override fun initialize() {
+        loadTouchButtons()
+    }
+
+    override fun dispose() {
+        super.dispose()
+        guiMap.clear()
+    }
+
+    companion object {
+        private val JsonFormat = Json { ignoreUnknownKeys = true }
+
+        private const val JSON_TOUCH_BUTTONS = "json/touch_buttons.json"
+    }
+}
\ No newline at end of file
diff --git a/core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/model/button/TouchButtonDto.kt b/core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/model/button/TouchButtonDto.kt
new file mode 100644 (file)
index 0000000..c4e2e01
--- /dev/null
@@ -0,0 +1,14 @@
+package ru.fredboy.cavedroid.data.assets.model.button
+
+import kotlinx.serialization.SerialName
+import kotlinx.serialization.Serializable
+
+@Serializable
+data class TouchButtonDto(
+    @SerialName("x") val x: Float,
+    @SerialName("y") val y: Float,
+    @SerialName("w") val width: Float,
+    @SerialName("h") val height: Float,
+    @SerialName("mouse") val isMouse: Boolean = false,
+    @SerialName("key") val key: String,
+)
diff --git a/core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/model/button/TouchButtonsDto.kt b/core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/model/button/TouchButtonsDto.kt
new file mode 100644 (file)
index 0000000..6682347
--- /dev/null
@@ -0,0 +1,3 @@
+package ru.fredboy.cavedroid.data.assets.model.button
+
+typealias TouchButtonsDto = Map<String, TouchButtonDto>
diff --git a/core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/model/region/TextureRegionDto.kt b/core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/model/region/TextureRegionDto.kt
new file mode 100644 (file)
index 0000000..6f2d171
--- /dev/null
@@ -0,0 +1,12 @@
+package ru.fredboy.cavedroid.data.assets.model.region
+
+import kotlinx.serialization.SerialName
+import kotlinx.serialization.Serializable
+
+@Serializable
+internal data class TextureRegionDto(
+    @SerialName("x") val x: Int = 0,
+    @SerialName("y") val y: Int = 0,
+    @SerialName("w") val width: Int? = null,
+    @SerialName("h") val height: Int? = null,
+)
diff --git a/core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/model/region/TextureRegionsDto.kt b/core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/model/region/TextureRegionsDto.kt
new file mode 100644 (file)
index 0000000..d0bf265
--- /dev/null
@@ -0,0 +1,3 @@
+package ru.fredboy.cavedroid.data.assets.model.region
+
+internal typealias TextureRegionsDto = Map<String, Map<String, TextureRegionDto>>
diff --git a/core/domain/assets/build.gradle.kts b/core/domain/assets/build.gradle.kts
new file mode 100644 (file)
index 0000000..2dd0121
--- /dev/null
@@ -0,0 +1,13 @@
+plugins {
+    kotlin
+    ksp
+}
+
+java.sourceCompatibility = ApplicationInfo.sourceCompatibility
+java.targetCompatibility = ApplicationInfo.sourceCompatibility
+
+dependencies {
+    useBaseModule()
+    useLibgdx()
+    useDagger()
+}
diff --git a/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/GameAssetsHolder.kt b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/GameAssetsHolder.kt
new file mode 100644 (file)
index 0000000..0149137
--- /dev/null
@@ -0,0 +1,86 @@
+package ru.fredboy.cavedroid.domain.assets
+
+import com.badlogic.gdx.graphics.Texture
+import com.badlogic.gdx.graphics.g2d.BitmapFont
+import com.badlogic.gdx.graphics.g2d.Sprite
+import com.badlogic.gdx.graphics.g2d.TextureRegion
+import dagger.Reusable
+import ru.fredboy.cavedroid.domain.assets.model.MobSprite
+import ru.fredboy.cavedroid.domain.assets.model.TouchButton
+import ru.fredboy.cavedroid.domain.assets.repository.*
+import javax.inject.Inject
+
+@Reusable
+class GameAssetsHolder @Inject constructor(
+    private val blockAssetsRepository: BlockAssetsRepository,
+    private val blockDamageAssetsRepository: BlockDamageAssetsRepository,
+    private val fontAssetsRepository: FontAssetsRepository,
+    private val itemsAssetsRepository: ItemsAssetsRepository,
+    private val mobAssetsRepository: MobAssetsRepository,
+    private val textureRegionsAssetsRepository: TextureRegionsAssetsRepository,
+    private val touchButtonsAssetsRepository: TouchButtonsAssetsRepository
+) {
+
+    private val repositories = sequenceOf(
+        blockAssetsRepository,
+        blockDamageAssetsRepository,
+        fontAssetsRepository,
+        itemsAssetsRepository,
+        mobAssetsRepository,
+        textureRegionsAssetsRepository,
+        touchButtonsAssetsRepository
+    )
+
+    fun initializeRepository() {
+        repositories.forEach(AssetsRepository::initialize)
+    }
+
+    fun dispose() {
+        repositories.forEach(AssetsRepository::dispose)
+    }
+
+    fun getBlockTexture(textureName: String): Texture {
+        return blockAssetsRepository.getBlockTexture(textureName)
+    }
+
+    fun getItemTexture(textureName: String): Texture {
+        return itemsAssetsRepository.getItemTexture(textureName)
+    }
+
+    fun getBlockDamageFrameCount(): Int {
+        return blockDamageAssetsRepository.damageStages
+    }
+
+    fun getBlockDamageSprite(stage: Int): Sprite {
+        return blockDamageAssetsRepository.getBlockDamageSprite(stage)
+    }
+
+    fun getStringWidth(string: String): Float {
+        return fontAssetsRepository.getStringWidth(string)
+    }
+
+    fun getStringHeight(string: String): Float {
+        return fontAssetsRepository.getStringHeight(string)
+    }
+
+    fun getFont(): BitmapFont {
+        return fontAssetsRepository.getFont()
+    }
+
+    fun getPlayerSprites(): MobSprite.Player {
+        return mobAssetsRepository.getPlayerSprites()
+    }
+
+    fun getPigSprites(): MobSprite.Pig {
+        return mobAssetsRepository.getPigSprites()
+    }
+
+    fun getTouchButtons(): Map<String, TouchButton> {
+        return touchButtonsAssetsRepository.getTouchButtons()
+    }
+
+    fun getTextureRegionByName(name: String): TextureRegion? {
+        return textureRegionsAssetsRepository.getTextureRegionByName(name)
+    }
+
+}
diff --git a/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/model/MobSprite.kt b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/model/MobSprite.kt
new file mode 100644 (file)
index 0000000..120b90a
--- /dev/null
@@ -0,0 +1,33 @@
+package ru.fredboy.cavedroid.domain.assets.model
+
+import com.badlogic.gdx.graphics.g2d.Sprite
+
+sealed interface MobSprite {
+
+    data class Player(
+        val head: Sprite,
+        val hand: Sprite,
+        val body: Sprite,
+        val leg: Sprite,
+    ) : MobSprite {
+        fun getBodyRelativeX() = 2
+
+        fun getBodyRelativeY() = 8
+
+        fun getLegsRelativeY() = 20
+    }
+
+    data class Pig(
+        val headAndBody: Sprite,
+        val leg: Sprite
+    ) : MobSprite {
+
+        fun getLeftLegRelativeX(directionIndex: Int) = 9 - directionIndex * 9
+
+        fun getRightLegRelativeX(directionIndex: Int) = 21 - (9 * directionIndex)
+
+        fun getLegsRelativeY() = 12
+
+    }
+
+}
\ No newline at end of file
diff --git a/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/model/TouchButton.kt b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/model/TouchButton.kt
new file mode 100644 (file)
index 0000000..a934314
--- /dev/null
@@ -0,0 +1,9 @@
+package ru.fredboy.cavedroid.domain.assets.model
+
+import com.badlogic.gdx.math.Rectangle
+
+data class TouchButton(
+    val rectangle: Rectangle,
+    val code: Int,
+    val isMouse: Boolean
+)
diff --git a/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/AssetsRepository.kt b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/AssetsRepository.kt
new file mode 100644 (file)
index 0000000..b797aed
--- /dev/null
@@ -0,0 +1,70 @@
+package ru.fredboy.cavedroid.domain.assets.repository
+
+import com.badlogic.gdx.Gdx
+import com.badlogic.gdx.graphics.Texture
+import com.badlogic.gdx.graphics.g2d.Sprite
+import com.badlogic.gdx.graphics.g2d.TextureRegion
+import com.badlogic.gdx.utils.Disposable
+import java.util.*
+
+abstract class AssetsRepository : Disposable {
+
+    protected val loadedTextures = LinkedList<Texture>()
+
+    protected fun loadTexture(path: String): Texture {
+        return Texture(Gdx.files.internal(path)).also { texture ->
+            loadedTextures.add(texture)
+        }
+    }
+
+    protected fun flippedRegion(
+        texture: Texture,
+        x: Int,
+        y: Int,
+        width: Int,
+        height: Int
+    ): TextureRegion {
+        return TextureRegion(texture, x, y + height, width, -height)
+    }
+
+    protected fun flippedSprite(
+        texture: Texture
+    ): Sprite {
+        return Sprite(texture).apply { flip(false, true) }
+    }
+
+    protected fun flippedSprite(
+        texture: Texture,
+        x: Int,
+        y: Int,
+        width: Int,
+        height: Int
+    ): Sprite {
+        return Sprite(flippedRegion(texture, x, y, width, height))
+    }
+
+    protected fun resolveTexture(
+        textureName: String,
+        lookupPath: String,
+        cache: MutableMap<String, Texture>
+    ): Texture {
+        val cached = cache[textureName]
+
+        if (cached != null) {
+            return cached
+        }
+
+        val texture = loadTexture("$lookupPath/$textureName.png")
+        cache[textureName] = texture
+
+        return texture
+    }
+
+    override fun dispose() {
+        loadedTextures.forEach(Texture::dispose)
+        loadedTextures.clear()
+    }
+
+    abstract fun initialize()
+
+}
diff --git a/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/BlockAssetsRepository.kt b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/BlockAssetsRepository.kt
new file mode 100644 (file)
index 0000000..035dd4f
--- /dev/null
@@ -0,0 +1,9 @@
+package ru.fredboy.cavedroid.domain.assets.repository
+
+import com.badlogic.gdx.graphics.Texture
+
+abstract class BlockAssetsRepository : AssetsRepository() {
+
+    abstract fun getBlockTexture(textureName: String): Texture
+
+}
\ No newline at end of file
diff --git a/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/BlockDamageAssetsRepository.kt b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/BlockDamageAssetsRepository.kt
new file mode 100644 (file)
index 0000000..dfae46b
--- /dev/null
@@ -0,0 +1,11 @@
+package ru.fredboy.cavedroid.domain.assets.repository
+
+import com.badlogic.gdx.graphics.g2d.Sprite
+
+abstract class BlockDamageAssetsRepository : AssetsRepository() {
+
+    abstract val damageStages: Int
+
+    abstract fun getBlockDamageSprite(stage: Int): Sprite
+
+}
diff --git a/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/FontAssetsRepository.kt b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/FontAssetsRepository.kt
new file mode 100644 (file)
index 0000000..939a260
--- /dev/null
@@ -0,0 +1,12 @@
+package ru.fredboy.cavedroid.domain.assets.repository
+
+import com.badlogic.gdx.graphics.g2d.BitmapFont
+
+abstract class FontAssetsRepository : AssetsRepository() {
+
+    abstract fun getStringWidth(string: String): Float
+
+    abstract fun getStringHeight(string: String): Float
+
+    abstract fun getFont(): BitmapFont
+}
\ No newline at end of file
diff --git a/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/ItemsAssetsRepository.kt b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/ItemsAssetsRepository.kt
new file mode 100644 (file)
index 0000000..66720f0
--- /dev/null
@@ -0,0 +1,9 @@
+package ru.fredboy.cavedroid.domain.assets.repository
+
+import com.badlogic.gdx.graphics.Texture
+
+abstract class ItemsAssetsRepository : AssetsRepository() {
+
+    abstract fun getItemTexture(textureName: String): Texture
+
+}
diff --git a/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/MobAssetsRepository.kt b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/MobAssetsRepository.kt
new file mode 100644 (file)
index 0000000..85c5ca8
--- /dev/null
@@ -0,0 +1,11 @@
+package ru.fredboy.cavedroid.domain.assets.repository
+
+import ru.fredboy.cavedroid.domain.assets.model.MobSprite
+
+abstract class MobAssetsRepository : AssetsRepository() {
+
+    abstract fun getPlayerSprites(): MobSprite.Player
+
+    abstract fun getPigSprites(): MobSprite.Pig
+
+}
\ No newline at end of file
diff --git a/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/TextureRegionsAssetsRepository.kt b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/TextureRegionsAssetsRepository.kt
new file mode 100644 (file)
index 0000000..c84d0ba
--- /dev/null
@@ -0,0 +1,9 @@
+package ru.fredboy.cavedroid.domain.assets.repository
+
+import com.badlogic.gdx.graphics.g2d.TextureRegion
+
+abstract class TextureRegionsAssetsRepository : AssetsRepository() {
+
+    abstract fun getTextureRegionByName(name: String): TextureRegion?
+
+}
diff --git a/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/TouchButtonsAssetsRepository.kt b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/TouchButtonsAssetsRepository.kt
new file mode 100644 (file)
index 0000000..07c486b
--- /dev/null
@@ -0,0 +1,9 @@
+package ru.fredboy.cavedroid.domain.assets.repository
+
+import ru.fredboy.cavedroid.domain.assets.model.TouchButton
+
+abstract class TouchButtonsAssetsRepository : AssetsRepository() {
+
+    abstract fun getTouchButtons(): Map<String, TouchButton>
+
+}
\ No newline at end of file
diff --git a/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/DisposeAssetsUseCase.kt b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/DisposeAssetsUseCase.kt
new file mode 100644 (file)
index 0000000..58e152c
--- /dev/null
@@ -0,0 +1,16 @@
+package ru.fredboy.cavedroid.domain.assets.usecase
+
+import dagger.Reusable
+import ru.fredboy.cavedroid.domain.assets.GameAssetsHolder
+import javax.inject.Inject
+
+@Reusable
+class DisposeAssetsUseCase @Inject constructor(
+    private val gameAssetsHolder: GameAssetsHolder
+) {
+
+    operator fun invoke() {
+        gameAssetsHolder.dispose()
+    }
+
+}
\ No newline at end of file
diff --git a/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetBlockDamageFrameCountUseCase.kt b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetBlockDamageFrameCountUseCase.kt
new file mode 100644 (file)
index 0000000..089c863
--- /dev/null
@@ -0,0 +1,16 @@
+package ru.fredboy.cavedroid.domain.assets.usecase
+
+import dagger.Reusable
+import ru.fredboy.cavedroid.domain.assets.GameAssetsHolder
+import javax.inject.Inject
+
+@Reusable
+class GetBlockDamageFrameCountUseCase @Inject constructor(
+    private val gameAssetsHolder: GameAssetsHolder,
+) {
+
+    operator fun invoke(): Int {
+        return gameAssetsHolder.getBlockDamageFrameCount()
+    }
+
+}
diff --git a/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetBlockDamageSpriteUseCase.kt b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetBlockDamageSpriteUseCase.kt
new file mode 100644 (file)
index 0000000..5fb52e5
--- /dev/null
@@ -0,0 +1,17 @@
+package ru.fredboy.cavedroid.domain.assets.usecase
+
+import com.badlogic.gdx.graphics.g2d.Sprite
+import dagger.Reusable
+import ru.fredboy.cavedroid.domain.assets.GameAssetsHolder
+import javax.inject.Inject
+
+@Reusable
+class GetBlockDamageSpriteUseCase @Inject constructor(
+    private val gameAssetsHolder: GameAssetsHolder,
+) {
+
+    operator fun get(stage: Int): Sprite {
+        return gameAssetsHolder.getBlockDamageSprite(stage)
+    }
+
+}
diff --git a/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetBlockTextureUseCase.kt b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetBlockTextureUseCase.kt
new file mode 100644 (file)
index 0000000..d2c07bd
--- /dev/null
@@ -0,0 +1,17 @@
+package ru.fredboy.cavedroid.domain.assets.usecase
+
+import com.badlogic.gdx.graphics.Texture
+import dagger.Reusable
+import ru.fredboy.cavedroid.domain.assets.GameAssetsHolder
+import javax.inject.Inject
+
+@Reusable
+class GetBlockTextureUseCase @Inject constructor(
+    private val gameAssetsHolder: GameAssetsHolder
+) {
+
+    operator fun get(name: String): Texture {
+        return gameAssetsHolder.getBlockTexture(name)
+    }
+
+}
\ No newline at end of file
diff --git a/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetFontUseCase.kt b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetFontUseCase.kt
new file mode 100644 (file)
index 0000000..032de5e
--- /dev/null
@@ -0,0 +1,17 @@
+package ru.fredboy.cavedroid.domain.assets.usecase
+
+import com.badlogic.gdx.graphics.g2d.BitmapFont
+import dagger.Reusable
+import ru.fredboy.cavedroid.domain.assets.GameAssetsHolder
+import javax.inject.Inject
+
+@Reusable
+class GetFontUseCase @Inject constructor(
+    private val gameAssetsHolder: GameAssetsHolder,
+) {
+
+    operator fun invoke(): BitmapFont {
+        return gameAssetsHolder.getFont()
+    }
+
+}
diff --git a/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetItemTextureUseCase.kt b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetItemTextureUseCase.kt
new file mode 100644 (file)
index 0000000..84bfa2c
--- /dev/null
@@ -0,0 +1,17 @@
+package ru.fredboy.cavedroid.domain.assets.usecase
+
+import com.badlogic.gdx.graphics.Texture
+import dagger.Reusable
+import ru.fredboy.cavedroid.domain.assets.GameAssetsHolder
+import javax.inject.Inject
+
+@Reusable
+class GetItemTextureUseCase @Inject constructor(
+    private val gameAssetsHolder: GameAssetsHolder
+) {
+
+    operator fun get(name: String): Texture {
+        return gameAssetsHolder.getItemTexture(name)
+    }
+
+}
\ No newline at end of file
diff --git a/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetPigSpritesUseCase.kt b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetPigSpritesUseCase.kt
new file mode 100644 (file)
index 0000000..e38c6a8
--- /dev/null
@@ -0,0 +1,17 @@
+package ru.fredboy.cavedroid.domain.assets.usecase
+
+import dagger.Reusable
+import ru.fredboy.cavedroid.domain.assets.GameAssetsHolder
+import ru.fredboy.cavedroid.domain.assets.model.MobSprite
+import javax.inject.Inject
+
+@Reusable
+class GetPigSpritesUseCase @Inject constructor(
+    private val gameAssetsHolder: GameAssetsHolder,
+) {
+
+    operator fun invoke(): MobSprite.Pig {
+        return gameAssetsHolder.getPigSprites()
+    }
+
+}
diff --git a/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetPlayerSpritesUseCase.kt b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetPlayerSpritesUseCase.kt
new file mode 100644 (file)
index 0000000..183ee48
--- /dev/null
@@ -0,0 +1,17 @@
+package ru.fredboy.cavedroid.domain.assets.usecase
+
+import dagger.Reusable
+import ru.fredboy.cavedroid.domain.assets.GameAssetsHolder
+import ru.fredboy.cavedroid.domain.assets.model.MobSprite
+import javax.inject.Inject
+
+@Reusable
+class GetPlayerSpritesUseCase @Inject constructor(
+    private val gameAssetsHolder: GameAssetsHolder,
+) {
+
+    operator fun invoke(): MobSprite.Player {
+        return gameAssetsHolder.getPlayerSprites()
+    }
+
+}
diff --git a/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetStringHeightUseCase.kt b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetStringHeightUseCase.kt
new file mode 100644 (file)
index 0000000..0c203e2
--- /dev/null
@@ -0,0 +1,16 @@
+package ru.fredboy.cavedroid.domain.assets.usecase
+
+import dagger.Reusable
+import ru.fredboy.cavedroid.domain.assets.GameAssetsHolder
+import javax.inject.Inject
+
+@Reusable
+class GetStringHeightUseCase @Inject constructor(
+    private val gameAssetsHolder: GameAssetsHolder,
+) {
+
+    operator fun invoke(string: String): Float {
+        return gameAssetsHolder.getStringHeight(string)
+    }
+
+}
\ No newline at end of file
diff --git a/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetStringWidthUseCase.kt b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetStringWidthUseCase.kt
new file mode 100644 (file)
index 0000000..901617f
--- /dev/null
@@ -0,0 +1,16 @@
+package ru.fredboy.cavedroid.domain.assets.usecase
+
+import dagger.Reusable
+import ru.fredboy.cavedroid.domain.assets.GameAssetsHolder
+import javax.inject.Inject
+
+@Reusable
+class GetStringWidthUseCase @Inject constructor(
+    private val gameAssetsHolder: GameAssetsHolder,
+) {
+
+    operator fun invoke(string: String): Float {
+        return gameAssetsHolder.getStringWidth(string)
+    }
+
+}
\ No newline at end of file
diff --git a/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetTextureRegionByNameUseCase.kt b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetTextureRegionByNameUseCase.kt
new file mode 100644 (file)
index 0000000..ac7f8f7
--- /dev/null
@@ -0,0 +1,17 @@
+package ru.fredboy.cavedroid.domain.assets.usecase
+
+import com.badlogic.gdx.graphics.g2d.TextureRegion
+import dagger.Reusable
+import ru.fredboy.cavedroid.domain.assets.GameAssetsHolder
+import javax.inject.Inject
+
+@Reusable
+class GetTextureRegionByNameUseCase @Inject constructor(
+    private val gameAssetsHolder: GameAssetsHolder,
+) {
+
+    operator fun get(name: String): TextureRegion? {
+        return gameAssetsHolder.getTextureRegionByName(name)
+    }
+
+}
diff --git a/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetTouchButtonsUseCase.kt b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetTouchButtonsUseCase.kt
new file mode 100644 (file)
index 0000000..c9e4ed0
--- /dev/null
@@ -0,0 +1,17 @@
+package ru.fredboy.cavedroid.domain.assets.usecase
+
+import dagger.Reusable
+import ru.fredboy.cavedroid.domain.assets.GameAssetsHolder
+import ru.fredboy.cavedroid.domain.assets.model.TouchButton
+import javax.inject.Inject
+
+@Reusable
+class GetTouchButtonsUseCase @Inject constructor(
+    private val gameAssetsHolder: GameAssetsHolder,
+) {
+
+    operator fun invoke(): Map<String, TouchButton> {
+        return gameAssetsHolder.getTouchButtons()
+    }
+
+}
diff --git a/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/InitializeAssetsUseCase.kt b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/InitializeAssetsUseCase.kt
new file mode 100644 (file)
index 0000000..94fc9a6
--- /dev/null
@@ -0,0 +1,16 @@
+package ru.fredboy.cavedroid.domain.assets.usecase
+
+import dagger.Reusable
+import ru.fredboy.cavedroid.domain.assets.GameAssetsHolder
+import javax.inject.Inject
+
+@Reusable
+class InitializeAssetsUseCase @Inject constructor(
+    private val gameAssetsHolder: GameAssetsHolder,
+) {
+
+    operator fun invoke() {
+        gameAssetsHolder.initializeRepository()
+    }
+
+}
\ No newline at end of file
index 94d37d4be47f7808d7c8997c51cc98215a1f4743..63263088c1c066be3e353dfefbf9f58db9a41e77 100644 (file)
@@ -5,7 +5,9 @@ import ru.deadsoftware.cavedroid.MainComponent;
 import ru.deadsoftware.cavedroid.generated.module.*;
 
 @GameScope
-@Component(dependencies = MainComponent.class,
+@Component(dependencies = {
+            MainComponent.class
+        },
         modules = {GameModule.class,
                 UseItemActionsModule.class,
                 UpdateBlockActionsModule.class,
index 6c71d78c4fe7441f8ab3df12617ca2f013bf8019..74765e1f1508ddb246f3b37c79829966f1c1a669 100644 (file)
@@ -12,6 +12,8 @@ import ru.deadsoftware.cavedroid.game.save.GameSaveData;
 import ru.deadsoftware.cavedroid.game.save.GameSaveLoader;
 import ru.deadsoftware.cavedroid.game.ui.TooltipManager;
 import ru.deadsoftware.cavedroid.game.world.GameWorld;
+import ru.fredboy.cavedroid.domain.assets.usecase.GetPigSpritesUseCase;
+import ru.fredboy.cavedroid.domain.assets.usecase.GetPlayerSpritesUseCase;
 
 @Module
 public class GameModule {
@@ -21,11 +23,21 @@ public class GameModule {
 
     public static boolean loaded = false;
 
-    private static void load(MainConfig mainConfig, GameItemsHolder gameItemsHolder, TooltipManager tooltipManager) {
+    private static void load(MainConfig mainConfig,
+                             GameItemsHolder gameItemsHolder,
+                             TooltipManager tooltipManager,
+                             GetPlayerSpritesUseCase getPlayerSpritesUseCase,
+                             GetPigSpritesUseCase getPigSpritesUseCase) {
         if (loaded) {
             return;
         }
-        data = GameSaveLoader.INSTANCE.load(mainConfig, gameItemsHolder, tooltipManager);
+
+        data = GameSaveLoader.INSTANCE.load(mainConfig,
+                gameItemsHolder,
+                tooltipManager,
+                getPlayerSpritesUseCase,
+                getPigSpritesUseCase);
+
         loaded = true;
     }
 
@@ -39,8 +51,10 @@ public class GameModule {
     @GameScope
     public static DropController provideDropController(MainConfig mainConfig,
                                                        GameItemsHolder gameItemsHolder,
-                                                       TooltipManager tooltipManager) {
-        load(mainConfig, gameItemsHolder, tooltipManager);
+                                                       TooltipManager tooltipManager,
+                                                       GetPlayerSpritesUseCase getPlayerSpritesUseCase,
+                                                       GetPigSpritesUseCase getPigSpritesUseCase) {
+        load(mainConfig, gameItemsHolder, tooltipManager, getPlayerSpritesUseCase, getPigSpritesUseCase);
         DropController controller = data != null ? data.retrieveDropController() : new DropController();
         makeDataNullIfEmpty();
         controller.initDrops(gameItemsHolder);
@@ -52,8 +66,10 @@ public class GameModule {
     public static ContainerController provideFurnaceController(MainConfig mainConfig,
                                                                DropController dropController,
                                                                GameItemsHolder gameItemsHolder,
-                                                               TooltipManager tooltipManager) {
-        load(mainConfig, gameItemsHolder, tooltipManager);
+                                                               TooltipManager tooltipManager,
+                                                               GetPlayerSpritesUseCase getPlayerSpritesUseCase,
+                                                               GetPigSpritesUseCase getPigSpritesUseCase) {
+        load(mainConfig, gameItemsHolder, tooltipManager, getPlayerSpritesUseCase, getPigSpritesUseCase);
         ContainerController controller = data != null
                 ? data.retrieveContainerController()
                 : new ContainerController(dropController, gameItemsHolder);
@@ -66,11 +82,13 @@ public class GameModule {
     @GameScope
     public static MobsController provideMobsController(MainConfig mainConfig,
                                                        GameItemsHolder gameItemsHolder,
-                                                       TooltipManager tooltipManager) {
-        load(mainConfig, gameItemsHolder, tooltipManager);
+                                                       TooltipManager tooltipManager,
+                                                       GetPlayerSpritesUseCase getPlayerSpritesUseCase,
+                                                       GetPigSpritesUseCase getPigSpritesUseCase) {
+        load(mainConfig, gameItemsHolder, tooltipManager, getPlayerSpritesUseCase, getPigSpritesUseCase);
         MobsController controller = data != null
                 ? data.retrieveMobsController()
-                : new MobsController(gameItemsHolder, tooltipManager);
+                : new MobsController(gameItemsHolder, tooltipManager, getPlayerSpritesUseCase);
         makeDataNullIfEmpty();
         controller.getPlayer().initInventory(gameItemsHolder, tooltipManager);
         return controller;
@@ -83,8 +101,10 @@ public class GameModule {
                                              MobsController mobsController,
                                              GameItemsHolder gameItemsHolder,
                                              ContainerController containerController,
-                                             TooltipManager tooltipManager) {
-        load(mainConfig, gameItemsHolder, tooltipManager);
+                                             TooltipManager tooltipManager,
+                                             GetPlayerSpritesUseCase getPlayerSpritesUseCase,
+                                             GetPigSpritesUseCase getPigSpritesUseCase) {
+        load(mainConfig, gameItemsHolder, tooltipManager, getPlayerSpritesUseCase, getPigSpritesUseCase);
         Block[][] fm = data != null ? data.retrieveForeMap() : null;
         Block[][] bm = data != null ? data.retrieveBackMap() : null;
         makeDataNullIfEmpty();
index e063e09af073cb21899d389e6613f7fae6bdcf34..941bd43db9478ed316b03d17c627095586736839 100644 (file)
@@ -6,7 +6,6 @@ import com.badlogic.gdx.graphics.Color;
 import com.badlogic.gdx.graphics.GL20;
 import com.badlogic.gdx.math.Rectangle;
 import com.badlogic.gdx.math.Vector2;
-import com.badlogic.gdx.utils.ObjectMap;
 import com.badlogic.gdx.utils.TimeUtils;
 import org.jetbrains.annotations.Nullable;
 import ru.deadsoftware.cavedroid.MainConfig;
@@ -21,21 +20,19 @@ import ru.deadsoftware.cavedroid.game.input.mapper.KeyboardInputActionMapper;
 import ru.deadsoftware.cavedroid.game.input.mapper.MouseInputActionMapper;
 import ru.deadsoftware.cavedroid.game.mobs.MobsController;
 import ru.deadsoftware.cavedroid.game.mobs.player.Player;
-import ru.deadsoftware.cavedroid.game.objects.TouchButton;
 import ru.deadsoftware.cavedroid.game.render.IGameRenderer;
 import ru.deadsoftware.cavedroid.game.ui.TooltipManager;
 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager;
 import ru.deadsoftware.cavedroid.game.world.GameWorld;
-import ru.deadsoftware.cavedroid.misc.Assets;
 import ru.deadsoftware.cavedroid.misc.Renderer;
-import ru.deadsoftware.cavedroid.misc.utils.MeasureUnitsUtilsKt;
 import ru.deadsoftware.cavedroid.misc.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.utils.MeasureUnitsUtilsKt;
 
 import javax.inject.Inject;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 
 @GameScope
 public class GameRenderer extends Renderer {
@@ -43,7 +40,7 @@ public class GameRenderer extends Renderer {
     private static final float CAMERA_SPEED = 72f;
     private static final float MAX_CAM_DISTANCE_FROM_PLAYER = 64f;
     private static final float DRAG_THRESHOLD = 1f;
-    private static final TouchButton nullButton = new TouchButton(null, -1, true);
+    private static final TouchButton nullButton = new TouchButton(new Rectangle(), -1, true);
 
     private final MainConfig mMainConfig;
     private final MobsController mMobsController;
@@ -56,6 +53,8 @@ public class GameRenderer extends Renderer {
     private final Set<IKeyboardInputHandler> mKeyboardInputHandlers;
     private final GameWindowsManager mGameWindowsManager;
     private final TooltipManager mTooltipManager;
+    private final GetFontUseCase mGetFontUseCase;
+    private final GetTouchButtonsUseCase mGetTouchButtonsUseCase;
 
     private final TouchButton mouseLeftTouchButton, mouseRightTouchButton;
 
@@ -75,7 +74,9 @@ public class GameRenderer extends Renderer {
                  Set<IMouseInputHandler> mouseInputHandlers,
                  Set<IKeyboardInputHandler> keyboardInputHandlers,
                  GameWindowsManager gameWindowsManager,
-                 TooltipManager tooltipManager) {
+                 TooltipManager tooltipManager,
+                 GetFontUseCase getFontUseCase,
+                 GetTouchButtonsUseCase getTouchButtonsUseCase) {
         super(mainConfig.getWidth(), mainConfig.getHeight());
 
         mMainConfig = mainConfig;
@@ -95,6 +96,8 @@ public class GameRenderer extends Renderer {
         mKeyboardInputHandlers = keyboardInputHandlers;
         mGameWindowsManager = gameWindowsManager;
         mTooltipManager = tooltipManager;
+        mGetFontUseCase = getFontUseCase;
+        mGetTouchButtonsUseCase = getTouchButtonsUseCase;
 
         mouseLeftTouchButton = new TouchButton(new Rectangle(getWidth() / 2, 0f, getWidth() / 2, getHeight() / 2), Input.Buttons.LEFT, true);
         mouseRightTouchButton = new TouchButton(new Rectangle(getWidth() / 2, getHeight() / 2, getWidth() / 2, getHeight() / 2), Input.Buttons.RIGHT, true);
@@ -218,8 +221,10 @@ public class GameRenderer extends Renderer {
         mCursorMouseInputHandler.handle(action);
 
         if (!mTooltipManager.getCurrentMouseTooltip().isEmpty()) {
-            RenderingUtilsKt.drawString(spriter, mTooltipManager.getCurrentMouseTooltip(), screenX + 1, screenY + 1, Color.BLACK);
-            RenderingUtilsKt.drawString(spriter, mTooltipManager.getCurrentMouseTooltip(), screenX, screenY, Color.WHITE);
+            RenderingUtilsKt.drawString(spriter, mGetFontUseCase.invoke(),
+                    mTooltipManager.getCurrentMouseTooltip(), screenX + 1, screenY + 1, Color.BLACK);
+            RenderingUtilsKt.drawString(spriter, mGetFontUseCase.invoke(),
+                    mTooltipManager.getCurrentMouseTooltip(), screenX, screenY, Color.WHITE);
         }
     }
 
@@ -275,18 +280,18 @@ public class GameRenderer extends Renderer {
         if (mGameWindowsManager.getCurrentWindowType() != GameUiWindow.NONE) {
             return nullButton;
         }
-        for (ObjectMap.Entry<String, TouchButton> entry : Assets.guiMap) {
-            TouchButton button = entry.value;
-            if (button.getRect().contains(touchX, touchY)) {
+        for (Map.Entry<String, TouchButton> entry : mGetTouchButtonsUseCase.invoke().entrySet()) {
+            TouchButton button = entry.getValue();
+            if (button.getRectangle().contains(touchX, touchY)) {
                 return button;
             }
         }
 
-        if (mouseLeftTouchButton.getRect().contains(touchX, touchY)) {
+        if (mouseLeftTouchButton.getRectangle().contains(touchX, touchY)) {
             return mouseLeftTouchButton;
         }
 
-        if (mouseRightTouchButton.getRect().contains(touchX, touchY)) {
+        if (mouseRightTouchButton.getRectangle().contains(touchX, touchY)) {
             return mouseRightTouchButton;
         }
 
diff --git a/core/src/main/java/ru/deadsoftware/cavedroid/game/GameScope.java b/core/src/main/java/ru/deadsoftware/cavedroid/game/GameScope.java
deleted file mode 100644 (file)
index cfe440f..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-package ru.deadsoftware.cavedroid.game;
-
-import javax.inject.Scope;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-@Scope
-@Retention(RetentionPolicy.RUNTIME)
-public @interface GameScope {
-}
\ No newline at end of file
index 3ee37d37e626914cef7b41e55c151c42ec743c3b..e1c6514c306144e9d0d16dd39493840056e52301 100644 (file)
@@ -13,6 +13,7 @@ import ru.deadsoftware.cavedroid.game.model.dto.SaveDataDto;
 import ru.deadsoftware.cavedroid.game.model.item.InventoryItem;
 import ru.deadsoftware.cavedroid.game.world.GameWorld;
 import ru.deadsoftware.cavedroid.misc.Saveable;
+import ru.fredboy.cavedroid.domain.assets.usecase.GetPigSpritesUseCase;
 
 import java.util.Collections;
 import java.util.List;
@@ -350,7 +351,8 @@ public abstract class Mob extends Rectangle implements  Saveable {
     @Override
     public abstract SaveDataDto.MobSaveDataDto getSaveData();
 
-    public static Mob fromSaveData(SaveDataDto.MobSaveDataDto saveData) {
-        return MobSaveDataMapperKt.fromSaveData(saveData);
+    public static Mob fromSaveData(SaveDataDto.MobSaveDataDto saveData,
+                                   GetPigSpritesUseCase getPigSpritesUseCase) {
+        return MobSaveDataMapperKt.fromSaveData(saveData, getPigSpritesUseCase);
     }
 }
index 9aa503f917a1daec0fa0d92482d7bf377b06cb32..406b16543946b52e6a34a80cf9010c8dbf6f6045 100644 (file)
@@ -1,5 +1,6 @@
 package ru.deadsoftware.cavedroid.game.mobs.player;
 
+import com.badlogic.gdx.graphics.Color;
 import com.badlogic.gdx.graphics.g2d.Sprite;
 import com.badlogic.gdx.graphics.g2d.SpriteBatch;
 import com.badlogic.gdx.math.MathUtils;
@@ -20,6 +21,8 @@ import ru.deadsoftware.cavedroid.game.world.GameWorld;
 import ru.deadsoftware.cavedroid.misc.Assets;
 import ru.deadsoftware.cavedroid.misc.utils.SpriteOrigin;
 import ru.deadsoftware.cavedroid.misc.utils.SpriteUtilsKt;
+import ru.fredboy.cavedroid.domain.assets.model.MobSprite;
+import ru.fredboy.cavedroid.domain.assets.usecase.GetPlayerSpritesUseCase;
 
 public class Player extends Mob {
 
@@ -37,6 +40,8 @@ public class Player extends Mob {
     private float hitAnim = 0f;
     private float hitAnimDelta = ANIMATION_SPEED;
 
+    private MobSprite.Player playerSprite;
+
     public Inventory inventory;
 
     public int gameMode;
@@ -57,8 +62,9 @@ public class Player extends Mob {
         CURSOR
     }
 
-    public Player(GameItemsHolder gameItemsHolder, TooltipManager tooltipManager) {
+    public Player(GameItemsHolder gameItemsHolder, TooltipManager tooltipManager, MobSprite.Player playerSprite) {
         super(0, 0, 4, 30, randomDir(), Type.MOB, MAX_HEALTH);
+        this.playerSprite = playerSprite;
         inventory = new Inventory(INVENTORY_SIZE, HOTBAR_SIZE, gameItemsHolder, tooltipManager);
         swim = false;
     }
@@ -315,7 +321,7 @@ public class Player extends Mob {
             sprite.setSize(Drop.DROP_SIZE, Drop.DROP_SIZE);
         }
 
-        final float handLength = Assets.playerSprite[0][2].getHeight();
+        final float handLength = playerSprite.getHand().getHeight();
 
         final SpriteOrigin spriteOrigin = item.getParams().getInHandSpriteOrigin();
         final int handMultiplier = -getDirection().getBasis();
@@ -398,12 +404,19 @@ public class Player extends Mob {
 
     @Override
     public void draw(SpriteBatch spriteBatch, float x, float y, float delta) {
-        final Sprite backHand = Assets.playerSprite[1][2];
-        final Sprite backLeg = Assets.playerSprite[1][3];
-        final Sprite frontLeg = Assets.playerSprite[0][3];
-        final Sprite head = Assets.playerSprite[getDirection().getIndex()][0];
-        final Sprite body = Assets.playerSprite[getDirection().getIndex()][1];
-        final Sprite frontHand = Assets.playerSprite[0][2];
+        final Sprite hand = playerSprite.getHand();
+        final Sprite leg = playerSprite.getLeg();
+        final Sprite head = playerSprite.getHead();
+        final Sprite body = playerSprite.getBody();
+
+        hand.setFlip(looksRight(), hand.isFlipY());
+        leg.setFlip(looksRight(), leg.isFlipY());
+        head.setFlip(looksRight(), head.isFlipY());
+        body.setFlip(looksRight(), body.isFlipY());
+
+        hand.setOrigin(hand.getWidth() / 2, 0);
+        leg.setOrigin(leg.getWidth() / 2, 0);
+        head.setOrigin(head.getWidth() / 2, head.getHeight());
 
         float backHandAnim, frontHandAnim;
 
@@ -417,29 +430,33 @@ public class Player extends Mob {
             frontHandAnim = -rightHandAnim;
         }
 
-        backHand.setColor(getTintColor());
-        backLeg.setColor(getTintColor());
-        frontLeg.setColor(getTintColor());
-        head.setColor(getTintColor());
-        body.setColor(getTintColor());
-        frontHand.setColor(getTintColor());
+        final Color backgroundTintColor = getTintColor().cpy().sub(new Color(0xAAAAAA00));
 
-        SpriteUtilsKt.drawSprite(spriteBatch, backHand, x + 2, y + 8, backHandAnim);
+        hand.setColor(backgroundTintColor);
+        SpriteUtilsKt.drawSprite(spriteBatch, hand, x + 2, y + 8, backHandAnim);
 
         if (looksLeft()) {
             drawItem(spriteBatch, x, y, -backHandAnim);
         }
 
-        SpriteUtilsKt.drawSprite(spriteBatch, backLeg, x + 2, y + 20, mAnim);
-        SpriteUtilsKt.drawSprite(spriteBatch, frontLeg, x + 2, y + 20, -mAnim);
+        leg.setColor(backgroundTintColor);
+        SpriteUtilsKt.drawSprite(spriteBatch, leg, x + 2, y + 20, mAnim);
+
+        leg.setColor(getTintColor());
+        SpriteUtilsKt.drawSprite(spriteBatch, leg, x + 2, y + 20, -mAnim);
+
+        head.setColor(getTintColor());
         SpriteUtilsKt.drawSprite(spriteBatch, head, x, y, headRotation);
+
+        body.setColor(getTintColor());
         SpriteUtilsKt.drawSprite(spriteBatch, body, x + 2, y + 8);
 
         if (looksRight()) {
             drawItem(spriteBatch, x, y, frontHandAnim);
         }
 
-        SpriteUtilsKt.drawSprite(spriteBatch, frontHand, x + 2, y + 8, frontHandAnim);
+        hand.setColor(getTintColor());
+        SpriteUtilsKt.drawSprite(spriteBatch, hand, x + 2, y + 8, frontHandAnim);
     }
 
     @NotNull
@@ -482,11 +499,12 @@ public class Player extends Mob {
     public static Player fromSaveData(
             SaveDataDto.PlayerSaveData saveData,
             GameItemsHolder gameItemsHolder,
-            TooltipManager tooltipManager
+            TooltipManager tooltipManager,
+            GetPlayerSpritesUseCase getPlayerSpritesUseCase
     ) {
         saveData.verifyVersion(SAVE_DATA_VERSION);
 
-        Player player = new Player(gameItemsHolder, tooltipManager);
+        Player player = new Player(gameItemsHolder, tooltipManager, getPlayerSpritesUseCase.invoke());
 
         player.mType = saveData.getType();
         player.mAnimDelta = saveData.getAnimDelta();
diff --git a/core/src/main/java/ru/deadsoftware/cavedroid/game/objects/TouchButton.java b/core/src/main/java/ru/deadsoftware/cavedroid/game/objects/TouchButton.java
deleted file mode 100644 (file)
index c33fcb5..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-package ru.deadsoftware.cavedroid.game.objects;
-
-import com.badlogic.gdx.math.Rectangle;
-
-public class TouchButton {
-
-    private final Rectangle rect;
-    private final int code;
-    private final boolean mouse;
-
-    public TouchButton(Rectangle rect, int code, boolean mouse) {
-        this.rect = rect;
-        this.code = code;
-        this.mouse = mouse;
-    }
-
-    public Rectangle getRect() {
-        return rect;
-    }
-
-    public int getCode() {
-        return code;
-    }
-
-    public boolean isMouse() {
-        return mouse;
-    }
-
-}
index b53e0a628e23f4e466bc5ea08492aecbe1c243eb..b6b9ff8690c96589ac4d46ce82d774531f0f3215 100644 (file)
@@ -1,21 +1,19 @@
 package ru.deadsoftware.cavedroid.game.world;
 
-import com.badlogic.gdx.math.MathUtils;
 import kotlin.Pair;
 import org.jetbrains.annotations.Nullable;
 import ru.deadsoftware.cavedroid.game.GameItemsHolder;
 import ru.deadsoftware.cavedroid.game.GameScope;
 import ru.deadsoftware.cavedroid.game.mobs.MobsController;
-import ru.deadsoftware.cavedroid.game.mobs.Pig;
 import ru.deadsoftware.cavedroid.game.model.block.Block;
 import ru.deadsoftware.cavedroid.game.model.item.InventoryItem;
 import ru.deadsoftware.cavedroid.game.model.item.Item;
 import ru.deadsoftware.cavedroid.game.model.world.generator.WorldGeneratorConfig;
 import ru.deadsoftware.cavedroid.game.objects.container.Container;
-import ru.deadsoftware.cavedroid.game.objects.drop.DropController;
-import ru.deadsoftware.cavedroid.game.objects.container.Furnace;
 import ru.deadsoftware.cavedroid.game.objects.container.ContainerController;
-import ru.deadsoftware.cavedroid.misc.utils.MeasureUnitsUtilsKt;
+import ru.deadsoftware.cavedroid.game.objects.container.Furnace;
+import ru.deadsoftware.cavedroid.game.objects.drop.DropController;
+import ru.fredboy.cavedroid.utils.MeasureUnitsUtilsKt;
 
 import javax.inject.Inject;
 
@@ -227,18 +225,18 @@ public class GameWorld {
     }
 
     private void spawnInitialMobs() {
-        for (int x = 0; x < getWidth(); x++) {
-            int y = 0;
-            while (y < getWorldConfig().getSeaLevel()) {
-                if (getForeMap(x, y) == mGameItemsHolder.getBlock("grass")) {
-                    if (MathUtils.randomBoolean(.125f)) {
-                        mMobsController.addMob(new Pig(MeasureUnitsUtilsKt.getPx(x), MeasureUnitsUtilsKt.getPx(y)));
-                    }
-                    break;
-                }
-                y++;
-            }
-        }
+//        for (int x = 0; x < getWidth(); x++) {
+//            int y = 0;
+//            while (y < getWorldConfig().getSeaLevel()) {
+//                if (getForeMap(x, y) == mGameItemsHolder.getBlock("grass")) {
+//                    if (MathUtils.randomBoolean(.125f)) {
+//                        mMobsController.addMob(new Pig(MeasureUnitsUtilsKt.getPx(x), MeasureUnitsUtilsKt.getPx(y)));
+//                    }
+//                    break;
+//                }
+//                y++;
+//            }
+//        }
     }
 
     public void destroyForeMap(int x, int y) {
index aa3888a5b0c26181b38f1102694b8344e6ba7b9b..947392caca2b0e5a04a28841a156902c0270ba46 100644 (file)
@@ -1,12 +1,18 @@
 package ru.deadsoftware.cavedroid.menu;
 
 import com.badlogic.gdx.Gdx;
+import com.badlogic.gdx.graphics.Color;
 import com.badlogic.gdx.utils.ObjectMap;
 import ru.deadsoftware.cavedroid.CaveGame;
 import ru.deadsoftware.cavedroid.MainConfig;
 import ru.deadsoftware.cavedroid.menu.objects.Button;
 import ru.deadsoftware.cavedroid.menu.submenus.*;
 import ru.deadsoftware.cavedroid.misc.Renderer;
+import ru.deadsoftware.cavedroid.misc.utils.RenderingUtilsKt;
+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 javax.inject.Inject;
 
@@ -63,16 +69,30 @@ public class MenuProc extends Renderer {
     private final MenuNewGame mMenuNewGame;
     private final MenuOptions mMenuOptions;
 
+    private final GetFontUseCase mGetFontUseCase;
+    private final GetStringWidthUseCase mGetStringWidthUseCase;
+    private final GetStringHeightUseCase mGetStringHeightUseCase;
+
+    private final GetTextureRegionByNameUseCase mGetTextureRegionByNameUseCase;
+
     private Menu mCurrentMenu;
 
     @Inject
     public MenuProc(
             MainConfig mainConfig,
-            MenusFactory menusFactory
+            MenusFactory menusFactory,
+            GetFontUseCase getFontUseCase,
+            GetStringWidthUseCase getStringWidthUseCase,
+            GetStringHeightUseCase getStringHeightUseCase,
+            GetTextureRegionByNameUseCase getTextureRegionByNameUseCase
     ) {
         super(mainConfig.getWidth(), mainConfig.getHeight());
 
         mMainConfig = mainConfig;
+        mGetFontUseCase = getFontUseCase;
+        mGetStringWidthUseCase = getStringWidthUseCase;
+        mGetStringHeightUseCase = getStringHeightUseCase;
+        mGetTextureRegionByNameUseCase = getTextureRegionByNameUseCase;
 
         Input menuInput = new Input();
 
@@ -104,14 +124,13 @@ public class MenuProc extends Renderer {
     }
 
     private void drawButton(Button button) {
-        spriter.draw(textureRegions.get("button_" + button.getType()), button.getX(), button.getY());
-        setFontColor(255, 255, 255);
+        spriter.draw(mGetTextureRegionByNameUseCase.get("button_" + button.getType()), button.getX(), button.getY());
 
         String label = processVariables(button.getLabel());
 
-        drawString(label,
-                (button.getX() + button.getWidth() / 2) - (float) getStringWidth(label) / 2,
-                (button.getY() + button.getHeight() / 2) - (float) getStringHeight(label) / 2);
+        RenderingUtilsKt.drawString(spriter, mGetFontUseCase.invoke(), label,
+                (button.getX() + button.getWidth() / 2) - mGetStringWidthUseCase.invoke(label) / 2,
+                (button.getY() + button.getHeight() / 2) - mGetStringHeightUseCase.invoke(label) / 2);
     }
 
     @Override
@@ -134,8 +153,8 @@ public class MenuProc extends Renderer {
     public void render(float delta) {
         spriter.begin();
         mCurrentMenu.draw(spriter);
-        drawString("CaveDroid " + CaveGame.VERSION, 0,
-                getHeight() - getStringHeight("CaveDroid " + CaveGame.VERSION) * 1.5f);
+        RenderingUtilsKt.drawString(spriter, mGetFontUseCase.invoke(), "CaveDroid " + CaveGame.VERSION, 0,
+                getHeight() - mGetStringHeightUseCase.invoke("CaveDroid " + CaveGame.VERSION) * 1.5f);
         spriter.end();
     }
 
index 7e793b7b1db1d77a21a85dbb2faf30e4437974bd..575eb7af5e14d7e6c031d5589bab2194993fdbe6 100644 (file)
@@ -16,6 +16,7 @@ import ru.deadsoftware.cavedroid.menu.objects.ButtonEventListener;
 import ru.deadsoftware.cavedroid.menu.objects.ButtonRenderer;
 import ru.deadsoftware.cavedroid.misc.Assets;
 import ru.deadsoftware.cavedroid.misc.utils.AssetLoader;
+import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase;
 
 import java.util.HashMap;
 
@@ -25,6 +26,8 @@ public abstract class Menu {
     protected final MenuProc.Input mMenuInput;
     protected final AssetLoader mAssetLoader;
 
+    protected final GetTextureRegionByNameUseCase mGetTextureRegionByNameUseCase;
+
     private final ButtonRenderer mButtonRenderer;
 
     private final float mWidth;
@@ -45,13 +48,15 @@ public abstract class Menu {
          ButtonRenderer buttonRenderer,
          MainConfig mainConfig,
          MenuProc.Input menuInput,
-         AssetLoader assetLoader) {
+         AssetLoader assetLoader,
+         GetTextureRegionByNameUseCase getTextureRegionByNameUseCase) {
         mWidth = width;
         mHeight = height;
         mButtonRenderer = buttonRenderer;
         mMainConfig = mainConfig;
         mMenuInput = menuInput;
         mAssetLoader = assetLoader;
+        mGetTextureRegionByNameUseCase = getTextureRegionByNameUseCase;
         initButtons();
     }
 
@@ -109,8 +114,8 @@ public abstract class Menu {
      * @param spriter {@link SpriteBatch} that will draw it. Should be already started.
      */
     public void draw(SpriteBatch spriter) {
-        TextureRegion background = Assets.textureRegions.get("background");
-        TextureRegion gamelogo = Assets.textureRegions.get("gamelogo");
+        TextureRegion background = mGetTextureRegionByNameUseCase.get("background");
+        TextureRegion gamelogo = mGetTextureRegionByNameUseCase.get("gamelogo");
 
         for (int x = 0; x <= mWidth / 16; x++) {
             for (int y = 0; y <= mHeight / 16; y++) {
index 29aeb8fb272b53f58101634c15a23e38573b48d6..d51f328c9ea94410205710d18ebad8a443a79d2d 100644 (file)
@@ -7,6 +7,7 @@ import ru.deadsoftware.cavedroid.menu.objects.Button;
 import ru.deadsoftware.cavedroid.menu.objects.ButtonEventListener;
 import ru.deadsoftware.cavedroid.menu.objects.ButtonRenderer;
 import ru.deadsoftware.cavedroid.misc.utils.AssetLoader;
+import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase;
 
 import javax.inject.Inject;
 import java.util.HashMap;
@@ -18,8 +19,9 @@ public class MenuMain extends Menu {
                     ButtonRenderer buttonRenderer,
                     MainConfig mainConfig,
                     MenuProc.Input menuInput,
-                    AssetLoader assetLoader) {
-        super(width, height, buttonRenderer, mainConfig, menuInput, assetLoader);
+                    AssetLoader assetLoader,
+                    GetTextureRegionByNameUseCase getTextureRegionByNameUseCase) {
+        super(width, height, buttonRenderer, mainConfig, menuInput, assetLoader, getTextureRegionByNameUseCase);
     }
 
     @Override
@@ -40,21 +42,4 @@ public class MenuMain extends Menu {
         }
     }
 
-    public static class Factory {
-
-        private final MainConfig mMainConfig;
-        private final AssetLoader mAssetLoader;
-
-        @Inject
-        public Factory(MainConfig mainConfig, AssetLoader assetLoader) {
-            mMainConfig = mainConfig;
-            mAssetLoader = assetLoader;
-        }
-
-        public MenuMain get(float width, float height, ButtonRenderer buttonRenderer, MenuProc.Input menuInput) {
-            return new MenuMain(width, height, buttonRenderer, mMainConfig, menuInput, mAssetLoader);
-        }
-
-    }
-
 }
index 33985ff8206d395939c21c54d474e0017e26c5a3..3bb4eafe8a51558aac8fe9044dd3cf39e993e441 100644 (file)
@@ -5,6 +5,7 @@ import ru.deadsoftware.cavedroid.menu.MenuProc;
 import ru.deadsoftware.cavedroid.menu.objects.ButtonEventListener;
 import ru.deadsoftware.cavedroid.menu.objects.ButtonRenderer;
 import ru.deadsoftware.cavedroid.misc.utils.AssetLoader;
+import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase;
 
 import javax.inject.Inject;
 import java.util.HashMap;
@@ -16,8 +17,9 @@ public class MenuNewGame extends Menu {
                        ButtonRenderer buttonRenderer,
                        MainConfig mainConfig,
                        MenuProc.Input menuInput,
-                       AssetLoader assetLoader) {
-        super(width, height, buttonRenderer, mainConfig, menuInput, assetLoader);
+                       AssetLoader assetLoader,
+                       GetTextureRegionByNameUseCase getTextureRegionByNameUseCase) {
+        super(width, height, buttonRenderer, mainConfig, menuInput, assetLoader, getTextureRegionByNameUseCase);
     }
 
     @Override
@@ -34,20 +36,4 @@ public class MenuNewGame extends Menu {
         loadButtonsFromJson(mAssetLoader.getAssetHandle("json/menu_new_game_buttons.json"));
     }
 
-    public static class Factory {
-
-        private final MainConfig mMainConfig;
-        private final AssetLoader mAssetLoader;
-
-        @Inject
-        public Factory(MainConfig mainConfig, AssetLoader assetLoader) {
-            mMainConfig = mainConfig;
-            mAssetLoader = assetLoader;
-        }
-
-        public MenuNewGame get(float width, float height, ButtonRenderer buttonRenderer, MenuProc.Input menuInput) {
-            return new MenuNewGame(width, height, buttonRenderer, mMainConfig, menuInput, mAssetLoader);
-        }
-
-    }
 }
index 893414ba61c3aa3c5ee1700cbcec121aeef457fc..063fe3049e7129441ae419bb5c8a70bf98da8abb 100644 (file)
 package ru.deadsoftware.cavedroid.misc;
 
-import com.badlogic.gdx.Input;
-import com.badlogic.gdx.files.FileHandle;
-import com.badlogic.gdx.graphics.Texture;
-import com.badlogic.gdx.graphics.g2d.BitmapFont;
-import com.badlogic.gdx.graphics.g2d.GlyphLayout;
-import com.badlogic.gdx.graphics.g2d.Sprite;
-import com.badlogic.gdx.graphics.g2d.TextureRegion;
-import com.badlogic.gdx.math.Rectangle;
-import com.badlogic.gdx.utils.ArrayMap;
 import com.badlogic.gdx.utils.JsonReader;
 import com.badlogic.gdx.utils.JsonValue;
-import ru.deadsoftware.cavedroid.game.objects.TouchButton;
-import ru.deadsoftware.cavedroid.misc.utils.AssetLoader;
 
-import java.io.File;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
 
 public class Assets {
 
-    private static final int BLOCK_DAMAGE_STAGES = 10;
 
     public static final JsonReader jsonReader = new JsonReader();
 
-    private static final List<Texture> loadedTextures = new LinkedList<>();
-
-    public static final Sprite[][] playerSprite = new Sprite[2][4];
-    public static final Sprite[][] pigSprite = new Sprite[2][2];
-
-    public static final Sprite[] blockDamageSprites = new Sprite[10];
-
-    public static final HashMap<String, TextureRegion> textureRegions = new HashMap<>();
-    public static final ArrayMap<String, TouchButton> guiMap = new ArrayMap<>();
-    private static final GlyphLayout glyphLayout = new GlyphLayout();
-    public static BitmapFont minecraftFont;
-
-    public static Map<String, Texture> blockTextures = new HashMap<>();
-    public static Map<String, Texture> itemTextures = new HashMap<>();
-
-    public static Sprite joyBackground;
-    public static Sprite joyStick;
-
-    public static Sprite furnaceBurn;
-    public static Sprite furnaceProgress;
-
-    public static void dispose() {
-        minecraftFont.dispose();
-        for (Texture texture : loadedTextures) {
-            texture.dispose();
-        }
-        loadedTextures.clear();
-    }
-    
-    private static Texture loadTexture(FileHandle fileHandle) {
-        Texture texture = new Texture(fileHandle);
-        loadedTextures.add(texture);
-        return texture;
-    }
-
-    private static TextureRegion flippedRegion(Texture texture, int x, int y, int width, int height) {
-        return new TextureRegion(texture, x, y + height, width, -height);
-    }
-
-    private static Sprite flippedSprite(Texture texture) {
-        Sprite sprite = new Sprite(texture);
-        sprite.flip(false, true);
-        return sprite;
-    }
-
-    private static Sprite flippedSprite(TextureRegion texture) {
-        Sprite sprite = new Sprite(texture);
-        sprite.flip(false, true);
-        return sprite;
-    }
-
-    private static void loadMob(AssetLoader assetLoader, Sprite[][] sprite, String mob) {
-        for (int i = 0; i < sprite.length; i++) {
-            for (int j = 0; j < sprite[i].length; j++) {
-                sprite[i][j] = flippedSprite(loadTexture(
-                        assetLoader.getAssetHandle("pp/mobs/" + mob + "/" + i + "_" + j + ".png")));
-                sprite[i][j].setOrigin(sprite[i][j].getWidth() / 2, 0);
-            }
-        }
-    }
-
-    private static void loadBlockDamage(AssetLoader assetLoader) {
-        final Texture blockDamageTexture = loadTexture(assetLoader.getAssetHandle("pp/break.png"));
-        for (int i = 0; i < BLOCK_DAMAGE_STAGES; i++) {
-            blockDamageSprites[i] = new Sprite(flippedRegion(blockDamageTexture, i * 16, 0, 16, 16));
-        }
-    }
-
-    private static void setPlayerHeadOrigin() {
-        for (Sprite[] sprites : playerSprite) {
-            sprites[0].setOrigin(sprites[0].getWidth() / 2, sprites[0].getHeight());
-        }
-    }
-
-    /**
-     * Loads texture names and sizes from <b>json/texture_regions.json</b>, cuts them to TextureRegions
-     * and puts to {@link #textureRegions} HashMap
-     */
-    private static void loadJSON(AssetLoader assetLoader) {
-        JsonValue json = jsonReader.parse(assetLoader.getAssetHandle("json/texture_regions.json"));
-        for (JsonValue file = json.child(); file != null; file = file.next()) {
-            Texture texture = loadTexture(assetLoader.getAssetHandle(file.name() + ".png"));
-            final String[] pathSegments = file.name().split("/");
-            final String name = pathSegments[pathSegments.length - 1];
-            if (file.size == 0) {
-                textureRegions.put(name, flippedRegion(texture, 0, 0, texture.getWidth(), texture.getHeight()));
-            } else {
-                for (JsonValue key = file.child(); key != null; key = key.next()) {
-                    int x = getIntFromJson(key, "x", 0);
-                    int y = getIntFromJson(key, "y", 0);
-                    int w = getIntFromJson(key, "w", texture.getWidth());
-                    int h = getIntFromJson(key, "h", texture.getHeight());
-                    textureRegions.put(key.name(), flippedRegion(texture, x, y, w, h));
-                }
-            }
-        }
-    }
-
-    private static int getMouseKey(String name) {
-        switch (name) {
-            case "Left":
-                return Input.Buttons.LEFT;
-            case "Right":
-                return Input.Buttons.RIGHT;
-            case "Middle":
-                return Input.Buttons.MIDDLE;
-            case "Back":
-                return Input.Buttons.BACK;
-            case "Forward":
-                return Input.Buttons.FORWARD;
-            default:
-                return -1;
-        }
-    }
-
-    private static void loadTouchButtonsFromJSON(AssetLoader assetLoader) {
-        JsonValue json = Assets.jsonReader.parse(assetLoader.getAssetHandle("json/touch_buttons.json"));
-        for (JsonValue key = json.child(); key != null; key = key.next()) {
-            float x = key.getFloat("x");
-            float y = key.getFloat("y");
-            float w = key.getFloat("w");
-            float h = key.getFloat("h");
-            boolean mouse = Assets.getBooleanFromJson(key, "mouse", false);
-            String name = key.getString("key");
-            int code = mouse ? getMouseKey(name) : Input.Keys.valueOf(name);
-            if (x < 0) {
-                x = assetLoader.getGameRendererWidth() + x;
-            }
-            if (y < 0) {
-                y = assetLoader.getGameRendererHeight() + y;
-            }
-            Assets.guiMap.put(key.name(), new TouchButton(new Rectangle(x, y, w, h), code, mouse));
-        }
-
-    }
-
-    private static Texture resolveTexture(AssetLoader assetLoader, String textureName, String lookUpPath, Map<String, Texture> cache) {
-        if (cache.containsKey(textureName)) {
-            return cache.get(textureName);
-        }
-
-        final Texture texture = loadTexture(assetLoader.getAssetHandle(lookUpPath + File.separator + textureName + ".png"));
-        cache.put(textureName, texture);
-
-        return texture;
-    }
-
-    public static Texture resolveItemTexture(AssetLoader assetLoader, String textureName) {
-        return resolveTexture(assetLoader, textureName, "pp/textures/items", itemTextures);
-    }
-
-    public static Texture resolveBlockTexture(AssetLoader assetLoader, String textureName) {
-        return resolveTexture(assetLoader, textureName, "pp/textures/blocks", blockTextures);
-    }
-
-    private static void loadAllPngsFromDirInto(FileHandle dir, Map<String, Texture> loadInto) {
-        for (FileHandle handle : dir.list((d, name) -> name.endsWith(".png"))) {
-            loadInto.put(handle.nameWithoutExtension(), loadTexture(handle));
-        }
-    }
-
-    private static void loadItems(AssetLoader assetLoader) {
-        final FileHandle itemsDir = assetLoader.getAssetHandle("pp/textures/items");
-        loadAllPngsFromDirInto(itemsDir, itemTextures);
-    }
-
-    private static void loadBlocks(AssetLoader assetLoader) {
-        final FileHandle blocksDir = assetLoader.getAssetHandle("pp/textures/blocks");
-        loadAllPngsFromDirInto(blocksDir, blockTextures);
-    }
-
-    private static void loadJoystick(AssetLoader assetLoader) {
-        joyStick = new Sprite(loadTexture(assetLoader.getAssetHandle("joy_stick.png")));
-        joyBackground = new Sprite(loadTexture(assetLoader.getAssetHandle("joy_background.png")));
-    }
-
-    private static void loadFurnace(AssetLoader assetLoader) {
-        furnaceBurn = new Sprite(textureRegions.get("furnace_burn"));
-        furnaceProgress = new Sprite(textureRegions.get("furnace_progress"));
-    }
-
-    public static void load(final AssetLoader assetLoader) {
-        loadMob(assetLoader, playerSprite, "char");
-        loadMob(assetLoader, pigSprite, "pig");
-        loadBlockDamage(assetLoader);
-        loadJSON(assetLoader);
-        loadBlocks(assetLoader);
-        loadItems(assetLoader);
-        loadTouchButtonsFromJSON(assetLoader);
-        loadJoystick(assetLoader);
-        loadFurnace(assetLoader);
-        setPlayerHeadOrigin();
-        minecraftFont = new BitmapFont(assetLoader.getAssetHandle("font.fnt"), true);
-        minecraftFont.getData().setScale(.375f);
-        minecraftFont.setUseIntegerPositions(false);
-    }
-
-    /**
-     * @param s string whose width you want to know
-     * @return A width of string written in {@link #minecraftFont} in pixels
-     */
-    public static int getStringWidth(String s) {
-        glyphLayout.setText(minecraftFont, s);
-        return (int) glyphLayout.width;
-    }
-
-    /**
-     * @param s string whose height you want to know
-     * @return A height of string written in {@link #minecraftFont} in pixels
-     */
-    public static int getStringHeight(String s) {
-        glyphLayout.setText(minecraftFont, s);
-        return (int) glyphLayout.height;
-    }
 
     public static int getIntFromJson(JsonValue json, String name, int defaultValue) {
         return json.has(name) ? json.getInt(name) : defaultValue;
     }
 
-    public static float getFloatFromJson(JsonValue json, String name, float defaultValue) {
-        return json.has(name) ? json.getFloat(name) : defaultValue;
-    }
 
     public static String getStringFromJson(JsonValue json, String name, String defaultValue) {
         return json.has(name) ? json.getString(name) : defaultValue;
index c2577d36e4940a996468b3dbb382369b19eb000d..4c9bdadc4a539a4f101635010fe88b214f027ce9 100644 (file)
@@ -56,24 +56,6 @@ public abstract class Renderer implements InputProcessor {
         return mCameraViewport;
     }
 
-    public void setFontScale(float scale) {
-        Assets.minecraftFont.getData().setScale(scale);
-    }
-
-    protected void setFontColor(int r, int g, int b) {
-        Assets.minecraftFont.setColor(r / 255f, g / 255f, b / 255f, 1f);
-    }
-
-    protected void drawString(String str, float x, float y) {
-        Assets.minecraftFont.draw(spriter, str, x, y);
-    }
-
-    protected void drawString(String str) {
-        Assets.minecraftFont.draw(spriter, str,
-                getWidth() / 2 - (float) Assets.getStringWidth(str) / 2,
-                getHeight() / 2 - (float) Assets.getStringHeight(str) / 2);
-    }
-
     public abstract void render(float delta);
 
     @Override
index 225dd3aa74b74831e79190ff4e73b022fa35f57d..0ba7763cb12662fe601b5ca29c91b1555a9cca98 100644 (file)
@@ -69,13 +69,13 @@ class CaveGame(
         Gdx.files.absolute(gameDataDirectoryPath).mkdirs()
         initMainConfig()
 
-        Assets.load(assetLoader)
+        mainComponent.initializeAssetsUseCase()
         setScreen(mainComponent.menuScreen)
     }
 
     override fun dispose() {
         screen?.dispose()
-        Assets.dispose()
+        mainComponent.disposeAssetsUseCase()
     }
 
 
index b2a77ee3acf1c393608c6b13ca9fafda2f2e403c..09474ecded6fe71bae2e4cca0117979f74c3aed3 100644 (file)
@@ -5,10 +5,18 @@ import ru.deadsoftware.cavedroid.game.GameScreen
 import ru.deadsoftware.cavedroid.menu.MenuScreen
 import ru.deadsoftware.cavedroid.misc.utils.AssetLoader
 import ru.deadsoftware.cavedroid.prefs.PreferencesStore
+import ru.fredboy.cavedroid.data.assets.di.DataAssetsModule
+import ru.fredboy.cavedroid.domain.assets.GameAssetsHolder
+import ru.fredboy.cavedroid.domain.assets.repository.*
+import ru.fredboy.cavedroid.domain.assets.usecase.DisposeAssetsUseCase
+import ru.fredboy.cavedroid.domain.assets.usecase.InitializeAssetsUseCase
 import javax.inject.Singleton
 
 @Singleton
-@Component(dependencies = [CaveGame::class, PreferencesStore::class])
+@Component(
+    dependencies = [CaveGame::class, PreferencesStore::class],
+    modules = [DataAssetsModule::class]
+)
 interface MainComponent {
 
     val gameScreen: GameScreen
@@ -19,4 +27,22 @@ interface MainComponent {
 
     val assetLoader: AssetLoader
 
+    val initializeAssetsUseCase: InitializeAssetsUseCase
+
+    val disposeAssetsUseCase: DisposeAssetsUseCase
+
+    val blockAssetsRepository: BlockAssetsRepository
+
+    val blockDamageAssetsRepository: BlockDamageAssetsRepository
+
+    val fontAssetsRepository: FontAssetsRepository
+
+    val mobAssetsRepository: MobAssetsRepository
+
+    val itemAssetsRepository: ItemsAssetsRepository
+
+    val textureRegionsAssetsRepository: TextureRegionsAssetsRepository
+
+    val touchButtonsAssetsRepository: TouchButtonsAssetsRepository
+
 }
\ No newline at end of file
diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/GameScope.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/GameScope.kt
new file mode 100644 (file)
index 0000000..b0e4457
--- /dev/null
@@ -0,0 +1,7 @@
+package ru.deadsoftware.cavedroid.game
+
+import javax.inject.Scope
+
+@Scope
+@Retention(AnnotationRetention.RUNTIME)
+annotation class GameScope
index 53f56e3ff682181133244d3eb0f3098e782b4687..2b3dd303156a27a63e5e27a751682ba66805fea5 100644 (file)
@@ -5,7 +5,7 @@ import ru.deadsoftware.cavedroid.game.mobs.FallingBlock
 import ru.deadsoftware.cavedroid.game.mobs.MobsController
 import ru.deadsoftware.cavedroid.game.world.GameWorld
 import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindUpdateBlockAction
-import ru.deadsoftware.cavedroid.misc.utils.px
+import ru.fredboy.cavedroid.utils.px
 import javax.inject.Inject
 
 @GameScope
index 5eddc5e90a609507e155ae82010b5abcdaaddff0..76088aea6a828242852c7eabe6e07a050c128433 100644 (file)
@@ -6,7 +6,8 @@ import ru.deadsoftware.cavedroid.game.mobs.MobsController
 import ru.deadsoftware.cavedroid.game.mobs.Pig
 import ru.deadsoftware.cavedroid.game.model.item.Item
 import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindUseItemAction
-import ru.deadsoftware.cavedroid.misc.utils.px
+import ru.fredboy.cavedroid.domain.assets.usecase.GetPigSpritesUseCase
+import ru.fredboy.cavedroid.utils.px
 import javax.inject.Inject
 
 @GameScope
@@ -14,10 +15,11 @@ import javax.inject.Inject
 class UsePigSpawnEggAction @Inject constructor(
     private val mobsController: MobsController,
     private val gameItemsHolder: GameItemsHolder,
+    private val getPigSprites: GetPigSpritesUseCase,
 ) : IUseItemAction {
 
     override fun perform(item: Item.Usable, x: Int, y: Int) {
-        Pig(mobsController.player.cursorX.px, mobsController.player.cursorY.px)
+        Pig(getPigSprites(), mobsController.player.cursorX.px, mobsController.player.cursorY.px)
             .apply {
                 attachToController(mobsController)
             }
index 425822a7d3945c9d6e3aee8ea28b7d924d05ced8..ed62a3dd93901912e0f10664674f88f406f2e5da 100644 (file)
@@ -1,16 +1,15 @@
 package ru.deadsoftware.cavedroid.game.input
 
 import com.badlogic.gdx.graphics.g2d.TextureRegion
-import com.badlogic.gdx.math.Rectangle
 import ru.deadsoftware.cavedroid.game.input.action.MouseInputAction
-import ru.deadsoftware.cavedroid.misc.Assets
+import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase
 
-fun isInsideHotbar(action: MouseInputAction): Boolean {
-    val hotbar = requireNotNull(Assets.textureRegions["hotbar"])
+fun MouseInputAction.isInsideHotbar(getTextureRegionByNameUseCase: GetTextureRegionByNameUseCase): Boolean {
+    val hotbar = requireNotNull(getTextureRegionByNameUseCase["hotbar"])
 
-    return action.screenY <= hotbar.regionHeight &&
-            action.screenX >= action.cameraViewport.width / 2 - hotbar.regionWidth / 2 &&
-            action.screenX <= action.cameraViewport.width / 2 + hotbar.regionWidth / 2
+    return this.screenY <= hotbar.regionHeight &&
+            this.screenX >= this.cameraViewport.width / 2 - hotbar.regionWidth / 2 &&
+            this.screenX <= this.cameraViewport.width / 2 + hotbar.regionWidth / 2
 }
 
 fun isInsideWindow(action: MouseInputAction, windowTexture: TextureRegion): Boolean {
index 52333ebcef42c503e0a1c387234c9532a95a8caf..dc242a89ec058d4959e61c48a2d93ad056f8f985 100644 (file)
@@ -10,6 +10,7 @@ import ru.deadsoftware.cavedroid.game.input.isInsideHotbar
 import ru.deadsoftware.cavedroid.game.mobs.MobsController
 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager
 import ru.deadsoftware.cavedroid.game.world.GameWorld
+import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase
 import javax.inject.Inject
 
 @GameScope
@@ -17,12 +18,13 @@ import javax.inject.Inject
 class AttackMouseInputHandler @Inject constructor(
     private val mobsController: MobsController,
     private val gameWorld: GameWorld,
-    private val gameWindowsManager: GameWindowsManager
+    private val gameWindowsManager: GameWindowsManager,
+    private val textureRegions: GetTextureRegionByNameUseCase,
 ) : IMouseInputHandler {
 
     override fun checkConditions(action: MouseInputAction): Boolean {
         return gameWindowsManager.getCurrentWindow() == GameUiWindow.NONE &&
-                !isInsideHotbar(action) &&
+                !action.isInsideHotbar(textureRegions) &&
                 action.actionKey is MouseInputActionKey.Left
 
     }
index 4fb0879ec4567481d1d09e7df42cc43db5595461..2b1e934dd16d3901ce86e2b0879580ebda03e7aa 100644 (file)
@@ -12,6 +12,7 @@ import ru.deadsoftware.cavedroid.game.input.isInsideWindow
 import ru.deadsoftware.cavedroid.game.mobs.MobsController
 import ru.deadsoftware.cavedroid.game.objects.drop.DropController
 import ru.deadsoftware.cavedroid.misc.Assets
+import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase
 import javax.inject.Inject
 
 @GameScope
@@ -20,13 +21,14 @@ class CloseGameWindowMouseInputHandler @Inject constructor(
     private val gameWindowsManager: GameWindowsManager,
     private val mobsController: MobsController,
     private val dropController: DropController,
+    private val textureRegions: GetTextureRegionByNameUseCase,
 ) : IMouseInputHandler {
 
-    private val creativeInventoryTexture get() = requireNotNull(Assets.textureRegions["creative"])
-    private val survivalInventoryTexture get() = requireNotNull(Assets.textureRegions["survival"])
-    private val craftingInventoryTexture get() = requireNotNull(Assets.textureRegions["crafting_table"])
-    private val furnaceInventoryTexture get() = requireNotNull(Assets.textureRegions["furnace"])
-    private val chestInventoryTexture get() = requireNotNull(Assets.textureRegions["chest"])
+    private val creativeInventoryTexture get() = requireNotNull(textureRegions["creative"])
+    private val survivalInventoryTexture get() = requireNotNull(textureRegions["survival"])
+    private val craftingInventoryTexture get() = requireNotNull(textureRegions["crafting_table"])
+    private val furnaceInventoryTexture get() = requireNotNull(textureRegions["furnace"])
+    private val chestInventoryTexture get() = requireNotNull(textureRegions["chest"])
 
     override fun checkConditions(action: MouseInputAction): Boolean {
         return gameWindowsManager.getCurrentWindow() != GameUiWindow.NONE &&
@@ -60,4 +62,4 @@ class CloseGameWindowMouseInputHandler @Inject constructor(
         gameWindowsManager.closeWindow()
     }
 
-}
\ No newline at end of file
+}
index 8acdb7e1d5cdd7437d61c9c64c678a5ce0a2aff1..2d0c229d995379467c189595a713331ef78db869 100644 (file)
@@ -12,6 +12,7 @@ import ru.deadsoftware.cavedroid.game.input.action.MouseInputAction
 import ru.deadsoftware.cavedroid.game.input.action.keys.MouseInputActionKey
 import ru.deadsoftware.cavedroid.game.input.isInsideWindow
 import ru.deadsoftware.cavedroid.misc.Assets
+import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase
 import javax.inject.Inject
 import kotlin.math.abs
 
@@ -21,9 +22,10 @@ class CreativeInventoryScrollMouseInputHandler @Inject constructor(
     private val mainConfig: MainConfig,
     private val gameWindowsManager: GameWindowsManager,
     private val gameItemsHolder: GameItemsHolder,
+    private val textureRegions: GetTextureRegionByNameUseCase,
 ) : IMouseInputHandler {
 
-    private val creativeInventoryTexture get() = requireNotNull(Assets.textureRegions["creative"])
+    private val creativeInventoryTexture get() = requireNotNull(textureRegions["creative"])
 
     private var dragStartY = 0f
 
index c1f2af584a8ea931c8ec5f0b5d9429507c18038b..ea9941b79f5bb0dff487cf38caa7dae2cc278e42 100644 (file)
@@ -1,6 +1,5 @@
 package ru.deadsoftware.cavedroid.game.input.handler.mouse
 
-import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindMouseInputHandler
 import com.badlogic.gdx.math.MathUtils
 import ru.deadsoftware.cavedroid.MainConfig
 import ru.deadsoftware.cavedroid.game.GameItemsHolder
@@ -17,9 +16,10 @@ 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.game.world.GameWorld
-import ru.deadsoftware.cavedroid.misc.Assets
-import ru.deadsoftware.cavedroid.misc.utils.bl
-import ru.deadsoftware.cavedroid.misc.utils.px
+import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindMouseInputHandler
+import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase
+import ru.fredboy.cavedroid.utils.bl
+import ru.fredboy.cavedroid.utils.px
 import javax.inject.Inject
 
 @GameScope
@@ -31,11 +31,12 @@ class CursorMouseInputHandler @Inject constructor(
     private val gameWindowsManager: GameWindowsManager,
     private val gameItemsHolder: GameItemsHolder,
     private val tooltipManager: TooltipManager,
+    private val textureRegions: GetTextureRegionByNameUseCase,
 ) : IMouseInputHandler {
 
     private val player get() = mobsController.player
 
-    private val creativeInventoryTexture get() = requireNotNull(Assets.textureRegions["creative"])
+    private val creativeInventoryTexture get() = requireNotNull(textureRegions["creative"])
 
     private val Block.isAutoselectable
         get() = !isNone() && params.hasCollision
index 6a66338753956f6013de027289107f228110e183..bc13aaf09bf32ba13638f4e85a31c5d2f658b31c 100644 (file)
@@ -16,6 +16,7 @@ import ru.deadsoftware.cavedroid.game.model.item.Item
 import ru.deadsoftware.cavedroid.game.objects.drop.Drop
 import ru.deadsoftware.cavedroid.game.objects.drop.DropController
 import ru.deadsoftware.cavedroid.misc.Assets
+import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase
 import javax.inject.Inject
 
 @GameScope
@@ -24,16 +25,17 @@ class HotbarMouseInputHandler @Inject constructor(
     private val gameWindowsManager: GameWindowsManager,
     private val mobsController: MobsController,
     private val dropController: DropController,
+    private val textureRegions: GetTextureRegionByNameUseCase,
 ) : IMouseInputHandler {
 
-    private val hotbarTexture get() = requireNotNull(Assets.textureRegions["hotbar"])
+    private val hotbarTexture get() = requireNotNull(textureRegions["hotbar"])
 
     private var buttonHoldTask: Timer.Task? = null
 
     override fun checkConditions(action: MouseInputAction): Boolean {
         return buttonHoldTask?.isScheduled == true ||
                 ((action.actionKey is MouseInputActionKey.Left || action.actionKey is MouseInputActionKey.Screen)
-                        && isInsideHotbar(action)
+                        && action.isInsideHotbar(textureRegions)
                         || action.actionKey is MouseInputActionKey.Scroll) &&
                 gameWindowsManager.getCurrentWindow() == GameUiWindow.NONE
     }
index 62a48366e6ef4d342b4bac8578c55d1350dd4c06..d646a01beb768ca85956d1fe54b84b536d0c5935 100644 (file)
@@ -10,6 +10,7 @@ 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.Assets
+import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase
 import javax.inject.Inject
 
 @GameScope
@@ -18,9 +19,10 @@ class SelectChestInventoryItemMouseInputHandler @Inject constructor(
     private val gameWindowsManager: GameWindowsManager,
     private val mobsController: MobsController,
     private val gameItemsHolder: GameItemsHolder,
+    private val textureRegions: GetTextureRegionByNameUseCase,
 ) : AbstractInventoryItemsMouseInputHandler(gameItemsHolder, gameWindowsManager, GameUiWindow.CHEST) {
 
-    override val windowTexture get() = requireNotNull(Assets.textureRegions["chest"])
+    override val windowTexture get() = requireNotNull(textureRegions["chest"])
 
     private fun handleInsideContentGrid(action: MouseInputAction, xOnGrid: Int, yOnGrid: Int) {
         val window = gameWindowsManager.currentWindow as ChestInventoryWindow
index aefea54d6d5797161677ac137e05c961f887bae7..aef073b0135d41f7a4247082bcfd9e585caf94e3 100644 (file)
@@ -10,6 +10,7 @@ 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.Assets
+import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase
 import javax.inject.Inject
 
 @GameScope
@@ -18,9 +19,10 @@ class SelectCraftingInventoryItemMouseInputHandler @Inject constructor(
     private val gameWindowsManager: GameWindowsManager,
     private val mobsController: MobsController,
     private val gameItemsHolder: GameItemsHolder,
+    private val textureRegions: GetTextureRegionByNameUseCase,
 ) : AbstractInventoryItemsMouseInputHandler(gameItemsHolder, gameWindowsManager, GameUiWindow.CRAFTING_TABLE) {
 
-    override val windowTexture get() = requireNotNull(Assets.textureRegions["crafting_table"])
+    override val windowTexture get() = requireNotNull(textureRegions["crafting_table"])
 
     private fun handleInsideInventoryGrid(action: MouseInputAction, xOnGrid: Int, yOnGrid: Int) {
         val window = gameWindowsManager.currentWindow as CraftingInventoryWindow
index 976f443c93ceff7a8fb20c7beffd33296607cd04..65a86b1c62ef839420109c79df79ffd2223128f0 100644 (file)
@@ -12,6 +12,7 @@ import ru.deadsoftware.cavedroid.game.input.isInsideWindow
 import ru.deadsoftware.cavedroid.game.mobs.MobsController
 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsConfigs
 import ru.deadsoftware.cavedroid.misc.Assets
+import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase
 import javax.inject.Inject
 
 @GameScope
@@ -20,9 +21,10 @@ class SelectCreativeInventoryItemMouseInputHandler @Inject constructor(
     private val gameItemsHolder: GameItemsHolder,
     private val gameWindowsManager: GameWindowsManager,
     private val mobsController: MobsController,
+    private val textureRegions: GetTextureRegionByNameUseCase,
 ) : IMouseInputHandler {
 
-    private val creativeInventoryTexture get() = requireNotNull(Assets.textureRegions["creative"])
+    private val creativeInventoryTexture get() = requireNotNull(textureRegions["creative"])
 
     override fun checkConditions(action: MouseInputAction): Boolean {
         return gameWindowsManager.getCurrentWindow() == GameUiWindow.CREATIVE_INVENTORY &&
index eac8cfa2d54b88c8a58d713841dff5ee8934c91c..5cd846a6086325fe8815d14226ee927ed94324bd 100644 (file)
@@ -12,6 +12,7 @@ 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.Assets
+import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase
 import javax.inject.Inject
 
 @GameScope
@@ -20,9 +21,10 @@ class SelectFurnaceInventoryItemMouseInputHandler @Inject constructor(
     private val gameWindowsManager: GameWindowsManager,
     private val mobsController: MobsController,
     private val gameItemsHolder: GameItemsHolder,
+    private val textureRegions: GetTextureRegionByNameUseCase,
 ) : AbstractInventoryItemsMouseInputHandler(gameItemsHolder, gameWindowsManager, GameUiWindow.FURNACE) {
 
-    override val windowTexture get() = requireNotNull(Assets.textureRegions["furnace"])
+    override val windowTexture get() = requireNotNull(textureRegions["furnace"])
 
     private fun handleInsideInventoryGrid(action: MouseInputAction, xOnGrid: Int, yOnGrid: Int) {
         val window = gameWindowsManager.currentWindow as FurnaceInventoryWindow
index 58687fcbc1ae0bf5063ed516d55cf52bc19d8265..ec0db60b5cc0a57853b7565866d7e2f729e7f333 100644 (file)
@@ -10,6 +10,7 @@ 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.Assets
+import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase
 import javax.inject.Inject
 
 @GameScope
@@ -18,9 +19,10 @@ class SelectSurvivalInventoryItemMouseInputHandler @Inject constructor(
     private val gameWindowsManager: GameWindowsManager,
     private val mobsController: MobsController,
     private val gameItemsHolder: GameItemsHolder,
+    private val textureRegions: GetTextureRegionByNameUseCase,
 ) : AbstractInventoryItemsMouseInputHandler(gameItemsHolder, gameWindowsManager, GameUiWindow.SURVIVAL_INVENTORY) {
 
-    override val windowTexture get() = requireNotNull(Assets.textureRegions["survival"])
+    override val windowTexture get() = requireNotNull(textureRegions["survival"])
 
     private fun handleInsideInventoryGrid(action: MouseInputAction, xOnGrid: Int, yOnGrid: Int) {
         val window = gameWindowsManager.currentWindow as SurvivalInventoryWindow
index 7405faf0c5eae97f812199b8ec46599506f822ef..400eeae094164aca9894b936c66117e20cba0e4d 100644 (file)
@@ -19,6 +19,7 @@ import ru.deadsoftware.cavedroid.game.mobs.MobsController
 import ru.deadsoftware.cavedroid.game.model.item.Item
 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager
 import ru.deadsoftware.cavedroid.game.world.GameWorld
+import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase
 import javax.inject.Inject
 
 @GameScope
@@ -31,13 +32,14 @@ class UseItemMouseInputHandler @Inject constructor(
     private val gameWindowsManager: GameWindowsManager,
     private val gameWorld: GameWorld,
     private val gameItemsHolder: GameItemsHolder,
+    private val textureRegions: GetTextureRegionByNameUseCase,
 ) : IMouseInputHandler {
 
     private var buttonHoldTask: Timer.Task? = null
 
     override fun checkConditions(action: MouseInputAction): Boolean {
         return buttonHoldTask?.isScheduled == true ||
-                !isInsideHotbar(action) &&
+                !action.isInsideHotbar(textureRegions) &&
                 gameWindowsManager.getCurrentWindow() == GameUiWindow.NONE &&
                 action.actionKey is MouseInputActionKey.Right
     }
index d717c1850807a74ae32b86e045239db845f713b2..90cba3cd17cb89273d6d9b309eb890009cc81e2d 100644 (file)
@@ -13,6 +13,7 @@ import ru.deadsoftware.cavedroid.game.mobs.MobsController
 import ru.deadsoftware.cavedroid.game.mobs.player.Player
 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager
 import ru.deadsoftware.cavedroid.game.world.GameWorld
+import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase
 import javax.inject.Inject
 
 @GameScope
@@ -22,6 +23,7 @@ class JoystickInputHandler @Inject constructor(
     private val mobsController: MobsController,
     private val gameWindowsManager: GameWindowsManager,
     private val gameWorld: GameWorld,
+    private val textureRegions: GetTextureRegionByNameUseCase,
 ) : IMouseInputHandler {
 
     private var activateTimeMs = 0L
@@ -58,7 +60,7 @@ class JoystickInputHandler @Inject constructor(
                 (action.actionKey.pointer == mainConfig.joystick?.pointer || !active) &&
                 ((action.actionKey is MouseInputActionKey.Dragged) ||
                         (action.screenX < action.cameraViewport.width / 2 && !action.actionKey.touchUp || active)) &&
-                !(action.actionKey is MouseInputActionKey.Screen && isInsideHotbar(action))
+                !(action.actionKey is MouseInputActionKey.Screen && action.isInsideHotbar(textureRegions))
 
     }
 
index d4494a30b5ae531f141a3b4fc7b13ef729590e76..288fb7674a460fa31b59e2402314643ccffc68da 100644 (file)
@@ -5,8 +5,8 @@ import ru.deadsoftware.cavedroid.game.GameItemsHolder
 import ru.deadsoftware.cavedroid.game.model.block.Block
 import ru.deadsoftware.cavedroid.game.model.dto.SaveDataDto
 import ru.deadsoftware.cavedroid.game.world.GameWorld
-import ru.deadsoftware.cavedroid.misc.utils.bl
-import ru.deadsoftware.cavedroid.misc.utils.px
+import ru.fredboy.cavedroid.utils.bl
+import ru.fredboy.cavedroid.utils.px
 
 class FallingBlock(
     private val blockKey: String,
index 49adee32463d1d0e05a7f53298bd4106dbe1790b..d7b7517abca87e4f35e11ea301afa1fbf72a031b 100644 (file)
@@ -1,10 +1,14 @@
 package ru.deadsoftware.cavedroid.game.mobs
 
 import ru.deadsoftware.cavedroid.game.model.dto.SaveDataDto
+import ru.fredboy.cavedroid.domain.assets.usecase.GetPigSpritesUseCase
 
-fun fromSaveData(saveData: SaveDataDto.MobSaveDataDto): Mob {
+fun fromSaveData(
+    saveData: SaveDataDto.MobSaveDataDto,
+    getPigSprites: GetPigSpritesUseCase,
+): Mob {
     return when (saveData) {
-        is SaveDataDto.PigSaveData -> Pig.fromSaveData(saveData)
+        is SaveDataDto.PigSaveData -> Pig.fromSaveData(getPigSprites, saveData)
         is SaveDataDto.FallingBlockSaveData -> FallingBlock.fromSaveData(saveData)
 
         is SaveDataDto.PlayerSaveData -> throw IllegalArgumentException("Cannot load player as regular Mob")
index 4b2c209c22d6fe1dc44fc4e65b04e1bca4bbae7e..d435469f41602f53f66b2243026b90538625baab 100644 (file)
@@ -6,6 +6,8 @@ import ru.deadsoftware.cavedroid.game.mobs.player.Player
 import ru.deadsoftware.cavedroid.game.model.dto.SaveDataDto
 import ru.deadsoftware.cavedroid.game.ui.TooltipManager
 import ru.deadsoftware.cavedroid.misc.Saveable
+import ru.fredboy.cavedroid.domain.assets.usecase.GetPigSpritesUseCase
+import ru.fredboy.cavedroid.domain.assets.usecase.GetPlayerSpritesUseCase
 import java.util.*
 import javax.inject.Inject
 
@@ -13,11 +15,12 @@ import javax.inject.Inject
 class MobsController @Inject constructor(
     gameItemsHolder: GameItemsHolder,
     tooltipManager: TooltipManager,
+    getPlayerSprites: GetPlayerSpritesUseCase,
 ) : Saveable {
 
     private val _mobs = LinkedList<Mob>()
 
-    var player: Player = Player(gameItemsHolder, tooltipManager)
+    var player: Player = Player(gameItemsHolder, tooltipManager, getPlayerSprites())
         private set
 
     val mobs: List<Mob>
@@ -43,14 +46,16 @@ class MobsController @Inject constructor(
         fun fromSaveData(
             saveData: SaveDataDto.MobsControllerSaveData,
             gameItemsHolder: GameItemsHolder,
-            tooltipManager: TooltipManager
+            tooltipManager: TooltipManager,
+            getPigSprites: GetPigSpritesUseCase,
+            getPlayerSprites: GetPlayerSpritesUseCase,
         ): MobsController {
             saveData.verifyVersion(SAVE_DATA_VERSION)
 
-            return MobsController(gameItemsHolder, tooltipManager)
+            return MobsController(gameItemsHolder, tooltipManager, getPlayerSprites)
                 .apply {
-                    _mobs.addAll(saveData.mobs.map { mob -> Mob.fromSaveData(mob) })
-                    player = Player.fromSaveData(saveData.player, gameItemsHolder, tooltipManager)
+                    _mobs.addAll(saveData.mobs.map { mob -> Mob.fromSaveData(mob, getPigSprites) })
+                    player = Player.fromSaveData(saveData.player, gameItemsHolder, tooltipManager, getPlayerSprites)
                 }
         }
     }
index b080e4078730713b897e8a45f1e1ba3655b81239..dde127d88fe1c555f08607118fa90e44e4e24493 100644 (file)
@@ -1,19 +1,21 @@
 package ru.deadsoftware.cavedroid.game.mobs
 
+import com.badlogic.gdx.graphics.Color
 import com.badlogic.gdx.graphics.g2d.SpriteBatch
 import com.badlogic.gdx.math.Vector2
 import ru.deadsoftware.cavedroid.game.GameItemsHolder
 import ru.deadsoftware.cavedroid.game.model.dto.SaveDataDto
 import ru.deadsoftware.cavedroid.game.model.item.InventoryItem
+import ru.deadsoftware.cavedroid.misc.utils.colorFromHexString
 import ru.deadsoftware.cavedroid.misc.utils.drawSprite
-import ru.deadsoftware.cavedroid.misc.utils.mobs.MobSprites.Pig.getBackgroundLeg
-import ru.deadsoftware.cavedroid.misc.utils.mobs.MobSprites.Pig.getBody
-import ru.deadsoftware.cavedroid.misc.utils.mobs.MobSprites.Pig.getForegroundLeg
-import ru.deadsoftware.cavedroid.misc.utils.mobs.MobSprites.Pig.getLeftLegRelativeX
-import ru.deadsoftware.cavedroid.misc.utils.mobs.MobSprites.Pig.getLegsRelativeY
-import ru.deadsoftware.cavedroid.misc.utils.mobs.MobSprites.Pig.getRightLegRelativeX
+import ru.fredboy.cavedroid.domain.assets.model.MobSprite
+import ru.fredboy.cavedroid.domain.assets.usecase.GetPigSpritesUseCase
 
-class Pig(x: Float, y: Float) : PeacefulMob(x, y, WIDTH, HEIGHT, randomDir(), MAX_HEALTH) {
+class Pig(
+    private val sprite: MobSprite.Pig,
+    x: Float,
+    y: Float
+) : PeacefulMob(x, y, WIDTH, HEIGHT, randomDir(), MAX_HEALTH) {
 
     override fun getSpeed(): Float {
         return SPEED
@@ -42,18 +44,29 @@ class Pig(x: Float, y: Float) : PeacefulMob(x, y, WIDTH, HEIGHT, randomDir(), MA
         return listOf(gameItemsHolder.getItem("porkchop_raw").toInventoryItem())
     }
 
-    override fun draw(spriteBatch: SpriteBatch, x: Float, y: Float, delta: Float) {
+    override fun draw(
+        spriteBatch: SpriteBatch,
+        x: Float,
+        y: Float,
+        delta: Float
+    ) {
         updateAnimation(delta)
 
-        val leftLegX = x + getLeftLegRelativeX(direction)
-        val rightLegX = x + getRightLegRelativeX(direction)
-        val legY = y + getLegsRelativeY()
+        val leftLegX = x + sprite.getLeftLegRelativeX(direction.index)
+        val rightLegX = x + sprite.getRightLegRelativeX(direction.index)
+        val legY = y + sprite.getLegsRelativeY()
 
-        spriteBatch.drawSprite(getBackgroundLeg(), leftLegX, legY, -anim, tint = tintColor)
-        spriteBatch.drawSprite(getBackgroundLeg(), rightLegX, legY, -anim, tint = tintColor)
-        spriteBatch.drawSprite(getBody(direction), x, y, tint = tintColor)
-        spriteBatch.drawSprite(getForegroundLeg(), leftLegX, legY, anim, tint = tintColor)
-        spriteBatch.drawSprite(getForegroundLeg(), rightLegX, legY, anim, tint = tintColor)
+        sprite.leg.setOrigin(sprite.leg.width / 2, 0f)
+        sprite.leg.setFlip(looksRight(), sprite.leg.isFlipY)
+        sprite.headAndBody.setFlip(looksRight(), sprite.leg.isFlipY)
+
+        val backgroundTintColor = tintColor.cpy().sub(Color(0xAAAAAA shl 8))
+
+        spriteBatch.drawSprite(sprite.leg, leftLegX, legY, -anim, tint = backgroundTintColor)
+        spriteBatch.drawSprite(sprite.leg, rightLegX, legY, -anim, tint = backgroundTintColor)
+        spriteBatch.drawSprite(sprite.headAndBody, x, y, tint = tintColor)
+        spriteBatch.drawSprite(sprite.leg, leftLegX, legY, anim, tint = tintColor)
+        spriteBatch.drawSprite(sprite.leg, rightLegX, legY, anim, tint = tintColor)
     }
 
     override fun getSaveData(): SaveDataDto.PigSaveData {
@@ -86,10 +99,13 @@ class Pig(x: Float, y: Float) : PeacefulMob(x, y, WIDTH, HEIGHT, randomDir(), MA
         private const val JUMP_VELOCITY = -133.332f
         private const val MAX_HEALTH = 10
 
-        fun fromSaveData(saveData: SaveDataDto.PigSaveData): Pig {
+        fun fromSaveData(
+            getPigSprite: GetPigSpritesUseCase,
+            saveData: SaveDataDto.PigSaveData
+        ): Pig {
             saveData.verifyVersion(SAVE_DATA_VERSION)
 
-            return Pig(saveData.x, saveData.y).apply {
+            return Pig(getPigSprite(), saveData.x, saveData.y).apply {
                 velocity.x = saveData.velocityX
                 velocity.y = saveData.velocityY
                 mAnimDelta = saveData.animDelta
index f420120b2844e7bd2d77ae4d01513837bac80c74..0c50643d0064e2c5c6de1a1d448a734c13ffd386 100644 (file)
@@ -1,6 +1,7 @@
 package ru.deadsoftware.cavedroid.game.model.item
 
 import com.badlogic.gdx.graphics.Color
+import com.badlogic.gdx.graphics.g2d.BitmapFont
 import com.badlogic.gdx.graphics.g2d.SpriteBatch
 import com.badlogic.gdx.graphics.glutils.ShapeRenderer
 import ru.deadsoftware.cavedroid.game.GameItemsHolder
@@ -9,7 +10,9 @@ import ru.deadsoftware.cavedroid.misc.Assets
 import ru.deadsoftware.cavedroid.misc.Saveable
 import ru.deadsoftware.cavedroid.misc.utils.drawSprite
 import ru.deadsoftware.cavedroid.misc.utils.drawString
-import ru.deadsoftware.cavedroid.misc.utils.px
+import ru.fredboy.cavedroid.domain.assets.usecase.GetStringHeightUseCase
+import ru.fredboy.cavedroid.domain.assets.usecase.GetStringWidthUseCase
+import ru.fredboy.cavedroid.utils.px
 import kotlin.contracts.ExperimentalContracts
 import kotlin.contracts.contract
 
@@ -73,12 +76,19 @@ class InventoryItem @JvmOverloads constructor(
         return amount + count <= item.params.maxStack
     }
 
-    private fun drawAmountText(spriteBatch: SpriteBatch, text: String,  x: Float, y: Float) {
-        spriteBatch.drawString(text, x + 1, y + 1, Color.BLACK)
-        spriteBatch.drawString(text, x, y, Color.WHITE)
+    private fun drawAmountText(spriteBatch: SpriteBatch, font: BitmapFont, text: String,  x: Float, y: Float) {
+        spriteBatch.drawString(font, text, x + 1, y + 1, Color.BLACK)
+        spriteBatch.drawString(font, text, x, y, Color.WHITE)
     }
 
-    fun drawSelected(spriteBatch: SpriteBatch, x: Float, y: Float) {
+    fun drawSelected(
+        spriteBatch: SpriteBatch,
+        font: BitmapFont,
+        x: Float,
+        y: Float,
+        getStringWidth: GetStringWidthUseCase,
+        getStringHeight: GetStringHeightUseCase,
+    ) {
         if (item.isNone()) {
             return
         }
@@ -88,13 +98,22 @@ class InventoryItem @JvmOverloads constructor(
         spriteBatch.drawSprite(sprite, x - 10f, y - 10f, rotation = 0f, width = 20f, height = 20f)
         drawAmountText(
             spriteBatch = spriteBatch,
+            font = font,
             text = amountString,
-            x = x + 10f - Assets.getStringWidth(amountString) + 1f,
-            y = y + 10f - Assets.getStringHeight(amountString) + 1f
+            x = x + 10f - getStringWidth(amountString) + 1f,
+            y = y + 10f - getStringHeight(amountString) + 1f
         )
     }
 
-    fun draw(spriteBatch: SpriteBatch, shapeRenderer: ShapeRenderer, x: Float, y: Float) {
+    fun draw(
+        spriteBatch: SpriteBatch,
+        shapeRenderer: ShapeRenderer,
+        font: BitmapFont,
+        x: Float,
+        y: Float,
+        getStringWidth: GetStringWidthUseCase,
+        getStringHeight: GetStringHeightUseCase,
+    ) {
         if (item.isNone()) {
             return
         }
@@ -124,9 +143,10 @@ class InventoryItem @JvmOverloads constructor(
             val amountString = amount.toString()
             drawAmountText(
                 spriteBatch = spriteBatch,
+                font = font,
                 text = amountString,
-                x = x + 1.px - Assets.getStringWidth(amountString),
-                y = y + 1.px - Assets.getStringHeight(amountString)
+                x = x + 1.px - getStringWidth(amountString),
+                y = y + 1.px - getStringHeight(amountString)
             )
         }
     }
index 19d8c4757d125235a8dfd62b482bbfb467c87862..136c06b8bcb0a65aabc72f89593a6bcba94674d0 100644 (file)
@@ -9,11 +9,13 @@ import ru.deadsoftware.cavedroid.game.model.dto.BlockDto
 import ru.deadsoftware.cavedroid.game.model.item.Item
 import ru.deadsoftware.cavedroid.misc.Assets
 import ru.deadsoftware.cavedroid.misc.utils.AssetLoader
+import ru.fredboy.cavedroid.domain.assets.usecase.GetBlockTextureUseCase
 import javax.inject.Inject
 
 @Reusable
 class BlockMapper @Inject constructor(
     private val assetLoader: AssetLoader,
+    private val getBlockTexture: GetBlockTextureUseCase,
 ) {
 
     fun map(key: String, dto: BlockDto): Block {
@@ -102,7 +104,7 @@ class BlockMapper @Inject constructor(
             return null
         }
 
-        return Assets.resolveBlockTexture(assetLoader, textureName)
+        return getBlockTexture[textureName]
     }
 
 }
\ No newline at end of file
index a1a6f0c68d0cb2357eebc5262fa2acb9c1b6f777..db8a4a2069e1873eeefc1c4a98624e52e0af4192 100644 (file)
@@ -12,11 +12,13 @@ import ru.deadsoftware.cavedroid.misc.Assets
 import ru.deadsoftware.cavedroid.misc.utils.AssetLoader
 import ru.deadsoftware.cavedroid.misc.utils.SpriteOrigin
 import ru.deadsoftware.cavedroid.misc.utils.colorFromHexString
+import ru.fredboy.cavedroid.domain.assets.usecase.GetItemTextureUseCase
 import javax.inject.Inject
 
 @Reusable
 class ItemMapper @Inject constructor(
     private val assetLoader: AssetLoader,
+    private val getItemTexture: GetItemTextureUseCase,
 ) {
 
     fun map(key: String, dto: ItemDto, block: Block?, slabTopBlock: Block.Slab?, slabBottomBlock: Block.Slab?): Item {
@@ -57,7 +59,7 @@ class ItemMapper @Inject constructor(
             return null
         }
 
-        val texture = Assets.resolveItemTexture(assetLoader, dto.texture)
+        val texture = getItemTexture[dto.texture]
         return Sprite(texture)
             .apply {
                 flip(false, true)
index d2159f1cf72f3498016b8c457395e96c5f20b5ca..4b0d896e34e3adc99215a29c550c9d5a5f20b562 100644 (file)
@@ -8,7 +8,7 @@ import ru.deadsoftware.cavedroid.game.model.dto.SaveDataDto
 import ru.deadsoftware.cavedroid.game.model.item.InventoryItem.Companion.isNoneOrNull
 import ru.deadsoftware.cavedroid.game.objects.drop.DropController
 import ru.deadsoftware.cavedroid.misc.Saveable
-import ru.deadsoftware.cavedroid.misc.utils.px
+import ru.fredboy.cavedroid.utils.px
 import javax.inject.Inject
 
 @GameScope
index 0d345403c17e443dc418136bf16331ee6a3c6f97..55e879d54e3d9e8d68edb83c557c2dae49e25e65 100644 (file)
@@ -10,14 +10,18 @@ import ru.deadsoftware.cavedroid.game.mobs.MobsController
 import ru.deadsoftware.cavedroid.game.world.GameWorld
 import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindRenderer
 import ru.deadsoftware.cavedroid.misc.utils.forEachBlockInArea
+import ru.fredboy.cavedroid.domain.assets.usecase.GetBlockDamageFrameCountUseCase
+import ru.fredboy.cavedroid.domain.assets.usecase.GetBlockDamageSpriteUseCase
 import javax.inject.Inject
 
 @GameScope
 @BindRenderer
 class BackgroundBlocksRenderer @Inject constructor(
     gameWorld: GameWorld,
-    mobsController: MobsController
-) : BlocksRenderer(gameWorld, mobsController) {
+    mobsController: MobsController,
+    getBlockDamageFrameCount: GetBlockDamageFrameCountUseCase,
+    getBlockDamageSprite: GetBlockDamageSpriteUseCase
+) : BlocksRenderer(gameWorld, mobsController, getBlockDamageFrameCount, getBlockDamageSprite) {
 
     override val renderLayer get() = RENDER_LAYER
 
index 68af67b1242e23b979cd3e9b37cd445b8044ac80..410f5f5b3aa6a8a51f43a24c97b3f3b89323e666 100644 (file)
@@ -9,11 +9,15 @@ import ru.deadsoftware.cavedroid.game.mobs.MobsController
 import ru.deadsoftware.cavedroid.game.model.block.Block
 import ru.deadsoftware.cavedroid.game.world.GameWorld
 import ru.deadsoftware.cavedroid.misc.Assets
-import ru.deadsoftware.cavedroid.misc.utils.px
+import ru.fredboy.cavedroid.domain.assets.usecase.GetBlockDamageFrameCountUseCase
+import ru.fredboy.cavedroid.domain.assets.usecase.GetBlockDamageSpriteUseCase
+import ru.fredboy.cavedroid.utils.px
 
 abstract class BlocksRenderer(
     protected val gameWorld: GameWorld,
     protected val mobsController: MobsController,
+    protected val getBlockDamageFrameCount: GetBlockDamageFrameCountUseCase,
+    protected val getBlockDamageSprite: GetBlockDamageSpriteUseCase,
 ) : IGameRenderer {
 
     protected abstract val background: Boolean
@@ -22,10 +26,10 @@ abstract class BlocksRenderer(
         get() = isNone() || params.isTransparent
 
     private fun blockDamageSprite(index: Int): Sprite? {
-        if (index !in 0..< MAX_BLOCK_DAMAGE_INDEX) {
+        if (index !in 0..< getBlockDamageFrameCount()) {
             return null
         }
-        return Assets.blockDamageSprites[index]
+        return getBlockDamageSprite[index]
     }
 
     protected fun drawBlockDamage(spriteBatch: SpriteBatch, viewport: Rectangle) {
index 0fa27560c6d372c576aaaa6f4926d1d08519f2e2..df8c9e1739d59accc85eb21336088384301f3c91 100644 (file)
@@ -11,10 +11,11 @@ import ru.deadsoftware.cavedroid.game.mobs.MobsController
 import ru.deadsoftware.cavedroid.game.model.block.Block
 import ru.deadsoftware.cavedroid.game.world.GameWorld
 import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindRenderer
-import ru.deadsoftware.cavedroid.misc.utils.bl
 import ru.deadsoftware.cavedroid.misc.utils.drawString
 import ru.deadsoftware.cavedroid.misc.utils.forEachBlockInArea
-import ru.deadsoftware.cavedroid.misc.utils.px
+import ru.fredboy.cavedroid.domain.assets.usecase.GetFontUseCase
+import ru.fredboy.cavedroid.utils.bl
+import ru.fredboy.cavedroid.utils.px
 import javax.inject.Inject
 
 @GameScope
@@ -24,6 +25,7 @@ class DebugRenderer @Inject constructor(
     private val gameWorld: GameWorld,
     private val mobsController: MobsController,
     private val debugInfoStringsProvider: DebugInfoStringsProvider,
+    private val getFont: GetFontUseCase,
 ) : IGameRenderer {
 
     override val renderLayer get() = RENDER_LAYER
@@ -83,7 +85,7 @@ class DebugRenderer @Inject constructor(
 
     private fun drawDebugInfo(spriteBatch: SpriteBatch) {
         debugInfoStringsProvider.getDebugStrings().forEachIndexed { index, str ->
-            spriteBatch.drawString(str, 0f, index * 10f)
+            spriteBatch.drawString(getFont(), str, 0f, index * 10f)
         }
     }
 
index d1fc65ab8ee654ec62936b687b4341cc92554f6d..2dd59dc43f3fa8ca9ebd1b87fb323205d9833883 100644 (file)
@@ -9,7 +9,7 @@ import ru.deadsoftware.cavedroid.game.world.GameWorld
 import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindRenderer
 import ru.deadsoftware.cavedroid.misc.utils.cycledInsideWorld
 import ru.deadsoftware.cavedroid.misc.utils.drawSprite
-import ru.deadsoftware.cavedroid.misc.utils.px
+import ru.fredboy.cavedroid.utils.px
 import javax.inject.Inject
 
 @GameScope
index 8353b0b39bc6262565d0062611df0d8eae84633d..81091d2fe665db4c30c55d49fd42e69cd10f4fc0 100644 (file)
@@ -8,14 +8,18 @@ import ru.deadsoftware.cavedroid.game.mobs.MobsController
 import ru.deadsoftware.cavedroid.game.world.GameWorld
 import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindRenderer
 import ru.deadsoftware.cavedroid.misc.utils.forEachBlockInArea
+import ru.fredboy.cavedroid.domain.assets.usecase.GetBlockDamageFrameCountUseCase
+import ru.fredboy.cavedroid.domain.assets.usecase.GetBlockDamageSpriteUseCase
 import javax.inject.Inject
 
 @GameScope
 @BindRenderer
 class ForegroundBlocksRenderer @Inject constructor(
     gameWorld: GameWorld,
-    mobsController: MobsController
-) : BlocksRenderer(gameWorld, mobsController) {
+    mobsController: MobsController,
+    getBlockDamageFrameCount: GetBlockDamageFrameCountUseCase,
+    getBlockDamageSprite: GetBlockDamageSpriteUseCase
+) : BlocksRenderer(gameWorld, mobsController, getBlockDamageFrameCount, getBlockDamageSprite) {
 
     override val renderLayer get() = RENDER_LAYER
 
index b6b22aeaa13ca621c96f2f9bc5d7c184c0695324..096ba4bb8c4cb02168f89364ad1fabcb26d1da4a 100644 (file)
@@ -9,10 +9,13 @@ import ru.deadsoftware.cavedroid.game.mobs.player.Player
 import ru.deadsoftware.cavedroid.game.mobs.player.Player.ControlMode
 import ru.deadsoftware.cavedroid.game.ui.TooltipManager
 import ru.deadsoftware.cavedroid.game.world.GameWorld
-import ru.deadsoftware.cavedroid.misc.Assets
 import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindRenderer
 import ru.deadsoftware.cavedroid.misc.utils.drawString
-import ru.deadsoftware.cavedroid.misc.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.utils.px
 import javax.inject.Inject
 
 @GameScope
@@ -21,16 +24,20 @@ class HudRenderer @Inject constructor(
     private val gameWorld: GameWorld,
     private val mobsController: MobsController,
     private val tooltipManager: TooltipManager,
+    private val textureRegions: GetTextureRegionByNameUseCase,
+    private val getStringWidth: GetStringWidthUseCase,
+    private val getStringHeight: GetStringHeightUseCase,
+    private val getFont: GetFontUseCase,
 ) : IGameRenderer {
 
     override val renderLayer = RENDER_LAYER
 
-    private val cursorTexture get() = requireNotNull(Assets.textureRegions[CURSOR_KEY])
-    private val hotbarTexture get() = requireNotNull(Assets.textureRegions[HOTBAR_KEY])
-    private val hotbarSelectorTexture get() = requireNotNull(Assets.textureRegions[HOTBAR_SELECTOR_KEY])
-    private val wholeHeartTexture get() = requireNotNull(Assets.textureRegions[WHOLE_HEART_KEY])
-    private val emptyHeartTexture get() = requireNotNull(Assets.textureRegions[EMPTY_HEART_KEY])
-    private val halfHeartTexture get() = requireNotNull(Assets.textureRegions[HALF_HEART_KEY])
+    private val cursorTexture get() = requireNotNull(textureRegions[CURSOR_KEY])
+    private val hotbarTexture get() = requireNotNull(textureRegions[HOTBAR_KEY])
+    private val hotbarSelectorTexture get() = requireNotNull(textureRegions[HOTBAR_SELECTOR_KEY])
+    private val wholeHeartTexture get() = requireNotNull(textureRegions[WHOLE_HEART_KEY])
+    private val emptyHeartTexture get() = requireNotNull(textureRegions[EMPTY_HEART_KEY])
+    private val halfHeartTexture get() = requireNotNull(textureRegions[HALF_HEART_KEY])
 
     private fun drawCursor(spriteBatch: SpriteBatch, viewport: Rectangle) {
         val cursorX = mobsController.player.cursorX
@@ -83,9 +90,12 @@ class HudRenderer @Inject constructor(
                 item.draw(
                     spriteBatch = spriteBatch,
                     shapeRenderer = shapeRenderer,
+                    font = getFont(),
                     x = hotbarX + HotbarConfig.horizontalMargin +
                             index * (HotbarConfig.itemSeparatorWidth + HotbarConfig.itemSlotSpace),
                     y = HotbarConfig.verticalMargin,
+                    getStringWidth = getStringWidth,
+                    getStringHeight = getStringHeight,
                 )
             }
     }
@@ -111,8 +121,9 @@ class HudRenderer @Inject constructor(
         val tooltip = tooltipManager.currentHotbarTooltip
         if (tooltip.isNotBlank()) {
             spriteBatch.drawString(
+                font = getFont(),
                 str = tooltip,
-                x = viewport.width / 2 - Assets.getStringWidth(tooltip) / 2,
+                x = viewport.width / 2 - getStringWidth(tooltip) / 2,
                 y = hotbarTexture.regionHeight.toFloat()
             )
         }
index 52ac971954e64483000608a839db82efe8b1db5a..b1f188cea0dc89f549faade2b70b8e269f2fa579 100644 (file)
@@ -9,7 +9,7 @@ import ru.deadsoftware.cavedroid.game.mobs.MobsController
 import ru.deadsoftware.cavedroid.game.world.GameWorld
 import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindRenderer
 import ru.deadsoftware.cavedroid.misc.utils.cycledInsideWorld
-import ru.deadsoftware.cavedroid.misc.utils.px
+import ru.fredboy.cavedroid.utils.px
 import javax.inject.Inject
 
 @GameScope
index f2198aac4bfb0409960fe1b7f5cd87884a579424..aaa513c53d1cd71badf9915754f6ed5ba180e4fd 100644 (file)
@@ -1,5 +1,6 @@
 package ru.deadsoftware.cavedroid.game.render
 
+import com.badlogic.gdx.graphics.g2d.Sprite
 import com.badlogic.gdx.graphics.g2d.SpriteBatch
 import com.badlogic.gdx.graphics.glutils.ShapeRenderer
 import com.badlogic.gdx.math.Rectangle
@@ -15,6 +16,8 @@ import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindRenderer
 import ru.deadsoftware.cavedroid.misc.utils.ArrayMapExtensions.component1
 import ru.deadsoftware.cavedroid.misc.utils.ArrayMapExtensions.component2
 import ru.deadsoftware.cavedroid.misc.utils.drawSprite
+import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase
+import ru.fredboy.cavedroid.domain.assets.usecase.GetTouchButtonsUseCase
 import javax.inject.Inject
 
 @GameScope
@@ -23,17 +26,22 @@ class TouchControlsRenderer @Inject constructor(
     private val mainConfig: MainConfig,
     private val mobsController: MobsController,
     private val gameWindowsManager: GameWindowsManager,
+    private val textureRegions: GetTextureRegionByNameUseCase,
+    private val getTouchButtons: GetTouchButtonsUseCase,
 ) : IGameRenderer {
 
     override val renderLayer get() = RENDER_LAYER
 
-    private val shadeTexture get() = Assets.textureRegions[SHADE_KEY]
+    private val shadeTexture get() = textureRegions[SHADE_KEY]
+
+    private val joyBackground = Sprite(textureRegions["joy_background"])
+    private val joyStick = Sprite(textureRegions["joy_stick"])
 
     private fun drawJoystick(spriteBatch: SpriteBatch) {
         val joystick = mainConfig.joystick?.takeIf { it.active } ?: return
 
         spriteBatch.drawSprite(
-            sprite = Assets.joyBackground,
+            sprite = joyBackground,
             x = joystick.centerX - Joystick.RADIUS,
             y = joystick.centerY - Joystick.RADIUS,
             width = Joystick.SIZE,
@@ -41,7 +49,7 @@ class TouchControlsRenderer @Inject constructor(
         )
 
         spriteBatch.drawSprite(
-            sprite = Assets.joyStick,
+            sprite = joyStick,
             x = joystick.activeX - Joystick.STICK_SIZE / 2,
             y = joystick.activeY - Joystick.STICK_SIZE / 2,
             width = Joystick.STICK_SIZE,
@@ -54,12 +62,12 @@ class TouchControlsRenderer @Inject constructor(
             return
         }
 
-        val touchControlsMap = Assets.guiMap
+        val touchControlsMap = getTouchButtons()
 
         touchControlsMap.forEach { (key, value) ->
-            val touchKey = value.rect
+            val touchKey = value.rectangle
             spriteBatch.draw(
-                /* region = */ Assets.textureRegions[key],
+                /* region = */ textureRegions[key],
                 /* x = */ touchKey.x,
                 /* y = */ touchKey.y,
                 /* width = */ touchKey.width,
@@ -69,7 +77,7 @@ class TouchControlsRenderer @Inject constructor(
 
         // FIXME: Add pressed state for buttons
         if (mobsController.player.controlMode == ControlMode.CURSOR) {
-            val altKeyRect = touchControlsMap.get("alt").rect
+            val altKeyRect = touchControlsMap["alt"]?.rectangle ?: return
             spriteBatch.draw(shadeTexture, altKeyRect.x, altKeyRect.y, altKeyRect.width, altKeyRect.height)
         }
 
index 57cf81bb1025b40eca3fb501e98d4eb9031b9897..da96fb48d2f0d35b828db7a46b2255682811f07c 100644 (file)
@@ -1,23 +1,29 @@
 package ru.deadsoftware.cavedroid.game.render.windows
 
 import com.badlogic.gdx.Gdx
+import com.badlogic.gdx.graphics.g2d.BitmapFont
 import com.badlogic.gdx.graphics.g2d.SpriteBatch
 import com.badlogic.gdx.graphics.glutils.ShapeRenderer
 import ru.deadsoftware.cavedroid.game.model.item.InventoryItem
 import ru.deadsoftware.cavedroid.game.model.item.Item
 import ru.deadsoftware.cavedroid.misc.utils.drawSprite
+import ru.fredboy.cavedroid.domain.assets.usecase.GetStringHeightUseCase
+import ru.fredboy.cavedroid.domain.assets.usecase.GetStringWidthUseCase
 
 abstract class AbstractWindowRenderer {
 
     protected inline fun <reified T> drawItemsGrid(
         spriteBatch: SpriteBatch,
         shapeRenderer: ShapeRenderer,
+        font: BitmapFont,
         gridX: Float,
         gridY: Float,
         items: Iterable<T>,
         itemsInRow: Int,
         cellWidth: Float,
-        cellHeight: Float
+        cellHeight: Float,
+        getStringWidth: GetStringWidthUseCase,
+        getStringHeight: GetStringHeightUseCase,
     ) {
         if (T::class != Item::class && T::class != InventoryItem::class) {
             Gdx.app.log(_TAG, "Trying to draw items grid of not items")
@@ -39,7 +45,7 @@ abstract class AbstractWindowRenderer {
             val itemX = gridX + (index % itemsInRow) * cellWidth
             val itemY = gridY + (index / itemsInRow) * cellHeight
 
-            inventoryItem?.draw(spriteBatch, shapeRenderer, itemX, itemY)
+            inventoryItem?.draw(spriteBatch, shapeRenderer, font, itemX, itemY, getStringWidth, getStringHeight)
                 ?: item?.let { spriteBatch.drawSprite(it.sprite, itemX, itemY) }
         }
     }
index 78178bc52904f01f0eccff0176b9baeed015f4ea..0b2698a79c13d8ca707d09374efe16aa54242029 100644 (file)
@@ -17,20 +17,26 @@ import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager
 import ru.deadsoftware.cavedroid.game.ui.windows.inventory.ChestInventoryWindow
 import ru.deadsoftware.cavedroid.game.ui.windows.inventory.SurvivalInventoryWindow
 import ru.deadsoftware.cavedroid.misc.Assets
+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 javax.inject.Inject
 import kotlin.math.atan
 
 @GameScope
 class ChestWindowRenderer @Inject constructor(
-    private val mainConfig: MainConfig,
     private val mobsController: MobsController,
     private val gameWindowsManager: GameWindowsManager,
-    private val gameItemsHolder: GameItemsHolder,
+    private val textureRegions: GetTextureRegionByNameUseCase,
+    private val getStringWidth: GetStringWidthUseCase,
+    private val getStringHeight: GetStringHeightUseCase,
+    private val getFont: GetFontUseCase,
 ) : AbstractWindowRenderer(), IGameRenderer {
 
     override val renderLayer get() = WindowsRenderer.RENDER_LAYER
 
-    private val chestWindowTexture get() = requireNotNull(Assets.textureRegions[CHEST_WINDOW_KEY])
+    private val chestWindowTexture get() = requireNotNull(textureRegions[CHEST_WINDOW_KEY])
     
     
     override fun draw(spriteBatch: SpriteBatch, shapeRenderer: ShapeRenderer, viewport: Rectangle, delta: Float) {
@@ -45,17 +51,21 @@ class ChestWindowRenderer @Inject constructor(
         drawItemsGrid(
             spriteBatch = spriteBatch,
             shapeRenderer = shapeRenderer,
+            font = getFont(),
             gridX = windowX + GameWindowsConfigs.Chest.contentsMarginLeft,
             gridY = windowY + GameWindowsConfigs.Chest.contentsMarginTop,
             items = window.chest.items,
             itemsInRow = GameWindowsConfigs.Chest.itemsInRow,
             cellWidth = GameWindowsConfigs.Chest.itemsGridColWidth,
             cellHeight = GameWindowsConfigs.Chest.itemsGridRowHeight,
+            getStringWidth = getStringWidth,
+            getStringHeight = getStringHeight
         )
         
         drawItemsGrid(
             spriteBatch = spriteBatch,
             shapeRenderer = shapeRenderer,
+            font = getFont(),
             gridX = windowX + GameWindowsConfigs.Chest.itemsGridMarginLeft,
             gridY = windowY + GameWindowsConfigs.Chest.itemsGridMarginTop,
             items = mobsController.player.inventory.items.asSequence()
@@ -65,11 +75,14 @@ class ChestWindowRenderer @Inject constructor(
             itemsInRow = GameWindowsConfigs.Chest.itemsInRow,
             cellWidth = GameWindowsConfigs.Chest.itemsGridColWidth,
             cellHeight = GameWindowsConfigs.Chest.itemsGridRowHeight,
+            getStringWidth = getStringWidth,
+            getStringHeight = getStringHeight
         )
 
         drawItemsGrid(
             spriteBatch = spriteBatch,
             shapeRenderer = shapeRenderer,
+            font = getFont(),
             gridX = windowX + GameWindowsConfigs.Chest.itemsGridMarginLeft,
             gridY = windowY + windowTexture.regionHeight - GameWindowsConfigs.Chest.hotbarOffsetFromBottom,
             items = mobsController.player.inventory.items.asSequence()
@@ -78,12 +91,17 @@ class ChestWindowRenderer @Inject constructor(
             itemsInRow = GameWindowsConfigs.Chest.hotbarCells,
             cellWidth = GameWindowsConfigs.Chest.itemsGridColWidth,
             cellHeight = GameWindowsConfigs.Chest.itemsGridRowHeight,
+            getStringWidth = getStringWidth,
+            getStringHeight = getStringHeight
         )
 
         window.selectedItem?.drawSelected(
             spriteBatch = spriteBatch,
+            font = getFont(),
             x = Gdx.input.x * (viewport.width / Gdx.graphics.width),
-            y = Gdx.input.y * (viewport.height / Gdx.graphics.height)
+            y = Gdx.input.y * (viewport.height / Gdx.graphics.height),
+            getStringWidth = getStringWidth,
+            getStringHeight = getStringHeight,
         )
     }
 
index 6772282b15b18968ef3d0d82a27d1f1f8fb3651e..7542e06bfa2d926b882e344eb46ed2fbb7e6a2ae 100644 (file)
@@ -14,19 +14,26 @@ 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.Assets
+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 javax.inject.Inject
 
 @GameScope
 class CraftingWindowRenderer @Inject constructor(
-    private val mainConfig: MainConfig,
     private val mobsController: MobsController,
     private val gameWindowsManager: GameWindowsManager,
     private val gameItemsHolder: GameItemsHolder,
+    private val textureRegions: GetTextureRegionByNameUseCase,
+    private val getStringWidth: GetStringWidthUseCase,
+    private val getStringHeight: GetStringHeightUseCase,
+    private val getFont: GetFontUseCase,
 ) : AbstractWindowRenderer(), IGameRenderer {
 
     override val renderLayer get() = WindowsRenderer.RENDER_LAYER
 
-    private val craftingWindowTexture get() = requireNotNull(Assets.textureRegions[CRAFTING_WINDOW_KEY])
+    private val craftingWindowTexture get() = requireNotNull(textureRegions[CRAFTING_WINDOW_KEY])
 
     override fun draw(spriteBatch: SpriteBatch, shapeRenderer: ShapeRenderer, viewport: Rectangle, delta: Float) {
         val windowTexture = craftingWindowTexture
@@ -40,6 +47,7 @@ class CraftingWindowRenderer @Inject constructor(
         drawItemsGrid(
             spriteBatch = spriteBatch,
             shapeRenderer = shapeRenderer,
+            font = getFont(),
             gridX = windowX + GameWindowsConfigs.Crafting.itemsGridMarginLeft,
             gridY = windowY + GameWindowsConfigs.Crafting.itemsGridMarginTop,
             items = mobsController.player.inventory.items.asSequence()
@@ -49,11 +57,14 @@ class CraftingWindowRenderer @Inject constructor(
             itemsInRow = GameWindowsConfigs.Crafting.itemsInRow,
             cellWidth = GameWindowsConfigs.Crafting.itemsGridColWidth,
             cellHeight = GameWindowsConfigs.Crafting.itemsGridRowHeight,
+            getStringWidth = getStringWidth,
+            getStringHeight = getStringHeight
         )
 
         drawItemsGrid(
             spriteBatch = spriteBatch,
             shapeRenderer = shapeRenderer,
+            font = getFont(),
             gridX = windowX + GameWindowsConfigs.Crafting.itemsGridMarginLeft,
             gridY = windowY + windowTexture.regionHeight - GameWindowsConfigs.Crafting.hotbarOffsetFromBottom,
             items = mobsController.player.inventory.items.asSequence()
@@ -62,30 +73,41 @@ class CraftingWindowRenderer @Inject constructor(
             itemsInRow = GameWindowsConfigs.Crafting.hotbarCells,
             cellWidth = GameWindowsConfigs.Crafting.itemsGridColWidth,
             cellHeight = GameWindowsConfigs.Crafting.itemsGridRowHeight,
+            getStringWidth = getStringWidth,
+            getStringHeight = getStringHeight
         )
 
         drawItemsGrid(
             spriteBatch = spriteBatch,
             shapeRenderer = shapeRenderer,
+            font = getFont(),
             gridX = windowX + GameWindowsConfigs.Crafting.craftOffsetX,
             gridY = windowY + GameWindowsConfigs.Crafting.craftOffsetY,
             items = window.craftingItems.asSequence().map {  it ?: gameItemsHolder.fallbackItem.toInventoryItem()}.asIterable(),
             itemsInRow = GameWindowsConfigs.Crafting.craftGridSize,
             cellWidth = GameWindowsConfigs.Crafting.itemsGridColWidth,
             cellHeight = GameWindowsConfigs.Crafting.itemsGridRowHeight,
+            getStringWidth = getStringWidth,
+            getStringHeight = getStringHeight
         )
 
         window.craftResult?.draw(
             spriteBatch = spriteBatch,
             shapeRenderer = shapeRenderer,
+            font = getFont(),
             x = windowX + GameWindowsConfigs.Crafting.craftResultOffsetX,
-            y = windowY + GameWindowsConfigs.Crafting.craftResultOffsetY
+            y = windowY + GameWindowsConfigs.Crafting.craftResultOffsetY,
+            getStringWidth = getStringWidth,
+            getStringHeight = getStringHeight,
         )
 
         window.selectedItem?.drawSelected(
             spriteBatch = spriteBatch,
+            font = getFont(),
             x = Gdx.input.x * (viewport.width / Gdx.graphics.width),
-            y = Gdx.input.y * (viewport.height / Gdx.graphics.height)
+            y = Gdx.input.y * (viewport.height / Gdx.graphics.height),
+            getStringWidth = getStringWidth,
+            getStringHeight = getStringHeight,
         )
     }
 
index 6bfac428fc32d3c76ab8b33cf9845306e3057138..5b9e88108ffdd6f187602f08ec3bc7e323f4754f 100644 (file)
@@ -3,30 +3,35 @@ package ru.deadsoftware.cavedroid.game.render.windows
 import com.badlogic.gdx.graphics.g2d.SpriteBatch
 import com.badlogic.gdx.graphics.glutils.ShapeRenderer
 import com.badlogic.gdx.math.Rectangle
-import ru.deadsoftware.cavedroid.MainConfig
 import ru.deadsoftware.cavedroid.game.GameItemsHolder
 import ru.deadsoftware.cavedroid.game.GameScope
-import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager
 import ru.deadsoftware.cavedroid.game.mobs.MobsController
 import ru.deadsoftware.cavedroid.game.render.IGameRenderer
 import ru.deadsoftware.cavedroid.game.render.WindowsRenderer
 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsConfigs
-import ru.deadsoftware.cavedroid.misc.Assets
+import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager
+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 javax.inject.Inject
 import kotlin.math.min
 
 @GameScope
 class CreativeWindowRenderer @Inject constructor(
-    private val mainConfig: MainConfig,
     private val gameWindowsManager: GameWindowsManager,
     private val gameItemsHolder: GameItemsHolder,
     private val mobsController: MobsController,
+    private val textureRegions: GetTextureRegionByNameUseCase,
+    private val getStringWidth: GetStringWidthUseCase,
+    private val getStringHeight: GetStringHeightUseCase,
+    private val getFont: GetFontUseCase,
 ) : AbstractWindowRenderer(), IGameRenderer {
 
     override val renderLayer get() = WindowsRenderer.RENDER_LAYER
 
-    private val creativeWindowTexture get() = requireNotNull(Assets.textureRegions[CREATIVE_WINDOW_KEY])
-    private val scrollIndicatorTexture get() = requireNotNull(Assets.textureRegions[SCROLL_INDICATOR_KEY])
+    private val creativeWindowTexture get() = requireNotNull(textureRegions[CREATIVE_WINDOW_KEY])
+    private val scrollIndicatorTexture get() = requireNotNull(textureRegions[SCROLL_INDICATOR_KEY])
 
 
     override fun draw(spriteBatch: SpriteBatch, shapeRenderer: ShapeRenderer, viewport: Rectangle, delta: Float) {
@@ -56,23 +61,29 @@ class CreativeWindowRenderer @Inject constructor(
         drawItemsGrid(
             spriteBatch = spriteBatch,
             shapeRenderer = shapeRenderer,
+            font = getFont(),
             gridX = windowX + GameWindowsConfigs.Creative.itemsGridMarginLeft,
             gridY = windowY + GameWindowsConfigs.Creative.itemsGridMarginTop,
             items = items.asIterable(),
             itemsInRow = GameWindowsConfigs.Creative.itemsInRow,
             cellWidth = GameWindowsConfigs.Creative.itemsGridColWidth,
             cellHeight = GameWindowsConfigs.Creative.itemsGridRowHeight,
+            getStringWidth = getStringWidth,
+            getStringHeight = getStringHeight
         )
 
         drawItemsGrid(
             spriteBatch = spriteBatch,
             shapeRenderer = shapeRenderer,
+            font = getFont(),
             gridX = windowX + GameWindowsConfigs.Creative.itemsGridMarginLeft,
             gridY = windowY + creativeWindow.regionHeight - GameWindowsConfigs.Creative.playerInventoryOffsetFromBottom,
             items = mobsController.player.inventory.items.asSequence().take(GameWindowsConfigs.Creative.invItems).asIterable(),
             itemsInRow = GameWindowsConfigs.Creative.invItems,
             cellWidth = GameWindowsConfigs.Creative.itemsGridColWidth,
             cellHeight = GameWindowsConfigs.Creative.itemsGridRowHeight,
+            getStringWidth = getStringWidth,
+            getStringHeight = getStringHeight
         )
     }
 
index 3037009a5c8e843e84ddb089e29369baa06c3e23..ff676dd7cb47c02982d0353944a749e1bb9963b2 100644 (file)
@@ -1,11 +1,11 @@
 package ru.deadsoftware.cavedroid.game.render.windows
 
 import com.badlogic.gdx.Gdx
+import com.badlogic.gdx.graphics.g2d.Sprite
 import com.badlogic.gdx.graphics.g2d.SpriteBatch
 import com.badlogic.gdx.graphics.glutils.ShapeRenderer
 import com.badlogic.gdx.math.Rectangle
 import ru.deadsoftware.cavedroid.MainConfig
-import ru.deadsoftware.cavedroid.game.GameItemsHolder
 import ru.deadsoftware.cavedroid.game.GameScope
 import ru.deadsoftware.cavedroid.game.mobs.MobsController
 import ru.deadsoftware.cavedroid.game.render.IGameRenderer
@@ -13,9 +13,12 @@ import ru.deadsoftware.cavedroid.game.render.WindowsRenderer
 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.Assets
 import ru.deadsoftware.cavedroid.misc.utils.drawSprite
 import ru.deadsoftware.cavedroid.misc.utils.withScissors
+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 javax.inject.Inject
 
 @GameScope
@@ -23,13 +26,18 @@ class FurnaceWindowRenderer @Inject constructor(
     private val mainConfig: MainConfig,
     private val mobsController: MobsController,
     private val gameWindowsManager: GameWindowsManager,
-    private val gameItemsHolder: GameItemsHolder,
+    private val textureRegions: GetTextureRegionByNameUseCase,
+    private val getStringWidth: GetStringWidthUseCase,
+    private val getStringHeight: GetStringHeightUseCase,
+    private val getFont: GetFontUseCase,
 ) : AbstractWindowRenderer(), IGameRenderer {
 
     override val renderLayer get() = WindowsRenderer.RENDER_LAYER
 
-    private val furnaceWindowTexture get() = requireNotNull(Assets.textureRegions[FURNACE_WINDOW_KEY])
+    private val furnaceWindowTexture get() = requireNotNull(textureRegions[FURNACE_WINDOW_KEY])
 
+    private val furnaceProgress by lazy { Sprite(textureRegions["furnace_progress"]) }
+    private val furnaceBurn by lazy { Sprite(textureRegions["furnace_burn"]) }
     
     override fun draw(spriteBatch: SpriteBatch, shapeRenderer: ShapeRenderer, viewport: Rectangle, delta: Float) {
         val windowTexture = furnaceWindowTexture
@@ -43,6 +51,7 @@ class FurnaceWindowRenderer @Inject constructor(
         drawItemsGrid(
             spriteBatch = spriteBatch,
             shapeRenderer = shapeRenderer,
+            font = getFont(),
             gridX = windowX + GameWindowsConfigs.Furnace.itemsGridMarginLeft,
             gridY = windowY + GameWindowsConfigs.Furnace.itemsGridMarginTop,
             items = mobsController.player.inventory.items.asSequence()
@@ -52,11 +61,14 @@ class FurnaceWindowRenderer @Inject constructor(
             itemsInRow = GameWindowsConfigs.Furnace.itemsInRow,
             cellWidth = GameWindowsConfigs.Furnace.itemsGridColWidth,
             cellHeight = GameWindowsConfigs.Furnace.itemsGridRowHeight,
+            getStringWidth = getStringWidth,
+            getStringHeight = getStringHeight
         )
 
         drawItemsGrid(
             spriteBatch = spriteBatch,
             shapeRenderer = shapeRenderer,
+            font = getFont(),
             gridX = windowX + GameWindowsConfigs.Furnace.itemsGridMarginLeft,
             gridY = windowY + windowTexture.regionHeight - GameWindowsConfigs.Furnace.hotbarOffsetFromBottom,
             items = mobsController.player.inventory.items.asSequence()
@@ -65,27 +77,38 @@ class FurnaceWindowRenderer @Inject constructor(
             itemsInRow = GameWindowsConfigs.Furnace.hotbarCells,
             cellWidth = GameWindowsConfigs.Furnace.itemsGridColWidth,
             cellHeight = GameWindowsConfigs.Furnace.itemsGridRowHeight,
+            getStringWidth = getStringWidth,
+            getStringHeight = getStringHeight
         )
 
         window.furnace.fuel?.draw(
             spriteBatch = spriteBatch,
             shapeRenderer = shapeRenderer,
+            font = getFont(),
             x = windowX + GameWindowsConfigs.Furnace.smeltFuelMarginLeft,
-            y = windowY + GameWindowsConfigs.Furnace.smeltFuelMarginTop
+            y = windowY + GameWindowsConfigs.Furnace.smeltFuelMarginTop,
+            getStringWidth = getStringWidth,
+            getStringHeight = getStringHeight,
         )
 
         window.furnace.input?.draw(
             spriteBatch = spriteBatch,
             shapeRenderer = shapeRenderer,
+            font = getFont(),
             x = windowX + GameWindowsConfigs.Furnace.smeltInputMarginLeft,
-            y = windowY + GameWindowsConfigs.Furnace.smeltInputMarginTop
+            y = windowY + GameWindowsConfigs.Furnace.smeltInputMarginTop,
+            getStringWidth = getStringWidth,
+            getStringHeight = getStringHeight,
         )
 
         window.furnace.result?.draw(
             spriteBatch = spriteBatch,
             shapeRenderer = shapeRenderer,
+            font = getFont(),
             x = windowX + GameWindowsConfigs.Furnace.smeltResultOffsetX,
-            y = windowY + GameWindowsConfigs.Furnace.smeltResultOffsetY
+            y = windowY + GameWindowsConfigs.Furnace.smeltResultOffsetY,
+            getStringWidth = getStringWidth,
+            getStringHeight = getStringHeight,
         )
 
         if (window.furnace.isActive) {
@@ -95,11 +118,11 @@ class FurnaceWindowRenderer @Inject constructor(
                 mainConfig = mainConfig,
                 x = windowX + GameWindowsConfigs.Furnace.fuelBurnMarginLeft,
                 y = windowY + GameWindowsConfigs.Furnace.fuelBurnMarginTop + burn,
-                width = Assets.furnaceBurn.width,
+                width = furnaceBurn.width,
                 height = GameWindowsConfigs.Furnace.fuelBurnHeight,
             ) {
                 spriteBatch.drawSprite(
-                    sprite = Assets.furnaceBurn,
+                    sprite = furnaceBurn,
                     x = windowX + GameWindowsConfigs.Furnace.fuelBurnMarginLeft,
                     y = windowY + GameWindowsConfigs.Furnace.fuelBurnMarginTop
                 )
@@ -113,10 +136,10 @@ class FurnaceWindowRenderer @Inject constructor(
                     x = windowX + GameWindowsConfigs.Furnace.progressMarginLeft,
                     y = windowY + GameWindowsConfigs.Furnace.progressMarginTop,
                     width = progress,
-                    height = Assets.furnaceProgress.height
+                    height = furnaceProgress.height
                 ) {
                     spriteBatch.drawSprite(
-                        sprite = Assets.furnaceProgress,
+                        sprite = furnaceProgress,
                         x = windowX + GameWindowsConfigs.Furnace.progressMarginLeft,
                         y = windowY + GameWindowsConfigs.Furnace.progressMarginTop,
                     )
@@ -126,8 +149,11 @@ class FurnaceWindowRenderer @Inject constructor(
 
         window.selectedItem?.drawSelected(
             spriteBatch = spriteBatch,
+            font = getFont(),
             x = Gdx.input.x * (viewport.width / Gdx.graphics.width),
-            y = Gdx.input.y * (viewport.height / Gdx.graphics.height)
+            y = Gdx.input.y * (viewport.height / Gdx.graphics.height),
+            getStringWidth = getStringWidth,
+            getStringHeight = getStringHeight,
         )
     }
 
index 7ee3b27087eb76bd0b75f2549786b54b5eac241c..4f8e947d914b8120b4afa26d7167aebf3f0ba196 100644 (file)
@@ -16,6 +16,10 @@ 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.Assets
+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 javax.inject.Inject
 import kotlin.math.atan
 
@@ -25,11 +29,15 @@ class SurvivalWindowRenderer @Inject constructor(
     private val mobsController: MobsController,
     private val gameWindowsManager: GameWindowsManager,
     private val gameItemsHolder: GameItemsHolder,
+    private val textureRegions: GetTextureRegionByNameUseCase,
+    private val getStringWidth: GetStringWidthUseCase,
+    private val getStringHeight: GetStringHeightUseCase,
+    private val getFont: GetFontUseCase,
 ) : AbstractWindowRenderer(), IGameRenderer {
 
     override val renderLayer get() = WindowsRenderer.RENDER_LAYER
 
-    private val survivalWindowTexture get() = requireNotNull(Assets.textureRegions[SURVIVAL_WINDOW_KEY])
+    private val survivalWindowTexture get() = requireNotNull(textureRegions[SURVIVAL_WINDOW_KEY])
 
     private fun setPortraitHeadRotation(portraitX: Float, portraitY: Float) {
         if (mainConfig.isTouch) {
@@ -76,6 +84,7 @@ class SurvivalWindowRenderer @Inject constructor(
         drawItemsGrid(
             spriteBatch = spriteBatch,
             shapeRenderer = shapeRenderer,
+            font = getFont(),
             gridX = windowX + GameWindowsConfigs.Survival.itemsGridMarginLeft,
             gridY = windowY + GameWindowsConfigs.Survival.itemsGridMarginTop,
             items = mobsController.player.inventory.items.asSequence()
@@ -85,11 +94,14 @@ class SurvivalWindowRenderer @Inject constructor(
             itemsInRow = GameWindowsConfigs.Survival.itemsInRow,
             cellWidth = GameWindowsConfigs.Survival.itemsGridColWidth,
             cellHeight = GameWindowsConfigs.Survival.itemsGridRowHeight,
+            getStringWidth = getStringWidth,
+            getStringHeight = getStringHeight
         )
 
         drawItemsGrid(
             spriteBatch = spriteBatch,
             shapeRenderer = shapeRenderer,
+            font = getFont(),
             gridX = windowX + GameWindowsConfigs.Survival.itemsGridMarginLeft,
             gridY = windowY + windowTexture.regionHeight - GameWindowsConfigs.Survival.hotbarOffsetFromBottom,
             items = mobsController.player.inventory.items.asSequence()
@@ -98,11 +110,14 @@ class SurvivalWindowRenderer @Inject constructor(
             itemsInRow = GameWindowsConfigs.Survival.hotbarCells,
             cellWidth = GameWindowsConfigs.Survival.itemsGridColWidth,
             cellHeight = GameWindowsConfigs.Survival.itemsGridRowHeight,
+            getStringWidth = getStringWidth,
+            getStringHeight = getStringHeight
         )
 
         drawItemsGrid(
             spriteBatch = spriteBatch,
             shapeRenderer = shapeRenderer,
+            font = getFont(),
             gridX = windowX + GameWindowsConfigs.Survival.craftOffsetX,
             gridY = windowY + GameWindowsConfigs.Survival.craftOffsetY,
             items = window.craftingItems.asSequence().mapIndexedNotNull { index, it ->
@@ -115,19 +130,27 @@ class SurvivalWindowRenderer @Inject constructor(
             itemsInRow = GameWindowsConfigs.Survival.craftGridSize,
             cellWidth = GameWindowsConfigs.Survival.itemsGridColWidth,
             cellHeight = GameWindowsConfigs.Survival.itemsGridRowHeight,
+            getStringWidth = getStringWidth,
+            getStringHeight = getStringHeight
         )
 
         window.craftResult?.draw(
             spriteBatch = spriteBatch,
             shapeRenderer = shapeRenderer,
+            font = getFont(),
             x = windowX + GameWindowsConfigs.Survival.craftResultOffsetX,
-            y = windowY + GameWindowsConfigs.Survival.craftResultOffsetY
+            y = windowY + GameWindowsConfigs.Survival.craftResultOffsetY,
+            getStringWidth = getStringWidth,
+            getStringHeight = getStringHeight,
         )
 
         window.selectedItem?.drawSelected(
             spriteBatch = spriteBatch,
+            font = getFont(),
             x = Gdx.input.x * (viewport.width / Gdx.graphics.width),
-            y = Gdx.input.y * (viewport.height / Gdx.graphics.height)
+            y = Gdx.input.y * (viewport.height / Gdx.graphics.height),
+            getStringWidth = getStringWidth,
+            getStringHeight = getStringHeight,
         )
     }
 
index bd8c3d6df002921ef8c31a755b2ebc269721f80b..9ebc63ac72fdf713aa112aea229fc6af9ed56d3d 100644 (file)
@@ -15,6 +15,8 @@ import ru.deadsoftware.cavedroid.game.objects.container.ContainerController
 import ru.deadsoftware.cavedroid.game.objects.drop.DropController
 import ru.deadsoftware.cavedroid.game.ui.TooltipManager
 import ru.deadsoftware.cavedroid.game.world.GameWorld
+import ru.fredboy.cavedroid.domain.assets.usecase.GetPigSpritesUseCase
+import ru.fredboy.cavedroid.domain.assets.usecase.GetPlayerSpritesUseCase
 import java.nio.ByteBuffer
 import java.util.zip.GZIPInputStream
 import java.util.zip.GZIPOutputStream
@@ -187,7 +189,9 @@ object GameSaveLoader {
     fun load(
         mainConfig: MainConfig,
         gameItemsHolder: GameItemsHolder,
-        tooltipManager: TooltipManager
+        tooltipManager: TooltipManager,
+        getPlayerSprites: GetPlayerSpritesUseCase,
+        getPigSprites: GetPigSpritesUseCase,
     ): GameSaveData {
         val gameFolder = mainConfig.gameFolder
         val savesPath = "$gameFolder$SAVES_DIR"
@@ -201,11 +205,32 @@ object GameSaveLoader {
         val containersBytes = containersFile.readBytes()
 
         val dropController = ProtoBuf.decodeFromByteArray<SaveDataDto.DropControllerSaveData>(dropBytes)
-            .let { saveData -> DropController.fromSaveData(saveData, gameItemsHolder) }
+            .let { saveData ->
+                DropController.fromSaveData(
+                    /* saveData = */ saveData,
+                    /* gameItemsHolder = */ gameItemsHolder
+                )
+            }
+
         val mobsController = ProtoBuf.decodeFromByteArray<SaveDataDto.MobsControllerSaveData>(mobsBytes)
-            .let { saveData -> MobsController.fromSaveData(saveData, gameItemsHolder, tooltipManager) }
+            .let { saveData ->
+                MobsController.fromSaveData(
+                    saveData = saveData,
+                    gameItemsHolder = gameItemsHolder,
+                    tooltipManager = tooltipManager,
+                    getPigSprites = getPigSprites,
+                    getPlayerSprites = getPlayerSprites
+                )
+            }
+
         val containerController = ProtoBuf.decodeFromByteArray<SaveDataDto.ContainerControllerSaveData>(containersBytes)
-            .let { saveData -> ContainerController.fromSaveData(saveData, dropController, gameItemsHolder) }
+            .let { saveData ->
+                ContainerController.fromSaveData(
+                    saveData = saveData,
+                    dropController = dropController,
+                    gameItemsHolder = gameItemsHolder
+                )
+            }
 
         val (foreMap, backMap) = loadMap(gameItemsHolder, savesPath)
 
index d0f4eaa35b59c8c21a4272b1d79568089c3426ac..211543db102dbb3158d97f62b8aa9c0e1bf8078b 100644 (file)
@@ -5,7 +5,7 @@ import ru.deadsoftware.cavedroid.game.GameItemsHolder
 import ru.deadsoftware.cavedroid.game.GameScope
 import ru.deadsoftware.cavedroid.game.mobs.MobsController
 import ru.deadsoftware.cavedroid.game.model.block.Block
-import ru.deadsoftware.cavedroid.misc.utils.bl
+import ru.fredboy.cavedroid.utils.bl
 import java.util.PriorityQueue
 import javax.inject.Inject
 import kotlin.math.min
index 7cc8a9021a855ebbdf8d0e8cc1c21f136e852fda..9ccc019cb60a04fc4d945efa1700c7a01b58aaa6 100644 (file)
@@ -5,6 +5,7 @@ import ru.deadsoftware.cavedroid.menu.MenuProc
 import ru.deadsoftware.cavedroid.menu.objects.ButtonEventListener
 import ru.deadsoftware.cavedroid.menu.objects.ButtonRenderer
 import ru.deadsoftware.cavedroid.misc.utils.AssetLoader
+import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase
 
 class MenuOptions(
     width: Float,
@@ -13,7 +14,8 @@ class MenuOptions(
     mainConfig: MainConfig,
     menuInput: MenuProc.Input,
     assetLoader: AssetLoader,
-) : Menu(width, height, buttonRenderer, mainConfig, menuInput, assetLoader) {
+    getTextureRegionByName: GetTextureRegionByNameUseCase,
+) : Menu(width, height, buttonRenderer, mainConfig, menuInput, assetLoader, getTextureRegionByName) {
 
     override fun getButtonEventListeners(): HashMap<String, ButtonEventListener> {
         val map = HashMap<String, ButtonEventListener>()
index e31a9ad4427c427d246b256f6992f65dac0c0fc4..99e1022ae0c9d44184136623a6b58788893db41b 100644 (file)
@@ -5,12 +5,14 @@ import ru.deadsoftware.cavedroid.menu.MenuProc
 import ru.deadsoftware.cavedroid.menu.MenuScope
 import ru.deadsoftware.cavedroid.menu.objects.ButtonRenderer
 import ru.deadsoftware.cavedroid.misc.utils.AssetLoader
+import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase
 import javax.inject.Inject
 
 @MenuScope
 class MenusFactory @Inject constructor(
     private val mainConfig: MainConfig,
     private val assetLoader: AssetLoader,
+    private val getTextureRegionByName: GetTextureRegionByNameUseCase,
 ) {
 
     fun getMainMenu(
@@ -19,7 +21,7 @@ class MenusFactory @Inject constructor(
         buttonRenderer: ButtonRenderer,
         menuInput: MenuProc.Input,
     ): MenuMain {
-        return MenuMain(width, height, buttonRenderer, mainConfig, menuInput, assetLoader)
+        return MenuMain(width, height, buttonRenderer, mainConfig, menuInput, assetLoader, getTextureRegionByName)
     }
 
     fun getMenuNewGame(
@@ -28,7 +30,7 @@ class MenusFactory @Inject constructor(
         buttonRenderer: ButtonRenderer,
         menuInput: MenuProc.Input,
     ): MenuNewGame {
-        return MenuNewGame(width, height, buttonRenderer, mainConfig, menuInput, assetLoader)
+        return MenuNewGame(width, height, buttonRenderer, mainConfig, menuInput, assetLoader, getTextureRegionByName)
     }
 
     fun getMenuOptions(
@@ -37,7 +39,7 @@ class MenusFactory @Inject constructor(
         buttonRenderer: ButtonRenderer,
         menuInput: MenuProc.Input,
     ): MenuOptions {
-        return MenuOptions(width, height, buttonRenderer, mainConfig, menuInput, assetLoader)
+        return MenuOptions(width, height, buttonRenderer, mainConfig, menuInput, assetLoader, getTextureRegionByName)
     }
 
 }
\ No newline at end of file
diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/misc/utils/MeasureUnitsUtils.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/misc/utils/MeasureUnitsUtils.kt
deleted file mode 100644 (file)
index 24103e7..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-package ru.deadsoftware.cavedroid.misc.utils
-
-import com.badlogic.gdx.math.MathUtils
-
-/**
- * Converts this value in BLOCKS into pixels
- */
-val Float.px get() = this * 16f
-
-/**
- * Converts this value in BLOCKS into pixels
- */
-val Int.px get() = this * 16f
-
-/**
- * Converts this value in PIXELS into blocks
- */
-val Float.bl get() = MathUtils.floor(this / 16f)
\ No newline at end of file
index 917f69b591933ee9a6bfc83354e5f012c0894363..329ece9bfcaea277755ac710d2b421ac87ed4329 100644 (file)
@@ -3,11 +3,13 @@ package ru.deadsoftware.cavedroid.misc.utils
 import com.badlogic.gdx.Gdx
 import com.badlogic.gdx.graphics.Color
 import com.badlogic.gdx.graphics.GL20
+import com.badlogic.gdx.graphics.g2d.BitmapFont
 import com.badlogic.gdx.graphics.g2d.GlyphLayout
 import com.badlogic.gdx.graphics.g2d.SpriteBatch
 import com.badlogic.gdx.math.Rectangle
 import ru.deadsoftware.cavedroid.MainConfig
 import ru.deadsoftware.cavedroid.misc.Assets
+import ru.fredboy.cavedroid.utils.bl
 
 private fun Rectangle.shifted(shift: Float) = Rectangle(x + shift, y, width, height)
 
@@ -49,9 +51,15 @@ fun forEachBlockInArea(
 }
 
 @JvmOverloads
-fun SpriteBatch.drawString(str: String, x: Float, y: Float, color: Color = Color.WHITE): GlyphLayout {
-    Assets.minecraftFont.color = color
-    return Assets.minecraftFont.draw(this, str, x, y)
+fun SpriteBatch.drawString(
+    font: BitmapFont,
+    str: String,
+    x: Float,
+    y: Float,
+    color: Color = Color.WHITE
+): GlyphLayout {
+    font.color = color
+    return font.draw(this, str, x, y)
 }
 
 /**
diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/misc/utils/mobs/MobSprites.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/misc/utils/mobs/MobSprites.kt
deleted file mode 100644 (file)
index 3b5eb4c..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-package ru.deadsoftware.cavedroid.misc.utils.mobs
-
-import ru.deadsoftware.cavedroid.game.mobs.Mob
-import ru.deadsoftware.cavedroid.game.mobs.Mob.Direction
-import ru.deadsoftware.cavedroid.misc.Assets
-
-object MobSprites {
-
-    object Player {
-
-        fun getBackgroundHand() = Assets.playerSprite[1][2]
-
-        fun getForegroundHand() = Assets.playerSprite[0][2]
-
-        fun getBackgroundLeg() = Assets.playerSprite[1][3]
-
-        fun getForegroundLeg() = Assets.playerSprite[0][3]
-
-        fun getHead(direction: Mob.Direction) = Assets.playerSprite[direction.index][0]
-
-        fun getBody(direction: Direction) = Assets.playerSprite[direction.index][1]
-
-        fun getBodyRelativeX() = 2
-
-        fun getBodyRelativeY() = 8
-
-        fun getLegsRelativeY() = 20
-
-    }
-
-    object Pig {
-
-        fun getForegroundLeg() = Assets.pigSprite[0][1]
-
-        fun getBackgroundLeg() = Assets.pigSprite[1][1]
-
-        fun getBody(direction: Direction) = Assets.pigSprite[direction.index][0]
-
-        fun getLeftLegRelativeX(direction: Direction) = 9 - direction.index * 9
-
-        fun getRightLegRelativeX(direction: Direction) = 21 - (9 * direction.index)
-
-        fun getLegsRelativeY() = 12
-
-    }
-
-}
\ No newline at end of file
index 8b9f2748b3b67226e6cccc30508f4a279d6e1f07..d443c88c8effc565a02b4579ba047d8602fcd2a3 100644 (file)
@@ -1,3 +1,11 @@
 include("android")
 include("desktop")
 include("core")
+
+include("core:base")
+
+// data modules
+include("core:data:assets")
+
+//domain modules
+include("core:domain:assets")