mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-09 01:54:04 +09:00
new skybox drawing wip
This commit is contained in:
@@ -351,6 +351,8 @@ class Cvec {
|
|||||||
return fromHsv(hsv[0], hsv[1], hsv[2])
|
return fromHsv(hsv[0], hsv[1], hsv[2])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun toGdxColor() = Color(r, g, b, a)
|
||||||
|
|
||||||
/** Extract Hue-Saturation-Value. This is the inverse of [.fromHsv].
|
/** Extract Hue-Saturation-Value. This is the inverse of [.fromHsv].
|
||||||
* @param hsv The HSV array to be modified.
|
* @param hsv The HSV array to be modified.
|
||||||
* @return HSV components for chaining.
|
* @return HSV components for chaining.
|
||||||
|
|||||||
@@ -213,7 +213,7 @@ public class AppLoader implements ApplicationListener {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
private static ShaderProgram shaderBayerSkyboxFill;
|
private static ShaderProgram shaderBayerSkyboxFill; // ONLY to be used by the splash screen
|
||||||
public static ShaderProgram shaderHicolour;
|
public static ShaderProgram shaderHicolour;
|
||||||
public static ShaderProgram shaderPassthruRGB;
|
public static ShaderProgram shaderPassthruRGB;
|
||||||
public static ShaderProgram shaderColLUT;
|
public static ShaderProgram shaderColLUT;
|
||||||
@@ -235,8 +235,12 @@ public class AppLoader implements ApplicationListener {
|
|||||||
private static LoadScreenBase currentSetLoadScreen;
|
private static LoadScreenBase currentSetLoadScreen;
|
||||||
public static int screenW = 0;
|
public static int screenW = 0;
|
||||||
public static int screenH = 0;
|
public static int screenH = 0;
|
||||||
|
public static float screenWf = 0f;
|
||||||
|
public static float screenHf = 0f;
|
||||||
public static int halfScreenW = 0;
|
public static int halfScreenW = 0;
|
||||||
public static int halfScreenH = 0;
|
public static int halfScreenH = 0;
|
||||||
|
public static float halfScreenWf = 0f;
|
||||||
|
public static float halfScreenHf = 0f;
|
||||||
|
|
||||||
public static Texture textureWhiteSquare;
|
public static Texture textureWhiteSquare;
|
||||||
public static Texture textureWhiteCircle;
|
public static Texture textureWhiteCircle;
|
||||||
@@ -665,6 +669,11 @@ public class AppLoader implements ApplicationListener {
|
|||||||
halfScreenW = screenW / 2;
|
halfScreenW = screenW / 2;
|
||||||
halfScreenH = screenH / 2;
|
halfScreenH = screenH / 2;
|
||||||
|
|
||||||
|
screenWf = (float) screenW;
|
||||||
|
screenHf = (float) screenH;
|
||||||
|
halfScreenWf = (float) halfScreenW;
|
||||||
|
halfScreenHf = (float) halfScreenH;
|
||||||
|
|
||||||
updateFullscreenQuad(screenW, screenH);
|
updateFullscreenQuad(screenW, screenH);
|
||||||
|
|
||||||
printdbg(this, "Resize end");
|
printdbg(this, "Resize end");
|
||||||
|
|||||||
@@ -865,7 +865,7 @@ class Ingame(batch: SpriteBatch) : IngameInstance(batch) {
|
|||||||
/////////////////////////
|
/////////////////////////
|
||||||
// draw to main screen //
|
// draw to main screen //
|
||||||
/////////////////////////
|
/////////////////////////
|
||||||
camera.setToOrtho(true, AppLoader.screenW.toFloat(), AppLoader.screenH.toFloat())
|
camera.setToOrtho(true, AppLoader.screenWf, AppLoader.screenHf)
|
||||||
batch.projectionMatrix = camera.combined
|
batch.projectionMatrix = camera.combined
|
||||||
batch.inUse {
|
batch.inUse {
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ open class LoadScreenBase : ScreenAdapter(), Disposable {
|
|||||||
internal var errorTrapped = false
|
internal var errorTrapped = false
|
||||||
internal var doContextChange = false
|
internal var doContextChange = false
|
||||||
|
|
||||||
var camera = OrthographicCamera(AppLoader.screenW.toFloat(), AppLoader.screenH.toFloat())
|
var camera = OrthographicCamera(AppLoader.screenWf, AppLoader.screenHf)
|
||||||
|
|
||||||
override fun show() {
|
override fun show() {
|
||||||
messages.clear()
|
messages.clear()
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ object PostProcessor : Disposable {
|
|||||||
debugUI.setPosition(0, 0)
|
debugUI.setPosition(0, 0)
|
||||||
|
|
||||||
batch = SpriteBatch()
|
batch = SpriteBatch()
|
||||||
camera = OrthographicCamera(AppLoader.screenW.toFloat(), AppLoader.screenH.toFloat())
|
camera = OrthographicCamera(AppLoader.screenWf, AppLoader.screenHf)
|
||||||
camera.setToOrtho(true)
|
camera.setToOrtho(true)
|
||||||
|
|
||||||
batch.projectionMatrix = camera.combined
|
batch.projectionMatrix = camera.combined
|
||||||
@@ -155,8 +155,8 @@ object PostProcessor : Disposable {
|
|||||||
|
|
||||||
// centre ind
|
// centre ind
|
||||||
shapeRenderer.color = safeAreaCol2
|
shapeRenderer.color = safeAreaCol2
|
||||||
shapeRenderer.line(0f, 0f, AppLoader.screenW.toFloat(), AppLoader.screenH.toFloat())
|
shapeRenderer.line(0f, 0f, AppLoader.screenWf, AppLoader.screenHf)
|
||||||
shapeRenderer.line(0f, AppLoader.screenH.toFloat(), AppLoader.screenW.toFloat(), 0f)
|
shapeRenderer.line(0f, AppLoader.screenHf, AppLoader.screenWf, 0f)
|
||||||
|
|
||||||
// safe action area
|
// safe action area
|
||||||
shapeRenderer.color = safeAreaCol2
|
shapeRenderer.color = safeAreaCol2
|
||||||
|
|||||||
@@ -141,7 +141,7 @@ object SanicLoadScreen : LoadScreenBase() {
|
|||||||
|
|
||||||
// almost black background
|
// almost black background
|
||||||
it.color = Color(0x181818ff)
|
it.color = Color(0x181818ff)
|
||||||
it.fillRect(0f, 0f, AppLoader.screenW.toFloat(), AppLoader.screenH.toFloat())
|
it.fillRect(0f, 0f, AppLoader.screenWf, AppLoader.screenHf)
|
||||||
|
|
||||||
|
|
||||||
it.color = Color.WHITE
|
it.color = Color.WHITE
|
||||||
@@ -184,7 +184,7 @@ object SanicLoadScreen : LoadScreenBase() {
|
|||||||
|
|
||||||
// message backgrounds
|
// message backgrounds
|
||||||
it.color = messageBackgroundColour
|
it.color = messageBackgroundColour
|
||||||
it.fillRect(0f, 60f, AppLoader.screenW.toFloat(), 40f + (messages.size) * AppLoader.fontGame.lineHeight)
|
it.fillRect(0f, 60f, AppLoader.screenWf, 40f + (messages.size) * AppLoader.fontGame.lineHeight)
|
||||||
|
|
||||||
// log messages
|
// log messages
|
||||||
it.color = messageForegroundColour
|
it.color = messageForegroundColour
|
||||||
@@ -209,7 +209,7 @@ object SanicLoadScreen : LoadScreenBase() {
|
|||||||
|
|
||||||
// message backgrounds
|
// message backgrounds
|
||||||
it.color = messageBackgroundColour
|
it.color = messageBackgroundColour
|
||||||
it.fillRect(0f, 60f, AppLoader.screenW.toFloat(), 40f + (messages.size) * AppLoader.fontGame.lineHeight)
|
it.fillRect(0f, 60f, AppLoader.screenWf, 40f + (messages.size) * AppLoader.fontGame.lineHeight)
|
||||||
|
|
||||||
// log messages
|
// log messages
|
||||||
it.color = messageForegroundColour
|
it.color = messageForegroundColour
|
||||||
|
|||||||
@@ -328,7 +328,7 @@ inline fun FrameBuffer.inAction(camera: OrthographicCamera?, batch: SpriteBatch?
|
|||||||
//this.end()
|
//this.end()
|
||||||
FrameBufferManager.end()
|
FrameBufferManager.end()
|
||||||
|
|
||||||
camera?.setToOrtho(true, AppLoader.screenW.toFloat(), AppLoader.screenH.toFloat())
|
camera?.setToOrtho(true, AppLoader.screenWf, AppLoader.screenHf)
|
||||||
camera?.update()
|
camera?.update()
|
||||||
batch?.projectionMatrix = camera?.combined
|
batch?.projectionMatrix = camera?.combined
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ class TestTestTest(val batch: SpriteBatch) : Screen {
|
|||||||
|
|
||||||
fun enter() {
|
fun enter() {
|
||||||
// init view port
|
// init view port
|
||||||
camera = OrthographicCamera(AppLoader.screenW.toFloat(), AppLoader.screenH.toFloat())
|
camera = OrthographicCamera(AppLoader.screenWf, AppLoader.screenHf)
|
||||||
|
|
||||||
|
|
||||||
img = Texture("assets/test_texture.tga")
|
img = Texture("assets/test_texture.tga")
|
||||||
@@ -147,7 +147,7 @@ class TestTestTest(val batch: SpriteBatch) : Screen {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
camera.setToOrtho(true, AppLoader.screenW.toFloat(), AppLoader.screenH.toFloat())
|
camera.setToOrtho(true, AppLoader.screenWf, AppLoader.screenHf)
|
||||||
batch.projectionMatrix = camera.combined
|
batch.projectionMatrix = camera.combined
|
||||||
batch.inUse {
|
batch.inUse {
|
||||||
|
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ class TitleScreen(batch: SpriteBatch) : IngameInstance(batch) {
|
|||||||
|
|
||||||
// todo register titlescreen as the ingame, similar in a way that the buildingmaker did
|
// todo register titlescreen as the ingame, similar in a way that the buildingmaker did
|
||||||
|
|
||||||
var camera = OrthographicCamera(AppLoader.screenW.toFloat(), AppLoader.screenH.toFloat())
|
var camera = OrthographicCamera(AppLoader.screenWf, AppLoader.screenHf)
|
||||||
|
|
||||||
|
|
||||||
// invert Y
|
// invert Y
|
||||||
@@ -235,7 +235,7 @@ class TitleScreen(batch: SpriteBatch) : IngameInstance(batch) {
|
|||||||
Gdx.graphics.setTitle(TerrarumIngame.getCanonicalTitle())
|
Gdx.graphics.setTitle(TerrarumIngame.getCanonicalTitle())
|
||||||
|
|
||||||
|
|
||||||
//camera.setToOrtho(true, AppLoader.screenW.toFloat(), AppLoader.screenH.toFloat())
|
//camera.setToOrtho(true, AppLoader.screenWf, AppLoader.screenHf)
|
||||||
|
|
||||||
// render world
|
// render world
|
||||||
gdxClearAndSetBlend(.64f, .754f, .84f, 1f)
|
gdxClearAndSetBlend(.64f, .754f, .84f, 1f)
|
||||||
|
|||||||
@@ -30,8 +30,8 @@ object BlockStats {
|
|||||||
val player = (Terrarum.ingame!! as TerrarumIngame).actorNowPlaying
|
val player = (Terrarum.ingame!! as TerrarumIngame).actorNowPlaying
|
||||||
if (player == null) return
|
if (player == null) return
|
||||||
|
|
||||||
val renderWidth = FastMath.ceil(AppLoader.screenW.toFloat())
|
val renderWidth = FastMath.ceil(AppLoader.screenWf)
|
||||||
val renderHeight = FastMath.ceil(AppLoader.screenH.toFloat())
|
val renderHeight = FastMath.ceil(AppLoader.screenHf)
|
||||||
|
|
||||||
val noZoomCameraX = Math.round(FastMath.clamp(
|
val noZoomCameraX = Math.round(FastMath.clamp(
|
||||||
player.hitbox.centeredX.toFloat() - renderWidth / 2, TSIZE.toFloat(), map.width * TSIZE - renderWidth - TSIZE.toFloat()))
|
player.hitbox.centeredX.toFloat() - renderWidth / 2, TSIZE.toFloat(), map.width * TSIZE - renderWidth - TSIZE.toFloat()))
|
||||||
|
|||||||
@@ -46,7 +46,6 @@ object IngameRenderer : Disposable {
|
|||||||
|
|
||||||
val shaderBlur: ShaderProgram
|
val shaderBlur: ShaderProgram
|
||||||
val shaderBayer: ShaderProgram
|
val shaderBayer: ShaderProgram
|
||||||
val shaderSkyboxFill: ShaderProgram
|
|
||||||
val shaderBlendGlow: ShaderProgram
|
val shaderBlendGlow: ShaderProgram
|
||||||
val shaderRGBOnly: ShaderProgram
|
val shaderRGBOnly: ShaderProgram
|
||||||
val shaderAtoGrey: ShaderProgram
|
val shaderAtoGrey: ShaderProgram
|
||||||
@@ -91,17 +90,9 @@ object IngameRenderer : Disposable {
|
|||||||
shaderBayer.setUniformf("gcount", 64f)
|
shaderBayer.setUniformf("gcount", 64f)
|
||||||
shaderBayer.setUniformf("bcount", 64f)
|
shaderBayer.setUniformf("bcount", 64f)
|
||||||
shaderBayer.end()
|
shaderBayer.end()
|
||||||
|
|
||||||
shaderSkyboxFill = AppLoader.loadShader("assets/4096.vert", "assets/4096_bayer_skyboxfill.frag")
|
|
||||||
shaderSkyboxFill.begin()
|
|
||||||
shaderSkyboxFill.setUniformf("rcount", 64f)
|
|
||||||
shaderSkyboxFill.setUniformf("gcount", 64f)
|
|
||||||
shaderSkyboxFill.setUniformf("bcount", 64f)
|
|
||||||
shaderSkyboxFill.end()
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
shaderBayer = AppLoader.loadShader("assets/4096.vert", "assets/passthrurgb.frag")
|
shaderBayer = AppLoader.loadShader("assets/4096.vert", "assets/passthrurgb.frag")
|
||||||
shaderSkyboxFill = AppLoader.loadShader("assets/4096.vert", "assets/skyboxfill.frag")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -122,11 +113,6 @@ object IngameRenderer : Disposable {
|
|||||||
Gdx.app.log("shaderBayer", shaderBayer.log)
|
Gdx.app.log("shaderBayer", shaderBayer.log)
|
||||||
exitProcess(1)
|
exitProcess(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!shaderSkyboxFill.isCompiled) {
|
|
||||||
Gdx.app.log("shaderSkyboxFill", shaderSkyboxFill.log)
|
|
||||||
exitProcess(1)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
initialise()
|
initialise()
|
||||||
@@ -229,7 +215,7 @@ object IngameRenderer : Disposable {
|
|||||||
///////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
// draw sky
|
// draw sky
|
||||||
WeatherMixer.render(camera, world)
|
WeatherMixer.render(camera, batch, world)
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
@@ -759,7 +745,6 @@ object IngameRenderer : Disposable {
|
|||||||
|
|
||||||
shaderBlur.dispose()
|
shaderBlur.dispose()
|
||||||
shaderBayer.dispose()
|
shaderBayer.dispose()
|
||||||
shaderSkyboxFill.dispose()
|
|
||||||
shaderBlendGlow.dispose()
|
shaderBlendGlow.dispose()
|
||||||
shaderRGBOnly.dispose()
|
shaderRGBOnly.dispose()
|
||||||
shaderAtoGrey.dispose()
|
shaderAtoGrey.dispose()
|
||||||
|
|||||||
@@ -301,13 +301,13 @@ class UIInventoryFull(
|
|||||||
val gradBottomEnd = AppLoader.screenH - gradTopStart
|
val gradBottomEnd = AppLoader.screenH - gradTopStart
|
||||||
|
|
||||||
shapeRenderer.inUse {
|
shapeRenderer.inUse {
|
||||||
shapeRenderer.rect(0f, gradTopStart, AppLoader.screenW.toFloat(), gradHeight, gradStartCol, gradStartCol, gradEndCol, gradEndCol)
|
shapeRenderer.rect(0f, gradTopStart, AppLoader.screenWf, gradHeight, gradStartCol, gradStartCol, gradEndCol, gradEndCol)
|
||||||
shapeRenderer.rect(0f, gradBottomEnd, AppLoader.screenW.toFloat(), -gradHeight, gradStartCol, gradStartCol, gradEndCol, gradEndCol)
|
shapeRenderer.rect(0f, gradBottomEnd, AppLoader.screenWf, -gradHeight, gradStartCol, gradStartCol, gradEndCol, gradEndCol)
|
||||||
|
|
||||||
shapeRenderer.rect(0f, gradTopStart + gradHeight, AppLoader.screenW.toFloat(), internalHeight - (2 * gradHeight), gradEndCol, gradEndCol, gradEndCol, gradEndCol)
|
shapeRenderer.rect(0f, gradTopStart + gradHeight, AppLoader.screenWf, internalHeight - (2 * gradHeight), gradEndCol, gradEndCol, gradEndCol, gradEndCol)
|
||||||
|
|
||||||
shapeRenderer.rect(0f, 0f, AppLoader.screenW.toFloat(), gradTopStart, gradStartCol, gradStartCol, gradStartCol, gradStartCol)
|
shapeRenderer.rect(0f, 0f, AppLoader.screenWf, gradTopStart, gradStartCol, gradStartCol, gradStartCol, gradStartCol)
|
||||||
shapeRenderer.rect(0f, AppLoader.screenH.toFloat(), AppLoader.screenW.toFloat(), -(AppLoader.screenH.toFloat() - gradBottomEnd), gradStartCol, gradStartCol, gradStartCol, gradStartCol)
|
shapeRenderer.rect(0f, AppLoader.screenHf, AppLoader.screenWf, -(AppLoader.screenHf - gradBottomEnd), gradStartCol, gradStartCol, gradStartCol, gradStartCol)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,10 +2,9 @@ package net.torvald.terrarum.modulebasegame.weather
|
|||||||
|
|
||||||
import com.badlogic.gdx.Gdx
|
import com.badlogic.gdx.Gdx
|
||||||
import com.badlogic.gdx.Input
|
import com.badlogic.gdx.Input
|
||||||
import com.badlogic.gdx.graphics.Camera
|
import com.badlogic.gdx.graphics.*
|
||||||
import com.badlogic.gdx.graphics.Color
|
import com.badlogic.gdx.graphics.g2d.SpriteBatch
|
||||||
import com.badlogic.gdx.graphics.GL20
|
import com.jme3.math.FastMath
|
||||||
import com.badlogic.gdx.graphics.Texture
|
|
||||||
import net.torvald.gdx.graphics.Cvec
|
import net.torvald.gdx.graphics.Cvec
|
||||||
import net.torvald.random.HQRNG
|
import net.torvald.random.HQRNG
|
||||||
import net.torvald.terrarum.*
|
import net.torvald.terrarum.*
|
||||||
@@ -118,10 +117,13 @@ internal object WeatherMixer : RNGConsumer {
|
|||||||
//private val parallaxZeroPos = WorldGenerator.TERRAIN_AVERAGE_HEIGHT * 0.75f // just an arb multiplier (266.66666 -> 200)
|
//private val parallaxZeroPos = WorldGenerator.TERRAIN_AVERAGE_HEIGHT * 0.75f // just an arb multiplier (266.66666 -> 200)
|
||||||
private val parallaxDomainSize = WorldGenerator.TERRAIN_UNDULATION / 2f
|
private val parallaxDomainSize = WorldGenerator.TERRAIN_UNDULATION / 2f
|
||||||
|
|
||||||
|
private val skyboxPixmap = Pixmap(2, 2, Pixmap.Format.RGBA8888)
|
||||||
|
private var skyboxTexture = Texture(skyboxPixmap)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sub-portion of IngameRenderer. You are not supposed to directly deal with this.
|
* Sub-portion of IngameRenderer. You are not supposed to directly deal with this.
|
||||||
*/
|
*/
|
||||||
internal fun render(camera: Camera, world: GameWorld) {
|
internal fun render(camera: Camera, batch: SpriteBatch, world: GameWorld) {
|
||||||
val parallaxZeroPos = (world.height / 3) * 0.75f // just an arb multiplier (266.66666 -> 200)
|
val parallaxZeroPos = (world.height / 3) * 0.75f // just an arb multiplier (266.66666 -> 200)
|
||||||
|
|
||||||
|
|
||||||
@@ -145,16 +147,37 @@ internal object WeatherMixer : RNGConsumer {
|
|||||||
.| = // parallax of -1
|
.| = // parallax of -1
|
||||||
-+ <- 0.0 =
|
-+ <- 0.0 =
|
||||||
*/
|
*/
|
||||||
val parallax: Float = (parallaxZeroPos - WorldCamera.gdxCamY.div(CreateTileAtlas.TILE_SIZE.toFloat())) / parallaxDomainSize
|
val parallax = ((parallaxZeroPos - WorldCamera.gdxCamY.div(CreateTileAtlas.TILE_SIZE.toFloat())) / parallaxDomainSize).coerceIn(-1f, 1f)
|
||||||
|
val parallaxSize = 1f / 3f
|
||||||
|
|
||||||
// draw skybox to provided graphics instance
|
// draw skybox to provided graphics instance
|
||||||
val topCol = getGradientColour(world, skyboxColourMap, 0, timeNow)
|
val colTopmost = getGradientColour(world, skyboxColourMap, 0, timeNow).toGdxColor()
|
||||||
val bottomCol = getGradientColour(world, skyboxColourMap, 1, timeNow)
|
val colBottommost = getGradientColour(world, skyboxColourMap, 1, timeNow).toGdxColor()
|
||||||
|
val colMid = colorMix(colTopmost, colBottommost, 0.5f)
|
||||||
|
|
||||||
|
val colTop = colorMix(colTopmost, colBottommost, (parallax + parallaxSize / 2f) * 2f - 1f)
|
||||||
|
val colBottom = colorMix(colTopmost, colBottommost, (parallax - parallaxSize / 2f) * 2f - 1f)
|
||||||
|
|
||||||
|
// draw using shaperenderer or whatever
|
||||||
|
|
||||||
//Terrarum.textureWhiteSquare.bind(0)
|
//Terrarum.textureWhiteSquare.bind(0)
|
||||||
gdxSetBlendNormal()
|
gdxSetBlendNormal()
|
||||||
|
|
||||||
|
// draw to skybox texture
|
||||||
|
skyboxPixmap.setColor(colTop)
|
||||||
|
skyboxPixmap.drawPixel(0, 0); skyboxPixmap.drawPixel(1, 0)
|
||||||
|
skyboxPixmap.setColor(colBottom)
|
||||||
|
skyboxPixmap.drawPixel(0, 1); skyboxPixmap.drawPixel(1, 1)
|
||||||
|
skyboxTexture.dispose()
|
||||||
|
skyboxTexture = Texture(skyboxPixmap)
|
||||||
|
|
||||||
|
batch.shader = IngameRenderer.shaderBayer
|
||||||
|
batch.inUse {
|
||||||
|
it.draw(skyboxTexture, 0f, 0f, AppLoader.screenWf, AppLoader.screenHf)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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
|
||||||
|
/*
|
||||||
IngameRenderer.shaderSkyboxFill.begin()
|
IngameRenderer.shaderSkyboxFill.begin()
|
||||||
IngameRenderer.shaderSkyboxFill.setUniformMatrix("u_projTrans", camera.combined)
|
IngameRenderer.shaderSkyboxFill.setUniformMatrix("u_projTrans", camera.combined)
|
||||||
IngameRenderer.shaderSkyboxFill.setUniformf("topColor", topCol.r, topCol.g, topCol.b)
|
IngameRenderer.shaderSkyboxFill.setUniformf("topColor", topCol.r, topCol.g, topCol.b)
|
||||||
@@ -164,6 +187,7 @@ internal object WeatherMixer : RNGConsumer {
|
|||||||
IngameRenderer.shaderSkyboxFill.setUniformf("zoomInv", 1f / (Terrarum.ingame?.screenZoom ?: 1f))
|
IngameRenderer.shaderSkyboxFill.setUniformf("zoomInv", 1f / (Terrarum.ingame?.screenZoom ?: 1f))
|
||||||
AppLoader.fullscreenQuad.render(IngameRenderer.shaderSkyboxFill, GL20.GL_TRIANGLES)
|
AppLoader.fullscreenQuad.render(IngameRenderer.shaderSkyboxFill, GL20.GL_TRIANGLES)
|
||||||
IngameRenderer.shaderSkyboxFill.end()
|
IngameRenderer.shaderSkyboxFill.end()
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
Gdx.gl.glActiveTexture(GL20.GL_TEXTURE0) // so that batch that comes next will bind any tex to it
|
Gdx.gl.glActiveTexture(GL20.GL_TEXTURE0) // so that batch that comes next will bind any tex to it
|
||||||
@@ -174,6 +198,15 @@ internal object WeatherMixer : RNGConsumer {
|
|||||||
|
|
||||||
private operator fun Color.times(other: Color) = Color(this.r * other.r, this.g * other.g, this.b * other.b, 1f)
|
private operator fun Color.times(other: Color) = Color(this.r * other.r, this.g * other.g, this.b * other.b, 1f)
|
||||||
|
|
||||||
|
fun colorMix(one: Color, two: Color, scale: Float): Color {
|
||||||
|
return Color(
|
||||||
|
FastMath.interpolateLinear(scale, one.r, two.r),
|
||||||
|
FastMath.interpolateLinear(scale, one.g, two.g),
|
||||||
|
FastMath.interpolateLinear(scale, one.b, two.b),
|
||||||
|
FastMath.interpolateLinear(scale, one.a, two.a)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a GL of specific time
|
* Get a GL of specific time
|
||||||
*/
|
*/
|
||||||
@@ -270,6 +303,11 @@ internal object WeatherMixer : RNGConsumer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun dispose() {
|
fun dispose() {
|
||||||
|
try {
|
||||||
|
skyboxTexture.dispose()
|
||||||
|
}
|
||||||
|
catch (e: Throwable) {}
|
||||||
|
|
||||||
|
skyboxPixmap.dispose()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -307,12 +307,12 @@ abstract class UICanvas(
|
|||||||
).roundInt()
|
).roundInt()
|
||||||
Position.RIGHT -> ui.handler.posX = Movement.fastPullOut(
|
Position.RIGHT -> ui.handler.posX = Movement.fastPullOut(
|
||||||
ui.handler.openCloseCounter / openCloseTime,
|
ui.handler.openCloseCounter / openCloseTime,
|
||||||
AppLoader.screenW.toFloat(),
|
AppLoader.screenWf,
|
||||||
AppLoader.screenW - ui.width.toFloat()
|
AppLoader.screenW - ui.width.toFloat()
|
||||||
).roundInt()
|
).roundInt()
|
||||||
Position.BOTTOM -> ui.handler.posY = Movement.fastPullOut(
|
Position.BOTTOM -> ui.handler.posY = Movement.fastPullOut(
|
||||||
ui.handler.openCloseCounter / openCloseTime,
|
ui.handler.openCloseCounter / openCloseTime,
|
||||||
AppLoader.screenH.toFloat(),
|
AppLoader.screenHf,
|
||||||
AppLoader.screenH - ui.height.toFloat()
|
AppLoader.screenH - ui.height.toFloat()
|
||||||
).roundInt()
|
).roundInt()
|
||||||
}
|
}
|
||||||
@@ -332,12 +332,12 @@ abstract class UICanvas(
|
|||||||
Position.RIGHT -> ui.handler.posX = Movement.fastPullOut(
|
Position.RIGHT -> ui.handler.posX = Movement.fastPullOut(
|
||||||
ui.handler.openCloseCounter / openCloseTime,
|
ui.handler.openCloseCounter / openCloseTime,
|
||||||
AppLoader.screenW - ui.width.toFloat(),
|
AppLoader.screenW - ui.width.toFloat(),
|
||||||
AppLoader.screenW.toFloat()
|
AppLoader.screenWf
|
||||||
).roundInt()
|
).roundInt()
|
||||||
Position.BOTTOM -> ui.handler.posY = Movement.fastPullOut(
|
Position.BOTTOM -> ui.handler.posY = Movement.fastPullOut(
|
||||||
ui.handler.openCloseCounter / openCloseTime,
|
ui.handler.openCloseCounter / openCloseTime,
|
||||||
AppLoader.screenH - ui.height.toFloat(),
|
AppLoader.screenH - ui.height.toFloat(),
|
||||||
AppLoader.screenH.toFloat()
|
AppLoader.screenHf
|
||||||
).roundInt()
|
).roundInt()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -660,8 +660,8 @@ internal object BlocksDrawer {
|
|||||||
var tilesInVertical = -1; private set
|
var tilesInVertical = -1; private set
|
||||||
|
|
||||||
fun resize(screenW: Int, screenH: Int) {
|
fun resize(screenW: Int, screenH: Int) {
|
||||||
tilesInHorizontal = (screenW.toFloat() / TILE_SIZE).ceilInt() + 1
|
tilesInHorizontal = (AppLoader.screenWf / TILE_SIZE).ceilInt() + 1
|
||||||
tilesInVertical = (screenH.toFloat() / TILE_SIZE).ceilInt() + 1
|
tilesInVertical = (AppLoader.screenHf / TILE_SIZE).ceilInt() + 1
|
||||||
|
|
||||||
val oldTH = (oldScreenW.toFloat() / TILE_SIZE).ceilInt() + 1
|
val oldTH = (oldScreenW.toFloat() / TILE_SIZE).ceilInt() + 1
|
||||||
val oldTV = (oldScreenH.toFloat() / TILE_SIZE).ceilInt() + 1
|
val oldTV = (oldScreenH.toFloat() / TILE_SIZE).ceilInt() + 1
|
||||||
@@ -687,9 +687,9 @@ internal object BlocksDrawer {
|
|||||||
|
|
||||||
tilesQuad.setVertices(floatArrayOf( // WARNING! not ususal quads; TexCoords of Y is flipped
|
tilesQuad.setVertices(floatArrayOf( // WARNING! not ususal quads; TexCoords of Y is flipped
|
||||||
0f, 0f, 0f, 1f, 1f, 1f, 1f, 0f, 0f,
|
0f, 0f, 0f, 1f, 1f, 1f, 1f, 0f, 0f,
|
||||||
screenW.toFloat(), 0f, 0f, 1f, 1f, 1f, 1f, 1f, 0f,
|
AppLoader.screenWf, 0f, 0f, 1f, 1f, 1f, 1f, 1f, 0f,
|
||||||
screenW.toFloat(), screenH.toFloat(), 0f, 1f, 1f, 1f, 1f, 1f, 1f,
|
AppLoader.screenWf, AppLoader.screenHf, 0f, 1f, 1f, 1f, 1f, 1f, 1f,
|
||||||
0f, screenH.toFloat(), 0f, 1f, 1f, 1f, 1f, 0f, 1f
|
0f, AppLoader.screenHf, 0f, 1f, 1f, 1f, 1f, 0f, 1f
|
||||||
))
|
))
|
||||||
tilesQuad.setIndices(shortArrayOf(0, 1, 2, 2, 3, 0))
|
tilesQuad.setIndices(shortArrayOf(0, 1, 2, 2, 3, 0))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -756,8 +756,8 @@ object LightmapRenderer {
|
|||||||
|
|
||||||
// copied from BlocksDrawer, duh!
|
// copied from BlocksDrawer, duh!
|
||||||
// FIXME 'lightBuffer' is not zoomable in this way
|
// FIXME 'lightBuffer' is not zoomable in this way
|
||||||
val tilesInHorizontal = (screenW.toFloat() / TILE_SIZE).ceilInt() + 1
|
val tilesInHorizontal = (AppLoader.screenWf / TILE_SIZE).ceilInt() + 1
|
||||||
val tilesInVertical = (screenH.toFloat() / TILE_SIZE).ceilInt() + 1
|
val tilesInVertical = (AppLoader.screenHf / TILE_SIZE).ceilInt() + 1
|
||||||
|
|
||||||
LIGHTMAP_WIDTH = (Terrarum.ingame?.ZOOM_MINIMUM ?: 1f).inv().times(AppLoader.screenW).div(TILE_SIZE).ceil() + overscan_open * 2 + 3
|
LIGHTMAP_WIDTH = (Terrarum.ingame?.ZOOM_MINIMUM ?: 1f).inv().times(AppLoader.screenW).div(TILE_SIZE).ceil() + overscan_open * 2 + 3
|
||||||
LIGHTMAP_HEIGHT = (Terrarum.ingame?.ZOOM_MINIMUM ?: 1f).inv().times(AppLoader.screenH).div(TILE_SIZE).ceil() + overscan_open * 2 + 3
|
LIGHTMAP_HEIGHT = (Terrarum.ingame?.ZOOM_MINIMUM ?: 1f).inv().times(AppLoader.screenH).div(TILE_SIZE).ceil() + overscan_open * 2 + 3
|
||||||
|
|||||||
Reference in New Issue
Block a user