diff --git a/lib/kotludens/com/persesgames/game/Game.kt b/lib/kotludens/com/persesgames/game/Game.kt index dafb06e..028ec17 100644 --- a/lib/kotludens/com/persesgames/game/Game.kt +++ b/lib/kotludens/com/persesgames/game/Game.kt @@ -12,6 +12,11 @@ * Created by rnentjes on 19-4-16. */ +enum class DrawMode { + LINEAR, + NEAREST +} + class HTMLElements { var container: HTMLElement var webgl: WebGLRenderingContext diff --git a/lib/kotludens/com/persesgames/game/Game.kt b/lib/kotludens/com/persesgames/game/Game.kt index dafb06e..028ec17 100644 --- a/lib/kotludens/com/persesgames/game/Game.kt +++ b/lib/kotludens/com/persesgames/game/Game.kt @@ -12,6 +12,11 @@ * Created by rnentjes on 19-4-16. */ +enum class DrawMode { + LINEAR, + NEAREST +} + class HTMLElements { var container: HTMLElement var webgl: WebGLRenderingContext diff --git a/lib/kotludens/com/persesgames/game/View.kt b/lib/kotludens/com/persesgames/game/View.kt index 9bdbb4b..3e9f392 100644 --- a/lib/kotludens/com/persesgames/game/View.kt +++ b/lib/kotludens/com/persesgames/game/View.kt @@ -20,7 +20,8 @@ var far: Float = -100f, var minAspectRatio: Float = 1f, var maxAspectRatio: Float = 1f, - var viewType: ViewType = ViewType.WIDTH) + var viewType: ViewType = ViewType.WIDTH, + var drawMode: DrawMode = DrawMode.LINEAR) { var vMatrix = Matrix4() var aspectRatio = 1f diff --git a/lib/kotludens/com/persesgames/game/Game.kt b/lib/kotludens/com/persesgames/game/Game.kt index dafb06e..028ec17 100644 --- a/lib/kotludens/com/persesgames/game/Game.kt +++ b/lib/kotludens/com/persesgames/game/Game.kt @@ -12,6 +12,11 @@ * Created by rnentjes on 19-4-16. */ +enum class DrawMode { + LINEAR, + NEAREST +} + class HTMLElements { var container: HTMLElement var webgl: WebGLRenderingContext diff --git a/lib/kotludens/com/persesgames/game/View.kt b/lib/kotludens/com/persesgames/game/View.kt index 9bdbb4b..3e9f392 100644 --- a/lib/kotludens/com/persesgames/game/View.kt +++ b/lib/kotludens/com/persesgames/game/View.kt @@ -20,7 +20,8 @@ var far: Float = -100f, var minAspectRatio: Float = 1f, var maxAspectRatio: Float = 1f, - var viewType: ViewType = ViewType.WIDTH) + var viewType: ViewType = ViewType.WIDTH, + var drawMode: DrawMode = DrawMode.LINEAR) { var vMatrix = Matrix4() var aspectRatio = 1f diff --git a/lib/kotludens/com/persesgames/map/tiled/TiledMap.kt b/lib/kotludens/com/persesgames/map/tiled/TiledMap.kt index cfe6a92..6673269 100644 --- a/lib/kotludens/com/persesgames/map/tiled/TiledMap.kt +++ b/lib/kotludens/com/persesgames/map/tiled/TiledMap.kt @@ -119,17 +119,27 @@ gid = tile - tileset.firstgid val xi = gid % tilesHor - val yi = gid / tilesHor + var yi = gid / tilesHor + yi = tilesVer - yi - 1 val tw = 1f / tilesHor.toFloat() val th = 1f / tilesVer.toFloat() - val pixelW = 0.1f / tileset.tilewidth - val pixelH = 0.1f / tileset.tileheight + val pixelW = 0.25f / tileset.tilewidth + val pixelH = 0.25f / tileset.tileheight - tcLeft = xi * tw + pixelW - tcTop = yi * th + pixelH - tcRight = tcLeft + tw - pixelW - tcBottom = tcTop - th - pixelH + tcLeft = xi * tw + tcRight = tcLeft + tw + + // switch up/down because of texture coord 0,0 in left bottom corner + tcBottom = yi * th + tcTop = tcBottom + th + + tcLeft += pixelW + tcRight -= pixelW + + tcBottom += pixelW + tcTop -= pixelW + } } } @@ -152,24 +162,33 @@ for (index in layerData.indices) { // todo: determine if in view // todo: determine tilewidth - if (xo+x*128f < Game.view.width && yo + y * 128 < Game.view.height) { + //if (xo+x*128f < Game.view.width && yo + y * 128 < Game.view.height) { drawTile(layerData[index], xo + x * 128f, yo + y * 128f) when (data.renderorder) { "right-down" -> { x++ - if (x > layer.width) { + if (x >= layer.width) { x = 0f - y++ + y-- } } else -> { throw IllegalStateException("Renderorder ${data.renderorder} not supported in $this") } } - } + //} } } + + for (tileset in data.tilesets) { + if (Textures.has(tileset.name)) { + val tx = Textures.get(tileset.name) + + tx.render() + } + } + first = false } } diff --git a/lib/kotludens/com/persesgames/game/Game.kt b/lib/kotludens/com/persesgames/game/Game.kt index dafb06e..028ec17 100644 --- a/lib/kotludens/com/persesgames/game/Game.kt +++ b/lib/kotludens/com/persesgames/game/Game.kt @@ -12,6 +12,11 @@ * Created by rnentjes on 19-4-16. */ +enum class DrawMode { + LINEAR, + NEAREST +} + class HTMLElements { var container: HTMLElement var webgl: WebGLRenderingContext diff --git a/lib/kotludens/com/persesgames/game/View.kt b/lib/kotludens/com/persesgames/game/View.kt index 9bdbb4b..3e9f392 100644 --- a/lib/kotludens/com/persesgames/game/View.kt +++ b/lib/kotludens/com/persesgames/game/View.kt @@ -20,7 +20,8 @@ var far: Float = -100f, var minAspectRatio: Float = 1f, var maxAspectRatio: Float = 1f, - var viewType: ViewType = ViewType.WIDTH) + var viewType: ViewType = ViewType.WIDTH, + var drawMode: DrawMode = DrawMode.LINEAR) { var vMatrix = Matrix4() var aspectRatio = 1f diff --git a/lib/kotludens/com/persesgames/map/tiled/TiledMap.kt b/lib/kotludens/com/persesgames/map/tiled/TiledMap.kt index cfe6a92..6673269 100644 --- a/lib/kotludens/com/persesgames/map/tiled/TiledMap.kt +++ b/lib/kotludens/com/persesgames/map/tiled/TiledMap.kt @@ -119,17 +119,27 @@ gid = tile - tileset.firstgid val xi = gid % tilesHor - val yi = gid / tilesHor + var yi = gid / tilesHor + yi = tilesVer - yi - 1 val tw = 1f / tilesHor.toFloat() val th = 1f / tilesVer.toFloat() - val pixelW = 0.1f / tileset.tilewidth - val pixelH = 0.1f / tileset.tileheight + val pixelW = 0.25f / tileset.tilewidth + val pixelH = 0.25f / tileset.tileheight - tcLeft = xi * tw + pixelW - tcTop = yi * th + pixelH - tcRight = tcLeft + tw - pixelW - tcBottom = tcTop - th - pixelH + tcLeft = xi * tw + tcRight = tcLeft + tw + + // switch up/down because of texture coord 0,0 in left bottom corner + tcBottom = yi * th + tcTop = tcBottom + th + + tcLeft += pixelW + tcRight -= pixelW + + tcBottom += pixelW + tcTop -= pixelW + } } } @@ -152,24 +162,33 @@ for (index in layerData.indices) { // todo: determine if in view // todo: determine tilewidth - if (xo+x*128f < Game.view.width && yo + y * 128 < Game.view.height) { + //if (xo+x*128f < Game.view.width && yo + y * 128 < Game.view.height) { drawTile(layerData[index], xo + x * 128f, yo + y * 128f) when (data.renderorder) { "right-down" -> { x++ - if (x > layer.width) { + if (x >= layer.width) { x = 0f - y++ + y-- } } else -> { throw IllegalStateException("Renderorder ${data.renderorder} not supported in $this") } } - } + //} } } + + for (tileset in data.tilesets) { + if (Textures.has(tileset.name)) { + val tx = Textures.get(tileset.name) + + tx.render() + } + } + first = false } } diff --git a/lib/kotludens/com/persesgames/texture/Textures.kt b/lib/kotludens/com/persesgames/texture/Textures.kt index 32d8c81..e0ea7fc 100644 --- a/lib/kotludens/com/persesgames/texture/Textures.kt +++ b/lib/kotludens/com/persesgames/texture/Textures.kt @@ -1,5 +1,6 @@ package com.persesgames.texture +import com.persesgames.game.DrawMode import com.persesgames.game.Game import com.persesgames.map.tiled.MapTileset import com.persesgames.math.Matrix4 @@ -221,15 +222,19 @@ gl.bindTexture(WebGLRenderingContext.TEXTURE_2D, texture) gl.pixelStorei(WebGLRenderingContext.UNPACK_FLIP_Y_WEBGL, 1) // second argument must be an int gl.texImage2D(WebGLRenderingContext.TEXTURE_2D, 0, WebGLRenderingContext.RGBA, WebGLRenderingContext.RGBA, WebGLRenderingContext.UNSIGNED_BYTE, image) - //gl.texParameteri(WebGLRenderingContext.TEXTURE_2D, WebGLRenderingContext.TEXTURE_MAG_FILTER, WebGLRenderingContext.NEAREST) - //gl.texParameteri(WebGLRenderingContext.TEXTURE_2D, WebGLRenderingContext.TEXTURE_MIN_FILTER, WebGLRenderingContext.NEAREST) - gl.texParameteri(WebGLRenderingContext.TEXTURE_2D, WebGLRenderingContext.TEXTURE_MAG_FILTER, WebGLRenderingContext.LINEAR) - gl.texParameteri(WebGLRenderingContext.TEXTURE_2D, WebGLRenderingContext.TEXTURE_MIN_FILTER, WebGLRenderingContext.LINEAR) + if (Game.view.drawMode == DrawMode.NEAREST) { + gl.texParameteri(WebGLRenderingContext.TEXTURE_2D, WebGLRenderingContext.TEXTURE_MAG_FILTER, WebGLRenderingContext.NEAREST) + gl.texParameteri(WebGLRenderingContext.TEXTURE_2D, WebGLRenderingContext.TEXTURE_MIN_FILTER, WebGLRenderingContext.NEAREST) + } else { + gl.texParameteri(WebGLRenderingContext.TEXTURE_2D, WebGLRenderingContext.TEXTURE_MAG_FILTER, WebGLRenderingContext.LINEAR) + gl.texParameteri(WebGLRenderingContext.TEXTURE_2D, WebGLRenderingContext.TEXTURE_MIN_FILTER, WebGLRenderingContext.LINEAR) + } gl.bindTexture(WebGLRenderingContext.TEXTURE_2D, null) } fun ready() = loaded == startedLoading + fun has(name: String) = textures[name] != null fun get(name: String) = textures[name] ?: throw IllegalArgumentException("Texture with name $name is not loaded!") fun clear() { diff --git a/lib/kotludens/com/persesgames/game/Game.kt b/lib/kotludens/com/persesgames/game/Game.kt index dafb06e..028ec17 100644 --- a/lib/kotludens/com/persesgames/game/Game.kt +++ b/lib/kotludens/com/persesgames/game/Game.kt @@ -12,6 +12,11 @@ * Created by rnentjes on 19-4-16. */ +enum class DrawMode { + LINEAR, + NEAREST +} + class HTMLElements { var container: HTMLElement var webgl: WebGLRenderingContext diff --git a/lib/kotludens/com/persesgames/game/View.kt b/lib/kotludens/com/persesgames/game/View.kt index 9bdbb4b..3e9f392 100644 --- a/lib/kotludens/com/persesgames/game/View.kt +++ b/lib/kotludens/com/persesgames/game/View.kt @@ -20,7 +20,8 @@ var far: Float = -100f, var minAspectRatio: Float = 1f, var maxAspectRatio: Float = 1f, - var viewType: ViewType = ViewType.WIDTH) + var viewType: ViewType = ViewType.WIDTH, + var drawMode: DrawMode = DrawMode.LINEAR) { var vMatrix = Matrix4() var aspectRatio = 1f diff --git a/lib/kotludens/com/persesgames/map/tiled/TiledMap.kt b/lib/kotludens/com/persesgames/map/tiled/TiledMap.kt index cfe6a92..6673269 100644 --- a/lib/kotludens/com/persesgames/map/tiled/TiledMap.kt +++ b/lib/kotludens/com/persesgames/map/tiled/TiledMap.kt @@ -119,17 +119,27 @@ gid = tile - tileset.firstgid val xi = gid % tilesHor - val yi = gid / tilesHor + var yi = gid / tilesHor + yi = tilesVer - yi - 1 val tw = 1f / tilesHor.toFloat() val th = 1f / tilesVer.toFloat() - val pixelW = 0.1f / tileset.tilewidth - val pixelH = 0.1f / tileset.tileheight + val pixelW = 0.25f / tileset.tilewidth + val pixelH = 0.25f / tileset.tileheight - tcLeft = xi * tw + pixelW - tcTop = yi * th + pixelH - tcRight = tcLeft + tw - pixelW - tcBottom = tcTop - th - pixelH + tcLeft = xi * tw + tcRight = tcLeft + tw + + // switch up/down because of texture coord 0,0 in left bottom corner + tcBottom = yi * th + tcTop = tcBottom + th + + tcLeft += pixelW + tcRight -= pixelW + + tcBottom += pixelW + tcTop -= pixelW + } } } @@ -152,24 +162,33 @@ for (index in layerData.indices) { // todo: determine if in view // todo: determine tilewidth - if (xo+x*128f < Game.view.width && yo + y * 128 < Game.view.height) { + //if (xo+x*128f < Game.view.width && yo + y * 128 < Game.view.height) { drawTile(layerData[index], xo + x * 128f, yo + y * 128f) when (data.renderorder) { "right-down" -> { x++ - if (x > layer.width) { + if (x >= layer.width) { x = 0f - y++ + y-- } } else -> { throw IllegalStateException("Renderorder ${data.renderorder} not supported in $this") } } - } + //} } } + + for (tileset in data.tilesets) { + if (Textures.has(tileset.name)) { + val tx = Textures.get(tileset.name) + + tx.render() + } + } + first = false } } diff --git a/lib/kotludens/com/persesgames/texture/Textures.kt b/lib/kotludens/com/persesgames/texture/Textures.kt index 32d8c81..e0ea7fc 100644 --- a/lib/kotludens/com/persesgames/texture/Textures.kt +++ b/lib/kotludens/com/persesgames/texture/Textures.kt @@ -1,5 +1,6 @@ package com.persesgames.texture +import com.persesgames.game.DrawMode import com.persesgames.game.Game import com.persesgames.map.tiled.MapTileset import com.persesgames.math.Matrix4 @@ -221,15 +222,19 @@ gl.bindTexture(WebGLRenderingContext.TEXTURE_2D, texture) gl.pixelStorei(WebGLRenderingContext.UNPACK_FLIP_Y_WEBGL, 1) // second argument must be an int gl.texImage2D(WebGLRenderingContext.TEXTURE_2D, 0, WebGLRenderingContext.RGBA, WebGLRenderingContext.RGBA, WebGLRenderingContext.UNSIGNED_BYTE, image) - //gl.texParameteri(WebGLRenderingContext.TEXTURE_2D, WebGLRenderingContext.TEXTURE_MAG_FILTER, WebGLRenderingContext.NEAREST) - //gl.texParameteri(WebGLRenderingContext.TEXTURE_2D, WebGLRenderingContext.TEXTURE_MIN_FILTER, WebGLRenderingContext.NEAREST) - gl.texParameteri(WebGLRenderingContext.TEXTURE_2D, WebGLRenderingContext.TEXTURE_MAG_FILTER, WebGLRenderingContext.LINEAR) - gl.texParameteri(WebGLRenderingContext.TEXTURE_2D, WebGLRenderingContext.TEXTURE_MIN_FILTER, WebGLRenderingContext.LINEAR) + if (Game.view.drawMode == DrawMode.NEAREST) { + gl.texParameteri(WebGLRenderingContext.TEXTURE_2D, WebGLRenderingContext.TEXTURE_MAG_FILTER, WebGLRenderingContext.NEAREST) + gl.texParameteri(WebGLRenderingContext.TEXTURE_2D, WebGLRenderingContext.TEXTURE_MIN_FILTER, WebGLRenderingContext.NEAREST) + } else { + gl.texParameteri(WebGLRenderingContext.TEXTURE_2D, WebGLRenderingContext.TEXTURE_MAG_FILTER, WebGLRenderingContext.LINEAR) + gl.texParameteri(WebGLRenderingContext.TEXTURE_2D, WebGLRenderingContext.TEXTURE_MIN_FILTER, WebGLRenderingContext.LINEAR) + } gl.bindTexture(WebGLRenderingContext.TEXTURE_2D, null) } fun ready() = loaded == startedLoading + fun has(name: String) = textures[name] != null fun get(name: String) = textures[name] ?: throw IllegalArgumentException("Texture with name $name is not loaded!") fun clear() { diff --git a/src/com/persesgames/shooter/Shooter.kt b/src/com/persesgames/shooter/Shooter.kt index 799fa85..8cf7a18 100644 --- a/src/com/persesgames/shooter/Shooter.kt +++ b/src/com/persesgames/shooter/Shooter.kt @@ -1,5 +1,6 @@ package com.persesgames.shooter +import com.persesgames.game.DrawMode import com.persesgames.game.Game import com.persesgames.game.Screen import com.persesgames.input.EmptyInputProcessor @@ -65,8 +66,8 @@ val map = TiledMap("maps", "level_1_01.json") var sprites = SpriteBatch() - var x = 0f - var y = 0f + var x = -640f + 64f + var y = 15500f var sprite = Sprite("SHIP") var numberOfSprites: Int = 5000 var time: Float = 0f @@ -102,18 +103,22 @@ if (Keys.isDown(KeyCode.LEFT)) { x -= delta * speed + println("x=$x") } if (Keys.isDown(KeyCode.RIGHT)) { x += delta * speed + println("x=$x") } if (Keys.isDown(KeyCode.UP)) { y += delta * speed + println("y=$y") } if (Keys.isDown(KeyCode.DOWN)) { y -= delta * speed + println("y=$y") } if (Keys.isDown(KeyCode.MINUS)) { @@ -133,7 +138,8 @@ var x = 0f var y = 0f - map.drawLayer(1, 0f, 0f) + map.drawLayer(1, this.x, this.y) + map.drawLayer(2, this.x, this.y) val time = this.time / 10f for (index in 0..numberOfSprites) { @@ -159,6 +165,7 @@ fun main(args: Array) { Game.view.setToWidth(2000f) + Game.view.drawMode = DrawMode.LINEAR Game.start(WelcomeScreen()) }