Skip to content

Commit

Permalink
⬆ Upgrade to KorGE 2.1.1.1
Browse files Browse the repository at this point in the history
  • Loading branch information
TobseF committed May 19, 2021
1 parent 92f6339 commit dd12d2f
Show file tree
Hide file tree
Showing 15 changed files with 54 additions and 100 deletions.
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# 🎮 HitKlack on KorGE
[![Kotlin](https://img.shields.io/badge/Kotlin-1.4.20-blue.svg?style=flat&logo=kotlin&logoColor=white)](http://kotlinlang.org)
[![Korge](https://img.shields.io/badge/Korge-2.0.0.1-836DAC.svg)](https://korge.soywiz.com/)
[![Kotlin](https://img.shields.io/badge/Kotlin-1.5.0-blue.svg?style=flat&logo=kotlin&logoColor=white)](http://kotlinlang.org)
[![KorGE](https://img.shields.io/badge/KorGE-2.1.1.1-836DAC.svg)](https://korge.soywiz.com/)
[![BCH compliance](https://bettercodehub.com/edge/badge/TobseF/HitKlack?branch=master)](https://bettercodehub.com/)

![Screenshot](https://tobsef.github.io/HitKlack/images/readme/screenshot_device.jpg)
Expand All @@ -12,7 +12,7 @@

This is a work in progress game remake, just for fun. It's based on a German console, the Hit Klack from Mephisto. It
runs on multiple platforms: Android, IOs, Windows, Linux, Mac and Web. For me it's a way to test the latest features
of [Kotlin 1.4](https://kotlinlang.org/). It uses the [KorGE](https://korge.soywiz.com/) - Modern Multiplatform Game
of [Kotlin 1.5](https://kotlinlang.org/). It uses the [KorGE](https://korge.soywiz.com/) - Modern Multiplatform Game
Engine for Kotlin.

You can find my older version based on the [LibGDX](https://libgdx.badlogicgames.com/)
Expand Down
6 changes: 3 additions & 3 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
org.gradle.jvmargs=-Xmx2g
korgePluginVersion=2.0.8.1
kotlin.mpp.stability.nowarn=true
korgePluginVersion = 2.1.1.1
org.gradle.jvmargs = -Xmx4g
kotlin.mpp.stability.nowarn = true
4 changes: 2 additions & 2 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
zipStorePath=wrapper/dists
10 changes: 2 additions & 8 deletions src/commonMain/kotlin/de/tfr/game/BoxGame.kt
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
package de.tfr.game

import com.soywiz.klogger.Logger
import com.soywiz.korge.view.Container
import de.tfr.game.Controller.Control
import de.tfr.game.audio.ISoundMachine
import de.tfr.game.audio.NoSounds
import de.tfr.game.lib.engine.Loadable
import de.tfr.game.model.Block
import de.tfr.game.model.GameField
import de.tfr.game.model.Orientation
Expand All @@ -16,9 +14,9 @@ import de.tfr.game.util.Timer
class BoxGame(
private val field: GameField,
startOrientation: Orientation = Orientation.Left,
val sounds: ISoundMachine = NoSounds(),
val sounds: ISoundMachine = NoSounds()
) :
Controller.ControlListener, Loadable {
Controller.ControlListener {

private val log = Logger<BoxGame>()

Expand All @@ -39,10 +37,6 @@ class BoxGame(
timer = Timer(firstPause, this::doStep)
}

override suspend fun create(container: Container) {
sounds.create(container)
}

private fun doStep() {
timer.actionTime = fallingSpeed
move()
Expand Down
8 changes: 3 additions & 5 deletions src/commonMain/kotlin/de/tfr/game/Controller.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,17 @@ import com.soywiz.korge.view.Views
import de.tfr.game.Controller.Control.*
import de.tfr.game.lib.actor.Point
import de.tfr.game.lib.actor.Point2D
import de.tfr.game.lib.engine.Loadable
import de.tfr.game.libgx.emu.Input
import de.tfr.game.renderer.ButtonTiles
import de.tfr.game.renderer.ButtonTiles.Style
import de.tfr.game.ui.Button


class Controller(point: Point, private val gameRadius: Double, override val view: View) : KeyComponent,
Point by point,
Loadable {
Point by point {

override suspend fun create(container: Container) {
val tiles = ButtonTiles().apply { create(container) }
suspend fun init(container: Container) = apply {
val tiles = ButtonTiles().init(container)
val shift = gameRadius + distance
val center = Point2D(this)
top = container.addButton(Button(Top, center.shiftTop(shift), tiles.get(Style.Green), view))
Expand Down
20 changes: 8 additions & 12 deletions src/commonMain/kotlin/de/tfr/game/HitKlack.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,13 @@ import com.soywiz.korge.view.Container
import com.soywiz.korge.view.Stage
import de.tfr.game.audio.SoundMachine
import de.tfr.game.lib.actor.Box2D
import de.tfr.game.lib.engine.Loadable
import de.tfr.game.model.GameField
import de.tfr.game.renderer.DisplayRenderer
import de.tfr.game.renderer.GameFieldRenderer
import de.tfr.game.renderer.LogoRenderer
import resolution

class HitKlack(override val view: Stage) : UpdateComponent, Loadable {
class HitKlack(override val view: Stage) : UpdateComponent {

private lateinit var renderer: GameFieldRenderer
private lateinit var controller: Controller
Expand All @@ -25,22 +24,19 @@ class HitKlack(override val view: Stage) : UpdateComponent, Loadable {

private val gameField = GameField(10)

override suspend fun create(container: Container) {
suspend fun initGame(container: Container) = apply {
val center = resolution.getCenter()
renderer = GameFieldRenderer(center, gameField).apply { create(container) }
val soundMachine = SoundMachine(view.views);
game = BoxGame(gameField, sounds = soundMachine).apply { create(container) }
renderer = GameFieldRenderer(center, gameField).init(container)
val soundMachine = SoundMachine(view).init()
game = BoxGame(gameField, sounds = soundMachine)

val gameFieldSize = renderer.getFieldSize(gameField.size)
controller = Controller(center, gameFieldSize, view)
controller.create(container)
controller = Controller(center, gameFieldSize, view).init(container)
container.addComponent(controller)
controller.addTouchListener(game)
display = Display(Box2D(center, 280.0, 90.0))
displayRenderer = DisplayRenderer(display)
displayRenderer.create(container)
logo = LogoRenderer(center, gameFieldSize)
logo.create(container)
displayRenderer = DisplayRenderer(display).init(container)
logo = LogoRenderer(center, gameFieldSize).init(container)
}

override fun update(dt: TimeSpan) {
Expand Down
4 changes: 1 addition & 3 deletions src/commonMain/kotlin/de/tfr/game/audio/ISoundMachine.kt
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
package de.tfr.game.audio

import de.tfr.game.lib.engine.Loadable


interface ISoundMachine : Loadable {

interface ISoundMachine {

fun playCircleOK()

Expand Down
17 changes: 3 additions & 14 deletions src/commonMain/kotlin/de/tfr/game/audio/NoSounds.kt
Original file line number Diff line number Diff line change
@@ -1,21 +1,10 @@
package de.tfr.game.audio

import com.soywiz.korge.view.Container

class NoSounds : ISoundMachine {
override fun playCircleOK() {

}

override fun playLineMissed() {

}

override fun playLineOK() {
override fun playCircleOK() {}

}
override fun playLineMissed() {}

override suspend fun create(container: Container) {
override fun playLineOK() {}

}
}
42 changes: 16 additions & 26 deletions src/commonMain/kotlin/de/tfr/game/audio/SoundMachine.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,48 +2,38 @@ package de.tfr.game.audio

import com.soywiz.korau.sound.Sound
import com.soywiz.korau.sound.readSound
import com.soywiz.korge.view.Container
import com.soywiz.korge.view.Views
import com.soywiz.korge.view.Stage
import com.soywiz.korio.async.launch
import com.soywiz.korio.file.std.resourcesVfs
import de.tfr.game.lib.engine.Loadable
import disableSound


class SoundMachine(val view: Views) : Loadable, ISoundMachine {
class SoundMachine(private val stage: Stage) : ISoundMachine {

private var circleOk: Sound? = null
private var lineMissed: Sound? = null
private var lineOk: Sound? = null

private suspend fun newSound(fileName: String) = resourcesVfs["sounds/$fileName"].readSound()
suspend fun init() = apply { loadSounds() }

override suspend fun create(container: Container) {
circleOk = newSound("circle_ok.mp3")
lineMissed = newSound("line_missed.mp3")
lineOk = newSound("line_ok.mp3")
}
private suspend fun readSound(fileName: String) = resourcesVfs["sounds/$fileName"].readSound()

override fun playCircleOK() {
if (!disableSound) {
view.launch {
circleOk?.play()
}
}
private suspend fun loadSounds() {
circleOk = readSound("circle_ok.mp3")
lineMissed = readSound("line_missed.mp3")
lineOk = readSound("line_ok.mp3")
}

override fun playLineMissed() {
if (!disableSound) {
view.launch {
lineMissed?.play()
}
}
}
override fun playCircleOK() = circleOk.play()

override fun playLineMissed() = lineMissed.play()

override fun playLineOK() = lineOk.play()

override fun playLineOK() {
private fun Sound?.play() {
if (!disableSound) {
view.launch {
lineOk?.play()
stage.launch {
this?.play()
}
}
}
Expand Down
7 changes: 0 additions & 7 deletions src/commonMain/kotlin/de/tfr/game/lib/engine/Loadable.kt

This file was deleted.

6 changes: 3 additions & 3 deletions src/commonMain/kotlin/de/tfr/game/renderer/ButtonTiles.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,15 @@ import com.soywiz.korim.bitmap.BitmapSlice
import com.soywiz.korim.bitmap.BmpSlice
import com.soywiz.korim.format.readBitmap
import com.soywiz.korio.file.std.resourcesVfs
import de.tfr.game.lib.engine.Loadable

class ButtonTiles : Loadable {

class ButtonTiles {

enum class Style { Green, Blue, Yellow, Red }

lateinit var buttons: TileSet

override suspend fun create(container: Container) {
suspend fun init(container: Container) = apply {
val texture = container.image(resourcesVfs["images/buttons.png"].readBitmap()) {
visible = false
}
Expand Down
6 changes: 3 additions & 3 deletions src/commonMain/kotlin/de/tfr/game/renderer/DisplayRenderer.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,20 +11,20 @@ import com.soywiz.korim.font.BitmapFont
import com.soywiz.korim.font.readBitmapFont
import com.soywiz.korio.file.std.resourcesVfs
import de.tfr.game.Display
import de.tfr.game.lib.engine.Loadable

import de.tfr.game.ui.GRAY_DARK
import de.tfr.game.ui.GREEN_LIGHT
import de.tfr.game.ui.GREEN_LIGHT2
import de.tfr.game.util.extensions.text


class DisplayRenderer(private val display: Display) : Loadable {
class DisplayRenderer(private val display: Display) {

private val log = Logger<DisplayRenderer>()
lateinit var font: BitmapFont
var text: Text? = null

override suspend fun create(container: Container) {
suspend fun init(container: Container) = apply {
font = resourcesVfs["fonts/segment7.fnt"].readBitmapFont()

container.solidRect(display.width, display.height, GREEN_LIGHT) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import com.soywiz.korge.view.graphics
import com.soywiz.korma.geom.vector.circle
import com.soywiz.korma.geom.vector.rect
import de.tfr.game.lib.actor.Point
import de.tfr.game.lib.engine.Loadable

import de.tfr.game.model.Block
import de.tfr.game.model.GameField
import de.tfr.game.model.Orientation
Expand All @@ -19,13 +19,13 @@ import de.tfr.game.util.extensions.drawFill
import de.tfr.game.util.extensions.square


class GameFieldRenderer(point: Point, private val field: GameField) : Point by point, Loadable {
class GameFieldRenderer(point: Point, private val field: GameField) : Point by point {

private val gap = 6
private val blockWith = 18.0
private val radius = 8.0

override suspend fun create(container: Container) {
fun init(container: Container) = apply {
createBackground(container)
createFieldCache(container)
}
Expand Down
6 changes: 3 additions & 3 deletions src/commonMain/kotlin/de/tfr/game/renderer/LogoRenderer.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@ import com.soywiz.korim.format.readBitmap
import com.soywiz.korio.file.std.resourcesVfs
import com.soywiz.korma.geom.degrees
import de.tfr.game.lib.actor.Point
import de.tfr.game.lib.engine.Loadable

import resolution

class LogoRenderer(val point: Point, val gameFieldSize: Double) : Point by point, Loadable {
class LogoRenderer(val point: Point, val gameFieldSize: Double) : Point by point {

override suspend fun create(container: Container) {
suspend fun init(container: Container) = apply {
container.image(resourcesVfs["images/hitclack_logo.png"].readBitmap()) {
position(point.x - width / 2, point.y - gameFieldSize - 390)
}
Expand Down
6 changes: 1 addition & 5 deletions src/commonMain/kotlin/main.kt
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,5 @@ suspend fun main() = Korge(title = "HitKlack", width = resolution.width, height

Logger.defaultLevel = Logger.Level.WARN // <- Change this for debugging

val hitKlack = HitKlack(this).apply {
create(stage)
}
addComponent(hitKlack)

addComponent(HitKlack(this).initGame(stage))
}

0 comments on commit dd12d2f

Please sign in to comment.