From a7e47ad41bad298da5bd0f1bcb011eb8434b7f26 Mon Sep 17 00:00:00 2001 From: fredboy Date: Sun, 26 May 2024 13:28:39 +0700 Subject: [PATCH] Start making clean architecture --- .gitignore | 3 +- assets/json/texture_regions.json | 24 +- assets/pp/mobs/char/1_0.png | Bin 256 -> 0 bytes assets/pp/mobs/char/1_1.png | Bin 194 -> 0 bytes assets/pp/mobs/char/1_2.png | Bin 181 -> 0 bytes assets/pp/mobs/char/1_3.png | Bin 167 -> 0 bytes assets/pp/mobs/pig/1_0.png | Bin 350 -> 0 bytes assets/pp/mobs/pig/1_1.png | Bin 144 -> 0 bytes assets/{pp => }/shade.png | Bin assets/{pp => textures}/allitems.png | Bin assets/{pp => textures}/background.png | Bin assets/{pp => textures}/background_top.png | Bin assets/{pp => textures}/break.png | Bin assets/{pp => textures}/buttons.png | Bin assets/{pp => textures}/chest.png | Bin assets/{pp => textures}/chest_large.png | Bin assets/{pp => textures}/crafting_table.png | Bin assets/{pp => textures}/furnace.png | Bin assets/{pp => textures}/gui.png | Bin assets/{pp => textures}/health.png | Bin assets/{pp => textures}/inventory.png | Bin .../char/0_0.png => textures/mobs/char/0.png} | Bin .../char/0_1.png => textures/mobs/char/1.png} | Bin .../char/0_2.png => textures/mobs/char/2.png} | Bin .../char/0_3.png => textures/mobs/char/3.png} | Bin .../pig/0_0.png => textures/mobs/pig/0.png} | Bin .../pig/0_1.png => textures/mobs/pig/1.png} | Bin .../textures/blocks/bed_l.png | Bin .../textures/blocks/bed_r.png | Bin .../textures/blocks/bedrock.png | Bin .../textures/blocks/bookshelf.png | Bin .../textures/blocks/bricks.png | Bin .../textures/blocks/cactus.png | Bin .../{pp => textures}/textures/blocks/cake.png | Bin .../textures/blocks/chest.png | Bin .../{pp => textures}/textures/blocks/clay.png | Bin .../textures/blocks/coal_block.png | Bin .../textures/blocks/coal_ore.png | Bin .../textures/blocks/cobblestone.png | Bin .../textures/blocks/cobblestone_mossy.png | Bin .../textures/blocks/crafting_table.png | Bin .../textures/blocks/dandelion.png | Bin .../textures/blocks/deadbush.png | Bin .../textures/blocks/diamond_block.png | Bin .../textures/blocks/diamond_ore.png | Bin .../{pp => textures}/textures/blocks/dirt.png | Bin .../textures/blocks/furnace.png | Bin .../textures/blocks/glass.png | Bin .../textures/blocks/gold_block.png | Bin .../textures/blocks/gold_ore.png | Bin .../textures/blocks/grass.png | Bin .../textures/blocks/grass_snowed.png | Bin .../textures/blocks/gravel.png | Bin .../textures/blocks/iron_bars.png | Bin .../textures/blocks/iron_block.png | Bin .../textures/blocks/iron_ore.png | Bin .../textures/blocks/ladder.png | Bin .../textures/blocks/lapis_block.png | Bin .../textures/blocks/lapis_ore.png | Bin .../textures/blocks/lava_flow.png | Bin .../textures/blocks/lava_still.png | Bin .../textures/blocks/leaves_oak.png | Bin .../textures/blocks/leaves_spruce.png | Bin .../textures/blocks/log_birch.png | Bin .../textures/blocks/log_oak.png | Bin .../textures/blocks/log_spruce.png | Bin .../textures/blocks/mushroom_brown.png | Bin .../textures/blocks/mushroom_red.png | Bin .../textures/blocks/noteblock.png | Bin .../textures/blocks/obsidian.png | Bin .../textures/blocks/planks_birch.png | Bin .../textures/blocks/planks_oak.png | Bin .../textures/blocks/planks_spruce.png | Bin .../{pp => textures}/textures/blocks/rose.png | Bin .../{pp => textures}/textures/blocks/sand.png | Bin .../textures/blocks/sandstone.png | Bin .../textures/blocks/sapling_birch.png | Bin .../textures/blocks/sapling_oak.png | Bin .../textures/blocks/sapling_spruce.png | Bin .../{pp => textures}/textures/blocks/snow.png | Bin .../textures/blocks/sponge.png | Bin .../textures/blocks/sponge_wet.png | Bin .../textures/blocks/stone.png | Bin .../textures/blocks/stone_slab.png | Bin .../textures/blocks/stonebrick.png | Bin .../textures/blocks/tallgrass.png | Bin .../textures/blocks/water_flow.png | Bin .../textures/blocks/water_still.png | Bin .../{pp => textures}/textures/blocks/web.png | Bin .../textures/blocks/wool_colored_black.png | Bin .../textures/blocks/wool_colored_blue.png | Bin .../textures/blocks/wool_colored_brown.png | Bin .../textures/blocks/wool_colored_cyan.png | Bin .../textures/blocks/wool_colored_gray.png | Bin .../textures/blocks/wool_colored_green.png | Bin .../blocks/wool_colored_light_blue.png | Bin .../textures/blocks/wool_colored_lime.png | Bin .../textures/blocks/wool_colored_magenta.png | Bin .../textures/blocks/wool_colored_orange.png | Bin .../textures/blocks/wool_colored_pink.png | Bin .../textures/blocks/wool_colored_purple.png | Bin .../textures/blocks/wool_colored_red.png | Bin .../textures/blocks/wool_colored_silver.png | Bin .../textures/blocks/wool_colored_white.png | Bin .../textures/blocks/wool_colored_yellow.png | Bin .../{pp => textures}/textures/items/bed.png | Bin .../textures/items/bucket_empty.png | Bin .../textures/items/bucket_lava.png | Bin .../textures/items/bucket_milk.png | Bin .../textures/items/bucket_water.png | Bin .../textures/items/charcoal.png | Bin .../{pp => textures}/textures/items/coal.png | Bin .../textures/items/diamond.png | Bin .../textures/items/diamond_axe.png | Bin .../textures/items/diamond_hoe.png | Bin .../textures/items/diamond_pickaxe.png | Bin .../textures/items/diamond_shovel.png | Bin .../textures/items/diamond_sword.png | Bin .../textures/items/gold_axe.png | Bin .../textures/items/gold_hoe.png | Bin .../textures/items/gold_ingot.png | Bin .../textures/items/gold_pickaxe.png | Bin .../textures/items/gold_shovel.png | Bin .../textures/items/gold_sword.png | Bin .../textures/items/iron_axe.png | Bin .../textures/items/iron_hoe.png | Bin .../textures/items/iron_ingot.png | Bin .../textures/items/iron_pickaxe.png | Bin .../textures/items/iron_shovel.png | Bin .../textures/items/iron_sword.png | Bin .../textures/items/lapis_lazuli.png | Bin .../textures/items/porkchop_cooked.png | Bin .../textures/items/porkchop_raw.png | Bin .../textures/items/shears.png | Bin .../textures/items/snowball.png | Bin .../textures/items/spawn_egg.png | Bin .../{pp => textures}/textures/items/stick.png | Bin .../textures/items/stone_axe.png | Bin .../textures/items/stone_hoe.png | Bin .../textures/items/stone_pickaxe.png | Bin .../textures/items/stone_shovel.png | Bin .../textures/items/stone_sword.png | Bin .../textures/items/wood_axe.png | Bin .../textures/items/wood_hoe.png | Bin .../textures/items/wood_pickaxe.png | Bin .../textures/items/wood_shovel.png | Bin .../textures/items/wood_sword.png | Bin buildSrc/src/main/kotlin/Dependencies.kt | 3 + .../kotlin/DependencyHandlerExtentions.kt | 38 +++ .../PluginDependencySpecScopeExtentions.kt | 9 + core/base/build.gradle.kts | 12 + .../cavedroid/utils/MeasureUnitsUtils.kt | 25 ++ core/build.gradle.kts | 25 +- core/data/assets/build.gradle.kts | 16 ++ .../data/assets/di/DataAssetsModule.kt | 50 ++++ .../internal/BlockAssetsRepositoryImpl.kt | 30 +++ .../BlockDamageAssetsRepositoryImpl.kt | 52 ++++ .../internal/FontAssetsRepositoryImpl.kt | 48 ++++ .../internal/ItemsAssetsRepositoryImpl.kt | 30 +++ .../internal/MobAssetsRepositoryImpl.kt | 63 +++++ .../TextureRegionsAssetsRepositoryImpl.kt | 70 ++++++ .../internal/TouchButtonsRepositoryImpl.kt | 60 +++++ .../assets/model/button/TouchButtonDto.kt | 14 ++ .../assets/model/button/TouchButtonsDto.kt | 3 + .../assets/model/region/TextureRegionDto.kt | 12 + .../assets/model/region/TextureRegionsDto.kt | 3 + core/domain/assets/build.gradle.kts | 13 + .../domain/assets/GameAssetsHolder.kt | 86 +++++++ .../domain/assets/model/MobSprite.kt | 33 +++ .../domain/assets/model/TouchButton.kt | 9 + .../assets/repository/AssetsRepository.kt | 70 ++++++ .../repository/BlockAssetsRepository.kt | 9 + .../repository/BlockDamageAssetsRepository.kt | 11 + .../assets/repository/FontAssetsRepository.kt | 12 + .../repository/ItemsAssetsRepository.kt | 9 + .../assets/repository/MobAssetsRepository.kt | 11 + .../TextureRegionsAssetsRepository.kt | 9 + .../TouchButtonsAssetsRepository.kt | 9 + .../assets/usecase/DisposeAssetsUseCase.kt | 16 ++ .../GetBlockDamageFrameCountUseCase.kt | 16 ++ .../usecase/GetBlockDamageSpriteUseCase.kt | 17 ++ .../assets/usecase/GetBlockTextureUseCase.kt | 17 ++ .../domain/assets/usecase/GetFontUseCase.kt | 17 ++ .../assets/usecase/GetItemTextureUseCase.kt | 17 ++ .../assets/usecase/GetPigSpritesUseCase.kt | 17 ++ .../assets/usecase/GetPlayerSpritesUseCase.kt | 17 ++ .../assets/usecase/GetStringHeightUseCase.kt | 16 ++ .../assets/usecase/GetStringWidthUseCase.kt | 16 ++ .../usecase/GetTextureRegionByNameUseCase.kt | 17 ++ .../assets/usecase/GetTouchButtonsUseCase.kt | 17 ++ .../assets/usecase/InitializeAssetsUseCase.kt | 16 ++ .../cavedroid/game/GameComponent.java | 4 +- .../cavedroid/game/GameModule.java | 42 +++- .../cavedroid/game/GameRenderer.java | 39 +-- .../cavedroid/game/GameScope.java | 10 - .../deadsoftware/cavedroid/game/mobs/Mob.java | 6 +- .../cavedroid/game/mobs/player/Player.java | 58 +++-- .../cavedroid/game/objects/TouchButton.java | 29 --- .../cavedroid/game/world/GameWorld.java | 32 ++- .../deadsoftware/cavedroid/menu/MenuProc.java | 35 ++- .../cavedroid/menu/submenus/Menu.java | 11 +- .../cavedroid/menu/submenus/MenuMain.java | 23 +- .../cavedroid/menu/submenus/MenuNewGame.java | 22 +- .../deadsoftware/cavedroid/misc/Assets.java | 234 ------------------ .../deadsoftware/cavedroid/misc/Renderer.java | 18 -- .../ru/deadsoftware/cavedroid/CaveGame.kt | 4 +- .../deadsoftware/cavedroid/MainComponent.kt | 28 ++- .../deadsoftware/cavedroid/game/GameScope.kt | 7 + .../updateblock/UpdateRequiresBlockAction.kt | 2 +- .../actions/useitem/UsePigSpawnEggAction.kt | 6 +- .../cavedroid/game/input/InputUtils.kt | 13 +- .../handler/mouse/AttackMouseInputHandler.kt | 6 +- .../mouse/CloseGameWindowMouseInputHandler.kt | 14 +- ...reativeInventoryScrollMouseInputHandler.kt | 4 +- .../handler/mouse/CursorMouseInputHandler.kt | 11 +- .../handler/mouse/HotbarMouseInputHandler.kt | 6 +- ...lectChestInventoryItemMouseInputHandler.kt | 4 +- ...tCraftingInventoryItemMouseInputHandler.kt | 4 +- ...tCreativeInventoryItemMouseInputHandler.kt | 4 +- ...ctFurnaceInventoryItemMouseInputHandler.kt | 4 +- ...tSurvivalInventoryItemMouseInputHandler.kt | 4 +- .../handler/mouse/UseItemMouseInputHandler.kt | 4 +- .../handler/touch/JoystickInputHandler.kt | 4 +- .../cavedroid/game/mobs/FallingBlock.kt | 4 +- .../cavedroid/game/mobs/MobSaveDataMapper.kt | 8 +- .../cavedroid/game/mobs/MobsController.kt | 15 +- .../deadsoftware/cavedroid/game/mobs/Pig.kt | 52 ++-- .../game/model/item/InventoryItem.kt | 40 ++- .../game/model/mapper/BlockMapper.kt | 4 +- .../cavedroid/game/model/mapper/ItemMapper.kt | 4 +- .../objects/container/ContainerController.kt | 2 +- .../game/render/BackgroundBlocksRenderer.kt | 8 +- .../cavedroid/game/render/BlocksRenderer.kt | 10 +- .../cavedroid/game/render/DebugRenderer.kt | 8 +- .../cavedroid/game/render/DropsRenderer.kt | 2 +- .../game/render/ForegroundBlocksRenderer.kt | 8 +- .../cavedroid/game/render/HudRenderer.kt | 29 ++- .../cavedroid/game/render/MobsRenderer.kt | 2 +- .../game/render/TouchControlsRenderer.kt | 22 +- .../render/windows/AbstractWindowRenderer.kt | 10 +- .../render/windows/ChestWindowRenderer.kt | 26 +- .../render/windows/CraftingWindowRenderer.kt | 30 ++- .../render/windows/CreativeWindowRenderer.kt | 23 +- .../render/windows/FurnaceWindowRenderer.kt | 50 +++- .../render/windows/SurvivalWindowRenderer.kt | 29 ++- .../cavedroid/game/save/GameSaveLoader.kt | 33 ++- .../GameWorldFluidsLogicControllerTask.kt | 2 +- .../cavedroid/menu/submenus/MenuOptions.kt | 4 +- .../cavedroid/menu/submenus/MenusFactory.kt | 8 +- .../cavedroid/misc/utils/MeasureUnitsUtils.kt | 18 -- .../cavedroid/misc/utils/RenderingUtils.kt | 14 +- .../cavedroid/misc/utils/mobs/MobSprites.kt | 47 ---- settings.gradle.kts | 8 + 253 files changed, 1659 insertions(+), 640 deletions(-) delete mode 100644 assets/pp/mobs/char/1_0.png delete mode 100644 assets/pp/mobs/char/1_1.png delete mode 100644 assets/pp/mobs/char/1_2.png delete mode 100644 assets/pp/mobs/char/1_3.png delete mode 100644 assets/pp/mobs/pig/1_0.png delete mode 100644 assets/pp/mobs/pig/1_1.png rename assets/{pp => }/shade.png (100%) rename assets/{pp => textures}/allitems.png (100%) rename assets/{pp => textures}/background.png (100%) rename assets/{pp => textures}/background_top.png (100%) rename assets/{pp => textures}/break.png (100%) rename assets/{pp => textures}/buttons.png (100%) rename assets/{pp => textures}/chest.png (100%) rename assets/{pp => textures}/chest_large.png (100%) rename assets/{pp => textures}/crafting_table.png (100%) rename assets/{pp => textures}/furnace.png (100%) rename assets/{pp => textures}/gui.png (100%) rename assets/{pp => textures}/health.png (100%) rename assets/{pp => textures}/inventory.png (100%) rename assets/{pp/mobs/char/0_0.png => textures/mobs/char/0.png} (100%) rename assets/{pp/mobs/char/0_1.png => textures/mobs/char/1.png} (100%) rename assets/{pp/mobs/char/0_2.png => textures/mobs/char/2.png} (100%) rename assets/{pp/mobs/char/0_3.png => textures/mobs/char/3.png} (100%) rename assets/{pp/mobs/pig/0_0.png => textures/mobs/pig/0.png} (100%) rename assets/{pp/mobs/pig/0_1.png => textures/mobs/pig/1.png} (100%) rename assets/{pp => textures}/textures/blocks/bed_l.png (100%) rename assets/{pp => textures}/textures/blocks/bed_r.png (100%) rename assets/{pp => textures}/textures/blocks/bedrock.png (100%) rename assets/{pp => textures}/textures/blocks/bookshelf.png (100%) rename assets/{pp => textures}/textures/blocks/bricks.png (100%) rename assets/{pp => textures}/textures/blocks/cactus.png (100%) rename assets/{pp => textures}/textures/blocks/cake.png (100%) rename assets/{pp => textures}/textures/blocks/chest.png (100%) rename assets/{pp => textures}/textures/blocks/clay.png (100%) rename assets/{pp => textures}/textures/blocks/coal_block.png (100%) rename assets/{pp => textures}/textures/blocks/coal_ore.png (100%) rename assets/{pp => textures}/textures/blocks/cobblestone.png (100%) rename assets/{pp => textures}/textures/blocks/cobblestone_mossy.png (100%) rename assets/{pp => textures}/textures/blocks/crafting_table.png (100%) rename assets/{pp => textures}/textures/blocks/dandelion.png (100%) rename assets/{pp => textures}/textures/blocks/deadbush.png (100%) rename assets/{pp => textures}/textures/blocks/diamond_block.png (100%) rename assets/{pp => textures}/textures/blocks/diamond_ore.png (100%) rename assets/{pp => textures}/textures/blocks/dirt.png (100%) rename assets/{pp => textures}/textures/blocks/furnace.png (100%) rename assets/{pp => textures}/textures/blocks/glass.png (100%) rename assets/{pp => textures}/textures/blocks/gold_block.png (100%) rename assets/{pp => textures}/textures/blocks/gold_ore.png (100%) rename assets/{pp => textures}/textures/blocks/grass.png (100%) rename assets/{pp => textures}/textures/blocks/grass_snowed.png (100%) rename assets/{pp => textures}/textures/blocks/gravel.png (100%) rename assets/{pp => textures}/textures/blocks/iron_bars.png (100%) rename assets/{pp => textures}/textures/blocks/iron_block.png (100%) rename assets/{pp => textures}/textures/blocks/iron_ore.png (100%) rename assets/{pp => textures}/textures/blocks/ladder.png (100%) rename assets/{pp => textures}/textures/blocks/lapis_block.png (100%) rename assets/{pp => textures}/textures/blocks/lapis_ore.png (100%) rename assets/{pp => textures}/textures/blocks/lava_flow.png (100%) rename assets/{pp => textures}/textures/blocks/lava_still.png (100%) rename assets/{pp => textures}/textures/blocks/leaves_oak.png (100%) rename assets/{pp => textures}/textures/blocks/leaves_spruce.png (100%) rename assets/{pp => textures}/textures/blocks/log_birch.png (100%) rename assets/{pp => textures}/textures/blocks/log_oak.png (100%) rename assets/{pp => textures}/textures/blocks/log_spruce.png (100%) rename assets/{pp => textures}/textures/blocks/mushroom_brown.png (100%) rename assets/{pp => textures}/textures/blocks/mushroom_red.png (100%) rename assets/{pp => textures}/textures/blocks/noteblock.png (100%) rename assets/{pp => textures}/textures/blocks/obsidian.png (100%) rename assets/{pp => textures}/textures/blocks/planks_birch.png (100%) rename assets/{pp => textures}/textures/blocks/planks_oak.png (100%) rename assets/{pp => textures}/textures/blocks/planks_spruce.png (100%) rename assets/{pp => textures}/textures/blocks/rose.png (100%) rename assets/{pp => textures}/textures/blocks/sand.png (100%) rename assets/{pp => textures}/textures/blocks/sandstone.png (100%) rename assets/{pp => textures}/textures/blocks/sapling_birch.png (100%) rename assets/{pp => textures}/textures/blocks/sapling_oak.png (100%) rename assets/{pp => textures}/textures/blocks/sapling_spruce.png (100%) rename assets/{pp => textures}/textures/blocks/snow.png (100%) rename assets/{pp => textures}/textures/blocks/sponge.png (100%) rename assets/{pp => textures}/textures/blocks/sponge_wet.png (100%) rename assets/{pp => textures}/textures/blocks/stone.png (100%) rename assets/{pp => textures}/textures/blocks/stone_slab.png (100%) rename assets/{pp => textures}/textures/blocks/stonebrick.png (100%) rename assets/{pp => textures}/textures/blocks/tallgrass.png (100%) rename assets/{pp => textures}/textures/blocks/water_flow.png (100%) rename assets/{pp => textures}/textures/blocks/water_still.png (100%) rename assets/{pp => textures}/textures/blocks/web.png (100%) rename assets/{pp => textures}/textures/blocks/wool_colored_black.png (100%) rename assets/{pp => textures}/textures/blocks/wool_colored_blue.png (100%) rename assets/{pp => textures}/textures/blocks/wool_colored_brown.png (100%) rename assets/{pp => textures}/textures/blocks/wool_colored_cyan.png (100%) rename assets/{pp => textures}/textures/blocks/wool_colored_gray.png (100%) rename assets/{pp => textures}/textures/blocks/wool_colored_green.png (100%) rename assets/{pp => textures}/textures/blocks/wool_colored_light_blue.png (100%) rename assets/{pp => textures}/textures/blocks/wool_colored_lime.png (100%) rename assets/{pp => textures}/textures/blocks/wool_colored_magenta.png (100%) rename assets/{pp => textures}/textures/blocks/wool_colored_orange.png (100%) rename assets/{pp => textures}/textures/blocks/wool_colored_pink.png (100%) rename assets/{pp => textures}/textures/blocks/wool_colored_purple.png (100%) rename assets/{pp => textures}/textures/blocks/wool_colored_red.png (100%) rename assets/{pp => textures}/textures/blocks/wool_colored_silver.png (100%) rename assets/{pp => textures}/textures/blocks/wool_colored_white.png (100%) rename assets/{pp => textures}/textures/blocks/wool_colored_yellow.png (100%) rename assets/{pp => textures}/textures/items/bed.png (100%) rename assets/{pp => textures}/textures/items/bucket_empty.png (100%) rename assets/{pp => textures}/textures/items/bucket_lava.png (100%) rename assets/{pp => textures}/textures/items/bucket_milk.png (100%) rename assets/{pp => textures}/textures/items/bucket_water.png (100%) rename assets/{pp => textures}/textures/items/charcoal.png (100%) rename assets/{pp => textures}/textures/items/coal.png (100%) rename assets/{pp => textures}/textures/items/diamond.png (100%) rename assets/{pp => textures}/textures/items/diamond_axe.png (100%) rename assets/{pp => textures}/textures/items/diamond_hoe.png (100%) rename assets/{pp => textures}/textures/items/diamond_pickaxe.png (100%) rename assets/{pp => textures}/textures/items/diamond_shovel.png (100%) rename assets/{pp => textures}/textures/items/diamond_sword.png (100%) rename assets/{pp => textures}/textures/items/gold_axe.png (100%) rename assets/{pp => textures}/textures/items/gold_hoe.png (100%) rename assets/{pp => textures}/textures/items/gold_ingot.png (100%) rename assets/{pp => textures}/textures/items/gold_pickaxe.png (100%) rename assets/{pp => textures}/textures/items/gold_shovel.png (100%) rename assets/{pp => textures}/textures/items/gold_sword.png (100%) rename assets/{pp => textures}/textures/items/iron_axe.png (100%) rename assets/{pp => textures}/textures/items/iron_hoe.png (100%) rename assets/{pp => textures}/textures/items/iron_ingot.png (100%) rename assets/{pp => textures}/textures/items/iron_pickaxe.png (100%) rename assets/{pp => textures}/textures/items/iron_shovel.png (100%) rename assets/{pp => textures}/textures/items/iron_sword.png (100%) rename assets/{pp => textures}/textures/items/lapis_lazuli.png (100%) rename assets/{pp => textures}/textures/items/porkchop_cooked.png (100%) rename assets/{pp => textures}/textures/items/porkchop_raw.png (100%) rename assets/{pp => textures}/textures/items/shears.png (100%) rename assets/{pp => textures}/textures/items/snowball.png (100%) rename assets/{pp => textures}/textures/items/spawn_egg.png (100%) rename assets/{pp => textures}/textures/items/stick.png (100%) rename assets/{pp => textures}/textures/items/stone_axe.png (100%) rename assets/{pp => textures}/textures/items/stone_hoe.png (100%) rename assets/{pp => textures}/textures/items/stone_pickaxe.png (100%) rename assets/{pp => textures}/textures/items/stone_shovel.png (100%) rename assets/{pp => textures}/textures/items/stone_sword.png (100%) rename assets/{pp => textures}/textures/items/wood_axe.png (100%) rename assets/{pp => textures}/textures/items/wood_hoe.png (100%) rename assets/{pp => textures}/textures/items/wood_pickaxe.png (100%) rename assets/{pp => textures}/textures/items/wood_shovel.png (100%) rename assets/{pp => textures}/textures/items/wood_sword.png (100%) create mode 100644 buildSrc/src/main/kotlin/DependencyHandlerExtentions.kt create mode 100644 buildSrc/src/main/kotlin/PluginDependencySpecScopeExtentions.kt create mode 100644 core/base/build.gradle.kts create mode 100644 core/base/src/main/kotlin/ru/fredboy/cavedroid/utils/MeasureUnitsUtils.kt create mode 100644 core/data/assets/build.gradle.kts create mode 100644 core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/di/DataAssetsModule.kt create mode 100644 core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/internal/BlockAssetsRepositoryImpl.kt create mode 100644 core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/internal/BlockDamageAssetsRepositoryImpl.kt create mode 100644 core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/internal/FontAssetsRepositoryImpl.kt create mode 100644 core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/internal/ItemsAssetsRepositoryImpl.kt create mode 100644 core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/internal/MobAssetsRepositoryImpl.kt create mode 100644 core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/internal/TextureRegionsAssetsRepositoryImpl.kt create mode 100644 core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/internal/TouchButtonsRepositoryImpl.kt create mode 100644 core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/model/button/TouchButtonDto.kt create mode 100644 core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/model/button/TouchButtonsDto.kt create mode 100644 core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/model/region/TextureRegionDto.kt create mode 100644 core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/model/region/TextureRegionsDto.kt create mode 100644 core/domain/assets/build.gradle.kts create mode 100644 core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/GameAssetsHolder.kt create mode 100644 core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/model/MobSprite.kt create mode 100644 core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/model/TouchButton.kt create mode 100644 core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/AssetsRepository.kt create mode 100644 core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/BlockAssetsRepository.kt create mode 100644 core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/BlockDamageAssetsRepository.kt create mode 100644 core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/FontAssetsRepository.kt create mode 100644 core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/ItemsAssetsRepository.kt create mode 100644 core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/MobAssetsRepository.kt create mode 100644 core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/TextureRegionsAssetsRepository.kt create mode 100644 core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/TouchButtonsAssetsRepository.kt create mode 100644 core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/DisposeAssetsUseCase.kt create mode 100644 core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetBlockDamageFrameCountUseCase.kt create mode 100644 core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetBlockDamageSpriteUseCase.kt create mode 100644 core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetBlockTextureUseCase.kt create mode 100644 core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetFontUseCase.kt create mode 100644 core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetItemTextureUseCase.kt create mode 100644 core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetPigSpritesUseCase.kt create mode 100644 core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetPlayerSpritesUseCase.kt create mode 100644 core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetStringHeightUseCase.kt create mode 100644 core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetStringWidthUseCase.kt create mode 100644 core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetTextureRegionByNameUseCase.kt create mode 100644 core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetTouchButtonsUseCase.kt create mode 100644 core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/InitializeAssetsUseCase.kt delete mode 100644 core/src/main/java/ru/deadsoftware/cavedroid/game/GameScope.java delete mode 100644 core/src/main/java/ru/deadsoftware/cavedroid/game/objects/TouchButton.java create mode 100644 core/src/main/kotlin/ru/deadsoftware/cavedroid/game/GameScope.kt delete mode 100644 core/src/main/kotlin/ru/deadsoftware/cavedroid/misc/utils/MeasureUnitsUtils.kt delete mode 100644 core/src/main/kotlin/ru/deadsoftware/cavedroid/misc/utils/mobs/MobSprites.kt diff --git a/.gitignore b/.gitignore index b24a8ed..c6de61e 100644 --- a/.gitignore +++ b/.gitignore @@ -120,4 +120,5 @@ Thumbs.db release-*/ keystore.properties -*/build/ +**/build/ +**/_build/ diff --git a/assets/json/texture_regions.json b/assets/json/texture_regions.json index 3c6e7af..240d1de 100644 --- a/assets/json/texture_regions.json +++ b/assets/json/texture_regions.json @@ -48,7 +48,7 @@ "h": 26 } }, - "pp/allitems": { + "textures/allitems": { "creative": { "w": 176, "h": 136 @@ -60,19 +60,19 @@ "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 @@ -89,13 +89,13 @@ "h": 14 } }, - "pp/chest": { + "textures/chest": { "chest": { "w": 176, "h": 168 } }, - "pp/buttons": { + "textures/buttons": { "button_0": { "w": 200, "h": 20 @@ -111,7 +111,7 @@ "h": 20 } }, - "pp/gui": { + "textures/gui": { "hotbar": { "y": 16, "w": 182, @@ -127,10 +127,10 @@ "h": 16 } }, - "pp/shade": {}, + "shade": {}, "gamelogo": {}, - "pp/background": {}, - "pp/health":{ + "textures/background": {}, + "textures/health":{ "heart_whole": { "w": 9 }, @@ -142,5 +142,7 @@ "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 index 2c1a2b2fed5c4608f6dc14efd814be8ad0fe0e4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 256 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqEX7WqAsj$Z!;#Vf%xUQ@+`UQd}}?t|1V|P=g7i4b$K%Hq6@P6 z&x_u@+3ZPqym@Y>dEW2zQdNqkfn*Vatg_m+uMTI|PnlQM1Iv1(CcBKq^(Dymt ztDhY_b~t`FgU$Q!yyF5>MOEI*)IU#TSh428<&0OGm>j$s_m^d6+iEa8(r{U7xlLJO ztNz_&8$ES~7TZ4ong7a*;->2|bP0l+XkK DnagB4 diff --git a/assets/pp/mobs/char/1_1.png b/assets/pp/mobs/char/1_1.png deleted file mode 100644 index eff8cc6bedb36bdd12033da1ffce19c8de82f56b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^EI`b|!3HE<7s&{N1d5$JLpXq-h9ji|$glKtaSY*@ zncBON>yUwntN$zqP7{TxizM&dvb1<6{720G27f_^o@2)a%`MIyTYhY-epmUv^LI(? znrRFzmY1(EBy3%>(szcj1LN(V%&XqL>sctuvsUBS;~AXGm>*2uw?g8wf4||vJ>_%s q(i!fZ7k~8ZSnBts?|IwL_KKE;%X7{*@9_sZg2B_(&t;ucLK6VGaYxbs diff --git a/assets/pp/mobs/char/1_2.png b/assets/pp/mobs/char/1_2.png deleted file mode 100644 index c17356229ba3aed591d9af21439adae137958760..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^EI`b|!3HE<7s&{N1d5$JLpXq-h9ji|$j|X~aSY*@ zIrZE|-ev=lmWTE)9wu-KEO9KFFL*=gH~$32n1rKdeTy&LoVcRsX?ggar-^5#&o^OM zD-@+F>ev0>;SW2<&O?(su5mR82pRd;X6|0?BsTqYd-0)pTOzopr0OAWaBme*a diff --git a/assets/pp/mobs/pig/1_0.png b/assets/pp/mobs/pig/1_0.png deleted file mode 100644 index ed31acc4e030350bee66ed803edafcb0724cb9ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 350 zcmV-k0iphhP)P000aK1^@s6m+}@%00004b3#c}2nYxW zd6F1HnLueb~znRR;```E8qh@4K(lH-{sJsXs4)!T() + + 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 index 0000000..507034f --- /dev/null +++ b/core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/internal/BlockDamageAssetsRepositoryImpl.kt @@ -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? = 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 index 0000000..c5e2eb3 --- /dev/null +++ b/core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/internal/FontAssetsRepositoryImpl.kt @@ -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 index 0000000..0a44ff6 --- /dev/null +++ b/core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/internal/ItemsAssetsRepositoryImpl.kt @@ -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() + + 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 index 0000000..7947cbd --- /dev/null +++ b/core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/internal/MobAssetsRepositoryImpl.kt @@ -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 index 0000000..f479816 --- /dev/null +++ b/core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/internal/TextureRegionsAssetsRepositoryImpl.kt @@ -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? = null + + private fun loadTextureRegions() { + val file = Gdx.files.internal(JSON_TEXTURE_REGIONS) + val dto = JsonFormat.decodeFromString(file.readString()) + + val regions = HashMap() + + 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 index 0000000..616f646 --- /dev/null +++ b/core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/internal/TouchButtonsRepositoryImpl.kt @@ -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() + + override fun getTouchButtons(): Map { + 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(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 index 0000000..c4e2e01 --- /dev/null +++ b/core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/model/button/TouchButtonDto.kt @@ -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 index 0000000..6682347 --- /dev/null +++ b/core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/model/button/TouchButtonsDto.kt @@ -0,0 +1,3 @@ +package ru.fredboy.cavedroid.data.assets.model.button + +typealias TouchButtonsDto = Map 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 index 0000000..6f2d171 --- /dev/null +++ b/core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/model/region/TextureRegionDto.kt @@ -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 index 0000000..d0bf265 --- /dev/null +++ b/core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/model/region/TextureRegionsDto.kt @@ -0,0 +1,3 @@ +package ru.fredboy.cavedroid.data.assets.model.region + +internal typealias TextureRegionsDto = Map> diff --git a/core/domain/assets/build.gradle.kts b/core/domain/assets/build.gradle.kts new file mode 100644 index 0000000..2dd0121 --- /dev/null +++ b/core/domain/assets/build.gradle.kts @@ -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 index 0000000..0149137 --- /dev/null +++ b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/GameAssetsHolder.kt @@ -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 { + 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 index 0000000..120b90a --- /dev/null +++ b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/model/MobSprite.kt @@ -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 index 0000000..a934314 --- /dev/null +++ b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/model/TouchButton.kt @@ -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 index 0000000..b797aed --- /dev/null +++ b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/AssetsRepository.kt @@ -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() + + 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 + ): 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 index 0000000..035dd4f --- /dev/null +++ b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/BlockAssetsRepository.kt @@ -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 index 0000000..dfae46b --- /dev/null +++ b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/BlockDamageAssetsRepository.kt @@ -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 index 0000000..939a260 --- /dev/null +++ b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/FontAssetsRepository.kt @@ -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 index 0000000..66720f0 --- /dev/null +++ b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/ItemsAssetsRepository.kt @@ -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 index 0000000..85c5ca8 --- /dev/null +++ b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/MobAssetsRepository.kt @@ -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 index 0000000..c84d0ba --- /dev/null +++ b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/TextureRegionsAssetsRepository.kt @@ -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 index 0000000..07c486b --- /dev/null +++ b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/repository/TouchButtonsAssetsRepository.kt @@ -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 + +} \ 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 index 0000000..58e152c --- /dev/null +++ b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/DisposeAssetsUseCase.kt @@ -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 index 0000000..089c863 --- /dev/null +++ b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetBlockDamageFrameCountUseCase.kt @@ -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 index 0000000..5fb52e5 --- /dev/null +++ b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetBlockDamageSpriteUseCase.kt @@ -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 index 0000000..d2c07bd --- /dev/null +++ b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetBlockTextureUseCase.kt @@ -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 index 0000000..032de5e --- /dev/null +++ b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetFontUseCase.kt @@ -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 index 0000000..84bfa2c --- /dev/null +++ b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetItemTextureUseCase.kt @@ -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 index 0000000..e38c6a8 --- /dev/null +++ b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetPigSpritesUseCase.kt @@ -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 index 0000000..183ee48 --- /dev/null +++ b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetPlayerSpritesUseCase.kt @@ -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 index 0000000..0c203e2 --- /dev/null +++ b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetStringHeightUseCase.kt @@ -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 index 0000000..901617f --- /dev/null +++ b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetStringWidthUseCase.kt @@ -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 index 0000000..ac7f8f7 --- /dev/null +++ b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetTextureRegionByNameUseCase.kt @@ -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 index 0000000..c9e4ed0 --- /dev/null +++ b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/GetTouchButtonsUseCase.kt @@ -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 { + 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 index 0000000..94fc9a6 --- /dev/null +++ b/core/domain/assets/src/main/kotlin/ru/fredboy/cavedroid/domain/assets/usecase/InitializeAssetsUseCase.kt @@ -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 diff --git a/core/src/main/java/ru/deadsoftware/cavedroid/game/GameComponent.java b/core/src/main/java/ru/deadsoftware/cavedroid/game/GameComponent.java index 94d37d4..6326308 100644 --- a/core/src/main/java/ru/deadsoftware/cavedroid/game/GameComponent.java +++ b/core/src/main/java/ru/deadsoftware/cavedroid/game/GameComponent.java @@ -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, diff --git a/core/src/main/java/ru/deadsoftware/cavedroid/game/GameModule.java b/core/src/main/java/ru/deadsoftware/cavedroid/game/GameModule.java index 6c71d78..74765e1 100644 --- a/core/src/main/java/ru/deadsoftware/cavedroid/game/GameModule.java +++ b/core/src/main/java/ru/deadsoftware/cavedroid/game/GameModule.java @@ -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(); diff --git a/core/src/main/java/ru/deadsoftware/cavedroid/game/GameRenderer.java b/core/src/main/java/ru/deadsoftware/cavedroid/game/GameRenderer.java index e063e09..941bd43 100644 --- a/core/src/main/java/ru/deadsoftware/cavedroid/game/GameRenderer.java +++ b/core/src/main/java/ru/deadsoftware/cavedroid/game/GameRenderer.java @@ -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 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 mouseInputHandlers, Set 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 entry : Assets.guiMap) { - TouchButton button = entry.value; - if (button.getRect().contains(touchX, touchY)) { + for (Map.Entry 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 index cfe440f..0000000 --- a/core/src/main/java/ru/deadsoftware/cavedroid/game/GameScope.java +++ /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 diff --git a/core/src/main/java/ru/deadsoftware/cavedroid/game/mobs/Mob.java b/core/src/main/java/ru/deadsoftware/cavedroid/game/mobs/Mob.java index 3ee37d3..e1c6514 100644 --- a/core/src/main/java/ru/deadsoftware/cavedroid/game/mobs/Mob.java +++ b/core/src/main/java/ru/deadsoftware/cavedroid/game/mobs/Mob.java @@ -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); } } diff --git a/core/src/main/java/ru/deadsoftware/cavedroid/game/mobs/player/Player.java b/core/src/main/java/ru/deadsoftware/cavedroid/game/mobs/player/Player.java index 9aa503f..406b165 100644 --- a/core/src/main/java/ru/deadsoftware/cavedroid/game/mobs/player/Player.java +++ b/core/src/main/java/ru/deadsoftware/cavedroid/game/mobs/player/Player.java @@ -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 index c33fcb5..0000000 --- a/core/src/main/java/ru/deadsoftware/cavedroid/game/objects/TouchButton.java +++ /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; - } - -} diff --git a/core/src/main/java/ru/deadsoftware/cavedroid/game/world/GameWorld.java b/core/src/main/java/ru/deadsoftware/cavedroid/game/world/GameWorld.java index b53e0a6..b6b9ff8 100644 --- a/core/src/main/java/ru/deadsoftware/cavedroid/game/world/GameWorld.java +++ b/core/src/main/java/ru/deadsoftware/cavedroid/game/world/GameWorld.java @@ -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) { diff --git a/core/src/main/java/ru/deadsoftware/cavedroid/menu/MenuProc.java b/core/src/main/java/ru/deadsoftware/cavedroid/menu/MenuProc.java index aa3888a..947392c 100644 --- a/core/src/main/java/ru/deadsoftware/cavedroid/menu/MenuProc.java +++ b/core/src/main/java/ru/deadsoftware/cavedroid/menu/MenuProc.java @@ -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(); } diff --git a/core/src/main/java/ru/deadsoftware/cavedroid/menu/submenus/Menu.java b/core/src/main/java/ru/deadsoftware/cavedroid/menu/submenus/Menu.java index 7e793b7..575eb7a 100644 --- a/core/src/main/java/ru/deadsoftware/cavedroid/menu/submenus/Menu.java +++ b/core/src/main/java/ru/deadsoftware/cavedroid/menu/submenus/Menu.java @@ -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++) { diff --git a/core/src/main/java/ru/deadsoftware/cavedroid/menu/submenus/MenuMain.java b/core/src/main/java/ru/deadsoftware/cavedroid/menu/submenus/MenuMain.java index 29aeb8f..d51f328 100644 --- a/core/src/main/java/ru/deadsoftware/cavedroid/menu/submenus/MenuMain.java +++ b/core/src/main/java/ru/deadsoftware/cavedroid/menu/submenus/MenuMain.java @@ -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); - } - - } - } diff --git a/core/src/main/java/ru/deadsoftware/cavedroid/menu/submenus/MenuNewGame.java b/core/src/main/java/ru/deadsoftware/cavedroid/menu/submenus/MenuNewGame.java index 33985ff..3bb4eaf 100644 --- a/core/src/main/java/ru/deadsoftware/cavedroid/menu/submenus/MenuNewGame.java +++ b/core/src/main/java/ru/deadsoftware/cavedroid/menu/submenus/MenuNewGame.java @@ -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); - } - - } } diff --git a/core/src/main/java/ru/deadsoftware/cavedroid/misc/Assets.java b/core/src/main/java/ru/deadsoftware/cavedroid/misc/Assets.java index 893414b..063fe30 100644 --- a/core/src/main/java/ru/deadsoftware/cavedroid/misc/Assets.java +++ b/core/src/main/java/ru/deadsoftware/cavedroid/misc/Assets.java @@ -1,253 +1,19 @@ 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 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 textureRegions = new HashMap<>(); - public static final ArrayMap guiMap = new ArrayMap<>(); - private static final GlyphLayout glyphLayout = new GlyphLayout(); - public static BitmapFont minecraftFont; - - public static Map blockTextures = new HashMap<>(); - public static Map 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 json/texture_regions.json, 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 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 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; diff --git a/core/src/main/java/ru/deadsoftware/cavedroid/misc/Renderer.java b/core/src/main/java/ru/deadsoftware/cavedroid/misc/Renderer.java index c2577d3..4c9bdad 100644 --- a/core/src/main/java/ru/deadsoftware/cavedroid/misc/Renderer.java +++ b/core/src/main/java/ru/deadsoftware/cavedroid/misc/Renderer.java @@ -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 diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/CaveGame.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/CaveGame.kt index 225dd3a..0ba7763 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/CaveGame.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/CaveGame.kt @@ -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() } diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/MainComponent.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/MainComponent.kt index b2a77ee..09474ec 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/MainComponent.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/MainComponent.kt @@ -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 index 0000000..b0e4457 --- /dev/null +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/GameScope.kt @@ -0,0 +1,7 @@ +package ru.deadsoftware.cavedroid.game + +import javax.inject.Scope + +@Scope +@Retention(AnnotationRetention.RUNTIME) +annotation class GameScope diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/actions/updateblock/UpdateRequiresBlockAction.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/actions/updateblock/UpdateRequiresBlockAction.kt index 53f56e3..2b3dd30 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/actions/updateblock/UpdateRequiresBlockAction.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/actions/updateblock/UpdateRequiresBlockAction.kt @@ -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 diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/actions/useitem/UsePigSpawnEggAction.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/actions/useitem/UsePigSpawnEggAction.kt index 5eddc5e..76088ae 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/actions/useitem/UsePigSpawnEggAction.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/actions/useitem/UsePigSpawnEggAction.kt @@ -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) } diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/InputUtils.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/InputUtils.kt index 425822a..ed62a3d 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/InputUtils.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/InputUtils.kt @@ -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 { diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/AttackMouseInputHandler.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/AttackMouseInputHandler.kt index 52333eb..dc242a8 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/AttackMouseInputHandler.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/AttackMouseInputHandler.kt @@ -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 } diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/CloseGameWindowMouseInputHandler.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/CloseGameWindowMouseInputHandler.kt index 4fb0879..2b1e934 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/CloseGameWindowMouseInputHandler.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/CloseGameWindowMouseInputHandler.kt @@ -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 +} diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/CreativeInventoryScrollMouseInputHandler.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/CreativeInventoryScrollMouseInputHandler.kt index 8acdb7e..2d0c229 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/CreativeInventoryScrollMouseInputHandler.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/CreativeInventoryScrollMouseInputHandler.kt @@ -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 diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/CursorMouseInputHandler.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/CursorMouseInputHandler.kt index c1f2af5..ea9941b 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/CursorMouseInputHandler.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/CursorMouseInputHandler.kt @@ -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 diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/HotbarMouseInputHandler.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/HotbarMouseInputHandler.kt index 6a66338..bc13aaf 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/HotbarMouseInputHandler.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/HotbarMouseInputHandler.kt @@ -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 } diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/SelectChestInventoryItemMouseInputHandler.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/SelectChestInventoryItemMouseInputHandler.kt index 62a4836..d646a01 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/SelectChestInventoryItemMouseInputHandler.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/SelectChestInventoryItemMouseInputHandler.kt @@ -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 diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/SelectCraftingInventoryItemMouseInputHandler.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/SelectCraftingInventoryItemMouseInputHandler.kt index aefea54..aef073b 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/SelectCraftingInventoryItemMouseInputHandler.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/SelectCraftingInventoryItemMouseInputHandler.kt @@ -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 diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/SelectCreativeInventoryItemMouseInputHandler.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/SelectCreativeInventoryItemMouseInputHandler.kt index 976f443..65a86b1 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/SelectCreativeInventoryItemMouseInputHandler.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/SelectCreativeInventoryItemMouseInputHandler.kt @@ -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 && diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/SelectFurnaceInventoryItemMouseInputHandler.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/SelectFurnaceInventoryItemMouseInputHandler.kt index eac8cfa..5cd846a 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/SelectFurnaceInventoryItemMouseInputHandler.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/SelectFurnaceInventoryItemMouseInputHandler.kt @@ -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 diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/SelectSurvivalInventoryItemMouseInputHandler.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/SelectSurvivalInventoryItemMouseInputHandler.kt index 58687fc..ec0db60 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/SelectSurvivalInventoryItemMouseInputHandler.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/SelectSurvivalInventoryItemMouseInputHandler.kt @@ -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 diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/UseItemMouseInputHandler.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/UseItemMouseInputHandler.kt index 7405faf..400eeae 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/UseItemMouseInputHandler.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/mouse/UseItemMouseInputHandler.kt @@ -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 } diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/touch/JoystickInputHandler.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/touch/JoystickInputHandler.kt index d717c18..90cba3c 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/touch/JoystickInputHandler.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/input/handler/touch/JoystickInputHandler.kt @@ -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)) } diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/mobs/FallingBlock.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/mobs/FallingBlock.kt index d4494a3..288fb76 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/mobs/FallingBlock.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/mobs/FallingBlock.kt @@ -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, diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/mobs/MobSaveDataMapper.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/mobs/MobSaveDataMapper.kt index 49adee3..d7b7517 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/mobs/MobSaveDataMapper.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/mobs/MobSaveDataMapper.kt @@ -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") diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/mobs/MobsController.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/mobs/MobsController.kt index 4b2c209..d435469 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/mobs/MobsController.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/mobs/MobsController.kt @@ -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() - var player: Player = Player(gameItemsHolder, tooltipManager) + var player: Player = Player(gameItemsHolder, tooltipManager, getPlayerSprites()) private set val mobs: List @@ -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) } } } diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/mobs/Pig.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/mobs/Pig.kt index b080e40..dde127d 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/mobs/Pig.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/mobs/Pig.kt @@ -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 diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/model/item/InventoryItem.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/model/item/InventoryItem.kt index f420120..0c50643 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/model/item/InventoryItem.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/model/item/InventoryItem.kt @@ -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) ) } } diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/model/mapper/BlockMapper.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/model/mapper/BlockMapper.kt index 19d8c47..136c06b 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/model/mapper/BlockMapper.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/model/mapper/BlockMapper.kt @@ -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 diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/model/mapper/ItemMapper.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/model/mapper/ItemMapper.kt index a1a6f0c..db8a4a2 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/model/mapper/ItemMapper.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/model/mapper/ItemMapper.kt @@ -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) diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/objects/container/ContainerController.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/objects/container/ContainerController.kt index d2159f1..4b0d896 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/objects/container/ContainerController.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/objects/container/ContainerController.kt @@ -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 diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/BackgroundBlocksRenderer.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/BackgroundBlocksRenderer.kt index 0d34540..55e879d 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/BackgroundBlocksRenderer.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/BackgroundBlocksRenderer.kt @@ -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 diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/BlocksRenderer.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/BlocksRenderer.kt index 68af67b..410f5f5 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/BlocksRenderer.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/BlocksRenderer.kt @@ -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) { diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/DebugRenderer.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/DebugRenderer.kt index 0fa2756..df8c9e1 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/DebugRenderer.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/DebugRenderer.kt @@ -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) } } diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/DropsRenderer.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/DropsRenderer.kt index d1fc65a..2dd59dc 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/DropsRenderer.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/DropsRenderer.kt @@ -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 diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/ForegroundBlocksRenderer.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/ForegroundBlocksRenderer.kt index 8353b0b..81091d2 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/ForegroundBlocksRenderer.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/ForegroundBlocksRenderer.kt @@ -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 diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/HudRenderer.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/HudRenderer.kt index b6b22ae..096ba4b 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/HudRenderer.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/HudRenderer.kt @@ -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() ) } diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/MobsRenderer.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/MobsRenderer.kt index 52ac971..b1f188c 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/MobsRenderer.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/MobsRenderer.kt @@ -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 diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/TouchControlsRenderer.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/TouchControlsRenderer.kt index f2198aa..aaa513c 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/TouchControlsRenderer.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/TouchControlsRenderer.kt @@ -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) } diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/windows/AbstractWindowRenderer.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/windows/AbstractWindowRenderer.kt index 57cf81b..da96fb4 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/windows/AbstractWindowRenderer.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/windows/AbstractWindowRenderer.kt @@ -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 drawItemsGrid( spriteBatch: SpriteBatch, shapeRenderer: ShapeRenderer, + font: BitmapFont, gridX: Float, gridY: Float, items: Iterable, 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) } } } diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/windows/ChestWindowRenderer.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/windows/ChestWindowRenderer.kt index 78178bc..0b2698a 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/windows/ChestWindowRenderer.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/windows/ChestWindowRenderer.kt @@ -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, ) } diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/windows/CraftingWindowRenderer.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/windows/CraftingWindowRenderer.kt index 6772282..7542e06 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/windows/CraftingWindowRenderer.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/windows/CraftingWindowRenderer.kt @@ -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, ) } diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/windows/CreativeWindowRenderer.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/windows/CreativeWindowRenderer.kt index 6bfac42..5b9e881 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/windows/CreativeWindowRenderer.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/windows/CreativeWindowRenderer.kt @@ -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 ) } diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/windows/FurnaceWindowRenderer.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/windows/FurnaceWindowRenderer.kt index 3037009..ff676dd 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/windows/FurnaceWindowRenderer.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/windows/FurnaceWindowRenderer.kt @@ -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, ) } diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/windows/SurvivalWindowRenderer.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/windows/SurvivalWindowRenderer.kt index 7ee3b27..4f8e947 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/windows/SurvivalWindowRenderer.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/render/windows/SurvivalWindowRenderer.kt @@ -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, ) } diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/save/GameSaveLoader.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/save/GameSaveLoader.kt index bd8c3d6..9ebc63a 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/save/GameSaveLoader.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/save/GameSaveLoader.kt @@ -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(dropBytes) - .let { saveData -> DropController.fromSaveData(saveData, gameItemsHolder) } + .let { saveData -> + DropController.fromSaveData( + /* saveData = */ saveData, + /* gameItemsHolder = */ gameItemsHolder + ) + } + val mobsController = ProtoBuf.decodeFromByteArray(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(containersBytes) - .let { saveData -> ContainerController.fromSaveData(saveData, dropController, gameItemsHolder) } + .let { saveData -> + ContainerController.fromSaveData( + saveData = saveData, + dropController = dropController, + gameItemsHolder = gameItemsHolder + ) + } val (foreMap, backMap) = loadMap(gameItemsHolder, savesPath) diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/world/GameWorldFluidsLogicControllerTask.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/world/GameWorldFluidsLogicControllerTask.kt index d0f4eaa..211543d 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/world/GameWorldFluidsLogicControllerTask.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/game/world/GameWorldFluidsLogicControllerTask.kt @@ -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 diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/menu/submenus/MenuOptions.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/menu/submenus/MenuOptions.kt index 7cc8a90..9ccc019 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/menu/submenus/MenuOptions.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/menu/submenus/MenuOptions.kt @@ -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 { val map = HashMap() diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/menu/submenus/MenusFactory.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/menu/submenus/MenusFactory.kt index e31a9ad..99e1022 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/menu/submenus/MenusFactory.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/menu/submenus/MenusFactory.kt @@ -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 index 24103e7..0000000 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/misc/utils/MeasureUnitsUtils.kt +++ /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 diff --git a/core/src/main/kotlin/ru/deadsoftware/cavedroid/misc/utils/RenderingUtils.kt b/core/src/main/kotlin/ru/deadsoftware/cavedroid/misc/utils/RenderingUtils.kt index 917f69b..329ece9 100644 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/misc/utils/RenderingUtils.kt +++ b/core/src/main/kotlin/ru/deadsoftware/cavedroid/misc/utils/RenderingUtils.kt @@ -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 index 3b5eb4c..0000000 --- a/core/src/main/kotlin/ru/deadsoftware/cavedroid/misc/utils/mobs/MobSprites.kt +++ /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 diff --git a/settings.gradle.kts b/settings.gradle.kts index 8b9f274..d443c88 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -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") -- 2.29.2