1 package ru.fredboy.cavedroid.data.assets.internal
3 import com.badlogic.gdx.Gdx
4 import com.badlogic.gdx.graphics.g2d.TextureRegion
5 import kotlinx.serialization.json.Json
6 import ru.fredboy.cavedroid.data.assets.model.region.TextureRegionsDto
7 import ru.fredboy.cavedroid.domain.assets.repository.TextureRegionsAssetsRepository
10 import javax.inject.Inject
11 import javax.inject.Singleton
14 internal class TextureRegionsAssetsRepositoryImpl @Inject constructor() : TextureRegionsAssetsRepository() {
16 private var textureRegions: HashMap<String, TextureRegion>? = null
18 private fun loadTextureRegions() {
19 val file = Gdx.files.internal(JSON_TEXTURE_REGIONS)
20 val dto = JsonFormat.decodeFromString<TextureRegionsDto>(file.readString())
22 val regions = HashMap<String, TextureRegion>()
24 dto.forEach { (fileName, fileData) ->
25 val texture = loadTexture("$fileName.png")
27 if (fileData.isEmpty()) {
28 regions[fileName.split(File.separator).last()] = flippedRegion(
32 width = texture.width,
33 height = texture.height
36 fileData.forEach { (regionName, regionData) ->
37 regions[regionName.split(File.separator).last()] = flippedRegion(
41 width = regionData.width ?: texture.width,
42 height = regionData.height ?: texture.height
48 textureRegions = regions
51 override fun initialize() {
55 override fun getTextureRegionByName(name: String): TextureRegion? {
56 return requireNotNull(textureRegions)[name]
59 override fun dispose() {
65 private val JsonFormat = Json { ignoreUnknownKeys = true }
67 private const val JSON_TEXTURE_REGIONS = "json/texture_regions.json"