mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-10 02:24:05 +09:00
physics anomaly at x 0..33? are fixed, other issues (re)introduced
See ActorWBMovable@Line1238
This commit is contained in:
@@ -1218,19 +1218,47 @@ open class ActorWBMovable(renderOrder: RenderOrder, val immobileBody: Boolean =
|
|||||||
//
|
//
|
||||||
// -- Signed, 2017-09-17
|
// -- Signed, 2017-09-17
|
||||||
|
|
||||||
|
// DEAR PAST ME AT 2017-09-23,
|
||||||
|
//
|
||||||
|
// I'm starting to thinking that actually fixing the negative-coord-bug in collision part (you know
|
||||||
|
// it's caused by wrapping the values to the negative part internally, eh?) ought to be actually faster
|
||||||
|
// to resolve this year-old issue
|
||||||
|
//
|
||||||
|
// Or maybe just allow cameraX (left point) to be negative number and fix the renderer (in which whole
|
||||||
|
// tiles shifts to left)?
|
||||||
|
//
|
||||||
|
// It was interesting; 'fmod' in
|
||||||
|
// shader.setUniformi("cameraTranslation", WorldCamera.x % TILE_SIZE, WorldCamera.y % TILE_SIZE) // surprisingly, using 'fmod' instead of '%' doesn't work
|
||||||
|
// broke it, had to use '%';
|
||||||
|
// Also, in the lightmap renderer, I had to add this line when updating for_x_start:
|
||||||
|
// if (for_x_start < 0) for_x_start -= 1
|
||||||
|
// Apparently this also fixes notorious jumping issue because hitbox position is changed (wrapped to
|
||||||
|
// different coord?), which I'm not sure about
|
||||||
|
//
|
||||||
|
// Following issues are still remain/reintroduced:
|
||||||
|
// FIXME while in this "special" zone, leftmost column tiles are duplicated (prob related to < 0 camera)
|
||||||
|
// FIXME there's large grey box at block coord 0,0
|
||||||
|
//
|
||||||
|
// -- Unsigned, 2018-11-20
|
||||||
|
|
||||||
|
|
||||||
// wrap around for X-axis
|
// wrap around for X-axis
|
||||||
val actorMinimumX = Terrarum.HALFW // to make camera's X stay positive
|
//val actorMinimumX = Terrarum.HALFW // to make camera's X stay positive
|
||||||
val actorMaximumX = worldsizePxl + actorMinimumX // to make camera's X stay positive
|
//val actorMaximumX = worldsizePxl + actorMinimumX // to make camera's X stay positive
|
||||||
|
|
||||||
hitbox.setPositionFromPointed(
|
hitbox.setPositionFromPointed(
|
||||||
//clampW(hitbox.canonicalX),
|
if (hitbox.canonicalX >= worldsizePxl) // just wrap normally and allow camera coord to be negative
|
||||||
if (hitbox.canonicalX < actorMinimumX)
|
hitbox.canonicalX - worldsizePxl
|
||||||
|
else if (hitbox.canonicalX < 0)
|
||||||
|
hitbox.canonicalX + worldsizePxl
|
||||||
|
else
|
||||||
|
hitbox.canonicalX, // Fixed ROUNDWORLD impl
|
||||||
|
/*if (hitbox.canonicalX < actorMinimumX)
|
||||||
hitbox.canonicalX + worldsizePxl
|
hitbox.canonicalX + worldsizePxl
|
||||||
else if (hitbox.canonicalX >= actorMaximumX)
|
else if (hitbox.canonicalX >= actorMaximumX)
|
||||||
hitbox.canonicalX - worldsizePxl
|
hitbox.canonicalX - worldsizePxl
|
||||||
else
|
else
|
||||||
hitbox.canonicalX, // ROUNDWORLD impl
|
hitbox.canonicalX, // ROUNDWORLD impl */
|
||||||
clampH(hitbox.canonicalY)
|
clampH(hitbox.canonicalY)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -745,7 +745,7 @@ internal object BlocksDrawer {
|
|||||||
shader.setUniformi("tilemap", 1)
|
shader.setUniformi("tilemap", 1)
|
||||||
shader.setUniformi("tilemapDimension", tilesBuffer.width, tilesBuffer.height)
|
shader.setUniformi("tilemapDimension", tilesBuffer.width, tilesBuffer.height)
|
||||||
shader.setUniformf("tilesInAxes", tilesInHorizontal.toFloat(), tilesInVertical.toFloat())
|
shader.setUniformf("tilesInAxes", tilesInHorizontal.toFloat(), tilesInVertical.toFloat())
|
||||||
shader.setUniformi("cameraTranslation", WorldCamera.x fmod TILE_SIZE, WorldCamera.y fmod TILE_SIZE)
|
shader.setUniformi("cameraTranslation", WorldCamera.x % TILE_SIZE, WorldCamera.y % TILE_SIZE) // surprisingly, using 'fmod' instead of '%' doesn't work
|
||||||
/*shader hard-code*/shader.setUniformi("tilesInAtlas", tileAtlas.horizontalCount, tileAtlas.verticalCount) //depends on the tile atlas
|
/*shader hard-code*/shader.setUniformi("tilesInAtlas", tileAtlas.horizontalCount, tileAtlas.verticalCount) //depends on the tile atlas
|
||||||
/*shader hard-code*/shader.setUniformi("atlasTexSize", tileAtlas.texture.width, tileAtlas.texture.height) //depends on the tile atlas
|
/*shader hard-code*/shader.setUniformi("atlasTexSize", tileAtlas.texture.width, tileAtlas.texture.height) //depends on the tile atlas
|
||||||
tilesQuad.render(shader, GL20.GL_TRIANGLES)
|
tilesQuad.render(shader, GL20.GL_TRIANGLES)
|
||||||
|
|||||||
@@ -178,6 +178,9 @@ object LightmapRenderer {
|
|||||||
for_x_start = WorldCamera.x / TILE_SIZE // fix for premature lightmap rendering
|
for_x_start = WorldCamera.x / TILE_SIZE // fix for premature lightmap rendering
|
||||||
for_y_start = WorldCamera.y / TILE_SIZE // on topmost/leftmost side
|
for_y_start = WorldCamera.y / TILE_SIZE // on topmost/leftmost side
|
||||||
|
|
||||||
|
if (for_x_start < 0) for_x_start -= 1 // to fix that the light shifts 1 tile to the left when WorldCamera < 0
|
||||||
|
//if (for_y_start < 0) for_y_start -= 1 // not needed when we only wrap at x axis
|
||||||
|
|
||||||
for_x_end = for_x_start + WorldCamera.width / TILE_SIZE + 3
|
for_x_end = for_x_start + WorldCamera.width / TILE_SIZE + 3
|
||||||
for_y_end = for_y_start + WorldCamera.height / TILE_SIZE + 2 // same fix as above
|
for_y_end = for_y_start + WorldCamera.height / TILE_SIZE + 2 // same fix as above
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user