mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-11 11:04:05 +09:00
super simple new character window
This commit is contained in:
@@ -400,12 +400,6 @@ open class IngameInstance(val batch: SpriteBatch, val isMultiplayer: Boolean = f
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
// fun getSaveFileMain() = File(App.saveDir, savegameNickname)
|
|
||||||
fun getWorldSaveFiledesc(filename: String) = File(App.worldsDir, filename)
|
|
||||||
fun getPlayerSaveFiledesc(filename: String) = File(App.playersDir, filename)
|
|
||||||
fun getSharedSaveFiledesc(filename: String) = File(App.saveSharedDir, filename)
|
|
||||||
|
|
||||||
|
|
||||||
// simple euclidean norm, squared
|
// simple euclidean norm, squared
|
||||||
private val actorDistanceCalculator = DistanceCalculator<ActorWithBody> { t: ActorWithBody, p: PointND ->
|
private val actorDistanceCalculator = DistanceCalculator<ActorWithBody> { t: ActorWithBody, p: PointND ->
|
||||||
val dist1 = (p.getOrd(0) - t.hitbox.centeredX).sqr() + (p.getOrd(1) - t.hitbox.centeredY).sqr()
|
val dist1 = (p.getOrd(0) - t.hitbox.centeredX).sqr() + (p.getOrd(1) - t.hitbox.centeredY).sqr()
|
||||||
|
|||||||
@@ -321,6 +321,13 @@ object Terrarum : Disposable {
|
|||||||
} while (hasCollision(ret)) // check for collision
|
} while (hasCollision(ret)) // check for collision
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
fun getWorldSaveFiledesc(filename: String) = File(App.worldsDir, filename)
|
||||||
|
fun getPlayerSaveFiledesc(filename: String) = File(App.playersDir, filename)
|
||||||
|
fun getSharedSaveFiledesc(filename: String) = File(App.saveSharedDir, filename)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
inline fun SpriteBatch.inUse(action: (SpriteBatch) -> Unit) {
|
inline fun SpriteBatch.inUse(action: (SpriteBatch) -> Unit) {
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ import com.badlogic.gdx.graphics.g2d.SpriteBatch
|
|||||||
import net.torvald.EMDASH
|
import net.torvald.EMDASH
|
||||||
import net.torvald.terrarum.*
|
import net.torvald.terrarum.*
|
||||||
import net.torvald.terrarum.App.*
|
import net.torvald.terrarum.App.*
|
||||||
|
import net.torvald.terrarum.Terrarum.getPlayerSaveFiledesc
|
||||||
|
import net.torvald.terrarum.Terrarum.getWorldSaveFiledesc
|
||||||
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE
|
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE
|
||||||
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZED
|
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZED
|
||||||
import net.torvald.terrarum.blockproperties.BlockPropUtil
|
import net.torvald.terrarum.blockproperties.BlockPropUtil
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ import com.badlogic.gdx.graphics.Color
|
|||||||
import com.badlogic.gdx.graphics.g2d.SpriteBatch
|
import com.badlogic.gdx.graphics.g2d.SpriteBatch
|
||||||
import net.torvald.terrarum.App
|
import net.torvald.terrarum.App
|
||||||
import net.torvald.terrarum.INGAME
|
import net.torvald.terrarum.INGAME
|
||||||
|
import net.torvald.terrarum.Terrarum.getPlayerSaveFiledesc
|
||||||
|
import net.torvald.terrarum.Terrarum.getWorldSaveFiledesc
|
||||||
import net.torvald.terrarum.TitleScreen
|
import net.torvald.terrarum.TitleScreen
|
||||||
import net.torvald.terrarum.blendNormal
|
import net.torvald.terrarum.blendNormal
|
||||||
import net.torvald.terrarum.modulebasegame.TerrarumIngame
|
import net.torvald.terrarum.modulebasegame.TerrarumIngame
|
||||||
@@ -96,8 +98,8 @@ class UIInventoryEscMenu(val full: UIInventoryFull) : UICanvas() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val saveTime_t = App.getTIME_T()
|
val saveTime_t = App.getTIME_T()
|
||||||
val playerSavefile = INGAME.getPlayerSaveFiledesc(INGAME.playerSavefileName)
|
val playerSavefile = getPlayerSaveFiledesc(INGAME.playerSavefileName)
|
||||||
val worldSavefile = INGAME.getWorldSaveFiledesc(INGAME.worldSavefileName)
|
val worldSavefile = getWorldSaveFiledesc(INGAME.worldSavefileName)
|
||||||
|
|
||||||
|
|
||||||
INGAME.makeSavegameBackupCopy(playerSavefile)
|
INGAME.makeSavegameBackupCopy(playerSavefile)
|
||||||
|
|||||||
140
src/net/torvald/terrarum/modulebasegame/ui/UINewCharacter.kt
Normal file
140
src/net/torvald/terrarum/modulebasegame/ui/UINewCharacter.kt
Normal file
@@ -0,0 +1,140 @@
|
|||||||
|
package net.torvald.terrarum.modulebasegame.ui
|
||||||
|
|
||||||
|
import com.badlogic.gdx.graphics.Camera
|
||||||
|
import com.badlogic.gdx.graphics.Color
|
||||||
|
import com.badlogic.gdx.graphics.g2d.SpriteBatch
|
||||||
|
import net.torvald.random.HQRNG
|
||||||
|
import net.torvald.terrarum.App
|
||||||
|
import net.torvald.terrarum.Second
|
||||||
|
import net.torvald.terrarum.Terrarum
|
||||||
|
import net.torvald.terrarum.console.Echo
|
||||||
|
import net.torvald.terrarum.gameactors.AVKey
|
||||||
|
import net.torvald.terrarum.langpack.Lang
|
||||||
|
import net.torvald.terrarum.modulebasegame.gameactors.PlayerBuilderTestSubject1
|
||||||
|
import net.torvald.terrarum.savegame.DiskSkimmer
|
||||||
|
import net.torvald.terrarum.savegame.VDUtil
|
||||||
|
import net.torvald.terrarum.savegame.VirtualDisk
|
||||||
|
import net.torvald.terrarum.serialise.Common
|
||||||
|
import net.torvald.terrarum.serialise.LoadSavegame
|
||||||
|
import net.torvald.terrarum.serialise.WritePlayer
|
||||||
|
import net.torvald.terrarum.serialise.WriteSavegame
|
||||||
|
import net.torvald.terrarum.toInt
|
||||||
|
import net.torvald.terrarum.ui.*
|
||||||
|
import net.torvald.terrarum.utils.RandomWordsName
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by minjaesong on 2021-12-09.
|
||||||
|
*/
|
||||||
|
class UINewCharacter(val remoCon: UIRemoCon) : UICanvas() {
|
||||||
|
|
||||||
|
override var width = 480
|
||||||
|
override var height = 480
|
||||||
|
override var openCloseTime: Second = 0f
|
||||||
|
|
||||||
|
private val drawX = (Toolkit.drawWidth - width) / 2
|
||||||
|
private val drawY = (App.scr.height - height) / 2
|
||||||
|
|
||||||
|
private val row1 = 186 + 40
|
||||||
|
|
||||||
|
|
||||||
|
private val inputWidth = 340
|
||||||
|
|
||||||
|
private val nameInput = UIItemTextLineInput(this,
|
||||||
|
drawX + width - inputWidth, drawY + row1, inputWidth,
|
||||||
|
{ RandomWordsName(4) }, InputLenCap(VirtualDisk.NAME_LENGTH, InputLenCap.CharLenUnit.UTF8_BYTES))
|
||||||
|
|
||||||
|
private val goButtonWidth = 180
|
||||||
|
private val backButton = UIItemTextButton(this, "MENU_LABEL_BACK", drawX + (width/2 - goButtonWidth) / 2, drawY + height - 24, goButtonWidth, true, alignment = UIItemTextButton.Companion.Alignment.CENTRE, hasBorder = true)
|
||||||
|
private val goButton = UIItemTextButton(this, "MENU_LABEL_CONFIRM_BUTTON", drawX + width/2 + (width/2 - goButtonWidth) / 2, drawY + height - 24, goButtonWidth, true, alignment = UIItemTextButton.Companion.Alignment.CENTRE, hasBorder = true)
|
||||||
|
|
||||||
|
private var returnedFromChargen = false
|
||||||
|
|
||||||
|
private var uiLocked = false
|
||||||
|
|
||||||
|
init {
|
||||||
|
goButton.touchDownListener = { _, _, _, _ ->
|
||||||
|
uiLocked = true
|
||||||
|
|
||||||
|
|
||||||
|
val player = PlayerBuilderTestSubject1()
|
||||||
|
player.actorValue[AVKey.NAME] = nameInput.getTextOrPlaceholder()
|
||||||
|
|
||||||
|
val disk = VDUtil.createNewDisk(
|
||||||
|
1L shl 60,
|
||||||
|
player.actorValue.getAsString(AVKey.NAME) ?: "",
|
||||||
|
Common.CHARSET
|
||||||
|
)
|
||||||
|
val outFile = Terrarum.getPlayerSaveFiledesc(LoadSavegame.getPlayerSavefileName(player))
|
||||||
|
val time_t = App.getTIME_T()
|
||||||
|
|
||||||
|
|
||||||
|
val savingThread = Thread({
|
||||||
|
|
||||||
|
disk.saveMode = 2 // auto, no quick
|
||||||
|
disk.capacity = 0L
|
||||||
|
|
||||||
|
WritePlayer(player, disk, null, time_t)
|
||||||
|
VDUtil.dumpToRealMachine(disk, outFile)
|
||||||
|
|
||||||
|
uiLocked = false
|
||||||
|
returnedFromChargen = true
|
||||||
|
|
||||||
|
|
||||||
|
// comment below if chargen must send gamers back to the charcters list
|
||||||
|
UILoadGovernor.playerDisk = DiskSkimmer(outFile)
|
||||||
|
// comment above if chargen must send gamers back to the charcters list
|
||||||
|
|
||||||
|
|
||||||
|
}, "TerrarumBasegameNewCharcterSaveThread")
|
||||||
|
savingThread.start()
|
||||||
|
}
|
||||||
|
backButton.touchDownListener = { _, _, _, _ ->
|
||||||
|
remoCon.openUI(UILoadDemoSavefiles(remoCon, 0))
|
||||||
|
}
|
||||||
|
|
||||||
|
addUIitem(nameInput)
|
||||||
|
addUIitem(goButton)
|
||||||
|
addUIitem(backButton)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun updateUI(delta: Float) {
|
||||||
|
if (!uiLocked) {
|
||||||
|
uiItems.forEach { it.update(delta) }
|
||||||
|
}
|
||||||
|
|
||||||
|
if (returnedFromChargen) {
|
||||||
|
returnedFromChargen = false
|
||||||
|
remoCon.openUI(UILoadDemoSavefiles(remoCon, 1)) // 0 to go back (Terraria's behav), set variables up and 1 to choose world
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun renderUI(batch: SpriteBatch, camera: Camera) {
|
||||||
|
batch.color = Color.WHITE
|
||||||
|
// ui title
|
||||||
|
// val titlestr = Lang["CONTEXT_WORLD_NEW"]
|
||||||
|
// App.fontUITitle.draw(batch, titlestr, drawX + (width - App.fontGame.getWidth(titlestr)).div(2).toFloat(), titleTextPosY.toFloat())
|
||||||
|
|
||||||
|
|
||||||
|
// name/seed input labels
|
||||||
|
App.fontGame.draw(batch, Lang["MENU_NAME"], drawX, drawY + row1)
|
||||||
|
|
||||||
|
uiItems.forEach { it.render(batch, camera) }
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun doOpening(delta: Float) {
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun doClosing(delta: Float) {
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun endOpening(delta: Float) {
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun endClosing(delta: Float) {
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun dispose() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -78,7 +78,7 @@ class UINewWorld(val remoCon: UIRemoCon) : UICanvas() {
|
|||||||
tex.forEach { it.flip(false, true) }
|
tex.forEach { it.flip(false, true) }
|
||||||
|
|
||||||
goButton.touchDownListener = { _, _, _, _ ->
|
goButton.touchDownListener = { _, _, _, _ ->
|
||||||
printdbg(this, "generate! Size=${sizeSelector.selection}, Name=${nameInput.getTextOrPlaceholder()}, Seed=${seedInput.getTextOrPlaceholder()}")
|
// printdbg(this, "generate! Size=${sizeSelector.selection}, Name=${nameInput.getTextOrPlaceholder()}, Seed=${seedInput.getTextOrPlaceholder()}")
|
||||||
|
|
||||||
val ingame = TerrarumIngame(App.batch)
|
val ingame = TerrarumIngame(App.batch)
|
||||||
val player = ReadActor.invoke(UILoadGovernor.playerDisk!!, ByteArray64Reader(UILoadGovernor.playerDisk!!.getFile(-1L)!!.bytes, Common.CHARSET)) as IngamePlayer
|
val player = ReadActor.invoke(UILoadGovernor.playerDisk!!, ByteArray64Reader(UILoadGovernor.playerDisk!!.getFile(-1L)!!.bytes, Common.CHARSET)) as IngamePlayer
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ object UITitleRemoConYaml {
|
|||||||
|
|
||||||
// todo add MENU_IO_IMPORT
|
// todo add MENU_IO_IMPORT
|
||||||
val injectedMenuSingleCharSel = """
|
val injectedMenuSingleCharSel = """
|
||||||
- CONTEXT_CHARACTER_NEW
|
- CONTEXT_CHARACTER_NEW : net.torvald.terrarum.modulebasegame.ui.UINewCharacter
|
||||||
- MENU_LABEL_RETURN
|
- MENU_LABEL_RETURN
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import net.torvald.terrarum.modulebasegame.TerrarumIngame
|
|||||||
import net.torvald.terrarum.modulebasegame.gameactors.IngamePlayer
|
import net.torvald.terrarum.modulebasegame.gameactors.IngamePlayer
|
||||||
import net.torvald.terrarum.savegame.*
|
import net.torvald.terrarum.savegame.*
|
||||||
import java.io.Reader
|
import java.io.Reader
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by minjaesong on 2021-08-24.
|
* Created by minjaesong on 2021-08-24.
|
||||||
@@ -57,19 +58,19 @@ object WritePlayer {
|
|||||||
if (!dir.contains(file.entryID)) dir.add(file.entryID)
|
if (!dir.contains(file.entryID)) dir.add(file.entryID)
|
||||||
}
|
}
|
||||||
|
|
||||||
operator fun invoke(player: IngamePlayer, playerDisk: VirtualDisk, ingame: TerrarumIngame, time_t: Long) {
|
operator fun invoke(player: IngamePlayer, playerDisk: VirtualDisk, ingame: TerrarumIngame?, time_t: Long) {
|
||||||
player.lastPlayTime = time_t
|
player.lastPlayTime = time_t
|
||||||
player.totalPlayTime += time_t - ingame.loadedTime_t
|
player.totalPlayTime += time_t - (ingame?.loadedTime_t ?: time_t)
|
||||||
|
|
||||||
|
|
||||||
// restore player prop backup created on load-time for multiplayer
|
// restore player prop backup created on load-time for multiplayer
|
||||||
if (ingame.isMultiplayer) {
|
if (ingame?.isMultiplayer == true) {
|
||||||
player.setPosition(player.unauthorisedPlayerProps.physics.position)
|
player.setPosition(player.unauthorisedPlayerProps.physics.position)
|
||||||
player.actorValue = player.unauthorisedPlayerProps.actorValue!!
|
player.actorValue = player.unauthorisedPlayerProps.actorValue!!
|
||||||
player.inventory = player.unauthorisedPlayerProps.inventory!!
|
player.inventory = player.unauthorisedPlayerProps.inventory!!
|
||||||
}
|
}
|
||||||
|
|
||||||
player.worldCurrentlyPlaying = ingame.world.worldIndex
|
player.worldCurrentlyPlaying = ingame?.world?.worldIndex ?: UUID(0L,0L)
|
||||||
|
|
||||||
|
|
||||||
val actorJson = WriteActor.encodeToByteArray64(player)
|
val actorJson = WriteActor.encodeToByteArray64(player)
|
||||||
|
|||||||
Reference in New Issue
Block a user