Newer
Older
kotlin-use-kudens-js-lib / src / main / kotlin / games / perses / shooter / Shooter.kt
rnentjes on 9 Feb 2018 2 KB Update kudens and kotlin versions
package games.perses.shooter

import games.perses.game.DrawMode
import games.perses.game.Game
import games.perses.game.Screen
import games.perses.input.Input
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 (Input.isDown(37)) {
            x -= 200 * delta
        }
        if (Input.isDown(39)) {
            x += 200 * delta
        }
        if (Input.isDown(38)) {
            y += 200 * delta
        }
        if (Input.isDown(40)) {
            y -= 200 * delta
        }
        if (Input.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())
}