leak patched I guess

This commit is contained in:
minjaesong
2017-07-23 17:38:57 +09:00
parent b6c3467fe1
commit d421d7964b
38 changed files with 174 additions and 346 deletions

View File

@@ -15,8 +15,18 @@ uniform float gcount = 64.0; // using 64: has less banding and most monitors are
uniform float bcount = 64.0; uniform float bcount = 64.0;
int bayer[7][7] = {
{32,42,10,27,37,5,15},
{1,18,28,45,13,23,40},
{26,36,4,14,31,48,9},
{44,12,22,39,0,17,34},
{20,30,47,8,25,35,3},
{38,6,16,33,43,11,21},
{7,24,41,2,19,29,46}
}; // I kind of accidentally create it...
float bayerSize = 7.0;
int bayer[9][9] = { /*int bayer[9][9] = {
{50,71,2,23,44,56,77,17,29}, {50,71,2,23,44,56,77,17,29},
{72,12,33,45,66,6,18,39,60}, {72,12,33,45,66,6,18,39,60},
{22,43,55,76,16,28,49,70,1}, {22,43,55,76,16,28,49,70,1},
@@ -27,7 +37,7 @@ int bayer[9][9] = {
{78,9,30,51,63,3,24,36,57}, {78,9,30,51,63,3,24,36,57},
{19,40,61,73,13,34,46,67,7} {19,40,61,73,13,34,46,67,7}
}; };
float bayerSize = 9.0; float bayerSize = 9.0;*/

Binary file not shown.

View File

@@ -1,7 +1,7 @@
import net.torvald.terrarum.ModMgr import net.torvald.terrarum.ModMgr
/** /**
* Created by SKYHi14 on 2017-04-26. * Created by minjaesong on 2017-04-26.
*/ */
static void invoke(String module) { static void invoke(String module) {

View File

@@ -4,7 +4,7 @@ import org.jetbrains.annotations.NotNull
import org.jetbrains.annotations.Nullable import org.jetbrains.annotations.Nullable
/** /**
* Created by SKYHi14 on 2017-04-28. * Created by minjaesong on 2017-04-28.
*/ */
static GameItem invoke(int id) { static GameItem invoke(int id) {

View File

@@ -1,6 +1,6 @@
/** /**
* Created by SKYHi14 on 2017-04-26. * Created by minjaesong on 2017-04-26.
*/ */

View File

@@ -5,7 +5,7 @@ import kotlin.experimental.or
/** /**
* https://stackoverflow.com/questions/6162651/half-precision-floating-point-in-java#6162687 * https://stackoverflow.com/questions/6162651/half-precision-floating-point-in-java#6162687
* *
* Created by SKYHi14 on 2017-04-21. * Created by minjaesong on 2017-04-21.
*/ */
typealias Float16Bits = Short typealias Float16Bits = Short

View File

@@ -364,6 +364,7 @@ class Ingame(val batch: SpriteBatch) : Screen {
//uiVitalPrimary, //uiVitalPrimary,
//uiVitalSecondary, //uiVitalSecondary,
//uiVitalItem, //uiVitalItem,
uiPieMenu, uiPieMenu,
uiQuickBar, uiQuickBar,
uiWatchBasic, uiWatchBasic,
@@ -841,7 +842,8 @@ class Ingame(val batch: SpriteBatch) : Screen {
///////////////////////////// /////////////////////////////
// draw some overlays (UI) // // draw some overlays (UI) //
///////////////////////////// /////////////////////////////
uiContainer.forEach { if (it != consoleHandler) it.render(batch, camera) }
uiContainer.forEach { if (it != consoleHandler) it.render(batch, camera) } // FIXME some of the UIs causes memory leak
debugWindow.render(batch, camera) debugWindow.render(batch, camera)
// make sure console draws on top of other UIs // make sure console draws on top of other UIs
@@ -851,167 +853,6 @@ class Ingame(val batch: SpriteBatch) : Screen {
blendNormal() blendNormal()
} }
// ////// //// // //// // //
// // // // // // // //
// //// // // // // // ////
// // // // ////// // //
////// ////// //// // // //// ////
/////////////////////////////
// draw map related stuffs //
/////////////////////////////
/*worldDrawFrameBuffer.inAction {
batch.inUse {
camera.position.set(WorldCamera.x.toFloat(), WorldCamera.y.toFloat(), 0f) // make camara work
camera.update()
batch.projectionMatrix = camera.combined
batch.color = Color.WHITE
batch.fillRect(WorldCamera.x.toFloat(), WorldCamera.y.toFloat(), 16f, 16f)
BlocksDrawer.renderWall(batch)
actorsRenderBehind.forEach { it.drawBody(batch) }
actorsRenderBehind.forEach { it.drawGlow(batch) }
particlesContainer.forEach { it.drawBody(batch) }
particlesContainer.forEach { it.drawGlow(batch) }
BlocksDrawer.renderTerrain(batch)
/////////////////
// draw actors //
/////////////////
actorsRenderMiddle.forEach { it.drawBody(batch) }
actorsRenderMidTop.forEach { it.drawBody(batch) }
player.drawBody(batch)
actorsRenderFront.forEach { it.drawBody(batch) }
// --> Change of blend mode <-- introduced by childs of ActorWithBody //
/////////////////////////////
// draw map related stuffs //
/////////////////////////////
LightmapRenderer.renderLightMap()
BlocksDrawer.renderFront(batch, false)
// --> blendNormal() <-- by BlocksDrawer.renderFront
FeaturesDrawer.render(batch)
FeaturesDrawer.drawEnvOverlay(batch)
if (!KeyToggler.isOn(KEY_LIGHTMAP_RENDER)) blendMul()
else blendNormal()
LightmapRenderer.draw(batch)
//////////////////////
// draw actor glows //
//////////////////////
actorsRenderMiddle.forEach { it.drawGlow(batch) }
actorsRenderMidTop.forEach { it.drawGlow(batch) }
player.drawGlow(batch)
actorsRenderFront.forEach { it.drawGlow(batch) }
// --> blendLightenOnly() <-- introduced by childs of ActorWithBody //
////////////////////////
// debug informations //
////////////////////////
blendNormal()
// draw reference ID if debugWindow is open
if (debugWindow.isVisible) {
actorContainer.forEachIndexed { i, actor ->
if (actor is ActorWithBody) {
batch.color = Color.WHITE
Terrarum.fontSmallNumbers.draw(batch,
actor.referenceID.toString(),
actor.hitbox.startX.toFloat(),
actor.hitbox.canonicalY.toFloat() + 4
)
}
}
}
// debug physics
if (KeyToggler.isOn(Key.F11)) {
actorContainer.forEachIndexed { i, actor ->
if (actor is ActorWithPhysics) {
/*shapeRenderer.inUse(ShapeRenderer.ShapeType.Line) {
shapeRenderer.color = Color(1f, 0f, 1f, 1f)
//shapeRenderer.lineWidth = 1f
shapeRenderer.rect(
actor.hitbox.startX.toFloat(),
actor.hitbox.startY.toFloat(),
actor.hitbox.width.toFloat(),
actor.hitbox.height.toFloat()
)
}*/
// velocity
batch.color = Color.CHARTREUSE//GameFontBase.codeToCol["g"]
Terrarum.fontSmallNumbers.draw(batch,
"${0x7F.toChar()}X ${actor.externalForce.x}",
actor.hitbox.startX.toFloat(),
actor.hitbox.canonicalY.toFloat() + 4 + 8
)
Terrarum.fontSmallNumbers.draw(batch,
"${0x7F.toChar()}Y ${actor.externalForce.y}",
actor.hitbox.startX.toFloat(),
actor.hitbox.canonicalY.toFloat() + 4 + 8 * 2
)
}
}
}
// fluidmap debug
if (KeyToggler.isOn(Key.F4))
WorldSimulator.drawFluidMapDebug(batch)
}
}
/////////////////
// GUI Predraw //
/////////////////
//worldG.flush()
batch.inUse {
val tex = backDrawFrameBuffer.colorBufferTexture // TODO zoom!
batch.draw(tex, 0f, 0f)
}*/
//backG.drawImage(worldDrawFrameBuffer.getScaledCopy(screenZoom), 0f, 0f)
//backG.flush()
/////////////////////
// draw UIs ONLY! //
/////////////////////
/*batch.inUse {
uiContainer.forEach { if (it != consoleHandler) it.render(batch) }
debugWindow.render(batch)
// make sure console draws on top of other UIs
consoleHandler.render(batch)
notifier.render(batch)
}*/
//////////////////
// GUI Postdraw //
//////////////////
//backG.flush()
//gwin.drawImage(backDrawFrameBuffer, 0f, 0f)
// centre marker
/*gwin.color = Color(0x00FFFF)
gwin.lineWidth = 1f
gwin.drawLine(Terrarum.WIDTH / 2f, 0f, Terrarum.WIDTH / 2f, Terrarum.HEIGHT.toFloat())
gwin.drawLine(0f, Terrarum.HEIGHT / 2f, Terrarum.WIDTH.toFloat(), Terrarum.HEIGHT / 2f)*/
} }
fun processBlur(lightmapFboA: FrameBuffer, lightmapFboB: FrameBuffer, mode: Int) { fun processBlur(lightmapFboA: FrameBuffer, lightmapFboB: FrameBuffer, mode: Int) {

View File

@@ -26,7 +26,7 @@ import javax.script.Invocable
* is readily available, ditch that Groovy. * is readily available, ditch that Groovy.
* *
* *
* Created by SKYHi14 on 2017-04-17. * Created by minjaesong on 2017-04-17.
*/ */
object ModMgr { object ModMgr {

View File

@@ -408,20 +408,17 @@ object Terrarum : Game() {
//ingame = Ingame(batch) // jump right into the ingame
//ingame!!.gameLoadInfoPayload = Ingame.NewWorldParameters(8192, 2048, HQRNG().nextLong()) ingame = Ingame(batch)
ingame!!.gameLoadInfoPayload = Ingame.NewWorldParameters(2400, 800, HQRNG().nextLong())
// TODO: create world being used by title screen, and serialise it. ingame!!.gameLoadMode = Ingame.GameLoadMode.CREATE_NEW
//ingame!!.gameLoadInfoPayload = Ingame.NewWorldParameters(2400, 800, HQRNG().nextLong()) LoadScreen.screenToLoad = ingame!!
//ingame!!.gameLoadMode = Ingame.GameLoadMode.CREATE_NEW super.setScreen(LoadScreen)
//LoadScreen.screenToLoad = ingame!!
super.setScreen(TitleScreen(batch)) // title screen
//super.setScreen(LoadScreen) //super.setScreen(TitleScreen(batch))
//super.setScreen(ingame)
} }
internal fun changeScreen(screen: Screen) { internal fun changeScreen(screen: Screen) {
@@ -697,6 +694,8 @@ inline fun FrameBuffer.inAction(camera: OrthographicCamera?, batch: SpriteBatch?
action(this) action(this)
this.end() this.end()
camera?.setToOrtho(true, Terrarum.WIDTH.toFloat(), Terrarum.HEIGHT.toFloat()) camera?.setToOrtho(true, Terrarum.WIDTH.toFloat(), Terrarum.HEIGHT.toFloat())
camera?.update()
batch?.projectionMatrix = camera?.combined
} }
fun Float.round(): Float { fun Float.round(): Float {

View File

@@ -52,16 +52,19 @@ class TitleScreen(val batch: SpriteBatch) : Screen {
private val cameraAI = object : ActorAI { private val cameraAI = object : ActorAI {
private val axisMax = 1f private val axisMax = 1f
private var firstTime = true
override fun update(actor: HumanoidNPC, delta: Float) { override fun update(actor: HumanoidNPC, delta: Float) {
// fuck // fuck
val avSpeed = 0.66 // FIXME camera goes faster when FPS is high val avSpeed = 1.0 // FIXME camera goes faster when FPS is high
actor.actorValue[AVKey.SPEED] = avSpeed actor.actorValue[AVKey.SPEED] = avSpeed
actor.actorValue[AVKey.ACCEL] = avSpeed / 5.0 actor.actorValue[AVKey.ACCEL] = avSpeed / 6.0
// end fuck
val tileSize = FeaturesDrawer.TILE_SIZE.toFloat() val tileSize = FeaturesDrawer.TILE_SIZE.toFloat()
val catmullRomTension = 1f val catmullRomTension = -1f
// pan camera // pan camera
actor.moveRight(axisMax) actor.moveRight(axisMax)
@@ -80,12 +83,16 @@ class TitleScreen(val batch: SpriteBatch) : Screen {
val targetYPos = FastMath.interpolateCatmullRom(u, catmullRomTension, cameraNodes[p0], cameraNodes[p1], cameraNodes[p2], cameraNodes[p3]) val targetYPos = FastMath.interpolateCatmullRom(u, catmullRomTension, cameraNodes[p0], cameraNodes[p1], cameraNodes[p2], cameraNodes[p3])
val yDiff = targetYPos - actor.hitbox.canonicalY val yDiff = targetYPos - actor.hitbox.canonicalY
actor.moveDown(yDiff.bipolarClamp(axisMax.toDouble()).toFloat()) if (!firstTime) {
actor.moveDown(yDiff.bipolarClamp(axisMax.toDouble()).toFloat())
}
else {
actor.hitbox.setPosition(actor.hitbox.canonicalX, targetYPos.toDouble())
firstTime = false
}
println("${actor.hitbox.canonicalX}, ${actor.hitbox.canonicalY}") //println("${actor.hitbox.canonicalX}, ${actor.hitbox.canonicalY}")
//actor.hitbox.setPosition(actor.hitbox.canonicalX, yPos.toDouble())
} }
} }
private lateinit var cameraPlayer: HumanoidNPC private lateinit var cameraPlayer: HumanoidNPC
@@ -107,7 +114,7 @@ class TitleScreen(val batch: SpriteBatch) : Screen {
// construct camera nodes // construct camera nodes
val nodeCount = 150 val nodeCount = 60
cameraNodes = kotlin.FloatArray(nodeCount, { it -> cameraNodes = kotlin.FloatArray(nodeCount, { it ->
val tileXPos = (demoWorld.width.toFloat() * it / nodeCount).floorInt() val tileXPos = (demoWorld.width.toFloat() * it / nodeCount).floorInt()
var travelDownCounter = 0 var travelDownCounter = 0
@@ -123,13 +130,13 @@ class TitleScreen(val batch: SpriteBatch) : Screen {
setHitboxDimension(2, 2, 0, 0) setHitboxDimension(2, 2, 0, 0)
hitbox.setPosition( hitbox.setPosition(
HQRNG().nextInt(demoWorld.width) * FeaturesDrawer.TILE_SIZE.toDouble(), HQRNG().nextInt(demoWorld.width) * FeaturesDrawer.TILE_SIZE.toDouble(),
(demoWorld.height / 3) * 0.75 * FeaturesDrawer.TILE_SIZE.toDouble()//demoWorld.spawnY * FeaturesDrawer.TILE_SIZE.toDouble() 0.0 // placeholder; camera AI will take it over
) )
noClip = true noClip = true
} }
} }
demoWorld.time.timeDelta = 60 demoWorld.time.timeDelta = 150
LightmapRenderer.world = demoWorld LightmapRenderer.world = demoWorld
@@ -164,14 +171,18 @@ class TitleScreen(val batch: SpriteBatch) : Screen {
private var blurWriteBuffer = lightmapFboA private var blurWriteBuffer = lightmapFboA
private var blurReadBuffer = lightmapFboB private var blurReadBuffer = lightmapFboB
private val minimumIntroTime = 2.0f private val minimumIntroTime: Second = 2.0f
private var deltaCounter = 0f private val introUncoverTime: Second = 0.3f
private var showIntroDeltaCounter = 0f
private var introUncoverDeltaCounter = 0f
private var updateDeltaCounter = 0.0
protected val updateRate = 1.0 / Terrarum.TARGET_INTERNAL_FPS
override fun render(delta: Float) { override fun render(delta: Float) {
Gdx.gl.glClearColor(.094f, .094f, .094f, 0f) Gdx.gl.glClearColor(.094f, .094f, .094f, 0f)
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT) Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT)
if (!loadDone || deltaCounter < minimumIntroTime) { if (!loadDone || showIntroDeltaCounter < minimumIntroTime) {
// draw load screen // draw load screen
Terrarum.shaderBayerSkyboxFill.begin() Terrarum.shaderBayerSkyboxFill.begin()
Terrarum.shaderBayerSkyboxFill.setUniformMatrix("u_projTrans", camera.combined) Terrarum.shaderBayerSkyboxFill.setUniformMatrix("u_projTrans", camera.combined)
@@ -195,52 +206,64 @@ class TitleScreen(val batch: SpriteBatch) : Screen {
} }
} }
else { else {
demoWorld.globalLight = WeatherMixer.globalLightNow // async update
demoWorld.updateWorldTime(delta) updateDeltaCounter += delta
WeatherMixer.update(delta, cameraPlayer) while (updateDeltaCounter >= updateRate) {
cameraPlayer.update(delta) updateScreen(delta)
// worldcamera update AFTER cameraplayer in this case; the other way is just an exception for actual ingame SFX updateDeltaCounter -= updateRate
WorldCamera.update(demoWorld, cameraPlayer)
// update UIs //
uiContainer.forEach { it.update(delta) }
if (Terrarum.GLOBAL_RENDER_TIMER % 2 == 1) {
LightmapRenderer.fireRecalculateEvent()
}
// render and blur lightmap
processBlur(LightmapRenderer.DRAW_FOR_RGB)
//camera.setToOrtho(true, Terrarum.WIDTH.toFloat(), Terrarum.HEIGHT.toFloat())
// render world
batch.inUse {
setCameraPosition(0f, 0f)
batch.color = Color.WHITE
batch.shader = null
camera.position.set(WorldCamera.gdxCamX, WorldCamera.gdxCamY, 0f) // make camara work
camera.update()
batch.projectionMatrix = camera.combined
batch.color = Color.WHITE
blendNormal()
renderDemoWorld()
renderMenus()
renderOverlayTexts()
} }
// render? just do it anyway
renderScreen()
} }
deltaCounter += delta showIntroDeltaCounter += delta
}
fun updateScreen(delta: Float) {
demoWorld.globalLight = WeatherMixer.globalLightNow
demoWorld.updateWorldTime(delta)
WeatherMixer.update(delta, cameraPlayer)
cameraPlayer.update(delta)
// worldcamera update AFTER cameraplayer in this case; the other way is just an exception for actual ingame SFX
WorldCamera.update(demoWorld, cameraPlayer)
// update UIs //
uiContainer.forEach { it.update(delta) }
if (Terrarum.GLOBAL_RENDER_TIMER % 2 == 1) {
LightmapRenderer.fireRecalculateEvent()
}
}
fun renderScreen() {
// render and blur lightmap
processBlur(LightmapRenderer.DRAW_FOR_RGB)
//camera.setToOrtho(true, Terrarum.WIDTH.toFloat(), Terrarum.HEIGHT.toFloat())
// render world
batch.inUse {
setCameraPosition(0f, 0f)
batch.color = Color.WHITE
batch.shader = null
camera.position.set(WorldCamera.gdxCamX, WorldCamera.gdxCamY, 0f) // make camara work
camera.update()
batch.projectionMatrix = camera.combined
batch.color = Color.WHITE
blendNormal()
renderDemoWorld()
renderMenus()
renderOverlayTexts()
}
} }
private fun renderDemoWorld() { private fun renderDemoWorld() {

View File

@@ -13,7 +13,7 @@ import net.torvald.terrarum.ui.UIItemTextButton
/*** /***
* Note that the UI will not render if either item or itemImage is null. * Note that the UI will not render if either item or itemImage is null.
* *
* Created by SKYHi14 on 2017-03-16. * Created by minjaesong on 2017-03-16.
*/ */
class UIItemInventoryElem( class UIItemInventoryElem(
parentUI: UIInventory, parentUI: UIInventory,

View File

@@ -3,7 +3,7 @@ package net.torvald.terrarum.console
import net.torvald.terrarum.swingapp.IMStringReader import net.torvald.terrarum.swingapp.IMStringReader
/** /**
* Created by SKYHi14 on 2017-02-05. * Created by minjaesong on 2017-02-05.
*/ */
internal object JavaIMTest : ConsoleCommand { internal object JavaIMTest : ConsoleCommand {

View File

@@ -4,7 +4,7 @@ import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.langpack.Lang import net.torvald.terrarum.langpack.Lang
/** /**
* Created by SKYHi14 on 2017-01-31. * Created by minjaesong on 2017-01-31.
*/ */
internal object KillActor : ConsoleCommand { internal object KillActor : ConsoleCommand {
override fun execute(args: Array<String>) { override fun execute(args: Array<String>) {

View File

@@ -3,7 +3,7 @@ package net.torvald.terrarum.gameactors
import net.torvald.terrarum.KVHashMap import net.torvald.terrarum.KVHashMap
/** /**
* Created by SKYHi14 on 2017-04-28. * Created by minjaesong on 2017-04-28.
*/ */
class ActorValue(val actor: Actor) : KVHashMap() { class ActorValue(val actor: Actor) : KVHashMap() {

View File

@@ -6,7 +6,7 @@ import net.torvald.terrarum.worlddrawer.FeaturesDrawer
import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack
/** /**
* Created by SKYHi14 on 2017-02-10. * Created by minjaesong on 2017-02-10.
*/ */
object PlayerBuilderTestSubject1 { object PlayerBuilderTestSubject1 {
operator fun invoke(): Player { operator fun invoke(): Player {

View File

@@ -13,7 +13,7 @@ import java.io.InputStreamReader
import java.io.Reader import java.io.Reader
/** /**
* Created by SKYHi14 on 2017-02-04. * Created by minjaesong on 2017-02-04.
*/ */
class LuaAIWrapper(private val scriptPath: String) : ActorAI { class LuaAIWrapper(private val scriptPath: String) : ActorAI {

View File

@@ -9,7 +9,7 @@ import net.torvald.terrarum.gameactors.ActorID
* Design goal: keep the inflation rate low, but not negative (Single market) * Design goal: keep the inflation rate low, but not negative (Single market)
* OR, give each faction (establishment) its own economy and watch them prosper/doomed (DF style) * OR, give each faction (establishment) its own economy and watch them prosper/doomed (DF style)
* *
* Created by SKYHi14 on 2017-04-23. * Created by minjaesong on 2017-04-23.
*/ */
class GameEconomy { class GameEconomy {

View File

@@ -6,7 +6,7 @@ import net.torvald.dataclass.Float16Bits
/** /**
* MapLayer that contains raw Float16 values * MapLayer that contains raw Float16 values
* *
* Created by SKYHi14 on 2017-04-21. * Created by minjaesong on 2017-04-21.
*/ */
class MapLayerFloat(val width: Int, val height: Int) : Iterable<Float16Bits> { class MapLayerFloat(val width: Int, val height: Int) : Iterable<Float16Bits> {

View File

@@ -6,7 +6,7 @@ import com.badlogic.gdx.graphics.g2d.GlyphLayout
import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack
/** /**
* Created by SKYHi14 on 2017-03-24. * Created by minjaesong on 2017-03-24.
*/ */
class NewRunes : BitmapFont() { class NewRunes : BitmapFont() {
private val runeSize = 12 private val runeSize = 12

View File

@@ -3,7 +3,7 @@ package net.torvald.terrarum.itemproperties
import net.torvald.terrarum.gameactors.* import net.torvald.terrarum.gameactors.*
/** /**
* Created by SKYHi14 on 2017-04-17. * Created by minjaesong on 2017-04-17.
*/ */
object Calculate { object Calculate {
/** /**

View File

@@ -9,7 +9,7 @@ import org.luaj.vm2.lib.ThreeArgFunction
import org.luaj.vm2.lib.ZeroArgFunction import org.luaj.vm2.lib.ZeroArgFunction
/** /**
* Created by SKYHi14 on 2017-04-16. * Created by minjaesong on 2017-04-16.
*/ */
class ItemEffectsLuaAPI(g: Globals) { class ItemEffectsLuaAPI(g: Globals) {

View File

@@ -22,7 +22,7 @@ import javax.swing.*
* Although admittedly, Korean input does not require this hack, you can just write the Input Method * Although admittedly, Korean input does not require this hack, you can just write the Input Method
* out of Java/Kotlin as the language does not need conversion (jp. Henkan) exists in Chinese and Japanese. * out of Java/Kotlin as the language does not need conversion (jp. Henkan) exists in Chinese and Japanese.
* *
* Created by SKYHi14 on 2017-02-05. * Created by minjaesong on 2017-02-05.
*/ */
class IMStringReader(feedInput: (String) -> Unit, message: String? = null) : JFrame() { class IMStringReader(feedInput: (String) -> Unit, message: String? = null) : JFrame() {

View File

@@ -5,7 +5,7 @@ import net.torvald.terrarum.itemproperties.GameItem
import net.torvald.terrarum.ui.UIVitalMetre import net.torvald.terrarum.ui.UIVitalMetre
/** /**
* Created by SKYHi14 on 2017-04-21. * Created by minjaesong on 2017-04-21.
*/ */
object AmmoMeterProxy { object AmmoMeterProxy {

View File

@@ -4,7 +4,9 @@ import com.badlogic.gdx.Gdx
import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.Color
import com.badlogic.gdx.graphics.Pixmap import com.badlogic.gdx.graphics.Pixmap
import com.badlogic.gdx.graphics.Texture import com.badlogic.gdx.graphics.Texture
import com.badlogic.gdx.graphics.g2d.TextureRegion
import com.badlogic.gdx.graphics.glutils.FrameBuffer import com.badlogic.gdx.graphics.glutils.FrameBuffer
import net.torvald.terrarum.gameactors.ai.toInt
import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack
@@ -15,90 +17,27 @@ import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack
*/ */
object ItemSlotImageBuilder { object ItemSlotImageBuilder {
// FIXME it leaks mem waaaaagh
val colourBlack = Color(0x404040_FF) val colourBlack = Color(0x404040_FF)
val colourWhite = Color(0xC0C0C0_FF.toInt()) val colourWhite = Color(0xC0C0C0_FF.toInt())
private val numberFont = TextureRegionPack( val slotImage = TextureRegionPack(Gdx.files.internal("./assets/graphics/gui/quickbar/item_slot.tga"), 38, 38) // must have same w/h as slotLarge
"./assets/graphics/fonts/numeric_small.tga", 5, 8 val slotLarge = TextureRegionPack(Gdx.files.internal("./assets/graphics/gui/quickbar/item_slot_large.tga"), 38, 38)
)
val slotImage = Pixmap(Gdx.files.internal("./assets/graphics/gui/quickbar/item_slot.tga")) // must have same w/h as slotLarge
val slotLarge = Pixmap(Gdx.files.internal("./assets/graphics/gui/quickbar/item_slot_large.tga"))
private val imageDict = HashMap<ImageDesc, Texture>() private val imageDict = HashMap<Long, Texture>()
fun produce(isBlack: Boolean, number: Int = -1): Texture { fun produce(isBlack: Boolean, number: Int = 10): TextureRegion {
val pixmap = Pixmap(slotImage.width, slotImage.height, Pixmap.Format.RGBA8888) return slotImage.get(number, 0)
val color = if (isBlack) colourBlack else colourWhite
val desc = ImageDesc(color, number, false)
if (imageDict.containsKey(desc))
return imageDict[desc]!!
pixmap.setColor(color)
pixmap.drawPixmap(slotImage, 0, 0)
/*if (number >= 0) {
if (isBlack)
pixmap.setColor(colourWhite)
else
pixmap.setColor(colourBlack)
pixmap.drawPixmap(fontPixmap,
slotImage.width - 10,
slotImage.height - 13
)
}*/
val retTex = Texture(pixmap)
pixmap.dispose()
imageDict.put(desc, retTex)
return retTex
} }
fun produceLarge(isBlack: Boolean, number: Int = -1): Texture { fun produceLarge(isBlack: Boolean, number: Int = 10): TextureRegion {
val pixmap = Pixmap(slotLarge.width, slotLarge.height, Pixmap.Format.RGBA8888) return slotLarge.get(number, 0)
val color = if (isBlack) colourBlack else colourWhite
val desc = ImageDesc(color, number, false)
if (imageDict.containsKey(desc))
return imageDict[desc]!!
pixmap.setColor(color)
pixmap.drawPixmap(slotLarge, 0, 0)
/*if (number >= 0) {
if (isBlack)
pixmap.setColor(colourWhite)
else
pixmap.setColor(colourBlack)
pixmap.drawPixmap(fontPixmap,
slotImage.width - 10,
slotImage.height - 13
)
}*/
val retTex = Texture(pixmap)
pixmap.dispose()
imageDict.put(desc, retTex)
return retTex
} }
private data class ImageDesc(val color: Color, val number: Int, val isLarge: Boolean)
fun dispose() { fun dispose() {
slotImage.dispose() slotImage.dispose()
slotLarge.dispose() slotLarge.dispose()

View File

@@ -3,7 +3,7 @@ package net.torvald.terrarum.ui
import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.graphics.g2d.SpriteBatch
/** /**
* Created by SKYHi14 on 2017-03-13. * Created by minjaesong on 2017-03-13.
*/ */
class NullUI : UICanvas() { class NullUI : UICanvas() {
override var width: Int = 0 override var width: Int = 0

View File

@@ -17,7 +17,7 @@ import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack
import java.util.* import java.util.*
/** /**
* Created by SKYHi14 on 2017-03-13. * Created by minjaesong on 2017-03-13.
*/ */
class UIInventory( class UIInventory(
var actor: Pocketed?, var actor: Pocketed?,

View File

@@ -9,7 +9,7 @@ import com.badlogic.gdx.graphics.g2d.SpriteBatch
/** /**
* Text button. Height of hitbox is extended (double lineHeight, or 40 px) for better clicking * Text button. Height of hitbox is extended (double lineHeight, or 40 px) for better clicking
* *
* Created by SKYHi14 on 2017-03-13. * Created by minjaesong on 2017-03-13.
*/ */
open class UIItemTextButton( open class UIItemTextButton(
parentUI: UICanvas, parentUI: UICanvas,

View File

@@ -12,7 +12,7 @@ import net.torvald.terrarum.inUse
import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack
/** /**
* Created by SKYHi14 on 2017-03-13. * Created by minjaesong on 2017-03-13.
*/ */
class UIItemTextButtonList( class UIItemTextButtonList(
parentUI: UICanvas, parentUI: UICanvas,

View File

@@ -65,7 +65,7 @@ class UIPieMenu : UICanvas() {
else else
ItemSlotImageBuilder.produce(true, i + 1) ItemSlotImageBuilder.produce(true, i + 1)
val slotSize = image.width val slotSize = image.regionWidth
val slotX = slotCentrePoint.x.toFloat() - (slotSize / 2) val slotX = slotCentrePoint.x.toFloat() - (slotSize / 2)
val slotY = slotCentrePoint.y.toFloat() - (slotSize / 2) val slotY = slotCentrePoint.y.toFloat() - (slotSize / 2)

View File

@@ -14,15 +14,15 @@ import net.torvald.terrarum.itemproperties.ItemCodex
*/ */
class UIQuickBar : UICanvas() { class UIQuickBar : UICanvas() {
private val gutter = 8 private val gutter = 8
override var width: Int = (ItemSlotImageBuilder.slotImage.width + gutter) * SLOT_COUNT override var width: Int = (ItemSlotImageBuilder.slotImage.tileW + gutter) * SLOT_COUNT
override var height: Int = ItemSlotImageBuilder.slotImage.height + 4 + Terrarum.fontGame.lineHeight.toInt() override var height: Int = ItemSlotImageBuilder.slotImage.tileH + 4 + Terrarum.fontGame.lineHeight.toInt()
/** /**
* In milliseconds * In milliseconds
*/ */
override var openCloseTime: Second = 0.16f override var openCloseTime: Second = 0.16f
private val startPointX = ItemSlotImageBuilder.slotLarge.width / 2 private val startPointX = ItemSlotImageBuilder.slotLarge.tileW / 2
private val startPointY = ItemSlotImageBuilder.slotLarge.height / 2 private val startPointY = ItemSlotImageBuilder.slotLarge.tileH / 2
private var selection: Int private var selection: Int
get() = Terrarum.ingame!!.player.actorValue.getAsInt(AVKey.__PLAYER_QUICKSLOTSEL) ?: 0 get() = Terrarum.ingame!!.player.actorValue.getAsInt(AVKey.__PLAYER_QUICKSLOTSEL) ?: 0

View File

@@ -3,7 +3,7 @@ package net.torvald.terrarum.ui
import net.torvald.terrarum.gameactors.sqr import net.torvald.terrarum.gameactors.sqr
/** /**
* Created by SKYHi14 on 2017-03-14. * Created by minjaesong on 2017-03-14.
*/ */
object UIUtils { object UIUtils {
fun moveQuick(start: Double, end: Double, timer: Double, duration: Double) = fun moveQuick(start: Double, end: Double, timer: Double, duration: Double) =

View File

@@ -9,7 +9,7 @@ import net.torvald.terrarum.gameactors.ActorHumanoid
import net.torvald.terrarum.gameactors.Second import net.torvald.terrarum.gameactors.Second
/** /**
* Created by SKYHi14 on 2017-03-03. * Created by minjaesong on 2017-03-03.
*/ */
class UIVitalMetre( class UIVitalMetre(
var player: ActorHumanoid, var player: ActorHumanoid,

View File

@@ -6,7 +6,7 @@ import org.luaj.vm2.lib.*
/** /**
* Resolution: 640 x 200, non-square pixels * Resolution: 640 x 200, non-square pixels
* *
* Created by SKYHi14 on 2017-02-08. * Created by minjaesong on 2017-02-08.
*/ */
/*class PeripheralVideoCard(val host: TerrarumComputer, val termW: Int = 80, val termH: Int = 25) : /*class PeripheralVideoCard(val host: TerrarumComputer, val termW: Int = 80, val termH: Int = 25) :
Peripheral("ppu") { Peripheral("ppu") {

View File

@@ -10,7 +10,7 @@ import java.util.*
* Printing text using Term API triggers 'compatibility' mode, where you are limited to 16 colours. * Printing text using Term API triggers 'compatibility' mode, where you are limited to 16 colours.
* Use PPU API for full 64 colours! * Use PPU API for full 64 colours!
* *
* Created by SKYHi14 on 2017-02-08. * Created by minjaesong on 2017-02-08.
*/ */
/*class GraphicsTerminal(private val host: TerrarumComputer) : Terminal { /*class GraphicsTerminal(private val host: TerrarumComputer) : Terminal {
lateinit var videoCard: PeripheralVideoCard lateinit var videoCard: PeripheralVideoCard

View File

@@ -8,7 +8,7 @@ import javax.naming.OperationNotSupportedException
import kotlin.collections.ArrayList import kotlin.collections.ArrayList
/** /**
* Created by SKYHi14 on 2017-04-01. * Created by minjaesong on 2017-04-01.
*/ */
object VDUtil { object VDUtil {
class VDPath() { class VDPath() {

View File

@@ -7,7 +7,7 @@ import java.util.function.Consumer
import java.util.zip.CRC32 import java.util.zip.CRC32
/** /**
* Created by SKYHi14 on 2017-03-31. * Created by minjaesong on 2017-03-31.
*/ */
typealias EntryID = Int typealias EntryID = Int

View File

@@ -105,6 +105,10 @@ object LightmapRenderer {
} }
} }
fun fireRecalculateEventtt() {
}
fun fireRecalculateEvent() { fun fireRecalculateEvent() {
for_x_start = WorldCamera.x / TILE_SIZE - 1 // fix for premature lightmap rendering for_x_start = WorldCamera.x / TILE_SIZE - 1 // fix for premature lightmap rendering
for_y_start = WorldCamera.y / TILE_SIZE - 1 // on topmost/leftmost side for_y_start = WorldCamera.y / TILE_SIZE - 1 // on topmost/leftmost side
@@ -116,7 +120,7 @@ object LightmapRenderer {
* * true: overscanning is limited to 8 tiles in width (overscan_opaque) * * true: overscanning is limited to 8 tiles in width (overscan_opaque)
* * false: overscanning will fully applied to 32 tiles in width (overscan_open) * * false: overscanning will fully applied to 32 tiles in width (overscan_open)
*/ */
val rect_width = for_x_end - for_x_start /*val rect_width = for_x_end - for_x_start
val rect_height_rem_hbars = for_y_end - for_y_start - 2 val rect_height_rem_hbars = for_y_end - for_y_start - 2
val noop_mask = BitSet(2 * (rect_width) + val noop_mask = BitSet(2 * (rect_width) +
2 * (rect_height_rem_hbars)) 2 * (rect_height_rem_hbars))
@@ -182,7 +186,7 @@ object LightmapRenderer {
val isSolid = BlockCodex[tile].isSolid val isSolid = BlockCodex[tile].isSolid
noop_mask.set(i, isSolid) noop_mask.set(i, isSolid)
} }*/
/** /**
* Updating order: * Updating order:
@@ -263,20 +267,32 @@ object LightmapRenderer {
} }
} }
private var ambientAccumulator = Color(0f,0f,0f,0f)
private var lightLevelThis = Color(0f,0f,0f,0f)
private var thisTerrain = 0
private var thisWall = 0
private var thisTileLuminosity = Color(0f,0f,0f,0f)
private var thisTileOpacity = Color(0f,0f,0f,0f)
private var sunLight = Color(0f,0f,0f,0f)
private fun calculate(x: Int, y: Int, pass: Int): Color = calculate(x, y, pass, false) private fun calculate(x: Int, y: Int, pass: Int): Color = calculate(x, y, pass, false)
private fun calculate(x: Int, y: Int, pass: Int, doNotCalculateAmbient: Boolean): Color { private fun calculate(x: Int, y: Int, pass: Int, doNotCalculateAmbient: Boolean): Color {
// O(9n) == O(n) where n is a size of the map // O(9n) == O(n) where n is a size of the map
// TODO devise multithreading on this // TODO devise multithreading on this
var ambientAccumulator = Color(0f,0f,0f,0f) ambientAccumulator = Color(0f,0f,0f,0f)
lightLevelThis = Color(0f,0f,0f,0f)
thisTerrain = world.getTileFromTerrain(x, y) ?: Block.STONE
thisWall = world.getTileFromWall(x, y) ?: Block.STONE
thisTileLuminosity = BlockCodex[thisTerrain].luminosity // already been div by four
thisTileOpacity = BlockCodex[thisTerrain].opacity // already been div by four
sunLight = world.globalLight.cpy().mul(DIV_FLOAT)
var lightLevelThis: Color = Color(0f,0f,0f,0f)
val thisTerrain = world.getTileFromTerrain(x, y)
val thisWall = world.getTileFromWall(x, y)
val thisTileLuminosity = BlockCodex[thisTerrain].luminosity // already been div by four
val thisTileOpacity = BlockCodex[thisTerrain].opacity // already been div by four
val sunLight = world.globalLight.cpy().mul(DIV_FLOAT)
// MIX TILE // MIX TILE
// open air // open air