actor draw issue fixed for real this time

Former-commit-id: 16d315a8df6477748bdb78b567ee1c97ffc2f455
Former-commit-id: 96c8efc59b69c78ae7c861ebd371fc315d3be058
This commit is contained in:
Song Minjae
2017-01-24 03:35:37 +09:00
parent f46991ffbb
commit c1a22a7151

View File

@@ -20,7 +20,6 @@ import org.newdawn.slick.GameContainer
import org.newdawn.slick.Graphics import org.newdawn.slick.Graphics
import org.newdawn.slick.Image import org.newdawn.slick.Image
import java.util.* import java.util.*
import kotlin.reflect.jvm.internal.impl.resolve.constants.DoubleValue
/** /**
* Base class for every actor that has animated sprites. This includes furnishings, paintings, gadgets, etc. * Base class for every actor that has animated sprites. This includes furnishings, paintings, gadgets, etc.
@@ -1012,46 +1011,61 @@ open class ActorWithSprite(renderOrder: ActorOrder, val immobileBody: Boolean =
if (isVisible && spriteGlow != null) { if (isVisible && spriteGlow != null) {
blendLightenOnly() blendLightenOnly()
if (!sprite!!.flippedHorizontal()) { if (!spriteGlow!!.flippedHorizontal()) {
spriteGlow!!.render(g, if (MapCamera.xCentre > leftsidePadding && centrePosPoint.x <= rightsidePadding) {
(hitbox.posX - hitboxTranslateX * scale).toFloat(), // camera center neg, actor center pos
(hitbox.posY + hitboxTranslateY * scale).toFloat(), spriteGlow!!.render(g,
(scale).toFloat() (hitbox.posX - hitboxTranslateX * scale).toFloat() + world.width * TILE_SIZE,
) (hitbox.posY + hitboxTranslateY * scale).toFloat(),
// Q&D fix for Roundworld anomaly (scale).toFloat()
spriteGlow!!.render(g, )
(hitbox.posX - hitboxTranslateX * scale).toFloat() + world.width * TILE_SIZE, }
(hitbox.posY + hitboxTranslateY * scale).toFloat(), else if (MapCamera.xCentre < rightsidePadding && centrePosPoint.x >= leftsidePadding) {
(scale).toFloat() // camera center pos, actor center neg
) spriteGlow!!.render(g,
spriteGlow!!.render(g, (hitbox.posX - hitboxTranslateX * scale).toFloat() - world.width * TILE_SIZE,
(hitbox.posX - hitboxTranslateX * scale).toFloat() - world.width * TILE_SIZE, (hitbox.posY + hitboxTranslateY * scale).toFloat(),
(hitbox.posY + hitboxTranslateY * scale).toFloat(), (scale).toFloat()
(scale).toFloat() )
) }
else {
spriteGlow!!.render(g,
(hitbox.posX - hitboxTranslateX * scale).toFloat(),
(hitbox.posY + hitboxTranslateY * scale).toFloat(),
(scale).toFloat()
)
}
} }
else { else {
spriteGlow!!.render(g, if (MapCamera.xCentre > leftsidePadding && centrePosPoint.x <= rightsidePadding) {
(hitbox.posX - scale).toFloat(), // camera center neg, actor center pos
(hitbox.posY + hitboxTranslateY * scale).toFloat(), spriteGlow!!.render(g,
(scale).toFloat() (hitbox.posX - scale).toFloat() + world.width * TILE_SIZE,
) (hitbox.posY + hitboxTranslateY * scale).toFloat(),
// Q&D fix for Roundworld anomaly (scale).toFloat()
spriteGlow!!.render(g, )
(hitbox.posX - scale).toFloat() + world.width * TILE_SIZE, }
(hitbox.posY + hitboxTranslateY * scale).toFloat(), else if (MapCamera.xCentre < rightsidePadding && centrePosPoint.x >= leftsidePadding) {
(scale).toFloat() // camera center pos, actor center neg
) spriteGlow!!.render(g,
spriteGlow!!.render(g, (hitbox.posX - scale).toFloat() - world.width * TILE_SIZE,
(hitbox.posX - scale).toFloat() - world.width * TILE_SIZE, (hitbox.posY + hitboxTranslateY * scale).toFloat(),
(hitbox.posY + hitboxTranslateY * scale).toFloat(), (scale).toFloat()
(scale).toFloat() )
) }
else {
spriteGlow!!.render(g,
(hitbox.posX - scale).toFloat(),
(hitbox.posY + hitboxTranslateY * scale).toFloat(),
(scale).toFloat()
)
}
} }
} }
} }
private val halfWorldW = world.width.times(TILE_SIZE).ushr(1) val leftsidePadding = world.width.times(TILE_SIZE) - MapCamera.width.ushr(1)
val rightsidePadding = MapCamera.width.ushr(1)
override fun drawBody(g: Graphics) { override fun drawBody(g: Graphics) {
if (isVisible && sprite != null) { if (isVisible && sprite != null) {
@@ -1063,7 +1077,7 @@ open class ActorWithSprite(renderOrder: ActorOrder, val immobileBody: Boolean =
} }
if (!sprite!!.flippedHorizontal()) { if (!sprite!!.flippedHorizontal()) {
if (MapCamera.xCentre > halfWorldW && centrePosPoint.x < halfWorldW) { if (MapCamera.xCentre > leftsidePadding && centrePosPoint.x <= rightsidePadding) {
// camera center neg, actor center pos // camera center neg, actor center pos
sprite!!.render(g, sprite!!.render(g,
(hitbox.posX - hitboxTranslateX * scale).toFloat() + world.width * TILE_SIZE, (hitbox.posX - hitboxTranslateX * scale).toFloat() + world.width * TILE_SIZE,
@@ -1071,7 +1085,7 @@ open class ActorWithSprite(renderOrder: ActorOrder, val immobileBody: Boolean =
(scale).toFloat() (scale).toFloat()
) )
} }
else if (MapCamera.xCentre < halfWorldW && centrePosPoint.x >= halfWorldW) { else if (MapCamera.xCentre < rightsidePadding && centrePosPoint.x >= leftsidePadding) {
// camera center pos, actor center neg // camera center pos, actor center neg
sprite!!.render(g, sprite!!.render(g,
(hitbox.posX - hitboxTranslateX * scale).toFloat() - world.width * TILE_SIZE, (hitbox.posX - hitboxTranslateX * scale).toFloat() - world.width * TILE_SIZE,
@@ -1088,7 +1102,7 @@ open class ActorWithSprite(renderOrder: ActorOrder, val immobileBody: Boolean =
} }
} }
else { else {
if (MapCamera.xCentre > halfWorldW && centrePosPoint.x < halfWorldW) { if (MapCamera.xCentre > leftsidePadding && centrePosPoint.x <= rightsidePadding) {
// camera center neg, actor center pos // camera center neg, actor center pos
sprite!!.render(g, sprite!!.render(g,
(hitbox.posX - scale).toFloat() + world.width * TILE_SIZE, (hitbox.posX - scale).toFloat() + world.width * TILE_SIZE,
@@ -1096,7 +1110,7 @@ open class ActorWithSprite(renderOrder: ActorOrder, val immobileBody: Boolean =
(scale).toFloat() (scale).toFloat()
) )
} }
else if (MapCamera.xCentre < halfWorldW && centrePosPoint.x >= halfWorldW) { else if (MapCamera.xCentre < rightsidePadding && centrePosPoint.x >= leftsidePadding) {
// camera center pos, actor center neg // camera center pos, actor center neg
sprite!!.render(g, sprite!!.render(g,
(hitbox.posX - scale).toFloat() - world.width * TILE_SIZE, (hitbox.posX - scale).toFloat() - world.width * TILE_SIZE,