Newer
Older
kotlin-webgl-test / src / com / persesgames / shooter / Shooter.kt
rnentjes on 23 Jul 2016 4 KB Load tiled map
package com.persesgames.shooter

import com.persesgames.game.Game
import com.persesgames.game.Screen
import com.persesgames.input.EmptyInputProcessor
import com.persesgames.input.KeyCode
import com.persesgames.input.Keys
import com.persesgames.map.tiled.TiledMap
import com.persesgames.sound.Music
import com.persesgames.sound.Sound
import com.persesgames.sound.Sounds
import com.persesgames.sprite.Sprite
import com.persesgames.sprite.SpriteBatch
import com.persesgames.text.Texts
import com.persesgames.texture.Textures
import org.w3c.dom.HTMLAudioElement
import org.w3c.dom.HTMLInputElement
import kotlin.browser.document

/**
 * Created by rnentjes on 19-4-16.
 */

class GameInputProcessor: EmptyInputProcessor() {

    override fun keyPressed(charCode: Int) {
        println("charCode: $charCode")
        if (charCode == 32) {
            Sounds.play("EXPLOSION", 0.5f)
        } else if (charCode == 'x'.toInt()) {
            Sounds.play("DROP", 0.75f)
        }
    }

    override fun pointerClick(pointer: Int, x: Float, y: Float) {
        println("POINTER $pointer -> ($x, $y)")
    }
}

var music: HTMLAudioElement? = null
var showFPS: Boolean = true

class WelcomeScreen: Screen() {
    val map = TiledMap("maps", "level_1_01.json")

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

        Textures.loadSpriteSheet("images/data-0.json")

        Keys.setInputProcessor(GameInputProcessor())

        println("width: ${map.data.width}")
        println("height: ${map.data.height}")
        println("layers: ${map.data.layers?.size}")
        val layers = map.data.layers
        if (layers != null) {
            println("layer0: ${layers[0].name}")
        }
        val tilesets = map.data.tilesets
        if (tilesets != null) {
            println("tilesets ${tilesets.size}")
            println("tileset0: ${tilesets[0].name}")
        }
    }

    override fun update(time: Float, delta: Float) {
    }

    override fun render() {

        if (showFPS) {
            Texts.drawText(20f, 100f, "Hello! FPS ${Game.fps}", font = "bold 72pt Arial")
        }
    }
}

class GameScreen: Screen() {
    var sprites = SpriteBatch()
    var x = 0f
    var y = 0f
    var sprite = Sprite("SHIP")

    override fun loadResources() {
        Textures.load("SHIP", "images/ship2.png")
        Sounds.load("EXPLOSION", "sounds/Explosion7.ogg")
        Sounds.load("DROP", "sounds/Bomb_Drop.ogg")

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


        Keys.setInputProcessor(GameInputProcessor())
    }

    override fun update(time: Float, delta: Float) {
        val speed = 500f // pixels per second
        if (Keys.isDown(KeyCode.LEFT)) {
            x -= delta * speed;
        }

        if (Keys.isDown(KeyCode.RIGHT)) {
            x += delta * speed;
        }

        if (Keys.isDown(KeyCode.UP)) {
            y += delta * speed;
        }

        if (Keys.isDown(KeyCode.DOWN)) {
            y -= delta * speed;
        }
    }

    override fun render() {

        for (index in 0..100) {
            val x = Math.random() * 2000f - 1000f
            val y = Math.random() * 2000f - 1000f

            sprites.draw(sprite, x.toFloat(), y.toFloat())
        }

        sprites.draw(sprite, x, y);

        sprites.render()
                Texts.drawText(150f, 400f, "Playing teh Game!", font = "bold 72pt Arial")

        if (showFPS) {
            Texts.drawText(20f, 100f, "Hello! FPS ${Game.fps}", font = "bold 72pt Arial")
        }
    }

}

fun main(args: Array<String>) {
    Game.view.setToWidth(2000f)

    Game.start(WelcomeScreen())
}

fun changeMusic(it: HTMLInputElement) {
    val mus = music

    if (mus != null) {
        if (it.checked) {
            mus.volume = 1.0
        } else {
            mus.volume = 0.0
        }
    }
}

fun showFPS(it: HTMLInputElement) {
    showFPS = it.checked
}

fun playGame() {
    document.getElementById("menu")?.setAttribute("style", "display: none;")

    Game.setScreen(GameScreen())
}