mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-07 20:31:51 +09:00
removing codes for renderorder-to-number relation
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user