Newer
Older
kotlin-use-kudens-js-lib / src / main / kotlin / games / perses / shooter / Shooter.kt
package games.perses.shooter

import games.perses.game.DrawMode
import games.perses.game.Game
import games.perses.game.Screen
import games.perses.input.Keys
import games.perses.sound.Music
import games.perses.sound.Sound
import games.perses.sprite.Sprite
import games.perses.sprite.SpriteBatch
import games.perses.text.Texts
import games.perses.texture.Textures
import org.w3c.dom.HTMLAudioElement
import kotlin.js.Math

/**
 * User: rnentjes
 * Date: 21-1-17
 * Time: 14:16
 */
class WelcomeScreen : Screen() {
    var sprites = SpriteBatch()

    var sprite = Sprite("SHIP")
    var music: HTMLAudioElement? = null
    var sound: Sound = Sound("BOOM", "sounds/Explosion7.ogg", 1.0, 2)
    var time: Float = 0f

    var x = 500f
    var y = 500f

    var red = 0.0
    var green = 0.0
    var blue = 0.0
    var alpha =  0.0
    var size = 0.0

    var spaceDown = false

    override fun loadResources() {
        music = Music.play("music/DST-TechnoBasic.mp3", 1.0, looping = true)

        Textures.load("SHIP", "images/ship2.png")
        //Textures.loadSpriteSheet("images/data-0.json")

        x = Game.view.width / 2f
    }

    override fun update(time: Float, delta: Float) {
        this.time = time

        red = 200 + Math.sin(time * 3.0) * 50.0
        green = 200 + Math.sin(time * 5.0) * 50.0
        blue = 200 + Math.sin(time * 7.0) * 50.0
        alpha = 0.5 + Math.sin(time * 11.0) * 0.5
        size = 60 + Math.sin(time.toDouble()) * 20

        if (Keys.isDown(37)) {
            x -= 200 * delta
        }
        if (Keys.isDown(39)) {
            x += 200 * delta
        }
        if (Keys.isDown(38)) {
            y += 200 * delta
        }
        if (Keys.isDown(40)) {
            y -= 200 * delta
        }
        if (Keys.isDown(32)) {
            if (!spaceDown) {
                sound.play()
                spaceDown = true
            }
        } else {
            spaceDown = false
        }
    }

    override fun render() {
        Texts.drawText(5f, 40f, "Hello! FPS ${Game.fps}", font = "bold 24pt Arial", fillStyle = "rgba(0, 255, 0, 1)")

        sprites.draw(sprite, x, y, scale = (7f + Math.sin(time.toDouble()) * 6f).toFloat(), rotation = time)
        sprites.render()
    }

}

fun main(args: Array<String>) {
    Game.view.setToHeight(1080f)
    Game.view.drawMode = DrawMode.NEAREST

    Game.view.minAspectRatio = 1920f/1080f
    Game.view.maxAspectRatio = 1920f/1080f

    Game.start(WelcomeScreen())
}