From 254bf814a921798367938c282ea026fdea27820c Mon Sep 17 00:00:00 2001 From: minjaesong Date: Mon, 13 Dec 2021 23:22:17 +0900 Subject: [PATCH] Flippin' eck --- .idea/misc.xml | 3 + .../gameactors/FixtureHomeComputer.kt | 6 +- .../gameitems/ItemHomeComputer.kt | 2 +- assets/mods/dwarventech/ModuleComputers.jar | Bin 456239 -> 456027 bytes assets/mods/dwarventech/bios/tsvmbios.js | 6 ++ .../spriteanimation/SpriteAnimation.kt | 27 +++++---- src/net/torvald/terrarum/App.java | 29 +++++----- .../torvald/terrarum/CommonResourcePool.kt | 10 ++-- .../torvald/terrarum/FlippingSpriteBatch.kt | 52 ++++++++++++++++++ src/net/torvald/terrarum/PostProcessor.kt | 5 +- src/net/torvald/terrarum/Terrarum.kt | 21 +++++++ .../torvald/terrarum/gamecontroller/IME.kt | 2 +- .../modulebasegame/ChunkLoadingLoadScreen.kt | 7 +-- .../terrarum/modulebasegame/EntryPoint.kt | 6 +- .../terrarum/modulebasegame/IngameRenderer.kt | 23 ++++---- .../terrarum/modulebasegame/TitleScreen.kt | 2 +- .../modulebasegame/WorldgenLoadScreen.kt | 7 +-- .../gameactors/FixtureLogicSignalEmitter.kt | 2 +- .../gameactors/FixtureTikiTorch.kt | 2 +- .../gameparticles/ParticleMegaRain.kt | 2 +- .../modulebasegame/ui/UILoadDemoSavefiles.kt | 12 ++-- .../terrarum/modulebasegame/ui/UINewWorld.kt | 2 +- .../modulebasegame/ui/UITitleModules.kt | 5 +- src/net/torvald/terrarum/ui/Toolkit.kt | 9 +-- src/net/torvald/terrarum/ui/UIHandler.kt | 1 + .../terrarum/ui/UIItemModuleInfoCell.kt | 4 +- .../torvald/terrarum/ui/UIItemToggleButton.kt | 4 +- .../torvald/terrarum/weather/WeatherMixer.kt | 7 +-- 28 files changed, 171 insertions(+), 87 deletions(-) create mode 100644 src/net/torvald/terrarum/FlippingSpriteBatch.kt diff --git a/.idea/misc.xml b/.idea/misc.xml index 972207dae..4034f6c8e 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -41,4 +41,7 @@ + + \ No newline at end of file diff --git a/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameactors/FixtureHomeComputer.kt b/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameactors/FixtureHomeComputer.kt index 3930b15d5..a06d01182 100644 --- a/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameactors/FixtureHomeComputer.kt +++ b/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameactors/FixtureHomeComputer.kt @@ -29,7 +29,7 @@ import net.torvald.tsvm.peripheral.VMProgramRom class FixtureHomeComputer : FixtureBase { private val vm = VM(0x200000, TheRealWorld(), arrayOf( - VMProgramRom(ModMgr.getPath("dwarventech", "bios/tsvmbios.rom")) + VMProgramRom(ModMgr.getPath("dwarventech", "bios/tsvmbios.js")) )) private val vmRunner: VMRunner private val coroutineJob: Job @@ -95,13 +95,13 @@ internal class UIHomeComputer : UICanvas( private val drawOffX = (width - 560).div(2).toFloat() private val drawOffY = (height - 448).div(2).toFloat() - private var batch: SpriteBatch + private var batch: FlippingSpriteBatch private var camera: OrthographicCamera internal lateinit var vm: VM init { - batch = SpriteBatch() + batch = FlippingSpriteBatch() camera = OrthographicCamera(width.toFloat(), height.toFloat()) //val m = Matrix4() //m.setToOrtho2D(0f, 0f, width.toFloat(), height.toFloat()) diff --git a/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameitems/ItemHomeComputer.kt b/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameitems/ItemHomeComputer.kt index 4086333c2..742342839 100644 --- a/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameitems/ItemHomeComputer.kt +++ b/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameitems/ItemHomeComputer.kt @@ -34,7 +34,7 @@ class ItemHomeComputer(originalID: ItemID) : GameItem(originalID) { CommonResourcePool.addToLoadingList("dwarventech-sprites-fixtures-desktop_computer.tga") { // val t = TextureRegion(Texture(ModMgr.getGdxFile("dwarventech", "nonexisting_file!!!"))) val t = TextureRegion(Texture(ModMgr.getGdxFile("dwarventech", "sprites/fixtures/desktop_computer.tga"))) - t.flip(false, true) + t.flip(false, false) /*return*/t } CommonResourcePool.loadAll() diff --git a/assets/mods/dwarventech/ModuleComputers.jar b/assets/mods/dwarventech/ModuleComputers.jar index 3d5b18cc6671307f1608354e2793ac6be4b5324c..b64221ec1f556134d623eec269afc2dd917e04a4 100644 GIT binary patch delta 44847 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 KE8`Js)BgcGm_C01 delta 45131 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 k-e#FT6VT new TextureRegionPack(Gdx.files.internal("assets/graphics/blocks/block_markings_common.tga"), 16, 16, 0, 0, 0, 0, false, false, true)); + CommonResourcePool.INSTANCE.addToLoadingList("blockmarkings_common", () -> new TextureRegionPack(Gdx.files.internal("assets/graphics/blocks/block_markings_common.tga"), 16, 16, 0, 0, 0, 0, false, false, false)); CommonResourcePool.INSTANCE.addToLoadingList("blockmarking_actor", () -> new BlockMarkerActor()); - CommonResourcePool.INSTANCE.addToLoadingList("loading_circle_64", () -> new TextureRegionPack(Gdx.files.internal("assets/graphics/gui/loading_circle_64.tga"), 64, 64, 0, 0, 0, 0, false, false, true)); - CommonResourcePool.INSTANCE.addToLoadingList("inline_loading_spinner", () -> new TextureRegionPack(Gdx.files.internal("assets/graphics/gui/inline_loading_spinner.tga"), 20, 20, 0, 0, 0, 0, false, false, true)); - CommonResourcePool.INSTANCE.addToLoadingList("inventory_category", () -> new TextureRegionPack("./assets/graphics/gui/inventory/category.tga", 20, 20, 0, 0, 0, 0, false, false, true)); + CommonResourcePool.INSTANCE.addToLoadingList("loading_circle_64", () -> new TextureRegionPack(Gdx.files.internal("assets/graphics/gui/loading_circle_64.tga"), 64, 64, 0, 0, 0, 0, false, false, false)); + CommonResourcePool.INSTANCE.addToLoadingList("inline_loading_spinner", () -> new TextureRegionPack(Gdx.files.internal("assets/graphics/gui/inline_loading_spinner.tga"), 20, 20, 0, 0, 0, 0, false, false, false)); + CommonResourcePool.INSTANCE.addToLoadingList("inventory_category", () -> new TextureRegionPack("./assets/graphics/gui/inventory/category.tga", 20, 20, 0, 0, 0, 0, false, false, false)); CommonResourcePool.INSTANCE.addToLoadingList("title_health1", () -> new Texture(Gdx.files.internal("./assets/graphics/gui/health_take_a_break.tga"))); CommonResourcePool.INSTANCE.addToLoadingList("title_health2", () -> new Texture(Gdx.files.internal("./assets/graphics/gui/health_distance.tga"))); @@ -409,17 +412,17 @@ public class App implements ApplicationListener { // set basis of draw - logoBatch = new SpriteBatch(); + logoBatch = new FlippingSpriteBatch(); camera = new OrthographicCamera((scr.getWf()), (scr.getHf())); - batch = new SpriteBatch(); + batch = new FlippingSpriteBatch(); shapeRender = new ShapeRenderer(); initViewPort(scr.getWidth(), scr.getHeight()); // logo here :p logo = new TextureRegion(new Texture(Gdx.files.internal("assets/graphics/logo_placeholder.tga"))); - logo.flip(false, true); + logo.flip(false, false); // set GL graphics constants for (int i = 0; i < ditherPatterns.length; i++) { @@ -515,11 +518,11 @@ public class App implements ApplicationListener { environment = RunningEnvironment.PC; }*/ - fontGame = new TerrarumSansBitmap(FONT_DIR, false, true, false, + fontGame = new TerrarumSansBitmap(FONT_DIR, false, false, false, false, 256, false, 0.5f, false ); - fontUITitle = new TerrarumSansBitmap(FONT_DIR, false, true, false, + fontUITitle = new TerrarumSansBitmap(FONT_DIR, false, false, false, false, 64, false, 0.5f, false ); @@ -694,8 +697,8 @@ public class App implements ApplicationListener { Texture tex2 = CommonResourcePool.INSTANCE.getAsTexture("title_health2"); int virtualHeight = scr.getHeight() - logoPosY - logo.getRegionHeight() / 4; int virtualHeightOffset = scr.getHeight() - virtualHeight; - logoBatch.draw(tex1, (drawWidth - tex1.getWidth()) >>> 1, virtualHeightOffset + (virtualHeight >>> 1) - 16, tex1.getWidth(), -tex1.getHeight()); - logoBatch.draw(tex2, (drawWidth - tex2.getWidth()) >>> 1, virtualHeightOffset + (virtualHeight >>> 1) + 16 + tex2.getHeight(), tex2.getWidth(), -tex2.getHeight()); + logoBatch.drawFlipped(tex1, (drawWidth - tex1.getWidth()) >>> 1, virtualHeightOffset + (virtualHeight >>> 1) - 16, tex1.getWidth(), -tex1.getHeight()); + logoBatch.drawFlipped(tex2, (drawWidth - tex2.getWidth()) >>> 1, virtualHeightOffset + (virtualHeight >>> 1) + 16 + tex2.getHeight(), tex2.getWidth(), -tex2.getHeight()); } else { diff --git a/src/net/torvald/terrarum/CommonResourcePool.kt b/src/net/torvald/terrarum/CommonResourcePool.kt index 6a5c6dedd..5bfa4059d 100644 --- a/src/net/torvald/terrarum/CommonResourcePool.kt +++ b/src/net/torvald/terrarum/CommonResourcePool.kt @@ -23,27 +23,27 @@ object CommonResourcePool { init { addToLoadingList("itemplaceholder_16") { val t = TextureRegion(Texture("assets/item_kari_16.tga")) - t.flip(false, true) + t.flip(false, false) /*return*/t } addToLoadingList("itemplaceholder_24") { val t = TextureRegion(Texture("assets/item_kari_24.tga")) - t.flip(false, true) + t.flip(false, false) /*return*/t } addToLoadingList("itemplaceholder_32") { val t = TextureRegion(Texture("assets/item_kari_32.tga")) - t.flip(false, true) + t.flip(false, false) /*return*/t } addToLoadingList("itemplaceholder_48") { val t = TextureRegion(Texture("assets/item_kari_48.tga")) - t.flip(false, true) + t.flip(false, false) /*return*/t } addToLoadingList("test_texture") { val t = TextureRegion(Texture("assets/test_texture.tga")) - t.flip(false, true) + t.flip(false, false) /*return*/t } loadAll() diff --git a/src/net/torvald/terrarum/FlippingSpriteBatch.kt b/src/net/torvald/terrarum/FlippingSpriteBatch.kt new file mode 100644 index 000000000..bb4446513 --- /dev/null +++ b/src/net/torvald/terrarum/FlippingSpriteBatch.kt @@ -0,0 +1,52 @@ +package net.torvald.terrarum + +import com.badlogic.gdx.graphics.Texture +import com.badlogic.gdx.graphics.g2d.SpriteBatch +import com.badlogic.gdx.graphics.g2d.TextureRegion + +/** + * Don't flip the assets! Flip the draw command instead! + * + * Created by minjaesong on 2021-12-13. + */ +class FlippingSpriteBatch : SpriteBatch() { + + /** + * This function draws the flipped version of the image by giving flipped uv-coord to the SpriteBatch + */ + override fun draw(texture: Texture, x: Float, y: Float, width: Float, height: Float) = + draw(texture, x, y, width, height, 0f, 0f, 1f, 1f) + + override fun draw(texture: Texture, x: Float, y: Float) = + draw(texture, x, y, texture.width.toFloat(), texture.height.toFloat(), 0f, 0f, 1f, 1f) + + fun drawFlipped(texture: Texture, x: Float, y: Float, width: Float, height: Float) = + draw(texture, x, y, width, height, 0f, 1f, 1f, 0f) + fun drawFlipped(texture: Texture, x: Float, y: Float) = + draw(texture, x, y, texture.width.toFloat(), texture.height.toFloat(), 0f, 1f, 1f, 0f) + + + /** + * This function does obey the flipping set to the TextureRegion and try to draw flipped version of it, + * without touching the flipping setting of the given region. + */ + override fun draw(region: TextureRegion, x: Float, y: Float, width: Float, height: Float) = + draw(region.texture, x, y, width, height, region.u, region.v, region.u2, region.v2) + + override fun draw(region: TextureRegion, x: Float, y: Float) = + draw(region.texture, x, y, region.regionWidth.toFloat(), region.regionHeight.toFloat(), region.u, region.v, region.u2, region.v2) + + fun drawFlipped(region: TextureRegion, x: Float, y: Float, width: Float, height: Float) = + draw(region.texture, x, y, width, height, region.u, region.v2, region.u2, region.v) + fun drawFlipped(region: TextureRegion, x: Float, y: Float) = + draw(region.texture, x, y, region.regionWidth.toFloat(), region.regionHeight.toFloat(), region.u, region.v2, region.u2, region.v) + + + /** + * NOTE TO SELF: + * + * It seems that original SpriteBatch Y-flips when it's drawing a texture, but NOT when it's drawing a textureregion + * + * (textureregion's default uv-coord is (0,0,1,1) + */ +} \ No newline at end of file diff --git a/src/net/torvald/terrarum/PostProcessor.kt b/src/net/torvald/terrarum/PostProcessor.kt index abb8f7910..85616d302 100644 --- a/src/net/torvald/terrarum/PostProcessor.kt +++ b/src/net/torvald/terrarum/PostProcessor.kt @@ -6,7 +6,6 @@ import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.GL20 import com.badlogic.gdx.graphics.OrthographicCamera import com.badlogic.gdx.graphics.Texture -import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.graphics.glutils.FrameBuffer import com.badlogic.gdx.graphics.glutils.ShapeRenderer import com.badlogic.gdx.math.Matrix4 @@ -21,7 +20,7 @@ import net.torvald.terrarum.ui.Toolkit */ object PostProcessor : Disposable { - private lateinit var batch: SpriteBatch // not nulling to save some lines of code + private lateinit var batch: FlippingSpriteBatch // not nulling to save some lines of code private lateinit var shapeRenderer: ShapeRenderer private lateinit var camera: OrthographicCamera @@ -65,7 +64,7 @@ object PostProcessor : Disposable { debugUI.setPosition(0, 0) - batch = SpriteBatch() + batch = FlippingSpriteBatch() camera = OrthographicCamera(App.scr.wf, App.scr.hf) camera.setToOrtho(true) diff --git a/src/net/torvald/terrarum/Terrarum.kt b/src/net/torvald/terrarum/Terrarum.kt index aa354ce65..b62542c7f 100644 --- a/src/net/torvald/terrarum/Terrarum.kt +++ b/src/net/torvald/terrarum/Terrarum.kt @@ -326,6 +326,27 @@ inline fun FrameBuffer.inAction(camera: OrthographicCamera?, batch: SpriteBatch? batch?.projectionMatrix = camera?.combined } +/** + * Vertically flipped version of [FrameBuffer.inAction] + */ +inline fun FrameBuffer.inActionF(camera: OrthographicCamera?, batch: SpriteBatch?, action: (FrameBuffer) -> Unit) { + //this.begin() + FrameBufferManager.begin(this) + + camera?.setToOrtho(false, this.width.toFloat(), this.height.toFloat()) + camera?.position?.set((this.width / 2f).round(), (this.height / 2f).round(), 0f) // TODO floor? ceil? round? + camera?.update() + batch?.projectionMatrix = camera?.combined + + action(this) + + //this.end() + FrameBufferManager.end() + + camera?.setToOrtho(true, App.scr.wf, App.scr.hf) + camera?.update() + batch?.projectionMatrix = camera?.combined +} infix fun Color.mul(other: Color): Color = this.cpy().mul(other) diff --git a/src/net/torvald/terrarum/gamecontroller/IME.kt b/src/net/torvald/terrarum/gamecontroller/IME.kt index 190eefbdc..7aa18b6bc 100644 --- a/src/net/torvald/terrarum/gamecontroller/IME.kt +++ b/src/net/torvald/terrarum/gamecontroller/IME.kt @@ -106,7 +106,7 @@ object IME { } - val iconSheet = TextureRegionPack("assets/graphics/gui/ime_icons_by_language.tga", 20, 20, flipY = true) + val iconSheet = TextureRegionPack("assets/graphics/gui/ime_icons_by_language.tga", 20, 20, flipY = false) val iconPixmap = Pixmap(Gdx.files.internal("assets/graphics/gui/ime_icons_by_language.tga")) for (k in 0 until iconPixmap.height step 20) { val langCode = StringBuilder() diff --git a/src/net/torvald/terrarum/modulebasegame/ChunkLoadingLoadScreen.kt b/src/net/torvald/terrarum/modulebasegame/ChunkLoadingLoadScreen.kt index bfa996b03..251193605 100644 --- a/src/net/torvald/terrarum/modulebasegame/ChunkLoadingLoadScreen.kt +++ b/src/net/torvald/terrarum/modulebasegame/ChunkLoadingLoadScreen.kt @@ -53,15 +53,12 @@ class ChunkLoadingLoadScreen(screenToBeLoaded: IngameInstance, private val world } - App.batch.inUse { + App.batch.inUse { val it = it as FlippingSpriteBatch it.color = Color.WHITE val previewX = (drawWidth - previewWidth).div(2f).round() val previewY = (App.scr.height - previewHeight.times(1.5f)).div(2f).round() Toolkit.drawBoxBorder(it, previewX.toInt() - 1, previewY.toInt() - 1, previewWidth + 2, previewHeight + 2) - it.draw(previewTexture, - previewX, - previewY - ) + it.drawFlipped(previewTexture, previewX, previewY) val text = messages.getHeadElem() ?: "" App.fontGame.draw(it, text, diff --git a/src/net/torvald/terrarum/modulebasegame/EntryPoint.kt b/src/net/torvald/terrarum/modulebasegame/EntryPoint.kt index a3d335757..5710c9087 100644 --- a/src/net/torvald/terrarum/modulebasegame/EntryPoint.kt +++ b/src/net/torvald/terrarum/modulebasegame/EntryPoint.kt @@ -30,13 +30,13 @@ class EntryPoint : ModuleEntryPoint() { // load common resources to the AssetsManager CommonResourcePool.addToLoadingList("$moduleName.items16") { - TextureRegionPack(ModMgr.getGdxFile(moduleName, "items/items.tga"), 16, 16, flipY = true) + TextureRegionPack(ModMgr.getGdxFile(moduleName, "items/items.tga"), 16, 16, flipY = false) } CommonResourcePool.addToLoadingList("$moduleName.items24") { - TextureRegionPack(ModMgr.getGdxFile(moduleName, "items/items24.tga"), 24, 24, flipY = true) + TextureRegionPack(ModMgr.getGdxFile(moduleName, "items/items24.tga"), 24, 24, flipY = false) } CommonResourcePool.addToLoadingList("$moduleName.items48") { - TextureRegionPack(ModMgr.getGdxFile(moduleName, "items/items48.tga"), 48, 48, flipY = true) + TextureRegionPack(ModMgr.getGdxFile(moduleName, "items/items48.tga"), 48, 48, flipY = false) } CommonResourcePool.loadAll() diff --git a/src/net/torvald/terrarum/modulebasegame/IngameRenderer.kt b/src/net/torvald/terrarum/modulebasegame/IngameRenderer.kt index 5dd60ec82..c3aed39c0 100644 --- a/src/net/torvald/terrarum/modulebasegame/IngameRenderer.kt +++ b/src/net/torvald/terrarum/modulebasegame/IngameRenderer.kt @@ -3,7 +3,6 @@ package net.torvald.terrarum.modulebasegame import com.badlogic.gdx.Gdx import com.badlogic.gdx.Input import com.badlogic.gdx.graphics.* -import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.graphics.g2d.TextureRegion import com.badlogic.gdx.graphics.glutils.FloatFrameBuffer import com.badlogic.gdx.graphics.glutils.FrameBuffer @@ -43,7 +42,7 @@ import kotlin.system.exitProcess */ object IngameRenderer : Disposable { /** for non-private use, use with care! */ - lateinit var batch: SpriteBatch + lateinit var batch: FlippingSpriteBatch private lateinit var camera: OrthographicCamera private lateinit var blurWriteQuad: Mesh @@ -234,8 +233,8 @@ object IngameRenderer : Disposable { prepLightmapRGBA() BlocksDrawer.renderData() - drawToRGB(actorsRenderBehind, actorsRenderMiddle, actorsRenderMidTop, actorsRenderFront, particlesContainer) - drawToA(actorsRenderBehind, actorsRenderMiddle, actorsRenderMidTop, actorsRenderFront, particlesContainer) + drawToRGB(actorsRenderBehind, actorsRenderMiddle, actorsRenderMidTop, actorsRenderFront, actorsRenderOverlay, particlesContainer) + drawToA(actorsRenderBehind, actorsRenderMiddle, actorsRenderMidTop, actorsRenderFront, actorsRenderOverlay, particlesContainer) drawOverlayActors(actorsRenderOverlay) } @@ -360,7 +359,7 @@ object IngameRenderer : Disposable { //batch.shader = if (App.getConfigBoolean("fx_dither")) IngameRenderer.shaderBayer else null batch.shader = null - batch.draw(mixedOutTex, 0f, 0f) + batch.drawFlipped(mixedOutTex, 0f, 0f) } @@ -423,6 +422,7 @@ object IngameRenderer : Disposable { actorsRenderMiddle: List?, actorsRenderMidTop: List?, actorsRenderFront : List?, + actorsOverlay : List?, particlesContainer: CircularArray? ) { fboRGB.inAction(null, null) { clearBuffer() } @@ -466,6 +466,7 @@ object IngameRenderer : Disposable { setCameraPosition(0f, 0f) BlocksDrawer.drawFront(batch.projectionMatrix) // blue coloured filter of water, etc. + batch.shader = null batch.inUse { FeaturesDrawer.drawEnvOverlay(batch) } @@ -520,6 +521,7 @@ object IngameRenderer : Disposable { actorsRenderMiddle: List?, actorsRenderMidTop: List?, actorsRenderFront : List?, + actorsOverlay : List?, particlesContainer: CircularArray? ) { fboA.inAction(null, null) { @@ -591,6 +593,8 @@ object IngameRenderer : Disposable { lightTex.regionWidth * lightmapDownsample, lightTex.regionHeight * lightmapDownsample ) + + } @@ -602,7 +606,7 @@ object IngameRenderer : Disposable { } private fun drawOverlayActors(actors: List?) { - fboRGB_lightMixed.inAction(camera, batch) { + fboRGB_lightMixed.inActionF(camera, batch) { batch.inUse { batch.shader = shaderAlphaDither @@ -625,12 +629,11 @@ object IngameRenderer : Disposable { private fun invokeInit() { if (!initDone) { - batch = SpriteBatch() + batch = FlippingSpriteBatch() camera = OrthographicCamera(WIDTHF, HEIGHTF) camera.setToOrtho(true, WIDTHF, HEIGHTF) camera.update() - Gdx.gl20.glViewport(0, 0, WIDTH, HEIGHT) resize(WIDTH, HEIGHT) @@ -862,9 +865,9 @@ object IngameRenderer : Disposable { private fun worldCamToRenderPos(): Pair { // for some reason it does not like integer. No, really; it breaks (jitter when you move) when you try to "fix" that. val xoff = (WorldCamera.x / TILE_SIZE) - LightmapRenderer.camX - val yoff = (WorldCamera.y / TILE_SIZE) - LightmapRenderer.camY + val yoff = (WorldCamera.y / TILE_SIZE) - LightmapRenderer.camY - 1 val xrem = -(WorldCamera.x.toFloat() fmod TILE_SIZEF) - (xoff * TILE_SIZEF) - val yrem = -(WorldCamera.y.toFloat() fmod TILE_SIZEF) - (yoff * TILE_SIZEF) + val yrem = +(WorldCamera.y.toFloat() fmod TILE_SIZEF) + (yoff * TILE_SIZEF) return (xrem - LightmapRenderer.LIGHTMAP_OVERRENDER * TILE_SIZEF) to (yrem - LightmapRenderer.LIGHTMAP_OVERRENDER * TILE_SIZEF) } diff --git a/src/net/torvald/terrarum/modulebasegame/TitleScreen.kt b/src/net/torvald/terrarum/modulebasegame/TitleScreen.kt index 05763aaa2..c60f313fa 100644 --- a/src/net/torvald/terrarum/modulebasegame/TitleScreen.kt +++ b/src/net/torvald/terrarum/modulebasegame/TitleScreen.kt @@ -123,7 +123,7 @@ class TitleScreen(batch: SpriteBatch) : IngameInstance(batch) { private val warning32bitJavaIcon = TextureRegion(Texture(Gdx.files.internal("assets/graphics/gui/32_bit_warning.tga"))) init { - warning32bitJavaIcon.flip(false, true) + warning32bitJavaIcon.flip(false, false) } private fun loadThingsWhileIntroIsVisible() { diff --git a/src/net/torvald/terrarum/modulebasegame/WorldgenLoadScreen.kt b/src/net/torvald/terrarum/modulebasegame/WorldgenLoadScreen.kt index 69ae5ef3b..5088745d0 100644 --- a/src/net/torvald/terrarum/modulebasegame/WorldgenLoadScreen.kt +++ b/src/net/torvald/terrarum/modulebasegame/WorldgenLoadScreen.kt @@ -68,15 +68,12 @@ class WorldgenLoadScreen(screenToBeLoaded: IngameInstance, private val worldwidt } - App.batch.inUse { + App.batch.inUse { val it = it as FlippingSpriteBatch it.color = Color.WHITE val previewX = (drawWidth - previewWidth).div(2f).round() val previewY = (App.scr.height - previewHeight.times(1.5f)).div(2f).round() Toolkit.drawBoxBorder(it, previewX.toInt()-1, previewY.toInt()-1, previewWidth+2, previewHeight+2) - it.draw(previewTexture, - previewX, - previewY - ) + it.drawFlipped(previewTexture, previewX, previewY) val text = messages.getHeadElem() ?: "" App.fontGame.draw(it, text, diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalEmitter.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalEmitter.kt index 677d1cb3e..0be065a02 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalEmitter.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalEmitter.kt @@ -25,7 +25,7 @@ class FixtureLogicSignalEmitter : FixtureBase, Electric { init { CommonResourcePool.addToLoadingList("basegame-sprites-fixtures-signal_source.tga") { val t = TextureRegion(Texture(ModMgr.getGdxFile("basegame", "sprites/fixtures/signal_source.tga"))) - t.flip(false, true) + t.flip(false, false) /*return*/t } CommonResourcePool.loadAll() diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTikiTorch.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTikiTorch.kt index c1417033f..5c68ca83c 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTikiTorch.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTikiTorch.kt @@ -40,7 +40,7 @@ internal class FixtureTikiTorch : FixtureBase, Luminous { // loading textures CommonResourcePool.addToLoadingList("sprites-fixtures-tiki_torch.tga") { - TextureRegionPack(ModMgr.getGdxFile("basegame", "sprites/fixtures/tiki_torch.tga"), 16, 32, flipY = true) + TextureRegionPack(ModMgr.getGdxFile("basegame", "sprites/fixtures/tiki_torch.tga"), 16, 32, flipY = false) } CommonResourcePool.addToLoadingList("particles-tiki_smoke.tga") { TextureRegionPack(ModMgr.getGdxFile("basegame", "particles/bigger_smoke.tga"), 16, 16) diff --git a/src/net/torvald/terrarum/modulebasegame/gameparticles/ParticleMegaRain.kt b/src/net/torvald/terrarum/modulebasegame/gameparticles/ParticleMegaRain.kt index a29dc7fc9..0f51c2736 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameparticles/ParticleMegaRain.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameparticles/ParticleMegaRain.kt @@ -62,7 +62,7 @@ object MegaRainGovernor { // return composed (mega)pixmap val region = TextureRegion(Texture(pixmap)) - region.flip(false, true) + region.flip(false, false) /*return*/region } diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UILoadDemoSavefiles.kt b/src/net/torvald/terrarum/modulebasegame/ui/UILoadDemoSavefiles.kt index ea23f3b07..7b96ab95f 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UILoadDemoSavefiles.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UILoadDemoSavefiles.kt @@ -78,10 +78,11 @@ class UILoadDemoSavefiles(val remoCon: UIRemoCon) : UICanvas() { init { CommonResourcePool.addToLoadingList("terrarum-defaultsavegamethumb") { - TextureRegion(Texture(Gdx.files.internal("assets/graphics/gui/savegame_thumb_placeholder.png"))) + val t = TextureRegion(Texture(Gdx.files.internal("assets/graphics/gui/savegame_thumb_placeholder.png"))) + t.flip(false, false); t } CommonResourcePool.addToLoadingList("savegame_status_icon") { - TextureRegionPack("assets/graphics/gui/savegame_status_icon.tga", 24, 24) + TextureRegionPack("assets/graphics/gui/savegame_status_icon.tga", 24, 24, flipY = false) } CommonResourcePool.loadAll() } @@ -350,7 +351,7 @@ class UILoadDemoSavefiles(val remoCon: UIRemoCon) : UICanvas() { setCameraPosition(batch, camera, 0f, 0f) - val saveTex = Texture(savePixmap) + val saveTex = TextureRegion(Texture(savePixmap)); saveTex.flip(false, true) batch.inUse { batch.draw(saveTex, (width - uiWidth - 10) / 2f, 0f) @@ -362,7 +363,7 @@ class UILoadDemoSavefiles(val remoCon: UIRemoCon) : UICanvas() { App.fontGame.draw(batch, controlHelp, uiX.toFloat(), controlHelperY.toFloat()) } - saveTex.dispose() + saveTex.texture.dispose() savePixmap.dispose() batch.begin() @@ -538,6 +539,7 @@ class UIItemPlayerCells( p.reassembleSprite(skimmer, p.sprite) p.sprite!!.textureRegion.get(0,0).let { thumb = it + thumb!!.flip(false, false) } this.sprite = p.sprite } @@ -710,7 +712,7 @@ class UIItemWorldCells( // draw thumbnail batch.color = Color.WHITE blendNormal(batch) - batch.draw(thumb ?: CommonResourcePool.getAsTextureRegion("terrarum-defaultsavegamethumb"), x, y + height, width.toFloat(), -height.toFloat()) + batch.draw(thumb ?: CommonResourcePool.getAsTextureRegion("terrarum-defaultsavegamethumb"), x, y, width.toFloat(), height.toFloat()) // draw gradient blendMul(batch) batch.draw(grad, x + width.toFloat(), y, -width.toFloat(), height.toFloat()) diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UINewWorld.kt b/src/net/torvald/terrarum/modulebasegame/ui/UINewWorld.kt index 5610678e7..ee6ee02a8 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UINewWorld.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UINewWorld.kt @@ -75,7 +75,7 @@ class UINewWorld(val remoCon: UIRemoCon) : UICanvas() { private val goButton = UIItemTextButton(this, "MENU_LABEL_CONFIRM_BUTTON", drawX + width/2 + (width/2 - goButtonWidth) / 2, drawY + height - 24, goButtonWidth, true, alignment = UIItemTextButton.Companion.Alignment.CENTRE, hasBorder = true) init { - tex.forEach { it.flip(false, true) } + tex.forEach { it.flip(false, false) } goButton.touchDownListener = { _, _, _, _ -> // printdbg(this, "generate! Size=${sizeSelector.selection}, Name=${nameInput.getTextOrPlaceholder()}, Seed=${seedInput.getTextOrPlaceholder()}") diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UITitleModules.kt b/src/net/torvald/terrarum/modulebasegame/ui/UITitleModules.kt index be76e8836..21062649e 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UITitleModules.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UITitleModules.kt @@ -3,6 +3,7 @@ package net.torvald.terrarum.modulebasegame.ui import com.badlogic.gdx.Input import com.badlogic.gdx.graphics.* import com.badlogic.gdx.graphics.g2d.SpriteBatch +import com.badlogic.gdx.graphics.g2d.TextureRegion import com.badlogic.gdx.graphics.glutils.FrameBuffer import com.badlogic.gdx.graphics.glutils.ShapeRenderer import net.torvald.getKeycapConsole @@ -179,7 +180,7 @@ class UITitleModules(val remoCon: UIRemoCon) : UICanvas() { setCameraPosition(batch, camera, 0f, 0f) - val saveTex = Texture(savePixmap) + val saveTex = TextureRegion(Texture(savePixmap)); saveTex.flip(false, true) batch.inUse { batch.color = Color.WHITE batch.draw(saveTex, (width - uiWidth - 10) / 2f, 0f) @@ -191,7 +192,7 @@ class UITitleModules(val remoCon: UIRemoCon) : UICanvas() { App.fontGame.draw(batch, controlHelp, uiX.toFloat(), controlHelperY.toFloat()) } - saveTex.dispose() + saveTex.texture.dispose() savePixmap.dispose() batch.begin() diff --git a/src/net/torvald/terrarum/ui/Toolkit.kt b/src/net/torvald/terrarum/ui/Toolkit.kt index e16658e03..2075a8c00 100644 --- a/src/net/torvald/terrarum/ui/Toolkit.kt +++ b/src/net/torvald/terrarum/ui/Toolkit.kt @@ -7,10 +7,7 @@ import com.badlogic.gdx.graphics.g2d.TextureRegion import com.badlogic.gdx.graphics.glutils.FloatFrameBuffer import com.badlogic.gdx.utils.Disposable import net.torvald.random.HQRNG -import net.torvald.terrarum.App -import net.torvald.terrarum.CommonResourcePool -import net.torvald.terrarum.FrameBufferManager -import net.torvald.terrarum.inAction +import net.torvald.terrarum.* import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack @@ -43,7 +40,7 @@ object Toolkit : Disposable { private lateinit var blurWriteQuad2: Mesh private lateinit var blurWriteQuad4: Mesh - val baloonTile = TextureRegionPack("assets/graphics/gui/message_black_tileable.tga", 36, 36, flipY = true) + val baloonTile = TextureRegionPack("assets/graphics/gui/message_black_tileable.tga", 36, 36, flipY = false) val textureWhiteSquare = Texture(Gdx.files.internal("assets/graphics/ortho_line_tex_2px.tga")) val textureWhiteCircle = Texture(Gdx.files.internal("assets/graphics/circle_512.tga")) @@ -235,7 +232,7 @@ object Toolkit : Disposable { batch.begin() batch.shader = null - batch.draw(fboBlur.colorBufferTexture, x.toFloat(), y.toFloat()) + (batch as FlippingSpriteBatch).drawFlipped(fboBlur.colorBufferTexture, x.toFloat(), y.toFloat()) } fun drawBaloon(batch: SpriteBatch, x: Float, y: Float, w: Float, h: Float) { diff --git a/src/net/torvald/terrarum/ui/UIHandler.kt b/src/net/torvald/terrarum/ui/UIHandler.kt index 75edabd7b..6f15c35e7 100644 --- a/src/net/torvald/terrarum/ui/UIHandler.kt +++ b/src/net/torvald/terrarum/ui/UIHandler.kt @@ -7,6 +7,7 @@ import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.utils.Disposable import net.torvald.terrarum.App +import net.torvald.terrarum.FlippingSpriteBatch import net.torvald.terrarum.Terrarum import net.torvald.terrarum.gamecontroller.KeyToggler import net.torvald.terrarum.modulebasegame.TerrarumIngame diff --git a/src/net/torvald/terrarum/ui/UIItemModuleInfoCell.kt b/src/net/torvald/terrarum/ui/UIItemModuleInfoCell.kt index 061889717..c1fbcd38e 100644 --- a/src/net/torvald/terrarum/ui/UIItemModuleInfoCell.kt +++ b/src/net/torvald/terrarum/ui/UIItemModuleInfoCell.kt @@ -34,11 +34,11 @@ class UIItemModuleInfoCell( private val modAuthor = modProp.author init { - modIcon.flip(false, true) + modIcon.flip(false, false) CommonResourcePool.addToLoadingList("basegame_errored_icon32") { val t = TextureRegion(Texture(ModMgr.getGdxFile("basegame", "gui/modwitherror.tga"))) - t.flip(false, true) + t.flip(false, false) t } CommonResourcePool.loadAll() diff --git a/src/net/torvald/terrarum/ui/UIItemToggleButton.kt b/src/net/torvald/terrarum/ui/UIItemToggleButton.kt index 94ea6d7d9..436d2fe77 100644 --- a/src/net/torvald/terrarum/ui/UIItemToggleButton.kt +++ b/src/net/torvald/terrarum/ui/UIItemToggleButton.kt @@ -24,12 +24,12 @@ class UIItemToggleButton( init { CommonResourcePool.addToLoadingList("ui_item_toggler_base") { val t = TextureRegion(Texture(Gdx.files.internal("./assets/graphics/gui/toggler_back.tga"))) - t.flip(false, true) + t.flip(false, false) t } CommonResourcePool.addToLoadingList("ui_item_toggler_handle") { val t = TextureRegion(Texture(Gdx.files.internal("./assets/graphics/gui/toggler_switch.tga"))) - t.flip(false, true) + t.flip(false, false) t } CommonResourcePool.loadAll() diff --git a/src/net/torvald/terrarum/weather/WeatherMixer.kt b/src/net/torvald/terrarum/weather/WeatherMixer.kt index 45e6e3961..cf194a256 100644 --- a/src/net/torvald/terrarum/weather/WeatherMixer.kt +++ b/src/net/torvald/terrarum/weather/WeatherMixer.kt @@ -3,7 +3,6 @@ package net.torvald.terrarum.weather import com.badlogic.gdx.Gdx import com.badlogic.gdx.Input import com.badlogic.gdx.graphics.* -import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.jme3.math.FastMath import net.torvald.gdx.graphics.Cvec import net.torvald.random.HQRNG @@ -121,7 +120,7 @@ internal object WeatherMixer : RNGConsumer { /** * Sub-portion of IngameRenderer. You are not supposed to directly deal with this. */ - internal fun render(camera: Camera, batch: SpriteBatch, world: GameWorld) { + internal fun render(camera: Camera, batch: FlippingSpriteBatch, world: GameWorld) { val parallaxZeroPos = (world.height / 3f) * 0.8888f val parallaxDomainSize = world.height / 4f @@ -179,8 +178,8 @@ internal object WeatherMixer : RNGConsumer { batch.inUse { - it.shader = null - it.draw(skyboxTexture, 0f, -App.scr.halfhf, App.scr.wf, App.scr.hf * 2f) // because of how the linear filter works, we extend the image by two + batch.shader = null + batch.drawFlipped(skyboxTexture, 0f, -App.scr.halfhf, App.scr.wf, App.scr.hf * 2f) // because of how the linear filter works, we extend the image by two } // don't use shader to just fill the whole screen... frag shader will be called a million times and it's best to not burden it