From 099071bdd02a7400360ce81f1180182f69f837aa Mon Sep 17 00:00:00 2001 From: minjaesong Date: Mon, 20 Dec 2021 22:56:16 +0900 Subject: [PATCH] get player head texture wip --- .../halfwidth_fullwidth_variable.tga | 2 +- .../keylayout/ko_kr_teletype_changbongson.ime | 2 +- assets/keylayout/ko_kr_teletype_ksx.ime | 282 ++++++++++++++++++ assets/mods/dwarventech/ModuleComputers.jar | Bin 456303 -> 456050 bytes .../spriteanimation/HasAssembledSprite.kt | 3 + .../torvald/spriteassembler/ADProperties.kt | 6 +- .../spriteassembler/AssembleSheetPixmap.kt | 70 +++-- .../spriteassembler/SpriteAssemblerApp.kt | 2 +- .../terrarum/console/CommandInterpreter.kt | 5 +- src/net/torvald/terrarum/console/Pause.kt | 15 + src/net/torvald/terrarum/console/Unpause.kt | 15 + .../terrarum/gameactors/ActorWithBody.kt | 14 +- .../torvald/terrarum/gameactors/WireActor.kt | 1 - .../terrarum/modulebasegame/TerrarumIngame.kt | 7 +- .../gameactors/ActorHumanoid.kt | 8 + .../modulebasegame/gameactors/IngamePlayer.kt | 21 +- .../modulebasegame/ui/UIInventoryMinimap.kt | 7 +- src/net/torvald/terrarum/ui/ConsoleWindow.kt | 11 +- 18 files changed, 431 insertions(+), 40 deletions(-) create mode 100644 assets/keylayout/ko_kr_teletype_ksx.ime create mode 100644 src/net/torvald/terrarum/console/Pause.kt create mode 100644 src/net/torvald/terrarum/console/Unpause.kt 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 02a0ee35f8ba6788e17f29cea1a543af6f6c4dc2..a6caddabb5c0d2ecdd561d90abb3426a67c0bcda 100644 GIT binary patch delta 44905 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 BRsH|~ delta 45564 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 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() {