mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-18 03:44:54 -04:00
option to set custom window factory
This commit is contained in:
parent
6e996f80e0
commit
b9109b350e
@ -17,6 +17,8 @@ import de.bixilon.kutil.concurrent.worker.task.TaskWorker
|
||||
import de.bixilon.kutil.reflection.ReflectionUtil.forceSet
|
||||
import de.bixilon.minosoft.assets.IntegratedAssets
|
||||
import de.bixilon.minosoft.data.registries.fallback.tags.FallbackTags
|
||||
import de.bixilon.minosoft.gui.rendering.system.window.WindowFactory
|
||||
import de.bixilon.minosoft.gui.rendering.system.window.dummy.DummyWindow
|
||||
import de.bixilon.minosoft.main.BootTasks
|
||||
import de.bixilon.minosoft.main.MinosoftBoot
|
||||
import de.bixilon.minosoft.terminal.RunConfiguration
|
||||
@ -44,6 +46,8 @@ internal object MinosoftSIT {
|
||||
}
|
||||
RunConfiguration::CONFIG_DIRECTORY.forceSet(Path.of(System.getProperty("java.io.tmpdir"), "minosoft").resolve("conf"))
|
||||
RunConfiguration.PROFILES_HOT_RELOADING = false
|
||||
|
||||
WindowFactory.factory = DummyWindow
|
||||
}
|
||||
|
||||
@BeforeSuite
|
||||
|
@ -17,9 +17,11 @@ import de.bixilon.kotlinglm.vec2.Vec2
|
||||
import de.bixilon.kotlinglm.vec2.Vec2i
|
||||
import de.bixilon.kutil.observer.DataObserver.Companion.observed
|
||||
import de.bixilon.kutil.time.TimeUtil
|
||||
import de.bixilon.minosoft.gui.rendering.RenderContext
|
||||
import de.bixilon.minosoft.gui.rendering.system.window.BaseWindow
|
||||
import de.bixilon.minosoft.gui.rendering.system.window.CursorModes
|
||||
import de.bixilon.minosoft.gui.rendering.system.window.CursorShapes
|
||||
import de.bixilon.minosoft.gui.rendering.system.window.WindowFactory
|
||||
import de.bixilon.minosoft.gui.rendering.util.vec.vec2.Vec2iUtil.EMPTY
|
||||
import java.nio.ByteBuffer
|
||||
|
||||
@ -57,4 +59,8 @@ class DummyWindow : BaseWindow {
|
||||
|
||||
override fun setIcon(size: Vec2i, buffer: ByteBuffer) = Unit
|
||||
override fun postInit() = Unit
|
||||
|
||||
companion object : WindowFactory {
|
||||
override fun create(context: RenderContext) = DummyWindow()
|
||||
}
|
||||
}
|
||||
|
@ -30,7 +30,7 @@ import de.bixilon.minosoft.gui.rendering.stats.AbstractRenderStats
|
||||
import de.bixilon.minosoft.gui.rendering.stats.ExperimentalRenderStats
|
||||
import de.bixilon.minosoft.gui.rendering.stats.RenderStats
|
||||
import de.bixilon.minosoft.gui.rendering.system.base.RenderSystemFactory
|
||||
import de.bixilon.minosoft.gui.rendering.system.window.BaseWindowFactory
|
||||
import de.bixilon.minosoft.gui.rendering.system.window.WindowFactory
|
||||
import de.bixilon.minosoft.gui.rendering.tint.TintManager
|
||||
import de.bixilon.minosoft.gui.rendering.util.ScreenshotTaker
|
||||
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
||||
@ -42,7 +42,7 @@ class RenderContext(
|
||||
val profile = connection.profiles.rendering
|
||||
val preferQuads = profile.advanced.preferQuads
|
||||
|
||||
val window = BaseWindowFactory.create(this)
|
||||
val window = WindowFactory.factory?.create(this) ?: throw IllegalStateException("Expected a window factory, but none is set.")
|
||||
val system = RenderSystemFactory.create(this)
|
||||
val camera = Camera(this)
|
||||
|
||||
|
@ -1,24 +0,0 @@
|
||||
/*
|
||||
* Minosoft
|
||||
* Copyright (C) 2020-2022 Moritz Zwerger
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
||||
*/
|
||||
|
||||
package de.bixilon.minosoft.gui.rendering.system.window
|
||||
|
||||
import de.bixilon.minosoft.gui.rendering.RenderContext
|
||||
import de.bixilon.minosoft.gui.rendering.system.window.glfw.GLFWWindow
|
||||
|
||||
object BaseWindowFactory {
|
||||
|
||||
fun create(context: RenderContext): BaseWindow {
|
||||
return GLFWWindow(context)
|
||||
}
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Minosoft
|
||||
* Copyright (C) 2020-2022 Moritz Zwerger
|
||||
* Copyright (C) 2020-2023 Moritz Zwerger
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
@ -14,11 +14,13 @@
|
||||
package de.bixilon.minosoft.gui.rendering.system.window
|
||||
|
||||
import de.bixilon.minosoft.gui.rendering.RenderContext
|
||||
import de.bixilon.minosoft.gui.rendering.system.window.dummy.DummyWindow
|
||||
|
||||
object BaseWindowFactory {
|
||||
interface WindowFactory {
|
||||
|
||||
fun create(context: RenderContext): BaseWindow {
|
||||
return DummyWindow()
|
||||
fun create(context: RenderContext): BaseWindow
|
||||
|
||||
|
||||
companion object {
|
||||
var factory: WindowFactory? = null
|
||||
}
|
||||
}
|
@ -32,13 +32,10 @@ import de.bixilon.minosoft.gui.rendering.events.input.CharInputEvent
|
||||
import de.bixilon.minosoft.gui.rendering.events.input.KeyInputEvent
|
||||
import de.bixilon.minosoft.gui.rendering.events.input.MouseMoveEvent
|
||||
import de.bixilon.minosoft.gui.rendering.events.input.MouseScrollEvent
|
||||
import de.bixilon.minosoft.gui.rendering.system.window.BaseWindow
|
||||
import de.bixilon.minosoft.gui.rendering.system.window.*
|
||||
import de.bixilon.minosoft.gui.rendering.system.window.BaseWindow.Companion.DEFAULT_MAXIMUM_WINDOW_SIZE
|
||||
import de.bixilon.minosoft.gui.rendering.system.window.BaseWindow.Companion.DEFAULT_MINIMUM_WINDOW_SIZE
|
||||
import de.bixilon.minosoft.gui.rendering.system.window.BaseWindow.Companion.DEFAULT_WINDOW_SIZE
|
||||
import de.bixilon.minosoft.gui.rendering.system.window.CursorModes
|
||||
import de.bixilon.minosoft.gui.rendering.system.window.CursorShapes
|
||||
import de.bixilon.minosoft.gui.rendering.system.window.KeyChangeTypes
|
||||
import de.bixilon.minosoft.gui.rendering.util.vec.vec2.Vec2dUtil.EMPTY
|
||||
import de.bixilon.minosoft.modding.event.master.AbstractEventMaster
|
||||
import de.bixilon.minosoft.terminal.RunConfiguration
|
||||
@ -433,7 +430,7 @@ class GLFWWindow(
|
||||
return eventMaster.fire(event)
|
||||
}
|
||||
|
||||
companion object {
|
||||
companion object : WindowFactory {
|
||||
private val initLatch = SimpleLatch(1)
|
||||
|
||||
init {
|
||||
@ -447,6 +444,8 @@ class GLFWWindow(
|
||||
}
|
||||
}
|
||||
|
||||
override fun create(context: RenderContext) = GLFWWindow(context)
|
||||
|
||||
val KEY_CODE_MAPPING = mapOf(
|
||||
GLFW_KEY_UNKNOWN to KeyCodes.KEY_UNKNOWN,
|
||||
GLFW_KEY_SPACE to KeyCodes.KEY_SPACE,
|
||||
|
@ -16,6 +16,8 @@ package de.bixilon.minosoft.terminal
|
||||
import de.bixilon.kutil.shutdown.AbstractShutdownReason
|
||||
import de.bixilon.kutil.shutdown.ShutdownManager
|
||||
import de.bixilon.minosoft.assets.util.AssetsOptions
|
||||
import de.bixilon.minosoft.gui.rendering.system.window.WindowFactory
|
||||
import de.bixilon.minosoft.gui.rendering.system.window.glfw.GLFWWindow
|
||||
import de.bixilon.minosoft.modding.loader.parameters.ModParameters
|
||||
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
|
||||
import de.bixilon.minosoft.util.json.Jackson
|
||||
@ -99,11 +101,14 @@ object CommandLineArguments {
|
||||
addArgument("--config")
|
||||
.action(Arguments.store())
|
||||
.help("Path where minosoft configuration files are stored")
|
||||
|
||||
addArgument("--window")
|
||||
.action(Arguments.store())
|
||||
.help("Window library to use")
|
||||
}
|
||||
|
||||
fun parse(args: Array<String>) {
|
||||
check(!this::ARGUMENTS.isInitialized) { "Already initialized!" }
|
||||
if (args.isEmpty()) return
|
||||
this.ARGUMENTS = args.toList()
|
||||
val namespace: Namespace
|
||||
try {
|
||||
@ -141,5 +146,14 @@ object CommandLineArguments {
|
||||
namespace.getString("home")?.let { RunConfiguration.setHome(Path.of(it)) }
|
||||
namespace.getString("assets")?.let { AssetsOptions.PATH = Path.of(it) }
|
||||
namespace.getString("config")?.let { RunConfiguration.setConfig(Path.of(it)) }
|
||||
|
||||
setWindowFactory(namespace.getString("window")?.lowercase() ?: "glfw")
|
||||
}
|
||||
|
||||
private fun setWindowFactory(name: String) {
|
||||
WindowFactory.factory = when (name) {
|
||||
"glfw" -> GLFWWindow
|
||||
else -> throw IllegalStateException("Unknown window library: $name")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user