wire pieces will be 'lit' when it receives power (power propagation not implemented)

This commit is contained in:
minjaesong
2021-08-09 17:28:27 +09:00
parent a9f46613a2
commit 1754c619f5
7 changed files with 35 additions and 9 deletions

View File

@@ -2,11 +2,14 @@
"8192";"8192";"WIRE_RED";"signal";"digital_bit";"3";"N/A";"N/A";"net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire";"basegame.items16,1,9"
"8193";"8193";"WIRE_GREEN";"signal";"digital_bit";"3";"N/A";"N/A";"net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire";"basegame.items16,1,10"
"8194";"8194";"WIRE_BLUE";"signal";"digital_bit";"3";"N/A";"N/A";"net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire";"basegame.items16,1,11"
"8195";"8195";"WIRE_BUNDLE";"signal";"digital_3bits";"3";"N/A";"N/A";"net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire";"basegame.items16,1,2"
#"bundlemaker";"bundlemaker";"WIRE_BUNDLEMAKER";"signal";"digital_bit";3;"digital_bit";"digital_3bits";"net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire";"basegame.items16,1,9"
#"8195";"8195";"WIRE_BUNDLE";"signal";"digital_3bits";"3";"N/A";"N/A";"net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire";"basegame.items16,1,2"
# accept: which wiretype (defined elsewhere) the wires acceps. Use comma to separate multiple. N/A for electronic components (aka "not wires")
# inputcount: how many sides are input (outputcount is deduced from the inputcount). N/A for wires
# inputtype: which wiretype it accepts. N/A for wires
# outputtype: which wiretype it emits. N/A for wires
#
# comments
# "digital_3bits" must come right after three wires it bundles
# what's the point of WIRE_BUNDLE when you can overlap as many wires as you want? -- Torvald, 2021-08-09
Can't render this file because it contains an unexpected character in line 6 and column 2.

View File

@@ -156,6 +156,7 @@ object BlockCodex {
prop.nameKey = record.get("name")
prop.id = "$modname:$key"
prop.numericID = key
prop.drop = "$modname:${intVal(record, "drop")}"
prop.shadeColR = floatVal(record, "shdr")

View File

@@ -12,6 +12,7 @@ import net.torvald.terrarum.serialise.toLittle
class BlockProp {
var id: ItemID = ""
var numericID: Int = -1
var nameKey: String = ""

View File

@@ -104,6 +104,7 @@ object WireCodex {
prop.nameKey = record.get("name")
prop.id = "wire@$modname:$key"
prop.numericID = key
prop.renderClass = record.get("renderclass")
prop.accepts = record.get("accept")
prop.inputCount = intVal(record, "inputcount")

View File

@@ -8,6 +8,7 @@ import net.torvald.terrarum.gameitem.ItemID
class WireProp {
var id: ItemID = ""
var numericID: Int = -1
var nameKey: String = ""
var renderClass: String = ""

View File

@@ -1,14 +1,13 @@
package net.torvald.terrarum.gameactors
import com.badlogic.gdx.graphics.g2d.SpriteBatch
import net.torvald.terrarum.AppLoader.printdbg
import net.torvald.terrarum.BlendMode
import net.torvald.terrarum.CommonResourcePool
import net.torvald.terrarum.Point2i
import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE
import net.torvald.terrarum.blockproperties.WireCodex
import net.torvald.terrarum.gameitem.ItemID
import net.torvald.terrarum.gameworld.GameWorld
import net.torvald.terrarum.toInt
/**
* Created by minjaesong on 2021-07-30.
@@ -29,7 +28,7 @@ class WireActor(id: ActorID) : ActorWithBody(RenderOrder.WIRES, PhysProperties.I
setHitboxDimension(2, 2, 0, 0)
}
private var oldWireId = ""
private var wireID = ""
private var worldX = 0
private var worldY = 0
@@ -40,7 +39,7 @@ class WireActor(id: ActorID) : ActorWithBody(RenderOrder.WIRES, PhysProperties.I
fun setWire(itemID: ItemID, worldX: Int, worldY: Int) {
setHitboxDimension(TILE_SIZE, TILE_SIZE, 0, 0)
if (oldWireId != itemID) {
if (wireID != itemID) {
if (sprite == null) {
makeNewSprite(CommonResourcePool.getAsTextureRegionPack(itemID))
sprite!!.delays = floatArrayOf(1f,1f)
@@ -48,7 +47,7 @@ class WireActor(id: ActorID) : ActorWithBody(RenderOrder.WIRES, PhysProperties.I
}
else sprite!!.setSpriteImage(CommonResourcePool.getAsTextureRegionPack(itemID))
oldWireId = itemID
wireID = itemID
}
this.worldX = worldX
this.worldY = worldY
@@ -76,11 +75,24 @@ class WireActor(id: ActorID) : ActorWithBody(RenderOrder.WIRES, PhysProperties.I
}
override fun update(delta: Float) {
}
override fun drawBody(batch: SpriteBatch) {
if (isVisible && sprite != null) {
if (WireCodex[wireID].accepts == "digital_3bits") {
// "digital_3bits" must come right after three wires it bundles
val rootID = wireID.substringBefore(':') + ":"
var row = 0
(WireCodex[wireID].numericID - 3 .. WireCodex[wireID].numericID - 1).forEachIndexed { index, it ->
val itemID = rootID + it
row = row or ((world?.getWireEmitStateOf(worldX, worldY, itemID)?.isNotZero == true).toInt() shl index)
}
sprite?.currentRow = row
}
else {
sprite?.currentRow = (world?.getWireEmitStateOf(worldX, worldY, wireID)?.isNotZero == true).toInt()
}
BlendMode.resolve(drawMode, batch)
drawSpriteInGoodPosition(sprite!!, batch)
}

View File

@@ -536,6 +536,13 @@ class Vector2 {
val isZero: Boolean
get() = Math.abs(this.x) <= Epsilon.E && Math.abs(this.y) <= Epsilon.E
/**
* Returns false if this [Vector2] is the zero [Vector2].
* @return boolean
*/
val isNotZero: Boolean
get() = !isZero
/**
* Negates this [Vector2].
* @return [Vector2] this vector