dependencies {
implementation project(":core")
+ implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:$kotlinSerializationVersion"
api "com.badlogicgames.gdx:gdx-backend-lwjgl3:$gdxVersion"
api "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"
}
}
final Sprite sprite = item.getSprite();
+ final boolean smallSprite = !item.isTool() || item.isShears();
- if (!item.isTool()) {
+ if (smallSprite) {
sprite.setSize(Drop.DROP_SIZE, Drop.DROP_SIZE);
}
final SpriteOrigin spriteOrigin = item.getParams().getInHandSpriteOrigin();
final int handMultiplier = -getDirection().getBasis();
final float xOffset = (-1 + getDirection().getIndex()) * sprite.getWidth() + 4 + handMultiplier * (sprite.getWidth() * spriteOrigin.getX());
- final float yOffset = item.isTool() ? -sprite.getHeight() / 2 : 0;
+ final float yOffset = !smallSprite ? -sprite.getHeight() / 2 : 0;
float rotate = anim + 30;
sprite.setFlip(false, sprite.isFlipY());
sprite.setRotation(0);
sprite.setOriginCenter();
- sprite.rotate90(looksRight());
+ if (item.isTool()) {
+ sprite.rotate90(looksRight());
+ }
}
public void startHitting() {
return this is Slab
}
-
fun isTool(): Boolean {
contract { returns(true) implies (this@Item is Tool) }
return this is Tool
}
+ fun isShears(): Boolean {
+ contract { returns(true) implies (this@Item is Shears) }
+ return this is Shears
+ }
+
fun isUsable(): Boolean {
contract { returns(true) implies (this@Item is Placeable) }
return this is Placeable
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 javax.inject.Inject
@Reusable
-class BlockMapper @Inject constructor() {
+class BlockMapper @Inject constructor(
+ private val assetLoader: AssetLoader,
+) {
fun map(key: String, dto: BlockDto): Block {
val commonBlockParams = mapCommonParams(key, dto)
return null
}
- return Assets.blockTextures[textureName]
+ return Assets.resolveBlockTexture(assetLoader, textureName)
}
}
\ No newline at end of file
import ru.deadsoftware.cavedroid.game.model.item.Item
import ru.deadsoftware.cavedroid.game.model.item.Item.*
import ru.deadsoftware.cavedroid.misc.Assets
+import ru.deadsoftware.cavedroid.misc.utils.AssetLoader
import ru.deadsoftware.cavedroid.misc.utils.SpriteOrigin
import javax.inject.Inject
@Reusable
-class ItemMapper @Inject constructor() {
+class ItemMapper @Inject constructor(
+ private val assetLoader: AssetLoader,
+) {
fun map(key: String, dto: ItemDto, block: Block?, slabTopBlock: Block.Slab?, slabBottomBlock: Block.Slab?): Item {
val params = mapCommonParams(key, dto)
return null
}
- return Sprite(Assets.itemTextures[dto.texture])
+ val texture = Assets.resolveItemTexture(assetLoader, dto.texture)
+ return Sprite(texture)
.apply { flip(false, true) }
}
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;
}
}
+ private static Texture resolveTexture(AssetLoader assetLoader, String textureName, String lookUpPath, Map<String, Texture> cache) {
+ if (cache.containsKey(textureName)) {
+ return cache.get(textureName);
+ }
+
+ final Texture texture = loadTexture(assetLoader.getAssetHandle(lookUpPath + File.separator + textureName + ".png"));
+ cache.put(textureName, texture);
+
+ return texture;
+ }
+
+ public static Texture resolveItemTexture(AssetLoader assetLoader, String textureName) {
+ return resolveTexture(assetLoader, textureName, "textures/items", itemTextures);
+ }
+
+ public static Texture resolveBlockTexture(AssetLoader assetLoader, String textureName) {
+ return resolveTexture(assetLoader, textureName, "textures/blocks", blockTextures);
+ }
+
private static void loadAllPngsFromDirInto(FileHandle dir, Map<String, Texture> loadInto) {
for (FileHandle handle : dir.list((d, name) -> name.endsWith(".png"))) {
loadInto.put(handle.nameWithoutExtension(), loadTexture(handle));
-apply plugin: "kotlin"
+plugins {
+ id 'kotlin'
+ id 'org.jetbrains.kotlin.plugin.serialization' version "$kotlinVersion"
+}
sourceCompatibility = 17
sourceSets.main.java.srcDirs = [ "src/" ]