diff --git a/assets/graphics/fonts/terrarum-sans-bitmap/halfwidth_fullwidth_variable.tga b/assets/graphics/fonts/terrarum-sans-bitmap/halfwidth_fullwidth_variable.tga index 9ac2bc03d..24908315a 100644 --- a/assets/graphics/fonts/terrarum-sans-bitmap/halfwidth_fullwidth_variable.tga +++ b/assets/graphics/fonts/terrarum-sans-bitmap/halfwidth_fullwidth_variable.tga @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fd9cc0d58fa757073ff1855be7b037de138192b201862a9112581ebe1dde0007 +oid sha256:fbf76ee60d3900824eb983e39207ef333111d0628dbb553a24076f1d8b510846 size 327698 diff --git a/assets/keylayout/ko_kr_teletype_changbongson.ime b/assets/keylayout/ko_kr_teletype_changbongson.ime index 1651c5e29..3551715fb 100644 --- a/assets/keylayout/ko_kr_teletype_changbongson.ime +++ b/assets/keylayout/ko_kr_teletype_changbongson.ime @@ -260,7 +260,7 @@ let reset = () => { } return Object.freeze({"n":"체시ᄂ 자ᄋ보ᄋ서ᄂ","v":"one","c":"CuriousTo\uA75Bvald","m":"rewrite", "t":states.keylayouts.map(it => [it[0],it[1]]), -"l":"koKR", +"l":"koKRabc", // return: [displayed output, composed output] "accept":(headkey,shiftin,altgrin)=>{ let layer = 1*shiftin diff --git a/assets/keylayout/ko_kr_teletype_ksx.ime b/assets/keylayout/ko_kr_teletype_ksx.ime new file mode 100644 index 000000000..ec9e881f3 --- /dev/null +++ b/assets/keylayout/ko_kr_teletype_ksx.ime @@ -0,0 +1,282 @@ +let states = {"keylayouts":[[""],[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +["0",")"], +["1","!"], +["2","@"], +["3","#"], +["4","$"], +["5","%"], +["6","^"], +["7","&"], +["8","*"], +["9","("], +["*"], +["#"], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +["\uFFB1"], +["\uFFD7"], +["\uFFBA"], +["\uFFB7"], +["\uFFA7","\uFFA8"], +["\uFFA9"], +["\uFFBE"], +["\uFFCC"], +["\uFFC4"], +["\uFFC6"], +["\uFFC2"], +["\uFFDC"], +["\uFFDA"], +["\uFFD3"], +["\uFFC3","\uFFC5"], +["\uFFC7","\uFFCB"], +["\uFFB2","\uFFB3"], +["\uFFA1","\uFFA2"], +["\uFFA4"], +["\uFFB5","\uFFB6"], +["\uFFCA"], +["\uFFBD"], +["\uFFB8","\uFFB9"], +["\uFFBC"], +["\uFFD2"], +["\uFFBB"], +[",","<"], +[".",">"], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[" "], +[undefined], +[undefined], +[undefined], +["\n"], +["\x08"], +["`","~"], +["-","_"], +["=","+"], +["[","{"], +["]","}"], +["\\","|"], +[";",":"], +["'",'"'], +["/","?"], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +["0"], +["1"], +["2"], +["3"], +["4"], +["5"], +["6"], +["7"], +["8"], +["9"], +["/"], +["*"], +["-"], +["+"], +["."], +["."], +["\n"], +["="], +["("], +[")"], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined] +], +"code":0} +let reset = () => { + states.code = 0 +} +return Object.freeze({"n":"체시ᄂ 두버ᄅ시ᄀ","v":"one","c":"CuriousTo\uA75Bvald","m":"rewrite", +"t":states.keylayouts.map(it => [it[0],it[1]]), +"l":"koKRabc", +// return: [displayed output, composed output] +"accept":(headkey,shiftin,altgrin)=>{ + let layer = 1*shiftin + states.code = 0 + + let s = states.keylayouts[headkey][layer] + return ['0', s] +}, +"backspace":()=>{ + reset() + return '' +}, +"end":()=>{ + reset() + return '' +}, +"reset":()=>{ reset() }, +"composing":()=>(states.code!='') +}) \ No newline at end of file diff --git a/assets/mods/dwarventech/ModuleComputers.jar b/assets/mods/dwarventech/ModuleComputers.jar index 02a0ee35f..a6caddabb 100644 Binary files a/assets/mods/dwarventech/ModuleComputers.jar and b/assets/mods/dwarventech/ModuleComputers.jar differ diff --git a/src/net/torvald/spriteanimation/HasAssembledSprite.kt b/src/net/torvald/spriteanimation/HasAssembledSprite.kt index 11e4ffd88..fb38b254d 100644 --- a/src/net/torvald/spriteanimation/HasAssembledSprite.kt +++ b/src/net/torvald/spriteanimation/HasAssembledSprite.kt @@ -1,6 +1,7 @@ package net.torvald.spriteanimation import com.badlogic.gdx.graphics.Texture +import com.badlogic.gdx.graphics.g2d.TextureRegion import net.torvald.spriteassembler.ADProperties import net.torvald.spriteassembler.AssembleSheetPixmap import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack @@ -15,6 +16,8 @@ interface HasAssembledSprite { /** ADL for glow sprite. Optional. */ var animDescGlow: ADProperties? + var spriteHeadTexture: TextureRegion? + // FIXME sometimes the animmation is invisible (row and nFrames mismatch -- row is changed to 1 but it's drawing 3rd frame?) /** diff --git a/src/net/torvald/spriteassembler/ADProperties.kt b/src/net/torvald/spriteassembler/ADProperties.kt index 63b9b9558..b547eecfb 100644 --- a/src/net/torvald/spriteassembler/ADProperties.kt +++ b/src/net/torvald/spriteassembler/ADProperties.kt @@ -47,7 +47,7 @@ class ADProperties { /** properties that are being used as skeletons (SKELETON_STAND) */ internal lateinit var skeletons: HashMap; private set /** properties that defines position of joint of the bodypart */ - internal val bodyparts = HashMap() + internal val bodypartJoints = HashMap() /** properties that are recognised as animations (ANIM_RUN, ANIM)IDLE) */ internal lateinit var animations: HashMap; private set /** an "animation frame" property (ANIM_RUN_1, ANIM_RUN_2) */ @@ -204,7 +204,7 @@ class ADProperties { get("BODYPARTS").forEach { try { - this.bodyparts[it.name] = (it.input as ADPropertyObject.Vector2i) + this.bodypartJoints[it.name] = (it.input as ADPropertyObject.Vector2i) } catch (e: NullPointerException) { if (it.name.isBlank()) @@ -216,7 +216,7 @@ class ADProperties { this.skeletons = skeletons this.animations = animations - this.bodypartFiles = this.bodyparts.keys.map { toFilename(it) } + this.bodypartFiles = this.bodypartJoints.keys.map { toFilename(it) } this.transforms = transforms cols = maxColFinder diff --git a/src/net/torvald/spriteassembler/AssembleSheetPixmap.kt b/src/net/torvald/spriteassembler/AssembleSheetPixmap.kt index d4c197eea..5d1a43cf6 100644 --- a/src/net/torvald/spriteassembler/AssembleSheetPixmap.kt +++ b/src/net/torvald/spriteassembler/AssembleSheetPixmap.kt @@ -2,16 +2,17 @@ package net.torvald.spriteassembler import com.badlogic.gdx.Gdx import com.badlogic.gdx.graphics.Pixmap +import com.badlogic.gdx.graphics.Texture +import com.badlogic.gdx.graphics.g2d.TextureRegion import com.badlogic.gdx.utils.GdxRuntimeException import net.torvald.terrarum.linearSearch -import net.torvald.terrarum.serialise.Common import net.torvald.terrarum.savegame.ByteArray64InputStream import net.torvald.terrarum.savegame.ByteArray64Reader import net.torvald.terrarum.savegame.SimpleFileSystem +import net.torvald.terrarum.serialise.Common +import java.io.FileNotFoundException import java.io.InputStream import java.util.* -import kotlin.collections.ArrayList -import kotlin.collections.HashMap /** * Assembles the single frame of the animation, outputs GDX Pixmap. @@ -22,6 +23,27 @@ import kotlin.collections.HashMap */ object AssembleSheetPixmap { + /** + * The name of the Bodypart here may or may not be case-sensitive (depends on your actual filesystem -- NTFS, APFS, Ext4, ...) + */ + fun getAssetsDirFileGetter(properties: ADProperties): (String) -> InputStream? = { partName: String -> + val file = Gdx.files.internal("assets/${properties.toFilename(partName)}") + if (file.exists()) file.read() else null + } + + /** + * The name of the Bodypart is CASE-SENSITIVE! + */ + fun getVirtualDiskFileGetter(bodypartMapping: Properties, disk: SimpleFileSystem): (String) -> InputStream? = { partName: String -> + bodypartMapping.getProperty(partName).let { + if (it != null) + ByteArray64InputStream(disk.getFile(bodypartMapping.getProperty(partName).toLong())!!.bytes) + else + null + } + } + + private fun drawAndGetCanvas(properties: ADProperties, fileGetter: (String) -> InputStream?): Pixmap { val canvas = Pixmap(properties.cols * properties.frameWidth, properties.rows * properties.frameHeight, Pixmap.Format.RGBA8888) canvas.blending = Pixmap.Blending.SourceOver @@ -34,25 +56,37 @@ object AssembleSheetPixmap { return canvas } - fun fromAssetsDir(properties: ADProperties) = drawAndGetCanvas(properties) { partName: String -> - val file = Gdx.files.internal("assets/${properties.toFilename(partName)}") - if (file.exists()) file.read() else null - } + fun fromAssetsDir(properties: ADProperties) = drawAndGetCanvas(properties, getAssetsDirFileGetter(properties)) fun fromVirtualDisk(disk: SimpleFileSystem, entrynum: Long, properties: ADProperties): Pixmap { val bodypartMapping = Properties() bodypartMapping.load(ByteArray64Reader(disk.getFile(entrynum)!!.bytes, Common.CHARSET)) - val fileGetter = { partName: String -> - bodypartMapping.getProperty(partName).let { - if (it != null) - ByteArray64InputStream(disk.getFile(bodypartMapping.getProperty(partName).toLong())!!.bytes) - else - null - } - } + return drawAndGetCanvas(properties, getVirtualDiskFileGetter(bodypartMapping, disk)) + } - return drawAndGetCanvas(properties, fileGetter) + fun getPartTex(getFile: (String) -> InputStream?, partName: String): TextureRegion? { + (getFile(partName) ?: throw FileNotFoundException("file for '$partName' is not found")).let { + val bytes = it.readAllBytes() + val pixmap = Pixmap(bytes, 0, bytes.size) + val tr = TextureRegion(Texture(pixmap)) + pixmap.dispose() + return tr + + } + return null + } + + fun getHeadFromAssetsDir(properties: ADProperties): TextureRegion? { + // TODO assemble from HAIR_FORE (optional), HAIR (optional) then HEAD (mandatory) + return getPartTex(getAssetsDirFileGetter(properties), "HEAD") + } + + fun getHeadFromVirtualDisk(disk: SimpleFileSystem, entrynum: Long, properties: ADProperties): TextureRegion? { + // TODO assemble from HAIR_FORE (optional), HAIR (optional) then HEAD (mandatory) + val bodypartMapping = Properties() + bodypartMapping.load(ByteArray64Reader(disk.getFile(entrynum)!!.bytes, Common.CHARSET)) + return getPartTex(getVirtualDiskFileGetter(bodypartMapping, disk), "HEAD") } private fun drawThisFrame(frameName: String, @@ -63,8 +97,8 @@ object AssembleSheetPixmap { val theAnim = properties.getAnimByFrameName(frameName) val skeleton = theAnim.skeleton.joints.reversed() val transforms = properties.getTransform(frameName) - val bodypartOrigins = properties.bodyparts - val bodypartImages = properties.bodyparts.keys.map { partname -> + val bodypartOrigins = properties.bodypartJoints + val bodypartImages = properties.bodypartJoints.keys.map { partname -> fileGetter(partname).let { file -> if (file == null) partname to null else { diff --git a/src/net/torvald/spriteassembler/SpriteAssemblerApp.kt b/src/net/torvald/spriteassembler/SpriteAssemblerApp.kt index 9acca3fff..a3293fd0e 100644 --- a/src/net/torvald/spriteassembler/SpriteAssemblerApp.kt +++ b/src/net/torvald/spriteassembler/SpriteAssemblerApp.kt @@ -160,7 +160,7 @@ class SpriteAssemblerApp(val gdxWindow: SpriteAssemblerPreview) : JFrame() { (panelAnimationsList.model as DefaultListModel).addElement("${it.value}") } // populate bodyparts view - adProperties.bodyparts.toSortedMap().forEach { part -> + adProperties.bodypartJoints.toSortedMap().forEach { part -> (panelBodypartsList.model as DefaultListModel).addElement("${part.key}: ${part.value}") } // populate image file list view diff --git a/src/net/torvald/terrarum/console/CommandInterpreter.kt b/src/net/torvald/terrarum/console/CommandInterpreter.kt index bf793d8c3..4f074faa2 100644 --- a/src/net/torvald/terrarum/console/CommandInterpreter.kt +++ b/src/net/torvald/terrarum/console/CommandInterpreter.kt @@ -40,10 +40,7 @@ internal object CommandInterpreter { var commandObj: ConsoleCommand? = null try { - if (single_command.name.toLowerCase().startsWith("qqq")) { - commandObj = CommandDict["QuitApp"] - } - else if (commandsNoAuth.contains(single_command.name.toLowerCase())) { + if (commandsNoAuth.contains(single_command.name.toLowerCase())) { commandObj = CommandDict[single_command.name.toLowerCase()] } else { diff --git a/src/net/torvald/terrarum/console/Pause.kt b/src/net/torvald/terrarum/console/Pause.kt new file mode 100644 index 000000000..7a243d44c --- /dev/null +++ b/src/net/torvald/terrarum/console/Pause.kt @@ -0,0 +1,15 @@ +package net.torvald.terrarum.console + +import net.torvald.terrarum.Terrarum + +/** + * Created by minjaesong on 2021-12-20. + */ +object Pause : ConsoleCommand { + override fun execute(args: Array) { + Terrarum.ingame?.pause() + } + + override fun printUsage() { + } +} \ No newline at end of file diff --git a/src/net/torvald/terrarum/console/Unpause.kt b/src/net/torvald/terrarum/console/Unpause.kt new file mode 100644 index 000000000..a25c70855 --- /dev/null +++ b/src/net/torvald/terrarum/console/Unpause.kt @@ -0,0 +1,15 @@ +package net.torvald.terrarum.console + +import net.torvald.terrarum.Terrarum + +/** + * Created by minjaesong on 2021-12-20. + */ +object Unpause : ConsoleCommand { + override fun execute(args: Array) { + Terrarum.ingame?.resume() + } + + override fun printUsage() { + } +} \ No newline at end of file diff --git a/src/net/torvald/terrarum/gameactors/ActorWithBody.kt b/src/net/torvald/terrarum/gameactors/ActorWithBody.kt index 2f4f5875d..4415328a7 100644 --- a/src/net/torvald/terrarum/gameactors/ActorWithBody.kt +++ b/src/net/torvald/terrarum/gameactors/ActorWithBody.kt @@ -3,6 +3,7 @@ package net.torvald.terrarum.gameactors import com.badlogic.gdx.Input import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.g2d.SpriteBatch +import com.badlogic.gdx.graphics.g2d.TextureRegion import net.torvald.spriteanimation.SpriteAnimation import net.torvald.terrarum.* import net.torvald.terrarum.App.printdbg @@ -1726,6 +1727,10 @@ open class ActorWithBody : Actor { flagDespawn = true } + open fun getSpriteHead(): TextureRegion? { + return sprite?.textureRegion?.get(0,0) + } + private fun forEachOccupyingTileNum(consumer: (ItemID?) -> Unit) { if (world == null) return @@ -1908,12 +1913,15 @@ inline fun drawBodyInGoodPosition(startX: Float, startY: Float, drawFun: (x: Flo val offendingPad2 = WorldCamera.width + 1 if (WorldCamera.x >= offendingPad && startX < WorldCamera.width) { +// App.batch.color = Color.RED drawFun(startX + INGAME.world.width * TILE_SIZEF, startY) } -// else if (WorldCamera.x <= offendingPad2 && startX > offendingPad) { -// drawFun(startX - INGAME.world.width * TILE_SIZEF, startY) -// } + else if (WorldCamera.x <= offendingPad2 && startX > offendingPad) { +// App.batch.color = Color.BLUE + drawFun(startX - INGAME.world.width * TILE_SIZEF, startY) + } else { +// App.batch.color = Color.WHITE drawFun(startX , startY) } } \ No newline at end of file diff --git a/src/net/torvald/terrarum/gameactors/WireActor.kt b/src/net/torvald/terrarum/gameactors/WireActor.kt index a50227cb0..6951c79a9 100644 --- a/src/net/torvald/terrarum/gameactors/WireActor.kt +++ b/src/net/torvald/terrarum/gameactors/WireActor.kt @@ -64,7 +64,6 @@ class WireActor : ActorWithBody { } } sprite!!.currentFrame = ret - sprite!!.flipVertical = true // turns out the sprites are rendered upside-down by default :( } private fun getNearbyTilesPos(x: Int, y: Int): Array { diff --git a/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt b/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt index f236987fb..5fced9d7a 100644 --- a/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt +++ b/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt @@ -737,6 +737,7 @@ open class TerrarumIngame(batch: SpriteBatch) : IngameInstance(batch) { private var worldWidth: Double = 0.0 private var oldCamX = 0 + private var oldPlayerX = 0.0 /** * Ingame (world) related updates; UI update must go to renderGame() @@ -798,17 +799,19 @@ open class TerrarumIngame(batch: SpriteBatch) : IngameInstance(batch) { BlockStats.update() } // fill up visibleActorsRenderFront for wires, if: - // 0. Camera wrapped + // 0. Camera or player x position wrapped // 1. new world has been loaded // 2. something is cued on the wire change queue // 3. wire renderclass changed - if (Math.abs(WorldCamera.x - oldCamX) >= worldWidth * 0.85 || + if (Math.abs(WorldCamera.x - oldCamX) >= worldWidth * 0.5 || + Math.abs((actorNowPlaying?.hitbox?.canonicalX ?: 0.0) - oldPlayerX) >= worldWidth * 0.5 || newWorldLoadedLatch || wireChangeQueue.isNotEmpty() || selectedWireRenderClass != oldSelectedWireRenderClass) { measureDebugTime("Ingame.FillUpWiresBuffer") { fillUpWiresBuffer() } } oldCamX = WorldCamera.x + oldPlayerX = actorNowPlaying?.hitbox?.canonicalX ?: 0.0 WORLD_UPDATE_TIMER += 1 diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/ActorHumanoid.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/ActorHumanoid.kt index b7e8b27bb..a9aef8318 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/ActorHumanoid.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/ActorHumanoid.kt @@ -1,6 +1,7 @@ package net.torvald.terrarum.modulebasegame.gameactors import com.badlogic.gdx.Gdx +import com.badlogic.gdx.graphics.g2d.TextureRegion import com.jme3.math.FastMath import net.torvald.gdx.graphics.Cvec import net.torvald.spriteanimation.HasAssembledSprite @@ -655,6 +656,13 @@ open class ActorHumanoid : ActorWithBody, Controllable, Pocketed, Factionable, L } } + override fun getSpriteHead(): TextureRegion? { + return if (this is IngamePlayer) + this.spriteHeadTexture + else if (this is HasAssembledSprite) + this.spriteHeadTexture + else super.getSpriteHead() + } fun Float.abs() = FastMath.abs(this) diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/IngamePlayer.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/IngamePlayer.kt index 56c72a06c..d7a680e7b 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/IngamePlayer.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/IngamePlayer.kt @@ -2,6 +2,7 @@ package net.torvald.terrarum.modulebasegame.gameactors import com.badlogic.gdx.Gdx import com.badlogic.gdx.graphics.Texture +import com.badlogic.gdx.graphics.g2d.TextureRegion import net.torvald.spriteanimation.SpriteAnimation import net.torvald.spriteassembler.ADProperties import net.torvald.spriteassembler.AssembleSheetPixmap @@ -29,6 +30,9 @@ class IngamePlayer : ActorHumanoid { val uuid = UUID.randomUUID() var worldCurrentlyPlaying: UUID = UUID(0L,0L) // only filled up on save and load; DO NOT USE THIS + var spriteHeadTexture: TextureRegion? = null + + /** ADL for main sprite. Necessary. */ @Transient var animDesc: ADProperties? = null /** ADL for glow sprite. Optional. */ @@ -79,15 +83,24 @@ class IngamePlayer : ActorHumanoid { * ``` */ fun reassembleSprite(sprite: SpriteAnimation?, spriteGlow: SpriteAnimation? = null) { - if (animDesc != null && sprite != null) + if (animDesc != null && sprite != null) { _rebuild(animDesc!!, sprite) + spriteHeadTexture = AssembleSheetPixmap.getHeadFromAssetsDir(animDesc!!) + } if (animDescGlow != null && spriteGlow != null) _rebuild(animDescGlow!!, spriteGlow) + } fun reassembleSprite(disk: SimpleFileSystem, sprite: SpriteAnimation?, spriteGlow: SpriteAnimation? = null) { - if (animDesc != null && sprite != null) + if (animDesc != null && sprite != null) { _rebuild(disk, -1025L, animDesc!!, sprite) + + if (disk.getEntry(-1025L) != null) + spriteHeadTexture = AssembleSheetPixmap.getHeadFromVirtualDisk(disk, -1025L, animDesc!!) + else + spriteHeadTexture = AssembleSheetPixmap.getHeadFromAssetsDir(animDesc!!) + } if (animDescGlow != null && spriteGlow != null) _rebuild(disk, -1026L, animDescGlow!!, spriteGlow) } @@ -140,5 +153,7 @@ class IngamePlayer : ActorHumanoid { sprite.nRows = newAnimDelays.size } - + override fun getSpriteHead(): TextureRegion? { + return spriteHeadTexture + } } \ No newline at end of file diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryMinimap.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryMinimap.kt index 6fe7f13b9..d06db05c0 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryMinimap.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryMinimap.kt @@ -7,10 +7,10 @@ import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.graphics.glutils.FrameBuffer import com.badlogic.gdx.utils.GdxRuntimeException import net.torvald.terrarum.* -import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE import net.torvald.terrarum.blockstats.MinimapComposer import net.torvald.terrarum.blockstats.MinimapComposer.MINIMAP_TILE_HEIGHT import net.torvald.terrarum.blockstats.MinimapComposer.MINIMAP_TILE_WIDTH +import net.torvald.terrarum.modulebasegame.gameactors.IngamePlayer import net.torvald.terrarum.modulebasegame.ui.UIInventoryFull.Companion.INVENTORY_CELLS_OFFSET_Y import net.torvald.terrarum.modulebasegame.ui.UIInventoryFull.Companion.INVENTORY_CELLS_UI_HEIGHT import net.torvald.terrarum.ui.Toolkit @@ -155,6 +155,11 @@ class UIInventoryMinimap(val full: UIInventoryFull) : UICanvas() { batch.color = Color.WHITE batch.draw(renderTextures[index], tx, ty, MINIMAP_TILE_WIDTH * minimapZoom, MINIMAP_TILE_HEIGHT * minimapZoom) } + + + ((INGAME.actorContainerInactive + INGAME.actorContainerActive).filter { it is IngamePlayer } as List).forEach { + // it.getSpriteHead() + } } } batch.begin() diff --git a/src/net/torvald/terrarum/ui/ConsoleWindow.kt b/src/net/torvald/terrarum/ui/ConsoleWindow.kt index 0394f1625..34991036d 100644 --- a/src/net/torvald/terrarum/ui/ConsoleWindow.kt +++ b/src/net/torvald/terrarum/ui/ConsoleWindow.kt @@ -129,6 +129,13 @@ class ConsoleWindow : UICanvas() { } uiItems.forEach { it.render(batch, camera) } + + Terrarum.ingame?.let { + batch.color = Color.WHITE + it.actorNowPlaying?.getSpriteHead()!!.let { + batch.draw(it, drawOffX + 10f, drawOffY + height + 4f) + } + } } override fun inputStrobed(e: TerrarumKeyboardEvent) { @@ -279,15 +286,15 @@ class ConsoleWindow : UICanvas() { } override fun endClosing(delta: Float) { - Terrarum.ingame?.setTooltipMessage(null) println("Close -- I made the game to pause: $iMadeTheGameToPause") if (iMadeTheGameToPause) { Terrarum.ingame?.resume() println("Close -- resume game") } + iMadeTheGameToPause = false + Terrarum.ingame?.setTooltipMessage(null) drawOffY = -height.toFloat() openingTimeCounter = 0f - iMadeTheGameToPause = false } override fun dispose() {