the entire game will use new smooth delta

This commit is contained in:
minjaesong
2019-01-21 05:22:49 +09:00
parent b027f662ce
commit afba402c6c
12 changed files with 48 additions and 48 deletions

View File

@@ -358,12 +358,14 @@ public class AppLoader implements ApplicationListener {
loadTimer += Gdx.graphics.getRawDeltaTime(); loadTimer += Gdx.graphics.getRawDeltaTime();
if (loadTimer >= showupTime) { if (loadTimer >= showupTime) {
// hand over the scene control to this single class; Terrarum must call
// 'AppLoader.getINSTANCE().screen.render(delta)', this is not redundant at all!
setScreen(Terrarum.INSTANCE); setScreen(Terrarum.INSTANCE);
} }
} }
// draw the screen // draw the screen
else { else {
screen.render(Gdx.graphics.getDeltaTime()); screen.render(((float) getSmoothDelta()));
} }
// nested FBOs are just not a thing in GL! // nested FBOs are just not a thing in GL!

View File

@@ -464,7 +464,7 @@ class Ingame(batch: SpriteBatch) : IngameInstance(batch) {
override fun run() { override fun run() {
var updateTries = 0 var updateTries = 0
while (ingame.updateDeltaCounter >= ingame.updateRate) { while (ingame.updateDeltaCounter >= ingame.updateRate) {
ingame.updateGame(Terrarum.deltaTime) ingame.updateGame(AppLoader.getSmoothDelta().toFloat())
ingame.updateDeltaCounter -= ingame.updateRate ingame.updateDeltaCounter -= ingame.updateRate
updateTries++ updateTries++
@@ -1090,7 +1090,7 @@ class Ingame(batch: SpriteBatch) : IngameInstance(batch) {
} }
playableActorDelegate = newActor playableActorDelegate = newActor
WorldSimulator(player, Terrarum.deltaTime) WorldSimulator(player, AppLoader.getSmoothDelta().toFloat())
} }
private fun changePossession(refid: Int) { private fun changePossession(refid: Int) {
@@ -1107,7 +1107,7 @@ class Ingame(batch: SpriteBatch) : IngameInstance(batch) {
// accept new delegate // accept new delegate
playableActorDelegate = PlayableActorDelegate(getActorByID(refid) as ActorHumanoid) playableActorDelegate = PlayableActorDelegate(getActorByID(refid) as ActorHumanoid)
playableActorDelegate!!.actor.collisionType = ActorWithPhysics.COLLISION_KINEMATIC playableActorDelegate!!.actor.collisionType = ActorWithPhysics.COLLISION_KINEMATIC
WorldSimulator(player, Terrarum.deltaTime) WorldSimulator(player, AppLoader.getSmoothDelta().toFloat())
} }
/** Send message to notifier UI and toggle the UI as opened. */ /** Send message to notifier UI and toggle the UI as opened. */

View File

@@ -212,8 +212,6 @@ object Terrarum : Screen {
val fullscreenQuad = AppLoader.fullscreenQuad val fullscreenQuad = AppLoader.fullscreenQuad
val deltaTime: Float; get() = Gdx.graphics.rawDeltaTime
lateinit var assetManager: AssetManager // TODO lateinit var assetManager: AssetManager // TODO
@@ -413,9 +411,7 @@ object Terrarum : Screen {
override fun render(delta: Float) { override fun render(delta: Float) {
AppLoader.debugTimers["GDX.rawDelta"] = Gdx.graphics.rawDeltaTime.times(1000_000_000f).toLong() AppLoader.debugTimers["GDX.rawDelta"] = Gdx.graphics.rawDeltaTime.times(1000_000_000f).toLong()
AppLoader.debugTimers["GDX.smtDelta"] = AppLoader.getSmoothDelta().times(1000_000_000f).toLong() AppLoader.debugTimers["GDX.smtDelta"] = AppLoader.getSmoothDelta().times(1000_000_000f).toLong()
AppLoader.getINSTANCE().screen.render(deltaTime) AppLoader.getINSTANCE().screen.render(delta)
//GLOBAL_RENDER_TIMER += 1
// moved to AppLoader; global event must be place at the apploader to prevent ACCIDENTAL forgot-to-update type of bug.
} }
override fun pause() { override fun pause() {
@@ -489,7 +485,7 @@ object Terrarum : Screen {
get() = Gdx.input.y get() = Gdx.input.y
/** Bigger than 1.0 */ /** Bigger than 1.0 */
inline val updateRate: Double inline val updateRate: Double
get() = 1.0 / Gdx.graphics.deltaTime get() = 1.0 / AppLoader.getSmoothDelta()
/** Smaller than 1.0 */ /** Smaller than 1.0 */
val renderRate = 1.0 / TARGET_INTERNAL_FPS val renderRate = 1.0 / TARGET_INTERNAL_FPS
val renderRateStr = TARGET_INTERNAL_FPS.toString() val renderRateStr = TARGET_INTERNAL_FPS.toString()

View File

@@ -4,11 +4,12 @@ import com.badlogic.gdx.Gdx
import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.Color
import com.jme3.math.FastMath import com.jme3.math.FastMath
import net.torvald.random.HQRNG import net.torvald.random.HQRNG
import net.torvald.terrarum.Terrarum import net.torvald.terrarum.AppLoader
import net.torvald.terrarum.Second import net.torvald.terrarum.Second
import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.modulebasegame.gameworld.WorldTime import net.torvald.terrarum.modulebasegame.gameworld.WorldTime
import net.torvald.terrarum.worlddrawer.LightmapRenderer
import net.torvald.terrarum.modulebasegame.weather.WeatherMixer import net.torvald.terrarum.modulebasegame.weather.WeatherMixer
import net.torvald.terrarum.worlddrawer.LightmapRenderer
/** /**
* Created by minjaesong on 2016-06-16. * Created by minjaesong on 2016-06-16.
@@ -63,9 +64,9 @@ object BlockPropUtil {
internal fun dynamicLumFuncTickClock() { internal fun dynamicLumFuncTickClock() {
// FPS-time compensation // FPS-time compensation
if (Gdx.graphics.framesPerSecond > 0) { if (Gdx.graphics.framesPerSecond > 0) {
flickerFuncX += Terrarum.deltaTime * 1000f flickerFuncX += AppLoader.getSmoothDelta().toFloat() * 1000f
breathFuncX += Terrarum.deltaTime * 1000f breathFuncX += AppLoader.getSmoothDelta().toFloat() * 1000f
pulsateFuncX += Terrarum.deltaTime * 1000f pulsateFuncX += AppLoader.getSmoothDelta().toFloat() * 1000f
} }
// flicker-related vars // flicker-related vars

View File

@@ -100,6 +100,8 @@ open class ActorWBMovable(renderOrder: RenderOrder, val immobileBody: Boolean =
* When the engine resolves this value, the framerate must be accounted for. E.g.: * When the engine resolves this value, the framerate must be accounted for. E.g.:
* 3.0 is resolved as 3.0 if FPS is 60, but the same value should be resolved as 6.0 if FPS is 30. * 3.0 is resolved as 3.0 if FPS is 60, but the same value should be resolved as 6.0 if FPS is 30.
* v_resolved = v * (60/FPS) or, v * (60 * delta_t) * v_resolved = v * (60/FPS) or, v * (60 * delta_t)
* (Use this code verbatim: '(Terrarum.PHYS_REF_FPS * delta)')
*
* *
* Elevators/Movingwalks/etc.: edit hitbox manually! * Elevators/Movingwalks/etc.: edit hitbox manually!
* *
@@ -271,10 +273,6 @@ open class ActorWBMovable(renderOrder: RenderOrder, val immobileBody: Boolean =
internal var walledBottom = false // UNUSED; only for BasicDebugInfoWindow internal var walledBottom = false // UNUSED; only for BasicDebugInfoWindow
internal var colliding = false internal var colliding = false
protected inline val updateDelta: Float
get() = Terrarum.deltaTime
var isWalkingH = false var isWalkingH = false
var isWalkingV = false var isWalkingV = false
@@ -340,7 +338,7 @@ open class ActorWBMovable(renderOrder: RenderOrder, val immobileBody: Boolean =
inline val feetPosTile: IntArray inline val feetPosTile: IntArray
get() = intArrayOf(hIntTilewiseHitbox.centeredX.floorInt(), hIntTilewiseHitbox.endY.floorInt()) get() = intArrayOf(hIntTilewiseHitbox.centeredX.floorInt(), hIntTilewiseHitbox.endY.floorInt())
override fun run() = update(updateDelta) override fun run() = update(AppLoader.getSmoothDelta().toFloat())
/** /**
* Add vector value to the velocity, in the time unit of single frame. * Add vector value to the velocity, in the time unit of single frame.
@@ -355,18 +353,18 @@ open class ActorWBMovable(renderOrder: RenderOrder, val immobileBody: Boolean =
private val bounceDampenVelThreshold = 0.5 private val bounceDampenVelThreshold = 0.5
override fun update(delta: Float) { override fun update(fdelta: Float) {
if (isUpdate && !flagDespawn) { if (isUpdate && !flagDespawn) {
//val ddelta = Gdx.graphics.rawDeltaTime.toDouble() //val delta = Gdx.graphics.rawDeltaTime.toDouble()
val ddelta = AppLoader.getSmoothDelta() val delta = AppLoader.getSmoothDelta()
//println("${Gdx.graphics.rawDeltaTime.toDouble()}\t${AppLoader.getSmoothDelta()}") //println("${Gdx.graphics.rawDeltaTime.toDouble()}\t${AppLoader.getSmoothDelta()}")
if (!assertPrinted) assertInit() if (!assertPrinted) assertInit()
if (sprite != null) sprite!!.update(delta) if (sprite != null) sprite!!.update(fdelta)
if (spriteGlow != null) spriteGlow!!.update(delta) if (spriteGlow != null) spriteGlow!!.update(fdelta)
// make NoClip work for player // make NoClip work for player
if (true) {//this == Terrarum.ingame!!.actorNowPlaying) { if (true) {//this == Terrarum.ingame!!.actorNowPlaying) {
@@ -391,7 +389,7 @@ open class ActorWBMovable(renderOrder: RenderOrder, val immobileBody: Boolean =
// Actors are subject to the gravity and the buoyancy if they are not levitating // Actors are subject to the gravity and the buoyancy if they are not levitating
if (!isNoSubjectToGrav) { if (!isNoSubjectToGrav) {
applyGravitation(ddelta) applyGravitation(delta)
} }
//applyBuoyancy() //applyBuoyancy()
@@ -412,11 +410,11 @@ open class ActorWBMovable(renderOrder: RenderOrder, val immobileBody: Boolean =
* This body is NON-STATIC and the other body is STATIC * This body is NON-STATIC and the other body is STATIC
*/ */
if (!isNoCollideWorld) { if (!isNoCollideWorld) {
displaceHitbox(ddelta) displaceHitbox(delta)
} }
else { else {
val vecSum = externalForce + (controllerMoveDelta ?: Vector2(0.0, 0.0)) val vecSum = externalForce + (controllerMoveDelta ?: Vector2(0.0, 0.0))
hitbox.translate(vecSum * (Terrarum.PHYS_REF_FPS * ddelta)) hitbox.translate(vecSum * (Terrarum.PHYS_REF_FPS * delta))
} }
////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////
@@ -430,9 +428,9 @@ open class ActorWBMovable(renderOrder: RenderOrder, val immobileBody: Boolean =
// TODO less friction for non-animating objects (make items glide far more on ice) // TODO less friction for non-animating objects (make items glide far more on ice)
// FIXME asymmetry on friction // FIXME asymmetry on friction
setHorizontalFriction() // friction SHOULD use and alter externalForce setHorizontalFriction(delta) // friction SHOULD use and alter externalForce
//if (isNoClip) { // TODO also hanging on the rope, etc. //if (isNoClip) { // TODO also hanging on the rope, etc.
setVerticalFriction() setVerticalFriction(delta)
//} //}
@@ -1073,7 +1071,7 @@ open class ActorWBMovable(renderOrder: RenderOrder, val immobileBody: Boolean =
/** about stopping /** about stopping
* for about get moving, see updateMovementControl */ * for about get moving, see updateMovementControl */
private fun setHorizontalFriction() { private fun setHorizontalFriction(delta: Double) {
val friction = if (isNoClip) val friction = if (isNoClip)
BASE_FRICTION * BlockCodex[Block.STONE].friction.frictionToMult() BASE_FRICTION * BlockCodex[Block.STONE].friction.frictionToMult()
else { else {
@@ -1102,7 +1100,7 @@ open class ActorWBMovable(renderOrder: RenderOrder, val immobileBody: Boolean =
} }
} }
private fun setVerticalFriction() { private fun setVerticalFriction(delta: Double) {
val friction = if (isNoClip) val friction = if (isNoClip)
BASE_FRICTION * BlockCodex[Block.STONE].friction.frictionToMult() BASE_FRICTION * BlockCodex[Block.STONE].friction.frictionToMult()
else else

View File

@@ -131,10 +131,10 @@ class IngameController(val ingame: Ingame) : InputAdapter() {
if (ingame.uiContainer.map { if ((it.isOpening || it.isOpened) && it.mouseUp) 1 else 0 }.sum() == 0) { // no UI on the mouse, right? if (ingame.uiContainer.map { if ((it.isOpening || it.isOpened) && it.mouseUp) 1 else 0 }.sum() == 0) { // no UI on the mouse, right?
if (button == AppLoader.getConfigInt("mouseprimary")) { if (button == AppLoader.getConfigInt("mouseprimary")) {
ingame.worldPrimaryClickEnd(Terrarum.deltaTime) ingame.worldPrimaryClickEnd(AppLoader.getSmoothDelta().toFloat())
} }
if (button == AppLoader.getConfigInt("mousesecondary")) { if (button == AppLoader.getConfigInt("mousesecondary")) {
ingame.worldSecondaryClickEnd(Terrarum.deltaTime) ingame.worldSecondaryClickEnd(AppLoader.getSmoothDelta().toFloat())
} }
} }
} }
@@ -172,10 +172,10 @@ class IngameController(val ingame: Ingame) : InputAdapter() {
if (ingame.uiContainer.map { if ((it.isOpening || it.isOpened) && it.mouseUp) 1 else 0 }.sum() == 0) { // no UI on the mouse, right? if (ingame.uiContainer.map { if ((it.isOpening || it.isOpened) && it.mouseUp) 1 else 0 }.sum() == 0) { // no UI on the mouse, right?
if (button == AppLoader.getConfigInt("mouseprimary")) { if (button == AppLoader.getConfigInt("mouseprimary")) {
ingame.worldPrimaryClickStart(Terrarum.deltaTime) ingame.worldPrimaryClickStart(AppLoader.getSmoothDelta().toFloat())
} }
if (button == AppLoader.getConfigInt("mousesecondary")) { if (button == AppLoader.getConfigInt("mousesecondary")) {
ingame.worldSecondaryClickStart(Terrarum.deltaTime) ingame.worldSecondaryClickStart(AppLoader.getSmoothDelta().toFloat())
} }
} }
} }

View File

@@ -574,7 +574,7 @@ open class Ingame(batch: SpriteBatch) : IngameInstance(batch) {
} }
actorNowPlaying = newActor actorNowPlaying = newActor
//WorldSimulator(actorNowPlaying, Terrarum.deltaTime) //WorldSimulator(actorNowPlaying, AppLoader.getSmoothDelta().toFloat())
} }
private fun changePossession(refid: Int) { private fun changePossession(refid: Int) {

View File

@@ -1,5 +1,6 @@
package net.torvald.terrarum.modulebasegame.gameactors package net.torvald.terrarum.modulebasegame.gameactors
import net.torvald.terrarum.AppLoader
import net.torvald.terrarum.Terrarum import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.blockproperties.BlockCodex import net.torvald.terrarum.blockproperties.BlockCodex
import net.torvald.terrarum.gameactors.AVKey import net.torvald.terrarum.gameactors.AVKey
@@ -210,7 +211,7 @@ class ActorInventory(val actor: Pocketed, var maxCapacity: Int, var capacityMode
actor.avStrength / 1000.0 actor.avStrength / 1000.0
else else
1.0 // TODO variable: scale, strength 1.0 // TODO variable: scale, strength
val swingDmgToFrameDmg = Terrarum.deltaTime.toDouble() / actor.actorValue.getAsDouble(AVKey.ACTION_INTERVAL)!! val swingDmgToFrameDmg = AppLoader.getSmoothDelta().toFloat().toDouble() / actor.actorValue.getAsDouble(AVKey.ACTION_INTERVAL)!!
// damage the item // damage the item
newItem.durability -= (baseDamagePerSwing * swingDmgToFrameDmg).toFloat() newItem.durability -= (baseDamagePerSwing * swingDmgToFrameDmg).toFloat()

View File

@@ -2,6 +2,7 @@ package net.torvald.terrarum.modulebasegame.gameactors
import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.graphics.g2d.SpriteBatch
import com.badlogic.gdx.graphics.g2d.TextureRegion import com.badlogic.gdx.graphics.g2d.TextureRegion
import net.torvald.terrarum.AppLoader
import net.torvald.terrarum.Second import net.torvald.terrarum.Second
import net.torvald.terrarum.Terrarum import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.blockproperties.Block import net.torvald.terrarum.blockproperties.Block
@@ -22,7 +23,7 @@ open class ParticleBase(renderOrder: Actor.RenderOrder, val despawnUponCollision
/** Will NOT actually delete from the CircularArray */ /** Will NOT actually delete from the CircularArray */
@Volatile var flagDespawn = false @Volatile var flagDespawn = false
override fun run() = update(Terrarum.deltaTime) override fun run() = update(AppLoader.getSmoothDelta().toFloat())
var isNoSubjectToGrav = false var isNoSubjectToGrav = false
var dragCoefficient = 3.0 var dragCoefficient = 3.0

View File

@@ -1,6 +1,6 @@
package net.torvald.terrarum.modulebasegame.gameactors package net.torvald.terrarum.modulebasegame.gameactors
import net.torvald.terrarum.Terrarum import net.torvald.terrarum.AppLoader
import net.torvald.terrarum.gameactors.Actor import net.torvald.terrarum.gameactors.Actor
import net.torvald.terrarum.itemproperties.GameItem import net.torvald.terrarum.itemproperties.GameItem
import net.torvald.terrarum.itemproperties.ItemCodex import net.torvald.terrarum.itemproperties.ItemCodex
@@ -28,7 +28,7 @@ interface Pocketed {
} }
inventory.itemEquipped[item.equipPosition] = null inventory.itemEquipped[item.equipPosition] = null
item.effectOnUnequip(Terrarum.deltaTime) item.effectOnUnequip(AppLoader.getSmoothDelta().toFloat())
} }
// no need for equipSlot(Int) // no need for equipSlot(Int)
@@ -50,7 +50,7 @@ interface Pocketed {
if (item.equipPosition >= 0) { if (item.equipPosition >= 0) {
inventory.itemEquipped[item.equipPosition] = item inventory.itemEquipped[item.equipPosition] = item
item.effectWhenEquipped(Terrarum.deltaTime) item.effectWhenEquipped(AppLoader.getSmoothDelta().toFloat())
} }
// else do nothing // else do nothing
} }
@@ -69,13 +69,13 @@ interface Pocketed {
fun consumePrimary(item: GameItem) { fun consumePrimary(item: GameItem) {
if (item.startPrimaryUse(Terrarum.deltaTime)) { if (item.startPrimaryUse(AppLoader.getSmoothDelta().toFloat())) {
inventory.consumeItem(this as Actor, item) // consume on successful inventory.consumeItem(this as Actor, item) // consume on successful
} }
} }
fun consumeSecondary(item: GameItem) { fun consumeSecondary(item: GameItem) {
if (item.startSecondaryUse(Terrarum.deltaTime)) if (item.startSecondaryUse(AppLoader.getSmoothDelta().toFloat()))
inventory.consumeItem(this as Actor, item) // consume on successful inventory.consumeItem(this as Actor, item) // consume on successful
} }
} }

View File

@@ -1,5 +1,6 @@
package net.torvald.terrarum.modulebasegame.gameactors package net.torvald.terrarum.modulebasegame.gameactors
import net.torvald.terrarum.AppLoader
import net.torvald.terrarum.Terrarum import net.torvald.terrarum.Terrarum
/** /**
@@ -9,13 +10,13 @@ class ThreadActorUpdate(val startIndex: Int, val endIndex: Int) : Runnable {
override fun run() { override fun run() {
for (i in startIndex..endIndex) { for (i in startIndex..endIndex) {
val it = Terrarum.ingame!!.actorContainer[i] val it = Terrarum.ingame!!.actorContainer[i]
it.update(Terrarum.deltaTime) it.update(AppLoader.getSmoothDelta().toFloat())
if (it is Pocketed) { if (it is Pocketed) {
it.inventory.forEach { inventoryEntry -> it.inventory.forEach { inventoryEntry ->
inventoryEntry.item.effectWhileInPocket(Terrarum.deltaTime) inventoryEntry.item.effectWhileInPocket(AppLoader.getSmoothDelta().toFloat())
if (it.equipped(inventoryEntry.item)) { if (it.equipped(inventoryEntry.item)) {
inventoryEntry.item.effectWhenEquipped(Terrarum.deltaTime) inventoryEntry.item.effectWhenEquipped(AppLoader.getSmoothDelta().toFloat())
} }
} }
} }

View File

@@ -155,7 +155,7 @@ import org.luaj.vm2.lib.*
private val spriteBuffer = ImageBuffer(VSprite.width * 2, VSprite.height) private val spriteBuffer = ImageBuffer(VSprite.width * 2, VSprite.height)
fun render(g: Graphics) { fun render(g: Graphics) {
cursorBlinkTimer += Terrarum.deltaTime cursorBlinkTimer += AppLoader.getSmoothDelta().toFloat()
if (cursorBlinkTimer > cursorBlinkTime) { if (cursorBlinkTimer > cursorBlinkTime) {
cursorBlinkTimer -= cursorBlinkTime cursorBlinkTimer -= cursorBlinkTime
cursorBlinkOn = !cursorBlinkOn cursorBlinkOn = !cursorBlinkOn