proper way of setting quickslot #

Former-commit-id: 5cd21f043def3c7622290df5bf11f0b3f0080d30
This commit is contained in:
Song Minjae
2017-03-28 03:44:43 +09:00
parent cd710de280
commit 48315daa7d
19 changed files with 272 additions and 287 deletions

View File

@@ -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!)
}

View File

@@ -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
}

View File

@@ -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)

View File

@@ -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' */

View File

@@ -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

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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")

View File

@@ -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

View File

@@ -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

View File

@@ -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
/**