WIP removing fluid marker block

see "work_files/todo_platforms.png"
This commit is contained in:
Minjae Song
2018-12-29 17:04:46 +09:00
parent f417ce00dc
commit 59531ea1ba
7 changed files with 42 additions and 40 deletions

View File

@@ -2,12 +2,11 @@
package net.torvald.terrarum.gameworld
import com.badlogic.gdx.graphics.Color
import net.torvald.terrarum.AppLoader.printdbg
import net.torvald.terrarum.blockproperties.Block
import net.torvald.terrarum.realestate.LandUtil
import net.torvald.terrarum.blockproperties.BlockCodex
import net.torvald.terrarum.blockproperties.Fluid
import net.torvald.terrarum.modulebasegame.gameworld.WorldSimulator
import net.torvald.terrarum.realestate.LandUtil
import net.torvald.terrarum.serialise.ReadLayerDataLzma
import org.dyn4j.geometry.Vector2
import kotlin.math.absoluteValue
@@ -367,7 +366,7 @@ open class GameWorld {
val addr = LandUtil.getBlockAddr(this, x, y)
if (fill > WorldSimulator.FLUID_MIN_MASS) {
setTileTerrain(x, y, fluidTypeToBlock(fluidType))
//setTileTerrain(x, y, fluidTypeToBlock(fluidType))
fluidFills[addr] = fill
fluidTypes[addr] = fluidType
}
@@ -377,7 +376,7 @@ open class GameWorld {
// if old tile was fluid
if (BlockCodex[getTileFromTerrain(x, y) ?: Block.STONE].isFluid) {
setTileTerrain(x, y, Block.AIR)
//setTileTerrain(x, y, Block.AIR)
}
}
@@ -403,6 +402,8 @@ open class GameWorld {
}
data class FluidInfo(val type: FluidType, val amount: Float) {
/** test if this fluid should be considered as one */
fun isFluid() = type != Fluid.NULL && amount >= WorldSimulator.FLUID_MIN_MASS
override fun toString() = "Fluid type: ${type.value}, amount: $amount"
}

View File

@@ -42,7 +42,22 @@ open class FixtureBase(val blockBox: BlockBox) :
}
}
data class BlockBox(val collisionType: Int, val width: Int, val height: Int) {
data class BlockBox(var collisionType: Int, var width: Int, var height: Int) {
fun redefine(collisionType: Int, width: Int, height: Int) {
redefine(collisionType)
redefine(width, height)
}
fun redefine(width: Int, height: Int) {
this.width = width
this.height = height
}
fun redefine(collisionType: Int) {
this.collisionType = collisionType
}
companion object {
const val NO_COLLISION = Block.ACTORBLOCK_NO_COLLISION
const val FULL_COLLISION = Block.ACTORBLOCK_FULL_COLLISION

View File

@@ -4,13 +4,15 @@ import com.badlogic.gdx.graphics.Pixmap
import com.badlogic.gdx.graphics.Texture
import com.badlogic.gdx.graphics.g2d.SpriteBatch
import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.gameworld.GameWorld
import net.torvald.terrarum.ceilInt
import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack
/**
* Created by minjaesong on 2017-01-07.
*/
class TapestryObject(pixmap: Pixmap, val artName: String, val artAuthor: String) : FixtureBase(physics = false) {
class TapestryObject(pixmap: Pixmap, val artName: String, val artAuthor: String) :
FixtureBase(BlockBox(BlockBox.NO_COLLISION, 1, 1)) // placeholder blockbox
{
// physics = false only speeds up for ~2 frames with 50 tapestries
@@ -24,6 +26,9 @@ class TapestryObject(pixmap: Pixmap, val artName: String, val artAuthor: String)
setHitboxDimension(texture.width, texture.height, 0, 0)
setPosition(Terrarum.mouseX, Terrarum.mouseY)
// you CAN'T destroy the image
// redefine blockbox
blockBox.redefine(texture.width.div(TILE_SIZEF).ceilInt(), texture.height.div(TILE_SIZEF).ceilInt())
}
override fun update(delta: Float) {

View File

@@ -1,13 +1,13 @@
package net.torvald.terrarum.modulecomputers.virtualcomputer.worldobject
import com.badlogic.gdx.graphics.Color
import net.torvald.terrarum.modulebasegame.gameactors.BlockBox
import net.torvald.terrarum.modulebasegame.gameactors.FixtureBase
import net.torvald.terrarum.gameworld.GameWorld
/**
* Created by minjaesong on 2016-09-08.
*/
class FixtureBasicTerminal(phosphor: Color) : FixtureBase() {
class FixtureBasicTerminal(phosphor: Color) : FixtureBase(BlockBox(BlockBox.ALLOW_MOVE_DOWN, 1, 1)) {
/*val computer = TerrarumComputer(8)
val vt: Terminal = SimpleTextTerminal(phosphor, 80, 25, computer)

View File

@@ -1,12 +1,12 @@
package net.torvald.terrarum.modulecomputers.virtualcomputer.worldobject
import net.torvald.terrarum.modulebasegame.gameactors.BlockBox
import net.torvald.terrarum.modulebasegame.gameactors.FixtureBase
import net.torvald.terrarum.gameworld.GameWorld
/**
* Created by minjaesong on 2016-09-08.
*/
open class FixtureComputerBase : FixtureBase() {
open class FixtureComputerBase : FixtureBase(BlockBox(BlockBox.NO_COLLISION, 1, 1)) {
/** Connected terminal */
var terminal: FixtureBasicTerminal? = null
@@ -18,7 +18,6 @@ open class FixtureComputerBase : FixtureBase() {
actorValue["computerid"] = "none"
collisionFlag = COLLISION_PLATFORM
}
////////////////////////////////////

View File

@@ -400,28 +400,7 @@ internal object BlocksDrawer {
*
* As a consequence, fluids.tga must have the same width as tiles.tga.
*/
private fun GameWorld.FluidInfo.toFluidTile(): Int {
/*
val fluid = world.getFluid(x, y)
if (AppLoader.IS_DEVELOPMENT_BUILD && fluid.type == Fluid.NULL && fluid.amount != 0f) {
throw Error("Illegal fluid at ($x,$y): $fluid")
}
if (fluid.amount >= WorldSimulator.FLUID_MIN_MASS) {
val fluidLevel = fluid.amount.coerceIn(0f,1f).times(PairedMapLayer.RANGE - 1).roundToInt()
val baseTileID = (GameWorld.TILES_SUPPORTED) - fluid.type.abs()
val tileX = fluidLevel + (baseTileID % 16) * PairedMapLayer.RANGE
val tileY = baseTileID / 16
//printdbg(this, "$fluid")
//printdbg(this, "$fluidLevel, $baseTileID, $tileX, $tileY")
writeToBuffer(mode, bufferX, bufferY, tileX, tileY, 0)
}
*/
private fun GameWorld.FluidInfo.toTileInFluidAtlas(): Int {
val fluidNum = this.type.abs()
if (this.amount >= WorldSimulator.FLUID_MIN_MASS) {
@@ -471,7 +450,7 @@ internal object BlocksDrawer {
WALL -> world.getTileFromWall(x, y)
TERRAIN -> world.getTileFromTerrain(x, y)
WIRE -> world.getTileFromWire(x, y)
FLUID -> world.getFluid(x, y).toFluidTile()
FLUID -> world.getFluid(x, y).toTileInFluidAtlas()
else -> throw IllegalArgumentException()
}
@@ -578,16 +557,19 @@ internal object BlocksDrawer {
*/
internal fun getNearbyTilesInfoFluids(x: Int, y: Int): Int {
val nearbyTiles = IntArray(4)
nearbyTiles[NEARBY_TILE_KEY_LEFT] = world.getTileFromTerrain(x - 1, y) ?: Block.NULL
nearbyTiles[NEARBY_TILE_KEY_UP] = world.getTileFromTerrain(x , y - 1) ?: Block.NULL
nearbyTiles[NEARBY_TILE_KEY_RIGHT] = world.getTileFromTerrain(x + 1, y) ?: Block.NULL
nearbyTiles[NEARBY_TILE_KEY_UP] = world.getTileFromTerrain(x , y - 1) ?: Block.NULL
nearbyTiles[NEARBY_TILE_KEY_DOWN] = world.getTileFromTerrain(x , y + 1) ?: Block.NULL
nearbyTiles[NEARBY_TILE_KEY_DOWN] = world.getTileFromTerrain(x , y + 1) ?: Block.NULL
nearbyTiles[NEARBY_TILE_KEY_LEFT] = world.getTileFromTerrain(x - 1, y) ?: Block.NULL
val nearX = intArrayOf(x, x+1, x, x-1)
val nearY = intArrayOf(y-1, y, y+1, y)
// try for
var ret = 0
for (i in 0..3) {
try {
if (!BlockCodex[nearbyTiles[i]].isFluid &&
if (!world.getFluid(nearX[i], nearY[i]).isFluid() && // is not a fluid and...
!BlockCodex[nearbyTiles[i]].isSolid) {
ret += (1 shl i) // add 1, 2, 4, 8 for i = 0, 1, 2, 3
}
@@ -601,7 +583,7 @@ internal object BlocksDrawer {
val upTile = world.getTileFromTerrain(x , y - 1) ?: Block.NULL
return if (ret == 15 || ret == 10)
ret
else if (BlockCodex[upTile].isFluid)
else if (world.getFluid(x, y-1).isFluid())
0
else
1

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB