mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-14 23:56:07 +09:00
text input pane wip
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
[[""],[undefined],
|
||||
{"n":"US Colemak","t":[[""],[undefined],
|
||||
[undefined],
|
||||
["<HOME>"],
|
||||
[undefined],
|
||||
@@ -253,4 +253,4 @@
|
||||
[undefined],
|
||||
[undefined],
|
||||
["<:CIRCLE:>"]
|
||||
]
|
||||
]}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[[""],[undefined],
|
||||
{"n":"US Qwerty","t":[[""],[undefined],
|
||||
[undefined],
|
||||
["<HOME>"],
|
||||
[undefined],
|
||||
@@ -253,4 +253,4 @@
|
||||
[undefined],
|
||||
[undefined],
|
||||
["<:CIRCLE:>"]
|
||||
]
|
||||
]}
|
||||
|
||||
@@ -234,9 +234,6 @@ public class App implements ApplicationListener {
|
||||
private static Screen currentScreen;
|
||||
private static LoadScreenBase currentSetLoadScreen;
|
||||
|
||||
public static Texture textureWhiteSquare;
|
||||
public static Texture textureWhiteCircle;
|
||||
|
||||
private void initViewPort(int width, int height) {
|
||||
// Set Y to point downwards
|
||||
camera.setToOrtho(true, width, height); // some elements are pre-flipped, while some are not. The statement itself is absolutely necessary to make edge of the screen as the origin
|
||||
@@ -748,8 +745,6 @@ public class App implements ApplicationListener {
|
||||
fontSmallNumbers.dispose();
|
||||
ItemSlotImageFactory.INSTANCE.dispose();
|
||||
|
||||
textureWhiteSquare.dispose();
|
||||
textureWhiteCircle.dispose();
|
||||
logo.getTexture().dispose();
|
||||
|
||||
disposables.forEach((it) -> {
|
||||
@@ -830,13 +825,6 @@ public class App implements ApplicationListener {
|
||||
private void postInit() {
|
||||
Terrarum.initialise();
|
||||
|
||||
|
||||
textureWhiteSquare = new Texture(Gdx.files.internal("assets/graphics/ortho_line_tex_2px.tga"));
|
||||
textureWhiteSquare.setFilter(Texture.TextureFilter.Nearest, Texture.TextureFilter.Nearest);
|
||||
|
||||
textureWhiteCircle = new Texture(Gdx.files.internal("assets/graphics/circle_512.tga"));
|
||||
textureWhiteCircle.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear);
|
||||
|
||||
TextureRegionPack.Companion.setGlobalFlipY(true);
|
||||
fontSmallNumbers = TinyAlphNum.INSTANCE;
|
||||
|
||||
|
||||
@@ -27,4 +27,5 @@ public class FrameBufferManager {
|
||||
stack.peek().begin();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import com.badlogic.gdx.graphics.glutils.FrameBuffer
|
||||
import com.jme3.math.FastMath
|
||||
import net.torvald.terrarum.langpack.Lang
|
||||
import net.torvald.terrarum.modulebasegame.TerrarumIngame
|
||||
import net.torvald.terrarum.ui.Toolkit
|
||||
|
||||
/**
|
||||
* Created by minjaesong on 2017-07-13.
|
||||
@@ -141,7 +142,7 @@ object SanicLoadScreen : LoadScreenBase() {
|
||||
|
||||
// almost black background
|
||||
it.color = Color(0x181818ff)
|
||||
it.fillRect(0f, 0f, App.scr.wf, App.scr.hf)
|
||||
Toolkit.fillArea(it, 0, 0, App.scr.width, App.scr.height)
|
||||
|
||||
|
||||
it.color = Color.WHITE
|
||||
@@ -184,7 +185,7 @@ object SanicLoadScreen : LoadScreenBase() {
|
||||
|
||||
// message backgrounds
|
||||
it.color = messageBackgroundColour
|
||||
it.fillRect(0f, 60f, App.scr.wf, 40f + (messages.size) * App.fontGame.lineHeight)
|
||||
Toolkit.fillArea(it, 0, 60, App.scr.width, 40 + (messages.size) * App.fontGame.lineHeight.toInt())
|
||||
|
||||
// log messages
|
||||
it.color = messageForegroundColour
|
||||
@@ -209,7 +210,7 @@ object SanicLoadScreen : LoadScreenBase() {
|
||||
|
||||
// message backgrounds
|
||||
it.color = messageBackgroundColour
|
||||
it.fillRect(0f, 60f, App.scr.wf, 40f + (messages.size) * App.fontGame.lineHeight)
|
||||
Toolkit.fillArea(it, 0, 60, App.scr.width, 40 + (messages.size) * App.fontGame.lineHeight.toInt())
|
||||
|
||||
// log messages
|
||||
it.color = messageForegroundColour
|
||||
|
||||
@@ -26,9 +26,9 @@ import net.torvald.terrarum.gamecontroller.IngameController
|
||||
import net.torvald.terrarum.gameworld.fmod
|
||||
import net.torvald.terrarum.itemproperties.ItemCodex
|
||||
import net.torvald.terrarum.itemproperties.MaterialCodex
|
||||
import net.torvald.terrarum.serialise.Common
|
||||
import net.torvald.terrarum.savegame.ByteArray64Reader
|
||||
import net.torvald.terrarum.savegame.DiskSkimmer
|
||||
import net.torvald.terrarum.serialise.Common
|
||||
import net.torvald.terrarum.ui.UICanvas
|
||||
import net.torvald.terrarum.worlddrawer.WorldCamera
|
||||
import net.torvald.terrarumsansbitmap.gdx.GameFontBase
|
||||
@@ -358,21 +358,6 @@ inline fun FrameBuffer.inAction(camera: OrthographicCamera?, batch: SpriteBatch?
|
||||
}
|
||||
|
||||
|
||||
// ShapeRenderer alternative for rects
|
||||
fun SpriteBatch.fillRect(x: Float, y: Float, w: Float, h: Float) {
|
||||
this.draw(App.textureWhiteSquare, x, y, w, h)
|
||||
}
|
||||
fun SpriteBatch.fillCircle(x: Float, y: Float, w: Float, h: Float) {
|
||||
this.draw(App.textureWhiteCircle, x, y, w, h)
|
||||
}
|
||||
fun SpriteBatch.drawStraightLine(x: Float, y: Float, otherEnd: Float, thickness: Float, isVertical: Boolean) {
|
||||
if (!isVertical)
|
||||
this.fillRect(x, y, otherEnd - x, thickness)
|
||||
else
|
||||
this.fillRect(x, y, thickness, otherEnd - y)
|
||||
}
|
||||
|
||||
|
||||
|
||||
infix fun Color.mul(other: Color): Color = this.cpy().mul(other)
|
||||
infix fun Color.mulAndAssign(other: Color): Color {
|
||||
|
||||
@@ -89,7 +89,7 @@ class UIFakeBlurOverlay(val blurRadius: Float, val nodarken: Boolean) : UICanvas
|
||||
if (!nodarken) {
|
||||
blendMul(batch)
|
||||
batch.color = darken
|
||||
batch.fillRect(0f, 0f, width.toFloat(), height.toFloat())
|
||||
Toolkit.fillArea(batch, 0, 0, width, height)
|
||||
|
||||
blendNormal(batch)
|
||||
}
|
||||
|
||||
@@ -6,10 +6,7 @@ import com.badlogic.gdx.graphics.Pixmap
|
||||
import com.badlogic.gdx.graphics.Texture
|
||||
import com.badlogic.gdx.graphics.g2d.SpriteBatch
|
||||
import net.torvald.terrarum.gameitem.GameItem
|
||||
import net.torvald.terrarum.ui.Movement
|
||||
import net.torvald.terrarum.ui.UICanvas
|
||||
import net.torvald.terrarum.ui.UIItem
|
||||
import net.torvald.terrarum.ui.UIItemImageButton
|
||||
import net.torvald.terrarum.ui.*
|
||||
import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack
|
||||
import kotlin.math.roundToInt
|
||||
|
||||
@@ -270,7 +267,7 @@ class UIItemInventoryCatBar(
|
||||
|
||||
// underline
|
||||
batch.color = underlineColour
|
||||
batch.drawStraightLine(posX.toFloat(), posY + height - 1f, posX + width.toFloat(), 1f, false)
|
||||
Toolkit.drawStraightLine(batch, posX, posY + height - 1, posX + width, 1, false)
|
||||
|
||||
// indicator
|
||||
if (selectedPanel == 1) {
|
||||
|
||||
@@ -12,6 +12,7 @@ import net.torvald.terrarum.ui.Toolkit
|
||||
import net.torvald.terrarum.ui.Toolkit.DEFAULT_BOX_BORDER_COL
|
||||
import net.torvald.terrarum.ui.UICanvas
|
||||
import net.torvald.terrarum.ui.UIItemTextButton
|
||||
import kotlin.math.roundToInt
|
||||
|
||||
/**
|
||||
* Created by minjaesong on 2017-10-20.
|
||||
@@ -92,16 +93,16 @@ class UIItemInventoryElemSimple(
|
||||
if (item!!.maxDurability > 0.0) {
|
||||
// draw durability metre
|
||||
val barFullLen = width
|
||||
val barOffset = posX.toFloat()
|
||||
val barOffset = posX
|
||||
val thickness = UIItemInventoryElemWide.durabilityBarThickness
|
||||
val percentage = item!!.durability / item!!.maxDurability
|
||||
val durabilityCol = UIItemInventoryCellCommonRes.getHealthMeterColour(percentage, 0f, 1f)
|
||||
val durabilityBack = durabilityCol mul UIItemInventoryCellCommonRes.meterBackDarkening
|
||||
if (item!!.maxDurability > 0.0) {
|
||||
batch.color = durabilityBack
|
||||
batch.drawStraightLine(barOffset, posY + height - thickness, barOffset + barFullLen, thickness, false)
|
||||
Toolkit.drawStraightLine(batch, barOffset, posY + height - thickness, barOffset + barFullLen, thickness, false)
|
||||
batch.color = durabilityCol
|
||||
batch.drawStraightLine(barOffset, posY + height - thickness, barOffset + barFullLen * percentage, thickness, false)
|
||||
Toolkit.drawStraightLine(batch, barOffset, posY + height - thickness, barOffset + (barFullLen * percentage).roundToInt(), thickness, false)
|
||||
}
|
||||
}
|
||||
// draw item count when applicable
|
||||
|
||||
@@ -13,6 +13,7 @@ import net.torvald.terrarum.ui.Toolkit
|
||||
import net.torvald.terrarum.ui.Toolkit.DEFAULT_BOX_BORDER_COL
|
||||
import net.torvald.terrarum.ui.UICanvas
|
||||
import net.torvald.terrarum.ui.UIItemTextButton
|
||||
import kotlin.math.roundToInt
|
||||
|
||||
/***
|
||||
* Note that the UI will not render if either item or itemImage is null.
|
||||
@@ -44,7 +45,7 @@ class UIItemInventoryElemWide(
|
||||
val height = 48
|
||||
val UNIQUE_ITEM_HAS_NO_AMOUNT = -1
|
||||
|
||||
internal val durabilityBarThickness = 3f
|
||||
internal val durabilityBarThickness = 3
|
||||
}
|
||||
|
||||
override val height = UIItemInventoryElemWide.height
|
||||
@@ -59,7 +60,7 @@ class UIItemInventoryElemWide(
|
||||
|
||||
|
||||
|
||||
private val durabilityBarOffY = 35f
|
||||
private val durabilityBarOffY = 35
|
||||
|
||||
|
||||
|
||||
@@ -125,16 +126,16 @@ class UIItemInventoryElemWide(
|
||||
|
||||
|
||||
// durability metre
|
||||
val barFullLen = (width - 8f) - textOffsetX
|
||||
val barOffset = posX + textOffsetX
|
||||
val barFullLen = (width - 8) - textOffsetX.toInt()
|
||||
val barOffset = posX + textOffsetX.toInt()
|
||||
val percentage = if (item!!.maxDurability < 0.00001f) 0f else item!!.durability / item!!.maxDurability
|
||||
val durabilityCol = UIItemInventoryCellCommonRes.getHealthMeterColour(percentage, 0f, 1f)
|
||||
val durabilityBack = durabilityCol mul UIItemInventoryCellCommonRes.meterBackDarkening
|
||||
if (item!!.maxDurability > 0.0) {
|
||||
batch.color = durabilityBack
|
||||
batch.drawStraightLine(barOffset, posY + durabilityBarOffY, barOffset + barFullLen, durabilityBarThickness, false)
|
||||
Toolkit.drawStraightLine(batch, barOffset, posY + durabilityBarOffY, barOffset + barFullLen, durabilityBarThickness, false)
|
||||
batch.color = durabilityCol
|
||||
batch.drawStraightLine(barOffset, posY + durabilityBarOffY, barOffset + barFullLen * percentage, durabilityBarThickness, false)
|
||||
Toolkit.drawStraightLine(batch, barOffset, posY + durabilityBarOffY, barOffset + (barFullLen * percentage).roundToInt(), durabilityBarThickness, false)
|
||||
}
|
||||
|
||||
|
||||
@@ -144,7 +145,7 @@ class UIItemInventoryElemWide(
|
||||
if (quickslot != null) {
|
||||
val label = quickslot!!.plus(0xE010).toChar()
|
||||
val labelW = App.fontGame.getWidth("$label")
|
||||
App.fontGame.draw(batch, "$label", barOffset + barFullLen - labelW, posY + textOffsetY)
|
||||
App.fontGame.draw(batch, "$label", barOffset + barFullLen - labelW.toFloat(), posY + textOffsetY)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,11 +1,18 @@
|
||||
package net.torvald.terrarum.gamecontroller
|
||||
|
||||
import com.badlogic.gdx.Gdx
|
||||
import net.torvald.terrarum.App.printdbg
|
||||
|
||||
typealias TerrarumKeyLayout = Array<Array<String?>>
|
||||
data class TerrarumKeyLayout(
|
||||
val name: String,
|
||||
val symbols: Array<Array<String?>>?,
|
||||
val acceptChar: ((Int) -> String?)? = null
|
||||
)
|
||||
|
||||
/**
|
||||
* Key Layout File Structure for Low Layer:
|
||||
* - n: Displayed name of the keyboard layout
|
||||
* - t: Key symbols in 256R4C string array (C1: unshifted, C2: Shift, C3: AltGr, C4: Shift-AltGr)
|
||||
*
|
||||
* IME consists of two keyboard layers:
|
||||
* - Low layer: "english" keyboard (qwerty, colemak, etc), stateless
|
||||
* - High layer: chinese/japanese/korean/etc. keyboard, stateful
|
||||
@@ -36,10 +43,11 @@ object IME {
|
||||
private fun parseKeylayoutFile(path: String): TerrarumKeyLayout {
|
||||
val file = Gdx.files.internal(path)
|
||||
val src = file.readString("UTF-8")
|
||||
val jsval = context.eval("js", src)
|
||||
val jsval = context.eval("js", "let t=$src;Object.freeze(t)")
|
||||
val name = jsval.getMember("n").asString()
|
||||
val out = Array(256) { Array<String?>(4) { null } }
|
||||
for (keycode in 0L until 256L) {
|
||||
val a = jsval.getArrayElement(keycode)
|
||||
val a = jsval.getMember("t").getArrayElement(keycode)
|
||||
if (!a.isNull) {
|
||||
for (layer in 0L until 4L) {
|
||||
if (a.arraySize > layer) {
|
||||
@@ -52,9 +60,9 @@ object IME {
|
||||
}
|
||||
}
|
||||
|
||||
//println("[IME] Test Keymap print:"); for (keycode in 0 until 256) { print("$keycode:\t"); println(out[keycode].joinToString("\t")) }
|
||||
// println("[IME] Test Keymap print for $name:"); for (keycode in 0 until 256) { print("$keycode:\t"); println(out[keycode].joinToString("\t")) }
|
||||
|
||||
return out
|
||||
return TerrarumKeyLayout(name, out)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -283,13 +283,19 @@ class IngameController(val terrarumIngame: TerrarumIngame) : InputAdapter() {
|
||||
private const val KEY_DOWN = 0
|
||||
private const val KEY_CHANGE = 1
|
||||
const val N_KEY_ROLLOVER = 8
|
||||
var KEYBOARD_DELAYS = floatArrayOf(0.25f, 0.025f)
|
||||
var KEYBOARD_DELAYS = longArrayOf(0L,250000000L,0L,25000000L,0L)
|
||||
private var stroboTime = 0L
|
||||
private var stroboStatus = 0
|
||||
private var repeatCount = 0
|
||||
private var oldKeys = IntArray(N_KEY_ROLLOVER) { 0 }
|
||||
/** always Low Layer */
|
||||
private var keymap = IME.getLowLayerByName(App.getConfigString("basekeyboardlayout"))
|
||||
|
||||
fun resetKeyboardStrobo() {
|
||||
stroboStatus = 0
|
||||
repeatCount = 0
|
||||
}
|
||||
|
||||
// code proudly stolen from tsvm's TVDOS.SYS
|
||||
fun withKeyboardEvent(callback: (TerrarumKeyboardEvent) -> Unit) {
|
||||
val keys = strobeKeys()
|
||||
@@ -337,8 +343,9 @@ class IngameController(val terrarumIngame: TerrarumIngame) : InputAdapter() {
|
||||
}
|
||||
|
||||
private fun keysToStr(keys: IntArray): Array<String?>? {
|
||||
if (keys.size == 0) return null
|
||||
val headkey = keys[0]
|
||||
return if (keymap[headkey] == null) null else keymap[headkey]
|
||||
return if (keymap.symbols!![headkey] == null) null else keymap.symbols!![headkey]
|
||||
}
|
||||
|
||||
private fun strobeKeys(): IntArray {
|
||||
@@ -356,8 +363,8 @@ class IngameController(val terrarumIngame: TerrarumIngame) : InputAdapter() {
|
||||
}
|
||||
|
||||
private fun arrayEq(a: IntArray, b: IntArray): Boolean {
|
||||
for (i in 0..a.size) {
|
||||
if (a[i] != b[i]) return false
|
||||
for (i in 0 until a.size) {
|
||||
if (a[i] != b.getOrNull(i)) return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ import net.torvald.terrarum.gamecontroller.KeyToggler
|
||||
import net.torvald.terrarum.gameparticles.ParticleBase
|
||||
import net.torvald.terrarum.gameworld.GameWorld
|
||||
import net.torvald.terrarum.gameworld.fmod
|
||||
import net.torvald.terrarum.ui.Toolkit
|
||||
import net.torvald.terrarum.weather.WeatherMixer
|
||||
import net.torvald.terrarum.worlddrawer.BlocksDrawer
|
||||
import net.torvald.terrarum.worlddrawer.FeaturesDrawer
|
||||
@@ -295,11 +296,11 @@ object IngameRenderer : Disposable {
|
||||
|
||||
// indicator
|
||||
batch.color = Color.RED
|
||||
batch.fillRect(0f, 0f, 6f, 10f)
|
||||
Toolkit.fillArea(batch, 0, 0, 6, 10)
|
||||
batch.color = Color.LIME
|
||||
batch.fillRect(6f, 0f, 6f, 10f)
|
||||
Toolkit.fillArea(batch, 6, 0, 6, 10)
|
||||
batch.color = Color.ROYAL
|
||||
batch.fillRect(12f, 0f, 6f, 10f)
|
||||
Toolkit.fillArea(batch, 12, 0, 6, 10)
|
||||
batch.color = Color.WHITE
|
||||
}
|
||||
|
||||
@@ -322,7 +323,7 @@ object IngameRenderer : Disposable {
|
||||
|
||||
// indicator
|
||||
batch.color = Color.WHITE
|
||||
batch.fillRect(18f, 0f, 18f, 10f)
|
||||
Toolkit.fillArea(batch, 18, 0, 18, 10)
|
||||
}
|
||||
|
||||
// works as intended
|
||||
|
||||
@@ -9,7 +9,6 @@ import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE
|
||||
import net.torvald.terrarum.gameactors.AVKey
|
||||
import net.torvald.terrarum.gameitem.GameItem
|
||||
import net.torvald.terrarum.langpack.Lang
|
||||
import net.torvald.terrarum.modulebasegame.TerrarumIngame
|
||||
import net.torvald.terrarum.modulebasegame.gameactors.FixtureInventory.Companion.CAPACITY_MODE_COUNT
|
||||
import net.torvald.terrarum.modulebasegame.ui.*
|
||||
import net.torvald.terrarum.modulebasegame.ui.UIInventoryCells.Companion.weightBarWidth
|
||||
@@ -21,6 +20,7 @@ import net.torvald.terrarum.modulebasegame.ui.UIInventoryFull.Companion.controlH
|
||||
import net.torvald.terrarum.modulebasegame.ui.UIInventoryFull.Companion.internalHeight
|
||||
import net.torvald.terrarum.modulebasegame.ui.UIInventoryFull.Companion.internalWidth
|
||||
import net.torvald.terrarum.modulebasegame.ui.UIItemInventoryItemGrid.Companion.listGap
|
||||
import net.torvald.terrarum.ui.Toolkit
|
||||
import net.torvald.terrarum.ui.UICanvas
|
||||
import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack
|
||||
|
||||
@@ -225,13 +225,13 @@ internal class UIStorageChest : UICanvas(
|
||||
|
||||
// encumbrance bar background
|
||||
batch.color = encumbBack
|
||||
batch.fillRect(
|
||||
Toolkit.fillArea(batch,
|
||||
encumbBarXPos, encumbBarYPos,
|
||||
weightBarWidth, controlHelpHeight - 6f
|
||||
)
|
||||
// encumbrance bar
|
||||
batch.color = encumbCol
|
||||
batch.fillRect(
|
||||
Toolkit.fillArea(batch,
|
||||
encumbBarXPos, encumbBarYPos,
|
||||
if (getPlayerInventory().capacityMode == FixtureInventory.CAPACITY_MODE_NO_ENCUMBER)
|
||||
1f
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
package net.torvald.terrarum.modulebasegame.ui
|
||||
|
||||
import com.badlogic.gdx.Gdx
|
||||
import com.badlogic.gdx.graphics.Camera
|
||||
import com.badlogic.gdx.graphics.Color
|
||||
import com.badlogic.gdx.graphics.g2d.SpriteBatch
|
||||
import net.torvald.terrarum.App
|
||||
import net.torvald.terrarum.BlockCodex
|
||||
import net.torvald.terrarum.ItemCodex
|
||||
import net.torvald.terrarum.Terrarum
|
||||
import net.torvald.terrarum.blendNormal
|
||||
import net.torvald.terrarum.fillRect
|
||||
import net.torvald.terrarum.modulebasegame.BuildingMaker
|
||||
import net.torvald.terrarum.modulebasegame.ui.ItemSlotImageFactory.CELLCOLOUR_WHITE
|
||||
import net.torvald.terrarum.ui.Toolkit
|
||||
import net.torvald.terrarum.ui.UICanvas
|
||||
import net.torvald.terrarum.ui.UIItemImageButton
|
||||
import net.torvald.terrarum.ui.UIItemTextButtonList
|
||||
import net.torvald.terrarum.ui.UIItemTextButtonList.Companion.DEFAULT_BACKGROUNDCOL
|
||||
import kotlin.math.roundToInt
|
||||
import net.torvald.terrarum.*
|
||||
|
||||
/**
|
||||
* Created by minjaesong on 2019-02-14.
|
||||
@@ -132,15 +132,15 @@ class UIBuildingMakerBlockChooser(val parent: BuildingMaker): UICanvas() {
|
||||
|
||||
// gaps between tabs and close button
|
||||
batch.color = DEFAULT_BACKGROUNDCOL
|
||||
batch.fillRect(0f, tabs.height.toFloat(), MENUBAR_SIZE.toFloat(), height.toFloat() - (tabs.height + closeButton.height))
|
||||
Toolkit.fillArea(batch, 0f, tabs.height.toFloat(), MENUBAR_SIZE.toFloat(), height.toFloat() - (tabs.height + closeButton.height))
|
||||
// scrollbar back
|
||||
batch.color = DEFAULT_BACKGROUNDCOL
|
||||
batch.fillRect(width - SCROLLBAR_SIZE.toFloat(), 0f, SCROLLBAR_SIZE.toFloat(), height.toFloat())
|
||||
Toolkit.fillArea(batch, width - SCROLLBAR_SIZE.toFloat(), 0f, SCROLLBAR_SIZE.toFloat(), height.toFloat())
|
||||
batch.color = scrollbarBackCol
|
||||
batch.fillRect(width - SCROLLBAR_SIZE.toFloat(), 0f, SCROLLBAR_SIZE.toFloat(), height.toFloat())
|
||||
Toolkit.fillArea(batch, width - SCROLLBAR_SIZE.toFloat(), 0f, SCROLLBAR_SIZE.toFloat(), height.toFloat())
|
||||
// scrollbar
|
||||
batch.color = CELLCOLOUR_WHITE
|
||||
batch.fillRect(width - SCROLLBAR_SIZE.toFloat(), scrollBarPos.toFloat(), SCROLLBAR_SIZE.toFloat(), scrollBarHeight)
|
||||
Toolkit.fillArea(batch, width - SCROLLBAR_SIZE.toFloat(), scrollBarPos.toFloat(), SCROLLBAR_SIZE.toFloat(), scrollBarHeight)
|
||||
|
||||
// the actual buttons
|
||||
tabs.render(batch, camera)
|
||||
|
||||
@@ -8,6 +8,7 @@ import com.badlogic.gdx.graphics.g2d.SpriteBatch
|
||||
import net.torvald.terrarum.*
|
||||
import net.torvald.terrarum.blockproperties.Block
|
||||
import net.torvald.terrarum.modulebasegame.BuildingMaker
|
||||
import net.torvald.terrarum.ui.Toolkit
|
||||
import net.torvald.terrarum.ui.UICanvas
|
||||
import net.torvald.terrarum.ui.UIItemImageButton
|
||||
import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack
|
||||
@@ -22,18 +23,19 @@ class UIBuildingMakerPenMenu(val parent: BuildingMaker): UICanvas() {
|
||||
companion object {
|
||||
const val SIZE = 330
|
||||
const val RADIUS = SIZE / 2.0
|
||||
const val RADIUSI = RADIUS.toInt()
|
||||
const val RADIUSF = RADIUS.toFloat()
|
||||
|
||||
const val BLOCKS_ROW_RADIUS = 120.0
|
||||
const val TOOLS_ROW_RADIUS = 56.0
|
||||
|
||||
const val BLOCK_BACK_SIZE = 72
|
||||
const val BLOCK_BACK_RADIUS = BLOCK_BACK_SIZE / 2f
|
||||
const val BLOCK_BACK_RADIUS = BLOCK_BACK_SIZE / 2
|
||||
|
||||
const val ICON_SIZE = 38
|
||||
const val ICON_SIZEH = ICON_SIZE / 2f
|
||||
const val CLOSE_BUTTON_SIZE = 48
|
||||
const val CLOSE_BUTTON_RADIUS = CLOSE_BUTTON_SIZE / 2f
|
||||
const val CLOSE_BUTTON_RADIUS = CLOSE_BUTTON_SIZE / 2
|
||||
|
||||
const val PALETTE_SIZE = 10
|
||||
const val TOOLS_SIZE = 5
|
||||
@@ -135,7 +137,7 @@ class UIBuildingMakerPenMenu(val parent: BuildingMaker): UICanvas() {
|
||||
// primary click
|
||||
if (Terrarum.mouseDown) {
|
||||
// close by clicking close button or out-of-boud
|
||||
if (mouseVec.distanceSquared(RADIUS, RADIUS) !in CLOSE_BUTTON_RADIUS.sqr()..RADIUSF.sqr()) {
|
||||
if (mouseVec.distanceSquared(RADIUS, RADIUS) !in CLOSE_BUTTON_RADIUS.toFloat().sqr()..RADIUSF.sqr()) {
|
||||
closeGracefully()
|
||||
}
|
||||
}
|
||||
@@ -149,7 +151,7 @@ class UIBuildingMakerPenMenu(val parent: BuildingMaker): UICanvas() {
|
||||
override fun renderUI(batch: SpriteBatch, camera: Camera) {
|
||||
// draw back
|
||||
batch.color = backCol
|
||||
batch.fillCircle(0f, 0f, SIZE.toFloat(), SIZE.toFloat())
|
||||
Toolkit.fillCircle(batch,0, 0, SIZE, SIZE)
|
||||
|
||||
// draw blocks slot
|
||||
batch.color = blockCellCol
|
||||
@@ -167,12 +169,12 @@ class UIBuildingMakerPenMenu(val parent: BuildingMaker): UICanvas() {
|
||||
"wall@" + Block.GLASS_CRUDE
|
||||
)//AppLoader.getConfigStringArray("buildingmakerfavs")
|
||||
for (i in 0 until PALETTE_SIZE) {
|
||||
val x = blockCellPos[i].x.roundToInt().toFloat()
|
||||
val y = blockCellPos[i].y.roundToInt().toFloat()
|
||||
val x = blockCellPos[i].x.roundToInt()
|
||||
val y = blockCellPos[i].y.roundToInt()
|
||||
batch.color = blockCellCol
|
||||
repeat((i == mouseOnBlocksSlot).toInt() + 1) { batch.fillCircle(x - BLOCK_BACK_RADIUS, y - BLOCK_BACK_RADIUS, BLOCK_BACK_SIZE.toFloat(), BLOCK_BACK_SIZE.toFloat()) }
|
||||
repeat((i == mouseOnBlocksSlot).toInt() + 1) { Toolkit.fillCircle(batch, x - BLOCK_BACK_RADIUS, y - BLOCK_BACK_RADIUS, BLOCK_BACK_SIZE, BLOCK_BACK_SIZE) }
|
||||
batch.color = Color.WHITE
|
||||
batch.draw(ItemCodex.getItemImage(slotConfig[i]), x - 16, y - 16, 32f, 32f)
|
||||
batch.draw(ItemCodex.getItemImage(slotConfig[i]), x - 16f, y - 16f, 32f, 32f)
|
||||
|
||||
// update as well while looping
|
||||
if (i == mouseOnBlocksSlot && Terrarum.mouseDown) {
|
||||
@@ -183,7 +185,7 @@ class UIBuildingMakerPenMenu(val parent: BuildingMaker): UICanvas() {
|
||||
|
||||
// draw close button
|
||||
batch.color = blockCellCol
|
||||
repeat(mouseOnCloseButton.toInt() + 1) { batch.fillCircle(RADIUSF - CLOSE_BUTTON_RADIUS, RADIUSF - CLOSE_BUTTON_RADIUS, CLOSE_BUTTON_SIZE.toFloat(), CLOSE_BUTTON_SIZE.toFloat()) }
|
||||
repeat(mouseOnCloseButton.toInt() + 1) { Toolkit.fillCircle(batch, RADIUSI - CLOSE_BUTTON_RADIUS, RADIUSI - CLOSE_BUTTON_RADIUS, CLOSE_BUTTON_SIZE, CLOSE_BUTTON_SIZE) }
|
||||
|
||||
batch.color = if (mouseOnCloseButton) toolButtons[0].activeCol else toolButtons[0].inactiveCol
|
||||
batch.draw(toolIcons.get(5, 0), RADIUSF - ICON_SIZEH, RADIUSF - ICON_SIZEH)
|
||||
|
||||
@@ -34,7 +34,7 @@ class UICheatDetected : UICanvas() {
|
||||
|
||||
Toolkit.blurEntireScreen(batch, camera as OrthographicCamera, 2f, 0, 0, width, height)
|
||||
batch.color = backgroundCol
|
||||
batch.fillRect(0f, 0f, width.toFloat(), height.toFloat())
|
||||
Toolkit.fillArea(batch, 0f, 0f, width.toFloat(), height.toFloat())
|
||||
|
||||
batch.color = Color.WHITE
|
||||
val txt = Lang["ERROR_GENERIC_CHEATING"]
|
||||
|
||||
@@ -217,13 +217,13 @@ package net.torvald.terrarum.modulebasegame.ui
|
||||
// background
|
||||
blendNormal()
|
||||
batch.color = backgroundColour
|
||||
batch.fillRect(0f, 0f, width.toFloat(), height.toFloat())
|
||||
Toolkit.fillArea(batch, 0f, 0f, width.toFloat(), height.toFloat())
|
||||
|
||||
|
||||
// cat bar background
|
||||
blendMul()
|
||||
batch.color = Color(0xcccccc_ff.toInt())
|
||||
batch.fillRect(0f, 0f, catButtons.width.toFloat(), height.toFloat())
|
||||
Toolkit.fillArea(batch, 0f, 0f, catButtons.width.toFloat(), height.toFloat())
|
||||
|
||||
catButtons.render(batch, camera)
|
||||
|
||||
@@ -255,7 +255,7 @@ package net.torvald.terrarum.modulebasegame.ui
|
||||
// encumbrance bar background
|
||||
blendMul()
|
||||
batch.color = Color(0xa0a0a0_ff.toInt())
|
||||
batch.fillRect(
|
||||
Toolkit.fillArea(batch,
|
||||
width - 3 - weightBarWidth,
|
||||
height - controlHelpHeight + 3f,
|
||||
weightBarWidth,
|
||||
@@ -264,7 +264,7 @@ package net.torvald.terrarum.modulebasegame.ui
|
||||
// encumbrance bar
|
||||
blendNormal()
|
||||
batch.color = if (isEncumbered) Color(0xff0000_cc.toInt()) else Color(0x00ff00_cc.toInt())
|
||||
batch.fillRect(
|
||||
Toolkit.fillArea(batch,
|
||||
width - 3 - weightBarWidth,
|
||||
height - controlHelpHeight + 3f,
|
||||
if (actor?.inventory?.capacityMode == CAPACITY_MODE_NO_ENCUMBER)
|
||||
|
||||
@@ -120,13 +120,13 @@ internal class UIInventoryCells(
|
||||
val encumbCol = UIItemInventoryCellCommonRes.getHealthMeterColour(1f - encumbrancePerc, 0f, 1f)
|
||||
val encumbBack = encumbCol mul UIItemInventoryCellCommonRes.meterBackDarkening
|
||||
batch.color = encumbBack
|
||||
batch.fillRect(
|
||||
Toolkit.fillArea(batch,
|
||||
encumbBarXPos, encumbBarYPos,
|
||||
weightBarWidth, controlHelpHeight - 6f
|
||||
)
|
||||
// encumbrance bar
|
||||
batch.color = encumbCol
|
||||
batch.fillRect(
|
||||
Toolkit.fillArea(batch,
|
||||
encumbBarXPos, encumbBarYPos,
|
||||
if (full.actor.inventory.capacityMode == FixtureInventory.CAPACITY_MODE_NO_ENCUMBER)
|
||||
1f
|
||||
|
||||
@@ -108,7 +108,7 @@ class UIInventoryMinimap(val full: UIInventoryFull) : UICanvas() {
|
||||
|
||||
// sky background
|
||||
batch.color = MINIMAP_SKYCOL
|
||||
batch.fillRect(0f, 0f, MINIMAP_WIDTH, MINIMAP_HEIGHT)
|
||||
Toolkit.fillArea(batch, 0f, 0f, MINIMAP_WIDTH, MINIMAP_HEIGHT)
|
||||
// the actual image
|
||||
batch.color = Color.WHITE
|
||||
batch.draw(MinimapComposer.tempTex, tx, ty + MinimapComposer.totalHeight * minimapZoom, MinimapComposer.totalWidth * minimapZoom, -MinimapComposer.totalHeight * minimapZoom)
|
||||
@@ -124,10 +124,10 @@ class UIInventoryMinimap(val full: UIInventoryFull) : UICanvas() {
|
||||
batch.projectionMatrix = camera.combined
|
||||
// 1px stroke
|
||||
batch.color = Color.WHITE
|
||||
batch.fillRect((width - MINIMAP_WIDTH) / 2, -1 + cellOffY.toFloat(), MINIMAP_WIDTH, 1f)
|
||||
batch.fillRect((width - MINIMAP_WIDTH) / 2, cellOffY + MINIMAP_HEIGHT, MINIMAP_WIDTH, 1f)
|
||||
batch.fillRect(-1 + (width - MINIMAP_WIDTH) / 2, cellOffY.toFloat(), 1f, MINIMAP_HEIGHT)
|
||||
batch.fillRect((width - MINIMAP_WIDTH) / 2 + MINIMAP_WIDTH, cellOffY.toFloat(), 1f, MINIMAP_HEIGHT)
|
||||
Toolkit.fillArea(batch, (width - MINIMAP_WIDTH) / 2, -1 + cellOffY.toFloat(), MINIMAP_WIDTH, 1f)
|
||||
Toolkit.fillArea(batch, (width - MINIMAP_WIDTH) / 2, cellOffY + MINIMAP_HEIGHT, MINIMAP_WIDTH, 1f)
|
||||
Toolkit.fillArea(batch, -1 + (width - MINIMAP_WIDTH) / 2, cellOffY.toFloat(), 1f, MINIMAP_HEIGHT)
|
||||
Toolkit.fillArea(batch, (width - MINIMAP_WIDTH) / 2 + MINIMAP_WIDTH, cellOffY.toFloat(), 1f, MINIMAP_HEIGHT)
|
||||
|
||||
// control hints
|
||||
batch.color = Color.WHITE
|
||||
|
||||
@@ -130,6 +130,8 @@ class UIKeyboardControlPanel(remoCon: UIRemoCon?) : UICanvas() {
|
||||
|
||||
private val controlPalette = UIItemControlPaletteBaloon(this, (Toolkit.drawWidth - 480) / 2, kby + 219)
|
||||
|
||||
private val textInputPanel = UIItemTextLineInput(this, drawX, 360, width)
|
||||
|
||||
init {
|
||||
keycaps.values.forEach { addUIitem(it) }
|
||||
updateKeycaps()
|
||||
@@ -139,6 +141,8 @@ class UIKeyboardControlPanel(remoCon: UIRemoCon?) : UICanvas() {
|
||||
resetKeyConfig()
|
||||
updateKeycaps()
|
||||
}
|
||||
|
||||
addUIitem(textInputPanel)
|
||||
}
|
||||
|
||||
private fun resetKeyConfig() {
|
||||
|
||||
@@ -6,15 +6,15 @@ import com.badlogic.gdx.graphics.Pixmap
|
||||
import com.badlogic.gdx.graphics.Texture
|
||||
import com.badlogic.gdx.graphics.g2d.SpriteBatch
|
||||
import net.torvald.terrarum.App
|
||||
import net.torvald.terrarum.ItemCodex
|
||||
import net.torvald.terrarum.blendNormal
|
||||
import net.torvald.terrarum.blockproperties.Block
|
||||
import net.torvald.terrarum.fillRect
|
||||
import net.torvald.terrarum.gameitem.ItemID
|
||||
import net.torvald.terrarum.modulebasegame.BuildingMaker
|
||||
import net.torvald.terrarum.modulebasegame.ui.ItemSlotImageFactory.CELLCOLOUR_BLACK
|
||||
import net.torvald.terrarum.ui.Toolkit
|
||||
import net.torvald.terrarum.ui.UICanvas
|
||||
import net.torvald.terrarum.ui.UINSMenu
|
||||
import net.torvald.terrarum.*
|
||||
|
||||
/**
|
||||
* Created by minjaesong on 2019-02-03.
|
||||
@@ -75,7 +75,7 @@ class UIPaletteSelector(val parent: BuildingMaker) : UICanvas() {
|
||||
// draw title bar
|
||||
batch.color = UINSMenu.DEFAULT_TITLEBACKCOL
|
||||
blendNormal(batch)
|
||||
batch.fillRect(0f, 0f, width.toFloat(), LINE_HEIGHT.toFloat())
|
||||
Toolkit.fillArea(batch, 0, 0, width, LINE_HEIGHT)
|
||||
|
||||
// draw "Pal."
|
||||
batch.color = UINSMenu.DEFAULT_TITLETEXTCOL
|
||||
@@ -83,7 +83,7 @@ class UIPaletteSelector(val parent: BuildingMaker) : UICanvas() {
|
||||
|
||||
// draw background
|
||||
batch.color = CELLCOLOUR_BLACK
|
||||
batch.fillRect(0f, LINE_HEIGHT.toFloat(), 36f, 48f)
|
||||
Toolkit.fillArea(batch, 0, LINE_HEIGHT, 36, 48)
|
||||
|
||||
// draw back and fore selection
|
||||
batch.color = Color.WHITE
|
||||
|
||||
@@ -2,7 +2,7 @@ package net.torvald.terrarum.tests
|
||||
|
||||
import com.badlogic.gdx.ApplicationAdapter
|
||||
import com.badlogic.gdx.Gdx
|
||||
import com.badlogic.gdx.Input
|
||||
import com.badlogic.gdx.InputAdapter
|
||||
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application
|
||||
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3ApplicationConfiguration
|
||||
import com.badlogic.gdx.graphics.Camera
|
||||
@@ -11,11 +11,13 @@ import com.badlogic.gdx.graphics.OrthographicCamera
|
||||
import com.badlogic.gdx.graphics.Texture
|
||||
import com.badlogic.gdx.graphics.g2d.SpriteBatch
|
||||
import com.badlogic.gdx.graphics.glutils.ShaderProgram
|
||||
import com.badlogic.gdx.graphics.glutils.ShapeRenderer
|
||||
import com.jme3.math.FastMath
|
||||
import net.torvald.EMDASH
|
||||
import net.torvald.terrarum.*
|
||||
import net.torvald.terrarum.ui.*
|
||||
import kotlin.math.roundToInt
|
||||
import net.torvald.terrarum.ui.Toolkit
|
||||
import net.torvald.terrarum.ui.UICanvas
|
||||
import net.torvald.terrarum.ui.UIItemTextLineInput
|
||||
import net.torvald.terrarum.ui.UIItemToggleButton
|
||||
import net.torvald.terrarumsansbitmap.gdx.GameFontBase
|
||||
|
||||
/**
|
||||
* Created by Torvald on 2019-10-16.
|
||||
@@ -29,18 +31,66 @@ class UIElemTest : ApplicationAdapter() {
|
||||
private lateinit var ui: UICanvas
|
||||
|
||||
override fun create() {
|
||||
App.fontGame = GameFontBase(App.FONT_DIR, false, true, false,
|
||||
Texture.TextureFilter.Nearest, Texture.TextureFilter.Nearest, false,
|
||||
256, false, 0.5f, false
|
||||
)
|
||||
|
||||
batch = SpriteBatch()
|
||||
camera = OrthographicCamera()
|
||||
camera.setToOrtho(false, 800f, 600f)
|
||||
camera.setToOrtho(true, 800f, 600f)
|
||||
camera.update()
|
||||
Gdx.gl20.glViewport(0, 0, 800, 600)
|
||||
|
||||
ui = DummyTogglePane()
|
||||
ui.isVisible = true
|
||||
|
||||
Gdx.input.inputProcessor = object : InputAdapter() {
|
||||
override fun touchUp(screenX: Int, screenY: Int, pointer: Int, button: Int): Boolean {
|
||||
ui.touchUp(screenX, screenY, pointer, button)
|
||||
return true
|
||||
}
|
||||
|
||||
override fun keyTyped(character: Char): Boolean {
|
||||
ui.keyTyped(character)
|
||||
return true
|
||||
}
|
||||
|
||||
override fun scrolled(amountX: Float, amountY: Float): Boolean {
|
||||
ui.scrolled(amountX, amountY)
|
||||
return true
|
||||
}
|
||||
|
||||
override fun keyUp(keycode: Int): Boolean {
|
||||
ui.keyUp(keycode)
|
||||
return true
|
||||
}
|
||||
|
||||
override fun touchDragged(screenX: Int, screenY: Int, pointer: Int): Boolean {
|
||||
ui.touchDragged(screenX, screenY, pointer)
|
||||
return true
|
||||
}
|
||||
|
||||
override fun keyDown(keycode: Int): Boolean {
|
||||
ui.keyDown(keycode)
|
||||
return true
|
||||
}
|
||||
|
||||
override fun touchDown(screenX: Int, screenY: Int, pointer: Int, button: Int): Boolean {
|
||||
ui.touchDown(screenX, screenY, pointer, button)
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
override fun render() {
|
||||
gdxClearAndSetBlend(0.1f, 0.1f, 0.1f, 1f)
|
||||
|
||||
ui.update(Gdx.graphics.deltaTime)
|
||||
ui.render(batch, camera)
|
||||
|
||||
Gdx.graphics.setTitle("Terrarum UIElemTest $EMDASH F: ${Gdx.graphics.framesPerSecond}")
|
||||
}
|
||||
|
||||
|
||||
@@ -51,46 +101,63 @@ class UIElemTest : ApplicationAdapter() {
|
||||
}
|
||||
|
||||
class DummyTogglePane : UICanvas() {
|
||||
private val button1 = UIItemToggleButton(this, 0, 0)
|
||||
private val button1 = UIItemToggleButton(this, 400, 100)
|
||||
private val textin = UIItemTextLineInput(this, 400, 160, 400)
|
||||
|
||||
private val key1 = UIItemConfigKeycap(this, 0, 20, 4, Input.Keys.A)
|
||||
private val key2 = UIItemConfigKeycap(this, 36, 20, 4, Input.Keys.S)
|
||||
private val key3 = UIItemConfigKeycap(this, 36*2, 20, 4, Input.Keys.D)
|
||||
private val key4 = UIItemConfigKeycap(this, 36*3, 20, 4, Input.Keys.F)
|
||||
|
||||
override var width = 100
|
||||
override var height = 25
|
||||
override var width = 800
|
||||
override var height = 600
|
||||
|
||||
override var openCloseTime: Second = 0f
|
||||
|
||||
private var timer = 0f
|
||||
|
||||
init {
|
||||
button1.clickOnceListener = { _,_,_ ->
|
||||
button1.toggle()
|
||||
}
|
||||
uiItems.add(button1)
|
||||
uiItems.add(key1)
|
||||
uiItems.add(key2)
|
||||
uiItems.add(key3)
|
||||
uiItems.add(key4)
|
||||
uiItems.add(textin)
|
||||
}
|
||||
|
||||
override fun updateUI(delta: Float) {
|
||||
timer += delta
|
||||
|
||||
if (timer >= 1f) {
|
||||
timer -= 1f
|
||||
button1.toggle()
|
||||
}
|
||||
|
||||
uiItems.forEach { it.update(delta) }
|
||||
}
|
||||
|
||||
override fun renderUI(batch: SpriteBatch, camera: Camera) {
|
||||
batch.inUse {
|
||||
batch.color = Color.CORAL
|
||||
Toolkit.fillArea(batch, 0f, 0f, 800f, 600f)
|
||||
|
||||
batch.color = Color.WHITE
|
||||
uiItems.forEach { it.render(batch, camera) }
|
||||
}
|
||||
}
|
||||
|
||||
override fun touchDown(screenX: Int, screenY: Int, pointer: Int, button: Int): Boolean {
|
||||
uiItems.forEach { it.touchDown(screenX, screenY, pointer, button) }
|
||||
return true
|
||||
}
|
||||
|
||||
override fun touchUp(screenX: Int, screenY: Int, pointer: Int, button: Int): Boolean {
|
||||
uiItems.forEach { it.touchUp(screenX, screenY, pointer, button) }
|
||||
return true
|
||||
}
|
||||
|
||||
override fun keyDown(keycode: Int): Boolean {
|
||||
uiItems.forEach { it.keyDown(keycode) }
|
||||
return true
|
||||
}
|
||||
|
||||
override fun keyUp(keycode: Int): Boolean {
|
||||
uiItems.forEach { it.keyUp(keycode) }
|
||||
return true
|
||||
}
|
||||
|
||||
override fun keyTyped(character: Char): Boolean {
|
||||
uiItems.forEach { it.keyTyped(character) }
|
||||
return true
|
||||
}
|
||||
|
||||
override fun doOpening(delta: Float) {
|
||||
}
|
||||
|
||||
@@ -115,6 +182,8 @@ fun main(args: Array<String>) {
|
||||
appConfig.setResizable(false)
|
||||
appConfig.setWindowedMode(800, 600)
|
||||
appConfig.setForegroundFPS(60)
|
||||
App.scr = TerrarumScreenSize(800, 600)
|
||||
|
||||
|
||||
Lwjgl3Application(UIElemTest(), appConfig)
|
||||
}
|
||||
@@ -9,8 +9,12 @@ import com.badlogic.gdx.graphics.Color
|
||||
import com.badlogic.gdx.graphics.OrthographicCamera
|
||||
import com.badlogic.gdx.graphics.g2d.SpriteBatch
|
||||
import com.badlogic.gdx.graphics.glutils.ShaderProgram
|
||||
import net.torvald.terrarum.*
|
||||
import net.torvald.terrarum.App
|
||||
import net.torvald.terrarum.Terrarum
|
||||
import net.torvald.terrarum.Yaml
|
||||
import net.torvald.terrarum.inUse
|
||||
import net.torvald.terrarum.modulebasegame.TerrarumIngame
|
||||
import net.torvald.terrarum.ui.Toolkit
|
||||
import net.torvald.terrarum.ui.UINSMenu
|
||||
|
||||
val UITEST1_WIDTH = 1280
|
||||
@@ -98,7 +102,7 @@ class UITestPad1 : ScreenAdapter() {
|
||||
|
||||
batch.inUse {
|
||||
batch.color = bgCol
|
||||
batch.fillRect(0f, 0f, 2048f, 2048f)
|
||||
Toolkit.fillArea(batch, 0, 0, 2048, 2048)
|
||||
|
||||
nsMenu.render(batch, camera)
|
||||
|
||||
|
||||
@@ -300,7 +300,7 @@ class BasicDebugInfoWindow : UICanvas() {
|
||||
val histogramMax = histogram.screen_tiles.toFloat()
|
||||
|
||||
batch.color = uiColour
|
||||
batch.fillRect(x.toFloat(), y.toFloat(), w.plus(1), h)
|
||||
Toolkit.fillArea(batch, x.toFloat(), y.toFloat(), w.plus(1), h)
|
||||
batch.color = Color.GRAY
|
||||
App.fontSmallNumbers.draw(batch, "0", x.toFloat(), y.toFloat() + h + 2)
|
||||
App.fontSmallNumbers.draw(batch, "255", x.toFloat() + w + 1 - 8 * 3, y.toFloat() + h + 2)
|
||||
@@ -322,7 +322,7 @@ class BasicDebugInfoWindow : UICanvas() {
|
||||
val bar_w = 1f
|
||||
|
||||
batch.color = barColour[c]
|
||||
batch.fillRect(bar_x, bar_y, bar_w, -bar_h)
|
||||
Toolkit.fillArea(batch, bar_x, bar_y, bar_w, -bar_h)
|
||||
}
|
||||
}
|
||||
blendNormal(batch)
|
||||
|
||||
@@ -5,7 +5,10 @@ import com.badlogic.gdx.graphics.Camera
|
||||
import com.badlogic.gdx.graphics.Color
|
||||
import com.badlogic.gdx.graphics.g2d.SpriteBatch
|
||||
import net.torvald.EMDASH
|
||||
import net.torvald.terrarum.*
|
||||
import net.torvald.terrarum.App
|
||||
import net.torvald.terrarum.Terrarum
|
||||
import net.torvald.terrarum.TerrarumAppConfiguration
|
||||
import net.torvald.terrarum.ccE
|
||||
import net.torvald.terrarum.console.Authenticator
|
||||
import net.torvald.terrarum.console.CommandInterpreter
|
||||
import net.torvald.terrarum.gameactors.AVKey
|
||||
@@ -73,8 +76,8 @@ class ConsoleWindow : UICanvas() {
|
||||
override fun renderUI(batch: SpriteBatch, camera: Camera) {
|
||||
// background
|
||||
batch.color = UIColour
|
||||
batch.fillRect(drawOffX, drawOffY, width.toFloat(), height.toFloat())
|
||||
batch.fillRect(drawOffX, drawOffY, width.toFloat(), LINE_HEIGHT.toFloat())
|
||||
Toolkit.fillArea(batch, drawOffX, drawOffY, width.toFloat(), height.toFloat())
|
||||
Toolkit.fillArea(batch, drawOffX, drawOffY, width.toFloat(), LINE_HEIGHT.toFloat())
|
||||
|
||||
val input = commandInputPool!!.toString()
|
||||
val inputDrawWidth = App.fontGame.getWidth(input)
|
||||
@@ -85,9 +88,9 @@ class ConsoleWindow : UICanvas() {
|
||||
App.fontGame.draw(batch, input, 1f + drawOffX, drawOffY)
|
||||
|
||||
batch.color = Color(0x7f7f7f_ff)
|
||||
batch.fillRect(inputDrawWidth.toFloat() + drawOffX + 1, drawOffY, 2f, inputDrawHeight)
|
||||
Toolkit.fillArea(batch, inputDrawWidth.toFloat() + drawOffX + 1, drawOffY, 2f, inputDrawHeight)
|
||||
batch.color = Color.WHITE
|
||||
batch.fillRect(inputDrawWidth.toFloat() + drawOffX + 1, drawOffY, 1f, inputDrawHeight - 1)
|
||||
Toolkit.fillArea(batch, inputDrawWidth.toFloat() + drawOffX + 1, drawOffY, 1f, inputDrawHeight - 1)
|
||||
|
||||
|
||||
// messages
|
||||
|
||||
@@ -12,7 +12,6 @@ import com.badlogic.gdx.utils.Disposable
|
||||
import net.torvald.random.HQRNG
|
||||
import net.torvald.terrarum.App
|
||||
import net.torvald.terrarum.CommonResourcePool
|
||||
import net.torvald.terrarum.fillRect
|
||||
import net.torvald.terrarum.modulebasegame.IngameRenderer
|
||||
import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack
|
||||
import org.lwjgl.opengl.GL20
|
||||
@@ -30,10 +29,15 @@ object Toolkit : Disposable {
|
||||
|
||||
val baloonTile = TextureRegionPack("assets/graphics/gui/message_black_tileable.tga", 36, 36, flipY = true)
|
||||
|
||||
val textureWhiteSquare = Texture(Gdx.files.internal("assets/graphics/ortho_line_tex_2px.tga"))
|
||||
val textureWhiteCircle = Texture(Gdx.files.internal("assets/graphics/circle_512.tga"))
|
||||
|
||||
init {
|
||||
App.disposables.add(this)
|
||||
|
||||
textureWhiteSquare.setFilter(Texture.TextureFilter.Nearest, Texture.TextureFilter.Nearest)
|
||||
textureWhiteCircle.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear)
|
||||
|
||||
CommonResourcePool.addToLoadingList("toolkit_box_border") {
|
||||
TextureRegionPack(Gdx.files.internal("./assets/graphics/gui/box_border_flat_tileable.tga"), 1, 1)
|
||||
}
|
||||
@@ -44,6 +48,8 @@ object Toolkit : Disposable {
|
||||
|
||||
override fun dispose() {
|
||||
baloonTile.dispose()
|
||||
textureWhiteSquare.dispose()
|
||||
textureWhiteCircle.dispose()
|
||||
}
|
||||
|
||||
val drawWidth: Int
|
||||
@@ -72,7 +78,19 @@ object Toolkit : Disposable {
|
||||
}
|
||||
|
||||
fun fillArea(batch: SpriteBatch, x: Int, y: Int, w: Int, h: Int) {
|
||||
batch.fillRect(x.toFloat(), y.toFloat(), w.toFloat(), h.toFloat())
|
||||
batch.draw(textureWhiteSquare, x.toFloat(), y.toFloat(), w.toFloat(), h.toFloat())
|
||||
}
|
||||
fun fillArea(batch: SpriteBatch, x: Float, y: Float, w: Float, h: Float) {
|
||||
batch.draw(textureWhiteSquare, x, y, w, h)
|
||||
}
|
||||
fun fillCircle(batch: SpriteBatch, x: Int, y: Int, w: Int, h: Int) {
|
||||
batch.draw(textureWhiteCircle, x.toFloat(), y.toFloat(), w.toFloat(), h.toFloat())
|
||||
}
|
||||
fun drawStraightLine(batch: SpriteBatch, x: Int, y: Int, otherEnd: Int, thickness: Int, isVertical: Boolean) {
|
||||
if (!isVertical)
|
||||
fillArea(batch, x, y, otherEnd - x, thickness)
|
||||
else
|
||||
fillArea(batch, x, y, thickness, otherEnd - y)
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -6,7 +6,6 @@ import com.badlogic.gdx.graphics.g2d.SpriteBatch
|
||||
import com.badlogic.gdx.graphics.g2d.TextureRegion
|
||||
import net.torvald.terrarum.BlendMode
|
||||
import net.torvald.terrarum.blendNormal
|
||||
import net.torvald.terrarum.fillRect
|
||||
|
||||
/**
|
||||
* Created by minjaesong on 2017-07-16.
|
||||
@@ -48,17 +47,17 @@ open class UIItemImageButton(
|
||||
if (highlighted) {
|
||||
BlendMode.resolve(highlightBackBlendMode, batch)
|
||||
batch.color = highlightBackCol
|
||||
batch.fillRect(posX.toFloat(), posY.toFloat(), width.toFloat(), height.toFloat())
|
||||
Toolkit.fillArea(batch, posX.toFloat(), posY.toFloat(), width.toFloat(), height.toFloat())
|
||||
}
|
||||
else if (mouseUp) {
|
||||
BlendMode.resolve(activeBackBlendMode, batch)
|
||||
batch.color = activeBackCol
|
||||
batch.fillRect(posX.toFloat(), posY.toFloat(), width.toFloat(), height.toFloat())
|
||||
Toolkit.fillArea(batch, posX.toFloat(), posY.toFloat(), width.toFloat(), height.toFloat())
|
||||
}
|
||||
else {
|
||||
batch.color = backgroundCol
|
||||
BlendMode.resolve(backgroundBlendMode, batch)
|
||||
batch.fillRect(posX.toFloat(), posY.toFloat(), width.toFloat(), height.toFloat())
|
||||
Toolkit.fillArea(batch, posX.toFloat(), posY.toFloat(), width.toFloat(), height.toFloat())
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@ import com.badlogic.gdx.graphics.Color
|
||||
import com.badlogic.gdx.graphics.g2d.SpriteBatch
|
||||
import net.torvald.terrarum.BlendMode
|
||||
import net.torvald.terrarum.Second
|
||||
import net.torvald.terrarum.fillRect
|
||||
|
||||
|
||||
/**
|
||||
@@ -107,12 +106,12 @@ class UIItemList<Item: UIItem>(
|
||||
override fun render(batch: SpriteBatch, camera: Camera) {
|
||||
batch.color = backgroundCol
|
||||
BlendMode.resolve(backgroundBlendMode, batch)
|
||||
batch.fillRect(posX.toFloat(), posY.toFloat(), width.toFloat(), height.toFloat())
|
||||
Toolkit.fillArea(batch, posX.toFloat(), posY.toFloat(), width.toFloat(), height.toFloat())
|
||||
|
||||
batch.color = highlightBackCol
|
||||
BlendMode.resolve(highlightBackBlendMode, batch)
|
||||
if (highlightY != null) {
|
||||
batch.fillRect(posX.toFloat(), highlightY!!.toFloat(), width.toFloat(), UIItemTextButton.height.toFloat())
|
||||
Toolkit.fillArea(batch, posX.toFloat(), highlightY!!.toFloat(), width.toFloat(), UIItemTextButton.height.toFloat())
|
||||
}
|
||||
|
||||
itemList.forEach { it.render(batch, camera) }
|
||||
|
||||
@@ -84,17 +84,17 @@ open class UIItemTextButton(
|
||||
/*if (highlighted) {
|
||||
BlendMode.resolve(highlightBackBlendMode, batch)
|
||||
batch.color = highlightBackCol
|
||||
batch.fillRect(posX.toFloat(), posY.toFloat(), width.toFloat(), height.toFloat())
|
||||
Toolkit.fillArea(batch, posX.toFloat(), posY.toFloat(), width.toFloat(), height.toFloat())
|
||||
}
|
||||
else if (mouseUp) {
|
||||
BlendMode.resolve(activeBackBlendMode, batch)
|
||||
batch.color = activeBackCol
|
||||
batch.fillRect(posX.toFloat(), posY.toFloat(), width.toFloat(), height.toFloat())
|
||||
Toolkit.fillArea(batch, posX.toFloat(), posY.toFloat(), width.toFloat(), height.toFloat())
|
||||
}
|
||||
else {
|
||||
batch.color = backgroundCol
|
||||
BlendMode.resolve(backgroundBlendMode, batch)
|
||||
batch.fillRect(posX.toFloat(), posY.toFloat(), width.toFloat(), height.toFloat())
|
||||
Toolkit.fillArea(batch, posX.toFloat(), posY.toFloat(), width.toFloat(), height.toFloat())
|
||||
}*/
|
||||
|
||||
|
||||
|
||||
@@ -232,12 +232,12 @@ class UIItemTextButtonList(
|
||||
if (kinematic) {
|
||||
batch.color = backgroundCol
|
||||
BlendMode.resolve(backgroundBlendMode, batch)
|
||||
batch.fillRect(posX.toFloat(), posY.toFloat(), width.toFloat(), height.toFloat())
|
||||
Toolkit.fillArea(batch, posX.toFloat(), posY.toFloat(), width.toFloat(), height.toFloat())
|
||||
|
||||
batch.color = highlightBackCol
|
||||
BlendMode.resolve(highlightBackBlendMode, batch)
|
||||
if (highlightY != null) {
|
||||
batch.fillRect(posX.toFloat(), highlightY!!.toFloat(), width.toFloat(), itemHitboxSize.toFloat())
|
||||
Toolkit.fillArea(batch, posX.toFloat(), highlightY!!.toFloat(), width.toFloat(), itemHitboxSize.toFloat())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
package net.torvald.terrarum.ui
|
||||
|
||||
import com.badlogic.gdx.Gdx
|
||||
import com.badlogic.gdx.Input
|
||||
import com.badlogic.gdx.graphics.Camera
|
||||
import com.badlogic.gdx.graphics.Color
|
||||
import com.badlogic.gdx.graphics.OrthographicCamera
|
||||
import com.badlogic.gdx.graphics.Pixmap
|
||||
import com.badlogic.gdx.graphics.g2d.SpriteBatch
|
||||
import com.badlogic.gdx.graphics.glutils.FrameBuffer
|
||||
import net.torvald.terrarum.App
|
||||
import net.torvald.terrarum.Terrarum
|
||||
import java.awt.Color
|
||||
import net.torvald.terrarum.*
|
||||
import net.torvald.terrarum.gamecontroller.IngameController
|
||||
|
||||
/**
|
||||
* @param width width of the text input where the text gets drawn, not the entire item
|
||||
@@ -19,7 +20,7 @@ class UIItemTextLineInput(
|
||||
parentUI: UICanvas,
|
||||
initialX: Int, initialY: Int,
|
||||
override val width: Int,
|
||||
override val height: Int,
|
||||
override val height: Int = 24,
|
||||
var placeholder: String? = null,
|
||||
val enablePasteButton: Boolean = true,
|
||||
val enableLanguageButton: Boolean = false
|
||||
@@ -28,33 +29,96 @@ class UIItemTextLineInput(
|
||||
companion object {
|
||||
val TEXTINPUT_COL_TEXT = Color.WHITE
|
||||
val TEXTINPUT_COL_GREY = Color.GRAY
|
||||
|
||||
val TEXTINPUT_COL_BACKGROUND = Color(0x28282888)
|
||||
const val CURSOR_BLINK_TIME = 1f / 3f
|
||||
}
|
||||
|
||||
private val fbo = FrameBuffer(Pixmap.Format.RGBA8888, width, height, true)
|
||||
private val fbo = FrameBuffer(Pixmap.Format.RGBA8888, width - 4, height - 4, true)
|
||||
|
||||
var isActive = true
|
||||
var isGreyedOut = false
|
||||
|
||||
val cursorX = 0
|
||||
var cursorX = 0 // 1 per code point
|
||||
var cursorDrawX = 0 // pixelwise point
|
||||
var cursorBlinkCounter = 0f
|
||||
var cursorOn = true
|
||||
|
||||
val keybuf = StringBuilder()
|
||||
|
||||
private var fboUpdateLatch = false
|
||||
|
||||
override fun update(delta: Float) {
|
||||
super.update(delta)
|
||||
|
||||
if (Terrarum.mouseDown) {
|
||||
isActive = mouseUp
|
||||
//isActive = mouseUp
|
||||
}
|
||||
|
||||
// process keypresses
|
||||
if (isActive) {
|
||||
IngameController.withKeyboardEvent { (_, char, _, keycodes) ->
|
||||
fboUpdateLatch = true
|
||||
|
||||
if (keycodes.contains(Input.Keys.BACKSPACE) && cursorX > 0) {
|
||||
cursorX -= 1
|
||||
val charLen = Character.charCount(keybuf.codePointAt(cursorX))
|
||||
keybuf.delete(keybuf.length - charLen, keybuf.length)
|
||||
cursorDrawX = App.fontGame.getWidth("$keybuf")
|
||||
}
|
||||
// accept:
|
||||
// - literal "<"
|
||||
// - keysymbol that does not start with "<" (not always has length of 1 because UTF-16)
|
||||
else if (char != null && char[0].code >= 32 && (char == "<" || !char.startsWith("<"))) {
|
||||
keybuf.append(char)
|
||||
cursorDrawX = App.fontGame.getWidth("$keybuf")
|
||||
cursorX += 1
|
||||
}
|
||||
}
|
||||
|
||||
cursorBlinkCounter += delta
|
||||
|
||||
while (cursorBlinkCounter >= CURSOR_BLINK_TIME) {
|
||||
cursorBlinkCounter -= CURSOR_BLINK_TIME
|
||||
cursorOn = !cursorOn
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
override fun render(batch: SpriteBatch, camera: Camera) {
|
||||
|
||||
batch.end()
|
||||
|
||||
if (fboUpdateLatch) {
|
||||
fboUpdateLatch = false
|
||||
fbo.inAction(camera as OrthographicCamera, batch) { batch.inUse {
|
||||
gdxClearAndSetBlend(0f, 0f, 0f, 0f)
|
||||
|
||||
it.color = Color.WHITE
|
||||
App.fontGame.draw(it, "$keybuf", 0f, 0f)
|
||||
} }
|
||||
}
|
||||
|
||||
batch.begin()
|
||||
|
||||
batch.color = TEXTINPUT_COL_BACKGROUND
|
||||
Toolkit.fillArea(batch, posX, posY, width, height)
|
||||
|
||||
batch.color = if (isActive) TEXTINPUT_COL_TEXT else TEXTINPUT_COL_GREY
|
||||
Toolkit.drawBoxBorder(batch, posX - 1, posY - 1, width + 2, height + 2)
|
||||
batch.draw(fbo.colorBufferTexture, posX + 2f, posY + 2f, fbo.width.toFloat(), fbo.height.toFloat())
|
||||
|
||||
if (cursorOn) {
|
||||
val oldBatchCol = batch.color.cpy()
|
||||
|
||||
batch.color = batch.color.mul(0.5f,0.5f,0.5f,1f)
|
||||
Toolkit.fillArea(batch, posX + cursorDrawX + 3, posY, 2, 24)
|
||||
|
||||
batch.color = oldBatchCol
|
||||
Toolkit.fillArea(batch, posX + cursorDrawX + 3, posY, 1, 23)
|
||||
}
|
||||
|
||||
|
||||
super.render(batch, camera)
|
||||
}
|
||||
|
||||
|
||||
@@ -171,7 +171,7 @@ class UINSMenu(
|
||||
// draw title bar
|
||||
batch.color = titleBackCol
|
||||
BlendMode.resolve(titleBlendMode, batch)
|
||||
batch.fillRect(it.ui.posX.toFloat(), it.ui.posY.toFloat() - LINE_HEIGHT, it.ui.width.toFloat(), LINE_HEIGHT.toFloat())
|
||||
Toolkit.fillArea(batch, it.ui.posX.toFloat(), it.ui.posY.toFloat() - LINE_HEIGHT, it.ui.width.toFloat(), LINE_HEIGHT.toFloat())
|
||||
|
||||
batch.color = titleTextCol
|
||||
blendNormal(batch)
|
||||
|
||||
@@ -3,11 +3,16 @@ package net.torvald.terrarum.worlddrawer
|
||||
import com.badlogic.gdx.graphics.g2d.SpriteBatch
|
||||
import com.jme3.math.FastMath
|
||||
import net.torvald.colourutil.ColourTemp
|
||||
import net.torvald.terrarum.*
|
||||
import net.torvald.terrarum.App
|
||||
import net.torvald.terrarum.Terrarum
|
||||
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZEF
|
||||
import net.torvald.terrarum.blendMul
|
||||
import net.torvald.terrarum.blendNormal
|
||||
import net.torvald.terrarum.blockproperties.Block
|
||||
import net.torvald.terrarum.blockstats.BlockStats
|
||||
import net.torvald.terrarum.gameworld.GameWorld
|
||||
import net.torvald.terrarum.ui.Toolkit
|
||||
import kotlin.math.roundToInt
|
||||
|
||||
/**
|
||||
* Created by minjaesong on 2015-12-31.
|
||||
@@ -58,9 +63,9 @@ object FeaturesDrawer {
|
||||
blendMul(batch)
|
||||
|
||||
batch.color = ColourTemp(colTemp)
|
||||
batch.fillRect(0f, 0f,
|
||||
App.scr.width * if (zoom < 1) 1f / zoom else zoom,
|
||||
App.scr.height * if (zoom < 1) 1f / zoom else zoom
|
||||
Toolkit.fillArea(batch, 0, 0,
|
||||
(App.scr.width * if (zoom < 1) 1f / zoom else zoom).roundToInt(),
|
||||
(App.scr.height * if (zoom < 1) 1f / zoom else zoom).roundToInt()
|
||||
)
|
||||
|
||||
blendNormal(batch)
|
||||
|
||||
Reference in New Issue
Block a user