From 6d19347dfb17e7686e0a66cee155782a7216e448 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Thu, 31 Jan 2019 18:01:33 +0900 Subject: [PATCH] nsmenu to invoke class with defined args; working settime on buildingmaker --- src/net/torvald/terrarum/Yaml.kt | 2 +- .../terrarum/modulebasegame/BuildingMaker.kt | 39 ++++++++++++++++--- .../modulebasegame/gameworld/WorldTime.kt | 3 ++ src/net/torvald/terrarum/tests/UITestPad1.kt | 5 ++- src/net/torvald/terrarum/ui/UINSMenu.kt | 4 +- 5 files changed, 43 insertions(+), 10 deletions(-) diff --git a/src/net/torvald/terrarum/Yaml.kt b/src/net/torvald/terrarum/Yaml.kt index 050b9f081..e180cd343 100644 --- a/src/net/torvald/terrarum/Yaml.kt +++ b/src/net/torvald/terrarum/Yaml.kt @@ -196,5 +196,5 @@ inline class Yaml(val text: String) { * */ interface YamlInvokable { - operator fun invoke(vararg args: Any?) + operator fun invoke(args: Array) } \ No newline at end of file diff --git a/src/net/torvald/terrarum/modulebasegame/BuildingMaker.kt b/src/net/torvald/terrarum/modulebasegame/BuildingMaker.kt index c1e05a5ea..1592127ab 100644 --- a/src/net/torvald/terrarum/modulebasegame/BuildingMaker.kt +++ b/src/net/torvald/terrarum/modulebasegame/BuildingMaker.kt @@ -12,6 +12,7 @@ import net.torvald.terrarum.modulebasegame.gameactors.ActorHumanoid import net.torvald.terrarum.modulebasegame.gameworld.GameWorldExtension import net.torvald.terrarum.modulebasegame.gameworld.WorldTime import net.torvald.terrarum.modulebasegame.ui.Notification +import net.torvald.terrarum.modulebasegame.weather.WeatherMixer import net.torvald.terrarum.ui.UICanvas import net.torvald.terrarum.ui.UINSMenu import net.torvald.terrarum.worlddrawer.LightmapRenderer @@ -40,10 +41,10 @@ class BuildingMaker(batch: SpriteBatch) : IngameInstance(batch) { - Undo - Redo - Time - - Morning - - Noon - - Dusk - - Night + - Morning : net.torvald.terrarum.modulebasegame.YamlCommandSetTimeMorning + - Noon : net.torvald.terrarum.modulebasegame.YamlCommandSetTimeNoon + - Dusk : net.torvald.terrarum.modulebasegame.YamlCommandSetTimeDusk + - Night : net.torvald.terrarum.modulebasegame.YamlCommandSetTimeNight - Set… - Weather - Sunny @@ -132,6 +133,7 @@ class BuildingMaker(batch: SpriteBatch) : IngameInstance(batch) { uiToolbox.setPosition(0, 0) uiToolbox.isVisible = true + uiToolbox.invocationArgument = arrayOf(this) notifier.setPosition( (Terrarum.WIDTH - notifier.width) / 2, Terrarum.HEIGHT - notifier.height) @@ -166,6 +168,7 @@ class BuildingMaker(batch: SpriteBatch) : IngameInstance(batch) { private fun updateGame(delta: Float) { KeyToggler.update(false) + WeatherMixer.update(delta, actorNowPlaying, gameWorld) blockPointingCursor.update(delta) actorNowPlaying?.update(delta) uiContainer.forEach { it.update(delta) } @@ -174,7 +177,7 @@ class BuildingMaker(batch: SpriteBatch) : IngameInstance(batch) { } private fun renderGame() { - IngameRenderer(world as GameWorldExtension, actorsRenderOverlay = actorsRenderOverlay, uisToDraw = uiContainer) + IngameRenderer.invoke(world as GameWorldExtension, actorsRenderOverlay = actorsRenderOverlay, uisToDraw = uiContainer) } override fun resize(width: Int, height: Int) { @@ -260,7 +263,31 @@ class MovableWorldCamera : ActorHumanoid(0, usePhysics = false) { } class YamlCommandExit : YamlInvokable { - override fun invoke(vararg args: Any?) { + override fun invoke(args: Array) { Terrarum.setScreen(TitleScreen(Terrarum.batch)) } +} + +class YamlCommandSetTimeMorning : YamlInvokable { + override fun invoke(args: Array) { + (args[0] as BuildingMaker).gameWorld.time.setTimeOfToday(WorldTime.parseTime("7h00")) + } +} + +class YamlCommandSetTimeNoon : YamlInvokable { + override fun invoke(args: Array) { + (args[0] as BuildingMaker).gameWorld.time.setTimeOfToday(WorldTime.parseTime("12h30")) + } +} + +class YamlCommandSetTimeDusk : YamlInvokable { + override fun invoke(args: Array) { + (args[0] as BuildingMaker).gameWorld.time.setTimeOfToday(WorldTime.parseTime("18h40")) + } +} + +class YamlCommandSetTimeNight : YamlInvokable { + override fun invoke(args: Array) { + (args[0] as BuildingMaker).gameWorld.time.setTimeOfToday(WorldTime.parseTime("0h30")) + } } \ No newline at end of file diff --git a/src/net/torvald/terrarum/modulebasegame/gameworld/WorldTime.kt b/src/net/torvald/terrarum/modulebasegame/gameworld/WorldTime.kt index bfae52f48..5a897b6a1 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameworld/WorldTime.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameworld/WorldTime.kt @@ -153,6 +153,9 @@ class WorldTime(initTime: Long = 0L) { val EPOCH_YEAR = 125 + /** + * Parse a time in the format of "8h30" (hour and minute) or "39882" (second) and return a time of day, in seconds + */ fun parseTime(s: String): Int = if (s.length >= 4 && s.contains('h')) { s.toLowerCase().substringBefore('h').toInt() * HOUR_SEC + diff --git a/src/net/torvald/terrarum/tests/UITestPad1.kt b/src/net/torvald/terrarum/tests/UITestPad1.kt index 24ae9e38e..b708c476c 100644 --- a/src/net/torvald/terrarum/tests/UITestPad1.kt +++ b/src/net/torvald/terrarum/tests/UITestPad1.kt @@ -1,11 +1,12 @@ package net.torvald.terrarum.tests -import com.badlogic.gdx.* +import com.badlogic.gdx.Gdx +import com.badlogic.gdx.InputAdapter +import com.badlogic.gdx.ScreenAdapter import com.badlogic.gdx.backends.lwjgl.LwjglApplication import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration import com.badlogic.gdx.graphics.Color 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 net.torvald.terrarum.* diff --git a/src/net/torvald/terrarum/ui/UINSMenu.kt b/src/net/torvald/terrarum/ui/UINSMenu.kt index 56f922108..74ddbf84d 100644 --- a/src/net/torvald/terrarum/ui/UINSMenu.kt +++ b/src/net/torvald/terrarum/ui/UINSMenu.kt @@ -50,6 +50,8 @@ class UINSMenu( val selectedIndex: Int? get() = listStack.peek().ui.selectedIndex + var invocationArgument: Array = arrayOf(this) + init { addSubMenu(tree) } @@ -102,7 +104,7 @@ class UINSMenu( // invoke whatever command there is //printdbg(this, "Selected: ${tree.children[new].data?.second}") - tree.children[new].data?.second?.invoke() + tree.children[new].data?.second?.invoke(invocationArgument) } // END List selection change listener