tooltip UI; tooltip in the inventory

This commit is contained in:
minjaesong
2017-11-25 17:56:29 +09:00
parent f45a3d252a
commit 35f2cf6b4d
12 changed files with 143 additions and 21 deletions

View File

@@ -2,8 +2,8 @@
* Processor with 2.4 GHz speed
* GPU that can support OpenGL 2.1, is capable of 4K texture
* 4 GB of RAM
* 2 GB of free disk space
* 6 GB of RAM
* 4 GB of free disk space
* Windows Vista/Mac OS X Lion or higher (Mac OS X Snow Leopard is incompatible with a shader the game uses)
* PC: Java 8, Up-to-date graphics driver
@@ -12,7 +12,7 @@
* Processor with 3.0 GHz speed, 4 threads available
* GPU that can support OpenGL 2.1, is capable of 4K texture
* 8 GB of RAM
* 5 GB of free disk space
* 8 GB of free disk space
* Windows Vista/Mac OS X Lion or higher
* PC: Java 8, Up-to-date graphics driver

Binary file not shown.

Binary file not shown.

View File

@@ -23,6 +23,7 @@ object CIEXYZUtil {
return xyz.toColor()
}
@Deprecated("Use one in CIELAB or CIELUV; CIEXYZ is not perceptually uniform")
fun getGradient(scale: Float, fromCol: Color, toCol: Color): Color {
val from = fromCol.toXYZ()
val to = toCol.toXYZ()

View File

@@ -122,9 +122,10 @@ class Ingame(val batch: SpriteBatch) : Screen {
lateinit var uiVitalSecondary: UICanvas
lateinit var uiVitalItem: UICanvas // itemcount/durability of held block or active ammo of held gun. As for the block, max value is 500.
lateinit var uiWatchBasic: UICanvas
lateinit var uiWatchTierOne: UICanvas
private lateinit var uiWatchBasic: UICanvas
private lateinit var uiWatchTierOne: UICanvas
private lateinit var uiTooltip: UITooltip
// UI aliases
lateinit var uiAliases: ArrayList<UICanvas>
@@ -357,6 +358,9 @@ class Ingame(val batch: SpriteBatch) : Screen {
uiWatchTierOne.setPosition(Terrarum.WIDTH - uiWatchTierOne.width, uiWatchBasic.height - 2)
uiTooltip = UITooltip()
// batch-process uiAliases
uiAliases = arrayListOf(
// drawn first
@@ -367,7 +371,8 @@ class Ingame(val batch: SpriteBatch) : Screen {
uiPieMenu,
uiQuickBar,
uiWatchBasic,
uiWatchTierOne
uiWatchTierOne,
uiTooltip
// drawn last
)
uiAlasesPausing = arrayListOf(
@@ -384,6 +389,7 @@ class Ingame(val batch: SpriteBatch) : Screen {
updateThreadWrapper = Thread(ingameUpdateThread, "Terrarum UpdateThread")
LightmapRenderer.fireRecalculateEvent()
}// END enter
@@ -1388,6 +1394,18 @@ class Ingame(val batch: SpriteBatch) : Screen {
}
}
fun setTooltipMessage(message: String?) {
if (message == null) {
uiTooltip.setAsClose()
}
else {
if (uiTooltip.isClosed || uiTooltip.isClosing) {
uiTooltip.setAsOpen()
}
uiTooltip.message = message
}
}
override fun pause() {
// TODO no pause when off-focus on desktop
}

View File

@@ -136,7 +136,7 @@ object Terrarum : Screen {
private set
val memInUse: Long
get() = (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) shr 20
get() = (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory() + Gdx.app.nativeHeap) shr 20
val memTotal: Long
get() = Runtime.getRuntime().totalMemory() shr 20
val memXmx: Long
@@ -713,12 +713,16 @@ object Terrarum : Screen {
return file // TODO TEST CODE
}
/** Position of the cursor in the world */
inline val mouseX: Double
get() = WorldCamera.x + Gdx.input.x / (ingame?.screenZoom ?: 1f).toDouble()
/** Position of the cursor in the world */
inline val mouseY: Double
get() = WorldCamera.y + Gdx.input.y / (ingame?.screenZoom ?: 1f).toDouble()
/** Position of the cursor in the world */
@JvmStatic inline val mouseTileX: Int
get() = (mouseX / FeaturesDrawer.TILE_SIZE).floorInt()
/** Position of the cursor in the world */
@JvmStatic inline val mouseTileY: Int
get() = (mouseY / FeaturesDrawer.TILE_SIZE).floorInt()
inline val mouseScreenX: Int

View File

@@ -69,7 +69,7 @@ class UIInventoryFull(
val catSelectedIcon: Int
get() = catBar.selectedIcon
override var openCloseTime: Second = 0.1f
override var openCloseTime: Second = 0.0f
private val itemList: UIItemInventoryDynamicList? =
@@ -227,15 +227,18 @@ class UIInventoryFull(
override fun doOpening(delta: Float) {
Terrarum.ingame?.setTooltipMessage(null)
}
override fun doClosing(delta: Float) {
Terrarum.ingame?.setTooltipMessage(null)
}
override fun endOpening(delta: Float) {
}
override fun endClosing(delta: Float) {
Terrarum.ingame?.setTooltipMessage(null) // required!!
}

View File

@@ -7,7 +7,6 @@ import net.torvald.terrarum.BlendMode
import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.UIItemInventoryElem
import net.torvald.terrarum.UIItemInventoryElemSimple
import net.torvald.terrarum.console.Inventory
import net.torvald.terrarum.gameactors.ActorInventory
import net.torvald.terrarum.gameactors.InventoryPair
import net.torvald.terrarum.itemproperties.GameItem
@@ -109,7 +108,7 @@ class UIItemInventoryDynamicList(
private var items: Array<UIItemInventoryCellBase>
= if (catArrangement[selection] in compactViewCat) itemGrid else itemList // this is INIT code
var isCompactView = (catArrangement[selection] in compactViewCat) // this is INIT code
var isCompactMode = (catArrangement[selection] in compactViewCat) // this is INIT code
set(value) {
items = if (value) itemGrid else itemList
@@ -118,6 +117,7 @@ class UIItemInventoryDynamicList(
field = value
}
/** Long/compact mode buttons */
private val gridModeButtons = Array<UIItemImageButton>(2, { index ->
val iconPosX = posX - 12 - parentUI.catIcons.tileW + 2
val iconPosY = posY - 2 + (4 + UIItemInventoryElem.height - parentUI.catIcons.tileH) * index
@@ -135,16 +135,16 @@ class UIItemInventoryDynamicList(
init {
// initially highlight grid mode buttons
gridModeButtons[if (isCompactView) 1 else 0].highlighted = true
gridModeButtons[if (isCompactMode) 1 else 0].highlighted = true
gridModeButtons[0].touchDownListener = { _, _, _, _ ->
isCompactView = false
isCompactMode = false
gridModeButtons[0].highlighted = true
gridModeButtons[1].highlighted = false
}
gridModeButtons[1].touchDownListener = { _, _, _, _ ->
isCompactView = true
isCompactMode = true
gridModeButtons[0].highlighted = false
gridModeButtons[1].highlighted = true
}
@@ -166,7 +166,26 @@ class UIItemInventoryDynamicList(
override fun update(delta: Float) {
super.update(delta)
items.forEach { it.update(delta) }
var tooltipSet = false
items.forEach {
it.update(delta)
// set tooltip accordingly
if (isCompactMode && it.mouseUp && !tooltipSet) {
Terrarum.ingame?.setTooltipMessage(it.item?.name)
tooltipSet = true
}
}
if (!tooltipSet) {
Terrarum.ingame?.setTooltipMessage(null)
}
gridModeButtons.forEach { it.update(delta) }
}

View File

@@ -0,0 +1,74 @@
package net.torvald.terrarum.ui
import com.badlogic.gdx.Gdx
import com.badlogic.gdx.graphics.Camera
import com.badlogic.gdx.graphics.Color
import com.badlogic.gdx.graphics.Texture
import com.badlogic.gdx.graphics.g2d.SpriteBatch
import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.fillRect
import net.torvald.terrarum.gameactors.Second
import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack
/**
* Created by minjaesong on 2017-11-25.
*/
class UITooltip : UICanvas() {
override var openCloseTime: Second = 0f
var message: String = ""
private val textures = TextureRegionPack("assets/graphics/gui/tooltip_black.tga", 8, 36)
private val font = Terrarum.fontGame
val textMarginX = 4
override var width: Int
get() = font.getWidth(message) + (textMarginX + textures.tileW) * 2
set(value) { throw Error("You are not supposed to set the width of the tooltip manually.") }
override var height: Int
get() = textures.tileH
set(value) { throw Error("You are not supposed to set the height of the tooltip manually.") }
init {
textures.texture.setFilter(Texture.TextureFilter.Nearest, Texture.TextureFilter.Nearest)
}
override fun renderUI(batch: SpriteBatch, camera: Camera) {
val mouseX = Terrarum.mouseScreenX.toFloat()
val mouseY = Terrarum.mouseScreenY.toFloat()
val tooltipY = mouseY - textures.tileH
val txtW = font.getWidth(message) + 2f * textMarginX
batch.color = Color.WHITE
batch.draw(textures.get(0, 0), mouseX, tooltipY)
batch.draw(textures.get(1, 0), mouseX + textures.tileW, tooltipY, txtW, height.toFloat())
batch.draw(textures.get(2, 0), mouseX + textures.tileW + txtW, tooltipY)
font.draw(batch, message, mouseX + textures.tileW + textMarginX, mouseY - textures.tileH + (textures.tileH - font.lineHeight) / 2)
}
override fun updateUI(delta: Float) {
}
override fun doOpening(delta: Float) {
}
override fun doClosing(delta: Float) {
}
override fun endOpening(delta: Float) {
}
override fun endClosing(delta: Float) {
}
override fun dispose() {
textures.dispose()
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.