From 84506a2ca0b40b16ae70baa0ab7201518aeaa60c Mon Sep 17 00:00:00 2001 From: minjaesong Date: Thu, 14 Sep 2023 15:20:39 +0900 Subject: [PATCH] worldgen: estimated time disp --- assets/locales/en/terrarum.json | 1 + assets/locales/koKR/terrarum.json | 1 + src/net/torvald/terrarum/modulebasegame/ui/UINewWorld.kt | 9 +++++++++ .../terrarum/modulebasegame/ui/UIWorldPortalSearch.kt | 8 ++++++++ .../terrarum/modulebasegame/worldgenerator/Worldgen.kt | 6 +++++- 5 files changed, 24 insertions(+), 1 deletion(-) diff --git a/assets/locales/en/terrarum.json b/assets/locales/en/terrarum.json index 4850b8f9b..ba021f3dd 100644 --- a/assets/locales/en/terrarum.json +++ b/assets/locales/en/terrarum.json @@ -1,6 +1,7 @@ { "APP_WARNING_HEALTH_AND_SAFETY": "WARNING-HEALTH AND SAFETY", "CONTEXT_CHARACTER": "Character", + "CONTEXT_ESTIMATED_MINUTES_PLURAL": "Estimated: about {0} minutes", "CONTEXT_TIME_MINUTE_PLURAL": "Minutes", "CONTEXT_TIME_SECOND_PLURAL": "Seconds", "COPYRIGHT_ALL_RIGHTS_RESERVED": "All rights reserved", diff --git a/assets/locales/koKR/terrarum.json b/assets/locales/koKR/terrarum.json index b37a2ff22..f1f413dd1 100644 --- a/assets/locales/koKR/terrarum.json +++ b/assets/locales/koKR/terrarum.json @@ -1,6 +1,7 @@ { "APP_WARNING_HEALTH_AND_SAFETY": "경고—건강과 안전을 위하여", "CONTEXT_CHARACTER": "캐릭터", + "CONTEXT_ESTIMATED_MINUTES_PLURAL": "예상 시간: 약 {0}분", "CONTEXT_TIME_MINUTE_PLURAL": "분", "CONTEXT_TIME_SECOND_PLURAL": "초", "COPYRIGHT_ALL_RIGHTS_RESERVED": "모든 권리 보유", diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UINewWorld.kt b/src/net/torvald/terrarum/modulebasegame/ui/UINewWorld.kt index b70f0c979..f2c3c5591 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UINewWorld.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UINewWorld.kt @@ -19,6 +19,7 @@ import net.torvald.terrarum.savegame.ByteArray64Reader import net.torvald.terrarum.savegame.VirtualDisk import net.torvald.terrarum.serialise.Common import net.torvald.terrarum.modulebasegame.serialise.ReadActor +import net.torvald.terrarum.modulebasegame.worldgenerator.Worldgen import net.torvald.terrarum.savegame.DiskSkimmer import net.torvald.terrarum.savegame.VDFileID.SAVEGAMEINFO import net.torvald.terrarum.serialise.toBigInt64 @@ -26,6 +27,7 @@ import net.torvald.terrarum.ui.* import net.torvald.terrarum.utils.PasswordBase32 import net.torvald.terrarum.utils.RandomWordsName import java.util.UUID +import kotlin.math.roundToInt /** * Created by minjaesong on 2021-10-25. @@ -88,6 +90,7 @@ class UINewWorld(val remoCon: UIRemoCon) : UICanvas() { private val inputLineY1 = 90 private val inputLineY2 = 130 + private val inputLineY3 = 170 private val goButtonWidth = 180 private val gridGap = 10 private val buttonBaseX = (Toolkit.drawWidth - 3 * goButtonWidth - 2 * gridGap) / 2 @@ -291,6 +294,12 @@ class UINewWorld(val remoCon: UIRemoCon) : UICanvas() { // name/seed input labels App.fontGame.draw(batch, Lang["MENU_NAME"], drawX - 4, drawY + sizeSelY + inputLineY1) App.fontGame.draw(batch, Lang["CONTEXT_GENERATOR_SEED"], drawX - 4, drawY + sizeSelY + inputLineY2) + + val (wx, wy) = TerrarumIngame.NEW_WORLD_SIZE[sizeSelector.selection] + val etaMin = Worldgen.getEstimationSec(wx, wy).div(60f).roundToInt().coerceAtLeast(1) + val etaText = Lang.getAndUseTemplate("CONTEXT_ESTIMATED_MINUTES_PLURAL", true, etaMin) + + Toolkit.drawTextCentered(batch, App.fontGame, etaText, width, drawX, drawY + sizeSelY + inputLineY3) } else if (mode == 1) { // code input labels diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortalSearch.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortalSearch.kt index 80166cf57..051a017b9 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortalSearch.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortalSearch.kt @@ -17,6 +17,7 @@ import net.torvald.terrarum.modulebasegame.gameactors.FixtureWorldPortal import net.torvald.terrarum.modulebasegame.gameactors.IngamePlayer import net.torvald.terrarum.modulebasegame.serialise.ReadActor import net.torvald.terrarum.modulebasegame.ui.UIInventoryFull.Companion.INVENTORY_CELLS_OFFSET_Y +import net.torvald.terrarum.modulebasegame.worldgenerator.Worldgen import net.torvald.terrarum.realestate.LandUtil import net.torvald.terrarum.savegame.ByteArray64Reader import net.torvald.terrarum.savegame.VDFileID @@ -24,6 +25,7 @@ import net.torvald.terrarum.savegame.VirtualDisk import net.torvald.terrarum.serialise.Common import net.torvald.terrarum.ui.* import net.torvald.terrarum.utils.RandomWordsName +import kotlin.math.roundToInt /** * Created by minjaesong on 2023-05-19. @@ -53,6 +55,7 @@ class UIWorldPortalSearch(val full: UIWorldPortal) : UICanvas() { private val inputWidth = 350 private val inputLineY1 = 90 private val inputLineY2 = 130 + private val inputLineY3 = 170 private val sizeSelY = 186 + 40 @@ -199,6 +202,11 @@ class UIWorldPortalSearch(val full: UIWorldPortal) : UICanvas() { App.fontGame.draw(batch, Lang["MENU_NAME"], drawX - 4, drawY + sizeSelY + inputLineY1) App.fontGame.draw(batch, Lang["CONTEXT_PLACE_COORDINATE"], drawX - 4, drawY + sizeSelY + inputLineY2) + val (wx, wy) = TerrarumIngame.NEW_WORLD_SIZE[sizeSelector.selection] + val etaMin = Worldgen.getEstimationSec(wx, wy).div(60f).roundToInt().coerceAtLeast(1) + val etaText = Lang.getAndUseTemplate("CONTEXT_ESTIMATED_MINUTES_PLURAL", true, etaMin) + + Toolkit.drawTextCentered(batch, App.fontGame, etaText, width, drawX, drawY + sizeSelY + inputLineY3) // memory gauge val chunksUsed = full.chunksUsed diff --git a/src/net/torvald/terrarum/modulebasegame/worldgenerator/Worldgen.kt b/src/net/torvald/terrarum/modulebasegame/worldgenerator/Worldgen.kt index fea5ef5ff..9bab6b816 100644 --- a/src/net/torvald/terrarum/modulebasegame/worldgenerator/Worldgen.kt +++ b/src/net/torvald/terrarum/modulebasegame/worldgenerator/Worldgen.kt @@ -1,9 +1,10 @@ package net.torvald.terrarum.modulebasegame.worldgenerator import net.torvald.terrarum.App -import net.torvald.terrarum.App.printdbg +import net.torvald.terrarum.App.* import net.torvald.terrarum.BlockCodex import net.torvald.terrarum.gameworld.GameWorld +import kotlin.math.roundToLong /** * New world generator. @@ -62,6 +63,9 @@ object Worldgen { private data class Work(val loadingScreenName: String, val theWork: Gen) + fun getEstimationSec(width: Int, height: Int): Long { + return (23.05 * 1.25 * (bogoflops / 47500000.0) * (width * height / 40095000.0) * (THREAD_COUNT / 32.0)).roundToLong() + } } abstract class Gen(val world: GameWorld, val seed: Long, val params: Any) {