mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-18 22:44:04 +09:00
proper way of setting quickslot #
Former-commit-id: 5cd21f043def3c7622290df5bf11f0b3f0080d30
This commit is contained in:
@@ -88,6 +88,7 @@ object AVKey {
|
||||
|
||||
|
||||
const val __PLAYER_QUICKSLOTSEL = "__quickslotselection"
|
||||
/** Item ID; they are supposed to be unique */
|
||||
const val __PLAYER_QSPREFIX = "__qsitem" // __qsitem1 .. __qsitem10
|
||||
/** SYNOPSIS: __qsitem1 .. __qsitem10
|
||||
* contains tem ID; they are supposed to be unique. Indices must be ONE-BASED! */
|
||||
const val __PLAYER_QSPREFIX = "__qsitem" // __qsitem1 .. __qsitem10 (NOT ZERO BASED!)
|
||||
}
|
||||
@@ -7,11 +7,18 @@ import net.torvald.terrarum.itemproperties.ItemCodex
|
||||
import org.newdawn.slick.GameContainer
|
||||
|
||||
/**
|
||||
* @param renderOrder invisible/technical -> ActorOrder.MIDDLE
|
||||
* @param renderOrder invisible/technical must use "Actor.RenderOrder.MIDDLE"
|
||||
*
|
||||
* Created by minjaesong on 15-12-31.
|
||||
*/
|
||||
abstract class Actor(val renderOrder: ActorOrder) : Comparable<Actor>, Runnable {
|
||||
abstract class Actor(val renderOrder: RenderOrder) : Comparable<Actor>, Runnable {
|
||||
|
||||
enum class RenderOrder {
|
||||
BEHIND, // tapestries, some particles (obstructed by terrain)
|
||||
MIDDLE, // actors
|
||||
MIDTOP, // bullets, thrown items
|
||||
FRONT // fake tiles
|
||||
}
|
||||
|
||||
abstract fun update(gc: GameContainer, delta: Int)
|
||||
|
||||
@@ -20,8 +27,8 @@ abstract class Actor(val renderOrder: ActorOrder) : Comparable<Actor>, Runnable
|
||||
* @return Reference ID. (16777216-0x7FFF_FFFF)
|
||||
*/
|
||||
open var referenceID: Int = generateUniqueReferenceID()
|
||||
abstract var actorValue: ActorValue
|
||||
abstract var flagDespawn: Boolean
|
||||
var actorValue = ActorValue()
|
||||
@Volatile var flagDespawn = false
|
||||
|
||||
override fun equals(other: Any?) = referenceID == (other as Actor).referenceID
|
||||
override fun hashCode() = referenceID
|
||||
@@ -40,34 +47,32 @@ abstract class Actor(val renderOrder: ActorOrder) : Comparable<Actor>, Runnable
|
||||
* override var referenceID: Int = generateUniqueReferenceID()
|
||||
*/
|
||||
fun generateUniqueReferenceID(): Int {
|
||||
fun checkForCollision(value: Int) =
|
||||
Terrarum.ingame!!.theGameHasActor(value) ||
|
||||
value < ItemCodex.ITEM_COUNT_MAX ||
|
||||
value < when (renderOrder) {
|
||||
ActorOrder.BEHIND -> ItemCodex.ITEM_COUNT_MAX
|
||||
ActorOrder.MIDDLE -> 0x10000000
|
||||
ActorOrder.MIDTOP -> 0x60000000
|
||||
ActorOrder.FRONT -> 0x70000000
|
||||
} ||
|
||||
value > when (renderOrder) {
|
||||
ActorOrder.BEHIND -> 0x0FFFFFFF
|
||||
ActorOrder.MIDDLE -> 0x5FFFFFFF
|
||||
ActorOrder.MIDTOP -> 0x6FFFFFFF
|
||||
ActorOrder.FRONT -> 0x7FFFFFFF
|
||||
fun hasCollision(value: Int) =
|
||||
try {
|
||||
Terrarum.ingame!!.theGameHasActor(value) ||
|
||||
value < ItemCodex.ITEM_COUNT_MAX ||
|
||||
value < when (renderOrder) {
|
||||
RenderOrder.BEHIND -> ItemCodex.ITEM_COUNT_MAX
|
||||
RenderOrder.MIDDLE -> 0x10000000
|
||||
RenderOrder.MIDTOP -> 0x60000000
|
||||
RenderOrder.FRONT -> 0x70000000
|
||||
} ||
|
||||
value > when (renderOrder) {
|
||||
RenderOrder.BEHIND -> 0x0FFFFFFF
|
||||
RenderOrder.MIDDLE -> 0x5FFFFFFF
|
||||
RenderOrder.MIDTOP -> 0x6FFFFFFF
|
||||
RenderOrder.FRONT -> 0x7FFFFFFF
|
||||
}
|
||||
}
|
||||
catch (gameNotInitialisedException: KotlinNullPointerException) {
|
||||
false
|
||||
}
|
||||
|
||||
var ret: Int
|
||||
do {
|
||||
ret = HQRNG().nextInt().and(0x7FFFFFFF) // set new ID
|
||||
} while (checkForCollision(ret)) // check for collision
|
||||
} while (hasCollision(ret)) // check for collision
|
||||
return ret
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
enum class ActorOrder {
|
||||
BEHIND, // tapestries, some particles (obstructed by terrain)
|
||||
MIDDLE, // actors
|
||||
MIDTOP, // bullets, thrown items
|
||||
FRONT // fake tiles
|
||||
}
|
||||
@@ -4,9 +4,11 @@ import org.newdawn.slick.GameContainer
|
||||
import org.newdawn.slick.Graphics
|
||||
|
||||
/**
|
||||
* Actor with visible body
|
||||
*
|
||||
* Created by minjaesong on 2017-01-21.
|
||||
*/
|
||||
abstract class ActorVisible(renderOrder: ActorOrder) : Actor(renderOrder) {
|
||||
abstract class ActorVisible(renderOrder: RenderOrder) : Actor(renderOrder) {
|
||||
open val hitbox = Hitbox(0.0, 0.0, 0.0, 0.0)
|
||||
override abstract fun update(gc: GameContainer, delta: Int)
|
||||
abstract fun drawBody(g: Graphics)
|
||||
|
||||
@@ -26,11 +26,10 @@ import java.util.*
|
||||
*
|
||||
* Created by minjaesong on 16-01-13.
|
||||
*/
|
||||
open class ActorWithSprite(renderOrder: ActorOrder, val immobileBody: Boolean = false, physics: Boolean = true) : ActorVisible(renderOrder) {
|
||||
open class ActorWithSprite(renderOrder: RenderOrder, val immobileBody: Boolean = false, physics: Boolean = true) : ActorVisible(renderOrder) {
|
||||
|
||||
/** !! ActorValue macros are on the very bottom of the source !! **/
|
||||
|
||||
override var actorValue: ActorValue = ActorValue()
|
||||
|
||||
@Transient internal var sprite: SpriteAnimation? = null
|
||||
@Transient internal var spriteGlow: SpriteAnimation? = null
|
||||
@@ -162,7 +161,6 @@ open class ActorWithSprite(renderOrder: ActorOrder, val immobileBody: Boolean =
|
||||
|
||||
|
||||
@Volatile var grounded = false
|
||||
override @Volatile var flagDespawn = false
|
||||
/** Default to 'true' */
|
||||
var isVisible = true
|
||||
/** Default to 'true' */
|
||||
|
||||
@@ -19,7 +19,7 @@ object CreatureBuilder {
|
||||
*/
|
||||
@Throws(IOException::class, SlickException::class)
|
||||
operator fun invoke(jsonFileName: String): ActorWithSprite {
|
||||
val actor = ActorWithSprite(ActorOrder.MIDDLE)
|
||||
val actor = ActorWithSprite(Actor.RenderOrder.MIDDLE)
|
||||
InjectCreatureRaw(actor.actorValue, jsonFileName)
|
||||
|
||||
return actor
|
||||
|
||||
@@ -9,7 +9,7 @@ import org.newdawn.slick.Graphics
|
||||
/**
|
||||
* Created by minjaesong on 16-03-15.
|
||||
*/
|
||||
class DroppedItem(private val item: InventoryItem) : ActorWithSprite(ActorOrder.MIDTOP) {
|
||||
class DroppedItem(private val item: InventoryItem) : ActorWithSprite(Actor.RenderOrder.MIDTOP) {
|
||||
|
||||
init {
|
||||
if (item.id >= ItemCodex.ITEM_COUNT_MAX)
|
||||
|
||||
@@ -6,7 +6,7 @@ import net.torvald.spriteanimation.SpriteAnimation
|
||||
* Created by minjaesong on 16-06-17.
|
||||
*/
|
||||
open class FixtureBase(physics: Boolean = true) :
|
||||
ActorWithSprite(ActorOrder.BEHIND, immobileBody = true, physics = physics) {
|
||||
ActorWithSprite(Actor.RenderOrder.BEHIND, immobileBody = true, physics = physics) {
|
||||
/**
|
||||
* 0: Open
|
||||
* 1: Blocked
|
||||
|
||||
@@ -11,7 +11,7 @@ import org.newdawn.slick.Input
|
||||
*
|
||||
* Created by minjaesong on 16-10-10.
|
||||
*/
|
||||
open class HistoricalFigure(val born: GameDate, val dead: GameDate? = null, realAirFriction: Boolean = false) : ActorWithSprite(ActorOrder.MIDDLE, realAirFriction) {
|
||||
open class HistoricalFigure(val born: GameDate, val dead: GameDate? = null, realAirFriction: Boolean = false) : ActorWithSprite(Actor.RenderOrder.MIDDLE, realAirFriction) {
|
||||
|
||||
init {
|
||||
this.actorValue["_bornyear"] = born.year
|
||||
|
||||
@@ -15,7 +15,7 @@ import org.newdawn.slick.Image
|
||||
*
|
||||
* Created by minjaesong on 2017-01-20.
|
||||
*/
|
||||
open class ParticleBase(renderOrder: ActorOrder, maxLifeTime: Int? = null) : Runnable {
|
||||
open class ParticleBase(renderOrder: Actor.RenderOrder, maxLifeTime: Int? = null) : Runnable {
|
||||
|
||||
/** Will NOT actually delete from the CircularArray */
|
||||
@Volatile var flagDespawn = false
|
||||
|
||||
@@ -6,7 +6,7 @@ import org.newdawn.slick.Image
|
||||
/**
|
||||
* Created by minjaesong on 2017-01-20.
|
||||
*/
|
||||
class ParticleTestRain(posX: Double, posY: Double) : ParticleBase(ActorOrder.BEHIND, 6000) {
|
||||
class ParticleTestRain(posX: Double, posY: Double) : ParticleBase(Actor.RenderOrder.BEHIND, 6000) {
|
||||
|
||||
init {
|
||||
body = Image("./assets/graphics/weathers/raindrop.tga")
|
||||
|
||||
@@ -10,7 +10,7 @@ import org.newdawn.slick.Graphics
|
||||
/**
|
||||
* Created by minjaesong on 16-03-05.
|
||||
*/
|
||||
class PhysTestBall : ActorWithSprite(ActorOrder.MIDDLE, immobileBody = true) {
|
||||
class PhysTestBall : ActorWithSprite(Actor.RenderOrder.MIDDLE, immobileBody = true) {
|
||||
|
||||
private var color = Color.orange
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ open class ProjectileSimple(
|
||||
private val type: Int,
|
||||
fromPoint: Vector2, // projected coord
|
||||
toPoint: Vector2 // arriving coord
|
||||
) : ActorWithSprite(ActorOrder.MIDTOP), Luminous, Projectile {
|
||||
) : ActorWithSprite(Actor.RenderOrder.MIDTOP), Luminous, Projectile {
|
||||
|
||||
val damage: Int
|
||||
val displayColour: Color
|
||||
|
||||
@@ -3,7 +3,7 @@ package net.torvald.terrarum.gameactors
|
||||
/**
|
||||
* Created by minjaesong on 16-04-26.
|
||||
*/
|
||||
class WeaponSwung(val itemID: Int) : ActorWithSprite(ActorOrder.MIDTOP), Luminous {
|
||||
class WeaponSwung(val itemID: Int) : ActorWithSprite(Actor.RenderOrder.MIDTOP), Luminous {
|
||||
// just let the solver use AABB; it's cheap but works just enough
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user