fixed a bug where actors lightbox won't follow the actor's scale

This commit is contained in:
minjaesong
2022-02-25 14:36:36 +09:00
parent 6d3a577e46
commit dc86de139c
3 changed files with 17 additions and 16 deletions

View File

@@ -16,17 +16,16 @@ internal object SetScale : ConsoleCommand {
override fun execute(args: Array<String>) {
if (args.size == 2 || args.size == 3) {
try {
val player = (Terrarum.ingame!! as TerrarumIngame).actorNowPlaying
if (player == null) return
val player = (Terrarum.ingame!! as TerrarumIngame).actorNowPlaying ?: return
val targetID = if (args.size == 3) args[1].toInt() else player.referenceID
val scale = args[if (args.size == 3) 2 else 1].toDouble()
val targetID = if (args.size == 3) args[2].toInt() else player.referenceID
val scale = args[1].toDouble()
val target = INGAME.getActorByID(targetID)
if (target !is ActorWithBody) {
EchoError("Target is not ActorWBMovable")
EchoError("Target is not ActorWithBody")
}
else {
target.actorValue[AVKey.SCALE] = scale
@@ -41,6 +40,6 @@ internal object SetScale : ConsoleCommand {
}
override fun printUsage() {
Echo("Usage: setscale scale | setscale actorID scale")
Echo("Usage: setscale scale | setscale scale actorID")
}
}

View File

@@ -99,12 +99,14 @@ open class ActorHumanoid : ActorWithBody, Controllable, Pocketed, Factionable, L
* (Use ArrayList for normal circumstances)
*/
override val lightBoxList: List<Lightbox>
get() = arrayOf(Lightbox(Hitbox(2.0, 2.0, hitbox.width - 3, hitbox.height - 3), actorValueColour)).toList() // things are asymmetric!!
get() = arrayOf(Lightbox(Hitbox(2.0, 2.0, baseHitboxW - 3.0, baseHitboxH - 3.0), actorValueColour)).toList() // things are asymmetric!!
// use getter; dimension of the player may change by time.
// scaling of the lightbox is performed on the LightmapRenderer. Getter is still required because of the changing actorValueColour. Lightbox.light cannot be `() -> Cvec` due to performance and serialising issue.
override val shadeBoxList: List<Lightbox>
get() = arrayOf(Lightbox(Hitbox(2.0, 2.0, hitbox.width - 3, hitbox.height - 3), actorValueShade)).toList() // things are asymmetric!!
get() = arrayOf(Lightbox(Hitbox(2.0, 2.0, baseHitboxW - 3.0, baseHitboxH - 3.0), actorValueShade)).toList() // things are asymmetric!!
// use getter; dimension of the player may change by time.
// scaling of the shadebox is performed on the LightmapRenderer. Getter is still required because of the changing actorValueColour. Lightbox.light cannot be `() -> Cvec` due to performance and serialising issue.
@Transient val BASE_DENSITY = 980.0

View File

@@ -348,10 +348,10 @@ object LightmapRenderer {
// put lanterns to the area the luminantBox is occupying
lightBoxCopy.forEach { (lightBox, colour) ->
val lightBoxX = it.hitbox.startX + lightBox.startX
val lightBoxY = it.hitbox.startY + lightBox.startY
val lightBoxW = lightBox.width
val lightBoxH = lightBox.height
val lightBoxX = it.hitbox.startX + (lightBox.startX * it.scale)
val lightBoxY = it.hitbox.startY + (lightBox.startY * it.scale)
val lightBoxW = lightBox.width * it.scale
val lightBoxH = lightBox.height * it.scale
for (y in lightBoxY.div(TILE_SIZE).floorInt()
..lightBoxY.plus(lightBoxH).div(TILE_SIZE).floorInt()) {
for (x in lightBoxX.div(TILE_SIZE).floorInt()
@@ -367,10 +367,10 @@ object LightmapRenderer {
// put shades to the area the luminantBox is occupying
shadeBoxCopy.forEach { (shadeBox, colour) ->
val lightBoxX = it.hitbox.startX + shadeBox.startX
val lightBoxY = it.hitbox.startY + shadeBox.startY
val lightBoxW = shadeBox.width
val lightBoxH = shadeBox.height
val lightBoxX = it.hitbox.startX + (shadeBox.startX * it.scale)
val lightBoxY = it.hitbox.startY + (shadeBox.startY * it.scale)
val lightBoxW = shadeBox.width * it.scale
val lightBoxH = shadeBox.height * it.scale
for (y in lightBoxY.div(TILE_SIZE).floorInt()
..lightBoxY.plus(lightBoxH).div(TILE_SIZE).floorInt()) {
for (x in lightBoxX.div(TILE_SIZE).floorInt()