removing codes for renderorder-to-number relation

This commit is contained in:
minjaesong
2023-10-06 16:20:12 +09:00
parent bfa6cbe2da
commit 22def38cf7
3 changed files with 6 additions and 27 deletions

View File

@@ -10,16 +10,9 @@ object ReferencingRanges {
val WALLS = 65536..131071 // 65 536 walls
val ITEMS_STATIC = 135168..0x0F_FFFF // 913 408 items
val ITEMS_DYNAMIC = 0x10_0000..0x0FFF_FFFF // 267 386 880 pseudo-items
val ACTORS = 0x1000_0000..0x7FFF_FFFF // too much actors
val ACTORS = 0x1000_0000..0x7FFE_FFFF
// Actor IDs are assigned in 256 groups, single actor can have 256 sub-actors
// we're leaving last 65536 entries unassignable so that some special actors would use them
val ACTORS_BEHIND = 0x1000_0000..0x1FFE_FFFF // Rendered behind (e.g. tapestries)
val ACTORS_MIDDLE = 0x2000_0000..0x4FFE_FFFF // Regular actors (e.g. almost all of them)
val ACTORS_MIDTOP = 0x5000_0000..0x5FFE_FFFF // Special (e.g. weapon swung, bullets, dropped item, particles)
val ACTORS_FRONT = 0x6000_0000..0x6FFE_FFFF // Rendered front (e.g. fake tile)
val ACTORS_OVERLAY = 0x7001_0000..0x7FFE_FFFF // Rendered as screen overlay, not affected by light nor environment overlays
// there is a gap between 0x7FFF_0000..0x7FFF_BFFF
// IDs doesn't effect the render order at all, but we're kinda enforcing these ID ranging.
// However, these two wire-related actor will break the rule. But as we want them to render on top of others

View File

@@ -347,13 +347,7 @@ object Terrarum : Disposable {
* override var referenceID: Int = generateUniqueReferenceID()
*/
fun generateUniqueReferenceID(renderOrder: Actor.RenderOrder): ActorID {
fun renderOrderToRange(renderOrder: Actor.RenderOrder) = when (renderOrder) {
Actor.RenderOrder.BEHIND -> Actor.RANGE_BEHIND
Actor.RenderOrder.MIDDLE -> Actor.RANGE_MIDDLE
Actor.RenderOrder.MIDTOP -> Actor.RANGE_MIDTOP
Actor.RenderOrder.FRONT -> Actor.RANGE_FRONT
Actor.RenderOrder.OVERLAY-> Actor.RANGE_OVERLAY
}
// render orders can be changed arbitrarily so the whole "renderorder to actor id" is only there for an initial sorting
fun hasCollision(value: ActorID) =
try {
Terrarum.ingame?.theGameHasActor(value) == true
@@ -364,7 +358,7 @@ object Terrarum : Disposable {
var ret: Int
do {
val range = renderOrderToRange(renderOrder)
val range = ReferencingRanges.ACTORS
val size = range.last - range.first + 1
ret = (HQRNG().nextInt().rem(size) + range.first) and 0x7FFF_FF00 // make room for sub-actors
} while (hasCollision(ret)) // check for collision

View File

@@ -44,21 +44,13 @@ abstract class Actor : Comparable<Actor>, Runnable {
BEHIND, // tapestries, some particles (obstructed by terrain)
MIDDLE, // actors
MIDTOP, // bullets, thrown items
FRONT, // fake tiles
FRONT, // front walls ("blocks" that obstruct actors)
OVERLAY // screen overlay, not affected by lightmap
}
companion object {
val RANGE_BEHIND = ReferencingRanges.ACTORS_BEHIND // 1
val RANGE_MIDDLE = ReferencingRanges.ACTORS_MIDDLE // 3
val RANGE_MIDTOP = ReferencingRanges.ACTORS_MIDTOP // 1
val RANGE_FRONT = ReferencingRanges.ACTORS_FRONT // 0.9375
val RANGE_OVERLAY= ReferencingRanges.ACTORS_OVERLAY // 0.9375
}
abstract fun update(delta: Float)
var actorValue = ActorValue(this) // FIXME cyclic reference on GSON
var actorValue = ActorValue(this)
@Volatile var flagDespawn = false
override fun equals(other: Any?): Boolean {