drawing a held tile to the hand of the sprite

This commit is contained in:
minjaesong
2022-01-08 21:52:21 +09:00
parent 6697f2f5cd
commit 48f62e11bf
6 changed files with 86 additions and 24 deletions

View File

@@ -98,8 +98,32 @@ abstract class GameItem(val originalID: ItemID) : Comparable<GameItem>, Cloneabl
abstract val material: Material
/**
* DO NOT READ FROM THIS VALUE: USE `ItemCodex.getItemImage(item)`;
* this hack is needed to avoid the unsolvable issue regarding the ItemImage of the tiles, of which they
* cannot be assigned because of this old note:
*
* Don't assign! Create getter -- there's inevitable execution order fuckup on ModMgr,
* where it simultaneously wanted to be called before and after the Mod's EntryPoint if you assign value to it on init block.
*
*
* Note to future adventurers:
*
* the following code did not solved the issue
*
* file: net.torvald.terrarum.modulebasegame.EntryPoint
*
* ```
* override val itemImage: TextureRegion
* get() {
* val itemSheetNumber = App.tileMaker.tileIDtoItemSheetNumber(originalID)
* val bucket = if (isWall) BlocksDrawer.tileItemWall else BlocksDrawer.tileItemTerrain
* return bucket.get(
* itemSheetNumber % App.tileMaker.ITEM_ATLAS_TILES_X,
* itemSheetNumber / App.tileMaker.ITEM_ATLAS_TILES_X
* )
* }
* ```
*
*/
@Transient open val itemImage: TextureRegion? = null

View File

@@ -80,6 +80,15 @@ class EntryPoint : ModuleEntryPoint() {
override var inventoryCategory = if (isWall) Category.WALL else Category.BLOCK
override var isDynamic = false
override val material = MaterialCodex.getOrDefault(tile.material)
// override val itemImage: TextureRegion
// get() {
// val itemSheetNumber = App.tileMaker.tileIDtoItemSheetNumber(originalID)
// val bucket = if (isWall) BlocksDrawer.tileItemWall else BlocksDrawer.tileItemTerrain
// return bucket.get(
// itemSheetNumber % App.tileMaker.ITEM_ATLAS_TILES_X,
// itemSheetNumber / App.tileMaker.ITEM_ATLAS_TILES_X
// )
// }
init {
equipPosition = EquipPosition.HAND_GRIP

View File

@@ -3,13 +3,18 @@ package net.torvald.terrarum.utils
import java.awt.Toolkit
import java.awt.datatransfer.DataFlavor
import java.awt.datatransfer.StringSelection
import java.awt.datatransfer.UnsupportedFlavorException
/**
* Created by minjaesong on 2016-07-31.
*/
object Clipboard {
fun fetch(): String =
Toolkit.getDefaultToolkit().systemClipboard.getData(DataFlavor.stringFlavor) as String
fun fetch(): String = try {
Toolkit.getDefaultToolkit().systemClipboard.getData(DataFlavor.stringFlavor) as String
}
catch (e: UnsupportedFlavorException) {
""
}
fun copy(s: String) {
val selection = StringSelection(s)

View File

@@ -115,12 +115,19 @@ internal object BlocksDrawer {
// test print
//PixmapIO2.writeTGA(Gdx.files.absolute("${AppLoader.defaultDir}/terrainitem.tga"), itemTerrainPixmap, false)
tileItemTerrain = TextureRegionPack(App.tileMaker.itemTerrainTexture, TILE_SIZE, TILE_SIZE)
tileItemWall = TextureRegionPack(App.tileMaker.itemWallTexture, TILE_SIZE, TILE_SIZE)
// val texdata = tileItemTerrain.texture.textureData
// val textureBackedByPixmap = texdata.isPrepared
// if (!textureBackedByPixmap) texdata.prepare()
// val imageSheet = texdata.consumePixmap()
// PixmapIO2.writeTGA(Gdx.files.absolute("${App.defaultDir}/terrainitem.tga"), imageSheet, false)
// if (!textureBackedByPixmap) imageSheet.dispose()
// finally
tilesTerrain = weatherTerrains[1]

View File

@@ -65,6 +65,10 @@ class CreateTileAtlas {
private val atlasInit = "./assets/graphics/blocks/init.tga"
private var itemSheetCursor = 16
internal val itemTerrainPixmap = Pixmap(16 * TILE_SIZE, TILES_IN_X * TILE_SIZE, Pixmap.Format.RGBA8888)
internal val itemWallPixmap = Pixmap(16 * TILE_SIZE, TILES_IN_X * TILE_SIZE, Pixmap.Format.RGBA8888)
/**
* Must be called AFTER mods' loading so that all the block props are loaded
*/
@@ -148,8 +152,8 @@ class CreateTileAtlas {
else -> 0
}
val itemTerrainPixmap = Pixmap(16 * TILE_SIZE, TILES_IN_X * TILE_SIZE, Pixmap.Format.RGBA8888)
val itemWallPixmap = Pixmap(16 * TILE_SIZE, TILES_IN_X * TILE_SIZE, Pixmap.Format.RGBA8888)
// val itemTerrainPixmap = Pixmap(16 * TILE_SIZE, TILES_IN_X * TILE_SIZE, Pixmap.Format.RGBA8888)
// val itemWallPixmap = Pixmap(16 * TILE_SIZE, TILES_IN_X * TILE_SIZE, Pixmap.Format.RGBA8888)
tags.toMap().forEach { id, tag ->
val tilePosFromAtlas = tag.tileNumber + maskTypetoTileIDForItemImage(tag.maskType)
@@ -199,8 +203,8 @@ class CreateTileAtlas {
itemTerrainTexture = Texture(itemTerrainPixmap)
itemWallTexture = Texture(itemWallPixmap)
itemTerrainPixmap.dispose()
itemWallPixmap.dispose()
// itemTerrainPixmap.dispose()
// itemWallPixmap.dispose()
initPixmap.dispose()
initialised = true
@@ -385,6 +389,8 @@ class CreateTileAtlas {
atlasGlow.dispose()
//itemTerrainTexture.dispose() //BlocksDrawer will dispose of it as it disposes of 'tileItemTerrain (TextureRegionPack)'
//itemWallTexture.dispose() //BlocksDrawer will dispose of it as it disposes of 'tileItemWall (TextureRegionPack)'
itemTerrainPixmap.dispose()
itemWallPixmap.dispose()
nullTile.dispose()
}