mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-18 20:05:02 -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.kutil.reflection.ReflectionUtil.forceSet
|
||||||
import de.bixilon.minosoft.assets.IntegratedAssets
|
import de.bixilon.minosoft.assets.IntegratedAssets
|
||||||
import de.bixilon.minosoft.data.registries.fallback.tags.FallbackTags
|
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.BootTasks
|
||||||
import de.bixilon.minosoft.main.MinosoftBoot
|
import de.bixilon.minosoft.main.MinosoftBoot
|
||||||
import de.bixilon.minosoft.terminal.RunConfiguration
|
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::CONFIG_DIRECTORY.forceSet(Path.of(System.getProperty("java.io.tmpdir"), "minosoft").resolve("conf"))
|
||||||
RunConfiguration.PROFILES_HOT_RELOADING = false
|
RunConfiguration.PROFILES_HOT_RELOADING = false
|
||||||
|
|
||||||
|
WindowFactory.factory = DummyWindow
|
||||||
}
|
}
|
||||||
|
|
||||||
@BeforeSuite
|
@BeforeSuite
|
||||||
|
@ -17,9 +17,11 @@ import de.bixilon.kotlinglm.vec2.Vec2
|
|||||||
import de.bixilon.kotlinglm.vec2.Vec2i
|
import de.bixilon.kotlinglm.vec2.Vec2i
|
||||||
import de.bixilon.kutil.observer.DataObserver.Companion.observed
|
import de.bixilon.kutil.observer.DataObserver.Companion.observed
|
||||||
import de.bixilon.kutil.time.TimeUtil
|
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.BaseWindow
|
||||||
import de.bixilon.minosoft.gui.rendering.system.window.CursorModes
|
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.CursorShapes
|
||||||
|
import de.bixilon.minosoft.gui.rendering.system.window.WindowFactory
|
||||||
import de.bixilon.minosoft.gui.rendering.util.vec.vec2.Vec2iUtil.EMPTY
|
import de.bixilon.minosoft.gui.rendering.util.vec.vec2.Vec2iUtil.EMPTY
|
||||||
import java.nio.ByteBuffer
|
import java.nio.ByteBuffer
|
||||||
|
|
||||||
@ -57,4 +59,8 @@ class DummyWindow : BaseWindow {
|
|||||||
|
|
||||||
override fun setIcon(size: Vec2i, buffer: ByteBuffer) = Unit
|
override fun setIcon(size: Vec2i, buffer: ByteBuffer) = Unit
|
||||||
override fun postInit() = 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.ExperimentalRenderStats
|
||||||
import de.bixilon.minosoft.gui.rendering.stats.RenderStats
|
import de.bixilon.minosoft.gui.rendering.stats.RenderStats
|
||||||
import de.bixilon.minosoft.gui.rendering.system.base.RenderSystemFactory
|
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.tint.TintManager
|
||||||
import de.bixilon.minosoft.gui.rendering.util.ScreenshotTaker
|
import de.bixilon.minosoft.gui.rendering.util.ScreenshotTaker
|
||||||
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
||||||
@ -42,7 +42,7 @@ class RenderContext(
|
|||||||
val profile = connection.profiles.rendering
|
val profile = connection.profiles.rendering
|
||||||
val preferQuads = profile.advanced.preferQuads
|
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 system = RenderSystemFactory.create(this)
|
||||||
val camera = Camera(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
|
* 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.
|
* 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
|
package de.bixilon.minosoft.gui.rendering.system.window
|
||||||
|
|
||||||
import de.bixilon.minosoft.gui.rendering.RenderContext
|
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 {
|
fun create(context: RenderContext): BaseWindow
|
||||||
return DummyWindow()
|
|
||||||
|
|
||||||
|
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.KeyInputEvent
|
||||||
import de.bixilon.minosoft.gui.rendering.events.input.MouseMoveEvent
|
import de.bixilon.minosoft.gui.rendering.events.input.MouseMoveEvent
|
||||||
import de.bixilon.minosoft.gui.rendering.events.input.MouseScrollEvent
|
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_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_MINIMUM_WINDOW_SIZE
|
||||||
import de.bixilon.minosoft.gui.rendering.system.window.BaseWindow.Companion.DEFAULT_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.gui.rendering.util.vec.vec2.Vec2dUtil.EMPTY
|
||||||
import de.bixilon.minosoft.modding.event.master.AbstractEventMaster
|
import de.bixilon.minosoft.modding.event.master.AbstractEventMaster
|
||||||
import de.bixilon.minosoft.terminal.RunConfiguration
|
import de.bixilon.minosoft.terminal.RunConfiguration
|
||||||
@ -433,7 +430,7 @@ class GLFWWindow(
|
|||||||
return eventMaster.fire(event)
|
return eventMaster.fire(event)
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object : WindowFactory {
|
||||||
private val initLatch = SimpleLatch(1)
|
private val initLatch = SimpleLatch(1)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
@ -447,6 +444,8 @@ class GLFWWindow(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun create(context: RenderContext) = GLFWWindow(context)
|
||||||
|
|
||||||
val KEY_CODE_MAPPING = mapOf(
|
val KEY_CODE_MAPPING = mapOf(
|
||||||
GLFW_KEY_UNKNOWN to KeyCodes.KEY_UNKNOWN,
|
GLFW_KEY_UNKNOWN to KeyCodes.KEY_UNKNOWN,
|
||||||
GLFW_KEY_SPACE to KeyCodes.KEY_SPACE,
|
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.AbstractShutdownReason
|
||||||
import de.bixilon.kutil.shutdown.ShutdownManager
|
import de.bixilon.kutil.shutdown.ShutdownManager
|
||||||
import de.bixilon.minosoft.assets.util.AssetsOptions
|
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.modding.loader.parameters.ModParameters
|
||||||
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
|
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
|
||||||
import de.bixilon.minosoft.util.json.Jackson
|
import de.bixilon.minosoft.util.json.Jackson
|
||||||
@ -99,11 +101,14 @@ object CommandLineArguments {
|
|||||||
addArgument("--config")
|
addArgument("--config")
|
||||||
.action(Arguments.store())
|
.action(Arguments.store())
|
||||||
.help("Path where minosoft configuration files are stored")
|
.help("Path where minosoft configuration files are stored")
|
||||||
|
|
||||||
|
addArgument("--window")
|
||||||
|
.action(Arguments.store())
|
||||||
|
.help("Window library to use")
|
||||||
}
|
}
|
||||||
|
|
||||||
fun parse(args: Array<String>) {
|
fun parse(args: Array<String>) {
|
||||||
check(!this::ARGUMENTS.isInitialized) { "Already initialized!" }
|
check(!this::ARGUMENTS.isInitialized) { "Already initialized!" }
|
||||||
if (args.isEmpty()) return
|
|
||||||
this.ARGUMENTS = args.toList()
|
this.ARGUMENTS = args.toList()
|
||||||
val namespace: Namespace
|
val namespace: Namespace
|
||||||
try {
|
try {
|
||||||
@ -141,5 +146,14 @@ object CommandLineArguments {
|
|||||||
namespace.getString("home")?.let { RunConfiguration.setHome(Path.of(it)) }
|
namespace.getString("home")?.let { RunConfiguration.setHome(Path.of(it)) }
|
||||||
namespace.getString("assets")?.let { AssetsOptions.PATH = Path.of(it) }
|
namespace.getString("assets")?.let { AssetsOptions.PATH = Path.of(it) }
|
||||||
namespace.getString("config")?.let { RunConfiguration.setConfig(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