From f1e64ca3411f7da0db81393f0cef3e78e8cfddac Mon Sep 17 00:00:00 2001 From: Bruce0203 Date: Sat, 19 Aug 2023 20:20:08 +0900 Subject: [PATCH] init --- client/build.gradle.kts | 2 +- client/src/androidMain/kotlin/main.kt | 2 + client/src/commonMain/kotlin/MainScene.kt | 9 +-- client/src/commonMain/kotlin/start.kt | 6 +- .../kotlin/ui/custom/TextEditController.kt | 15 ++-- .../kotlin/ui/custom/uiTextInput.kt | 6 +- .../commonMain/kotlin/ui/newCreateRoomMenu.kt | 80 +++++++++++++++++++ .../src/commonMain/kotlin/ui/newLoginMenu.kt | 7 +- .../commonMain/kotlin/util/coroutineUtil.kt | 1 - deps.kproject.yml | 3 +- 10 files changed, 108 insertions(+), 23 deletions(-) create mode 100644 client/src/commonMain/kotlin/ui/newCreateRoomMenu.kt diff --git a/client/build.gradle.kts b/client/build.gradle.kts index 9e6fafe..15e4daf 100644 --- a/client/build.gradle.kts +++ b/client/build.gradle.kts @@ -17,7 +17,7 @@ korge { targetDesktop() targetAndroid() entryPoint = "runMain" - orientation = Orientation.DEFAULT + orientation = Orientation.LANDSCAPE icon = File(projectDir, "src/commonMain/resources/images/logo.png" .replace("/", File.separator)) exeBaseName = "Skeep" diff --git a/client/src/androidMain/kotlin/main.kt b/client/src/androidMain/kotlin/main.kt index 4a1f416..e6ebc8b 100644 --- a/client/src/androidMain/kotlin/main.kt +++ b/client/src/androidMain/kotlin/main.kt @@ -1,3 +1,4 @@ +import io.ktor.client.engine.cio.* import korlibs.io.file.std.resourcesVfs import korlibs.io.lang.readProperties @@ -10,5 +11,6 @@ suspend fun main() { val clientProps = resourcesVfs["client.properties"].readProperties() currentUrl = clientProps["server"]!! version = clientProps["version"]!! + engine = CIO startMain() } \ No newline at end of file diff --git a/client/src/commonMain/kotlin/MainScene.kt b/client/src/commonMain/kotlin/MainScene.kt index 9ac75f4..ee3b7f3 100644 --- a/client/src/commonMain/kotlin/MainScene.kt +++ b/client/src/commonMain/kotlin/MainScene.kt @@ -6,8 +6,10 @@ import korlibs.korge.scene.Scene import korlibs.korge.style.* import korlibs.korge.view.* import network.ServerClosedPacket +import ui.createRoomMenu import ui.loadingMenu import ui.loginMenuView +import ui.newCreateRoomMenu import util.ColorPalette import util.launchNow import util.transform @@ -44,10 +46,7 @@ class MainScene : Scene() { positionY(screen.height - height - padding) positionX(padding*2) } -// screen.createRoomMenu() -// loginMenu(sceneContainer) -// screen.loginMenu() - loginMenuView() -// MainMenuState().mainMenu() + newCreateRoomMenu() +// loginMenuView() } } \ No newline at end of file diff --git a/client/src/commonMain/kotlin/start.kt b/client/src/commonMain/kotlin/start.kt index 802e893..1b1314b 100644 --- a/client/src/commonMain/kotlin/start.kt +++ b/client/src/commonMain/kotlin/start.kt @@ -10,6 +10,7 @@ import korlibs.korge.Korge import korlibs.korge.scene.SceneContainer import korlibs.korge.scene.sceneContainer import korlibs.korge.view.* +import korlibs.korge.view.ktree.readKTree import korlibs.math.geom.Anchor import korlibs.math.geom.ScaleMode import korlibs.math.geom.Size @@ -40,7 +41,8 @@ suspend fun startMain() { scaleAnchor = Anchor.TOP_LEFT, backgroundColor = ColorPalette.background ) { - scene = sceneContainer() - scene.changeTo({ MainScene() }) +// scene = sceneContainer() +// scene.changeTo({ MainScene() }) + addChild(resourcesVfs["scene.ktree"].readKTree(views)) } } diff --git a/client/src/commonMain/kotlin/ui/custom/TextEditController.kt b/client/src/commonMain/kotlin/ui/custom/TextEditController.kt index 298ea89..a48d7e1 100644 --- a/client/src/commonMain/kotlin/ui/custom/TextEditController.kt +++ b/client/src/commonMain/kotlin/ui/custom/TextEditController.kt @@ -278,6 +278,7 @@ class TextEditController( //val endX = getCaretAtIndex(range.endExclusive) val xOffset = if (textView.styles.textAlignment.horizontal.equals(HorizontalAlign.CENTER)) textView.width/2f else 0f + val xOffsetPoint = Point(xOffset, 0) val array = PointArrayList(if (range.isEmpty()) 2 else (range.length + 1) * 2) if (range.isEmpty()) { val last = (range.first >= this.text.length) @@ -286,19 +287,19 @@ class TextEditController( val normal = caret.normal(0f) * (2.0 * sign) val p0 = caret.points.first val p1 = caret.points.last - array.add(p0 + Point(xOffset, 0)) - array.add(p1 + Point(xOffset, 0)) - array.add(p0 + normal + Point(xOffset, 0)) - array.add(p1 + normal + Point(xOffset, 0)) + array.add(p0 + xOffsetPoint) + array.add(p1 + xOffsetPoint) + array.add(p0 + normal + xOffsetPoint) + array.add(p1 + normal + xOffsetPoint) } else { for (n in range.first..range.last + 1) { val caret = getCaretAtIndex(n) - array.add(caret.points.first) - array.add(caret.points.last) + array.add(caret.points.first + xOffsetPoint) + array.add(caret.points.last + xOffsetPoint) //println("caret[$n]=$caret") } } - caret.colorMul = Colors.WHITE + caret.color = Colors.WHITE caret.pointsList = listOf(array) /* caret.x = startX.x0 diff --git a/client/src/commonMain/kotlin/ui/custom/uiTextInput.kt b/client/src/commonMain/kotlin/ui/custom/uiTextInput.kt index 5106199..d2130bb 100644 --- a/client/src/commonMain/kotlin/ui/custom/uiTextInput.kt +++ b/client/src/commonMain/kotlin/ui/custom/uiTextInput.kt @@ -55,7 +55,11 @@ class UITextInput(parent: View, hint: String, initialText: String = " ", size: S } alpha = 0.5f } - ) + ).apply { + caretContainer.transform { + caretContainer.alignY(this@UITextInput, 0.75, false) + } + } //init { uiScrollable { } } diff --git a/client/src/commonMain/kotlin/ui/newCreateRoomMenu.kt b/client/src/commonMain/kotlin/ui/newCreateRoomMenu.kt new file mode 100644 index 0000000..1309359 --- /dev/null +++ b/client/src/commonMain/kotlin/ui/newCreateRoomMenu.kt @@ -0,0 +1,80 @@ +package ui + +import korlibs.image.color.Colors +import korlibs.image.text.TextAlignment +import korlibs.korge.style.styles +import korlibs.korge.style.textAlignment +import korlibs.korge.style.textSize +import korlibs.korge.ui.uiContainer +import korlibs.korge.ui.uiMaterialLayer +import korlibs.korge.ui.uiText +import korlibs.korge.ui.uiVerticalStack +import korlibs.korge.view.* +import korlibs.korge.view.align.centerOn +import korlibs.korge.view.align.centerXOn +import korlibs.math.geom.RectCorners +import korlibs.math.geom.Size +import network.CreateRoom +import screen +import styler +import ui.custom.* +import util.ColorPalette +import util.transform + +class NewCreateRoomMenuState { + lateinit var createRoomMenu: Container + val createRoomPadding = 30.75f + val minAmount = 2 + val maxAmount = 12 + val range = maxAmount - minAmount + 1 + val blockHeight get() = screen.width / 15 + val blockSize get() = Size(500, 120) + val inputSize get() = Size(screen.width / 3f, screen.width / 16f) + lateinit var roomName: UITextInput + lateinit var roomMaxPlayers: CustomUISlider + val cellSize = Size(100, 100) + val cellSelectorSize = Size(cellSize.height*range, cellSize.height) +} +fun newCreateRoomMenu(): Unit = screen.run { NewCreateRoomMenuState().run { container { + createRoomMenu = this + + uiVerticalStack(adjustSize = false, padding = createRoomPadding*3) { + styles(styler) + customUiText("방 생성") { + styles.textSize = styles.textSize * 1.25f + } + uiContainer(blockSize) { + uiMaterialLayer(blockSize) { + transform { size = blockSize } + shadowColor = Colors.TRANSPARENT + bgColor = ColorPalette.base + borderColor = Colors.TRANSPARENT + borderSize = createRoomPadding / 6 + radius = RectCorners(borderSize * 2) + }.zIndex(1) + customUiTextInput("방 이름", size = blockSize) { + transform { size = blockSize } + }.zIndex(2) + transform { centerXOn(createRoomMenu) } + } + customUiText("최대 인원") { + styles.textSize = styles.textSize * 1.2f + } + uiContainer(cellSelectorSize) { + styles.textSize = styles.textSize * 0.7f + repeat(range) { + uiContainer(cellSize) cell@{ + transform { size(cellSize).positionX(it*height) } + uiText("${it+minAmount}").transform { centerOn(this@cell) } + } + } + roomMaxPlayers = customUiSlider( + value = CreateRoom.defaultRoomMaxPlayers, + min = minAmount, + max = maxAmount, + size = cellSelectorSize, + step = 1 + ).transform { size = cellSelectorSize } + }.transform { centerXOn(createRoomMenu) } + } +}.transform { centerOn(screen) } } } \ No newline at end of file diff --git a/client/src/commonMain/kotlin/ui/newLoginMenu.kt b/client/src/commonMain/kotlin/ui/newLoginMenu.kt index 52bf177..512d379 100644 --- a/client/src/commonMain/kotlin/ui/newLoginMenu.kt +++ b/client/src/commonMain/kotlin/ui/newLoginMenu.kt @@ -3,10 +3,7 @@ package ui import korlibs.event.Key import korlibs.image.color.Colors import korlibs.image.text.TextAlignment -import korlibs.korge.input.keys -import korlibs.korge.input.mouse -import korlibs.korge.input.onClick -import korlibs.korge.input.onMouseDragCloseable +import korlibs.korge.input.* import korlibs.korge.style.styles import korlibs.korge.style.textAlignment import korlibs.korge.style.textColor @@ -96,7 +93,7 @@ fun loginMenuView(loginMenuState: LoginMenuState = LoginMenuState()): Unit = scr var joinOnce = false joinButton.apply { onClick { join() } - onMouseDragCloseable { launchNow { join() } } + onMouseDrag { launchNow { join() } } keys { down(Key.ENTER) { join() } } } diff --git a/client/src/commonMain/kotlin/util/coroutineUtil.kt b/client/src/commonMain/kotlin/util/coroutineUtil.kt index f651d80..a55b295 100644 --- a/client/src/commonMain/kotlin/util/coroutineUtil.kt +++ b/client/src/commonMain/kotlin/util/coroutineUtil.kt @@ -7,5 +7,4 @@ import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.GlobalScope import kotlin.coroutines.CoroutineContext -@DelicateCoroutinesApi fun launchNow(context: CoroutineContext = GlobalScope.coroutineContext, callback: suspend () -> Unit) = CoroutineScope(context).launchImmediately(callback) diff --git a/deps.kproject.yml b/deps.kproject.yml index 1ee45bd..28772e3 100644 --- a/deps.kproject.yml +++ b/deps.kproject.yml @@ -1,2 +1,3 @@ -#dependencies: +dependencies: + - "https://github.com/korlibs/korge-ext/tree/main/korge-ktree" # - https://github.com/korlibs/korge-fleks/tree/main/fleks