DEADSOFTWARE

f4798164bce3317f158021c7daad3e356095be37
[cavedroid.git] /
1 package ru.fredboy.cavedroid.data.assets.internal
2
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
8 import java.io.File
9 import java.util.*
10 import javax.inject.Inject
11 import javax.inject.Singleton
12
13 @Singleton
14 internal class TextureRegionsAssetsRepositoryImpl @Inject constructor() : TextureRegionsAssetsRepository() {
15
16 private var textureRegions: HashMap<String, TextureRegion>? = null
17
18 private fun loadTextureRegions() {
19 val file = Gdx.files.internal(JSON_TEXTURE_REGIONS)
20 val dto = JsonFormat.decodeFromString<TextureRegionsDto>(file.readString())
21
22 val regions = HashMap<String, TextureRegion>()
23
24 dto.forEach { (fileName, fileData) ->
25 val texture = loadTexture("$fileName.png")
26
27 if (fileData.isEmpty()) {
28 regions[fileName.split(File.separator).last()] = flippedRegion(
29 texture = texture,
30 x = 0,
31 y = 0,
32 width = texture.width,
33 height = texture.height
34 )
35 } else {
36 fileData.forEach { (regionName, regionData) ->
37 regions[regionName.split(File.separator).last()] = flippedRegion(
38 texture = texture,
39 x = regionData.x,
40 y = regionData.y,
41 width = regionData.width ?: texture.width,
42 height = regionData.height ?: texture.height
43 )
44 }
45 }
46 }
47
48 textureRegions = regions
49 }
50
51 override fun initialize() {
52 loadTextureRegions()
53 }
54
55 override fun getTextureRegionByName(name: String): TextureRegion? {
56 return requireNotNull(textureRegions)[name]
57 }
58
59 override fun dispose() {
60 super.dispose()
61 textureRegions = null
62 }
63
64 companion object {
65 private val JsonFormat = Json { ignoreUnknownKeys = true }
66
67 private const val JSON_TEXTURE_REGIONS = "json/texture_regions.json"
68 }
69
70 }