working wire cutter (drops no wire)

This commit is contained in:
minjaesong
2021-09-18 21:01:06 +09:00
parent 097689f49f
commit 9e8bd5e4a9
8 changed files with 27 additions and 15 deletions

Binary file not shown.

View File

@@ -3,14 +3,14 @@ package net.torvald.terrarum.gameitem
import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.Color
import com.badlogic.gdx.graphics.g2d.TextureRegion import com.badlogic.gdx.graphics.g2d.TextureRegion
import net.torvald.random.HQRNG import net.torvald.random.HQRNG
import net.torvald.terrarum.Codex
import net.torvald.terrarum.ItemCodex
import net.torvald.terrarum.ItemValue import net.torvald.terrarum.ItemValue
import net.torvald.terrarum.ReferencingRanges.PREFIX_DYNAMICITEM import net.torvald.terrarum.ReferencingRanges.PREFIX_DYNAMICITEM
import net.torvald.terrarum.itemproperties.ItemCodex
import net.torvald.terrarum.itemproperties.Material import net.torvald.terrarum.itemproperties.Material
import net.torvald.terrarum.langpack.Lang import net.torvald.terrarum.langpack.Lang
import net.torvald.terrarum.modulebasegame.gameactors.ActorInventory import net.torvald.terrarum.modulebasegame.gameactors.ActorInventory
import net.torvald.terrarum.modulebasegame.gameactors.Pocketed import net.torvald.terrarum.modulebasegame.gameactors.Pocketed
import net.torvald.terrarum.*
typealias ItemID = String typealias ItemID = String
@@ -210,7 +210,7 @@ abstract class GameItem(val originalID: ItemID) : Comparable<GameItem>, Cloneabl
override fun toString(): String { override fun toString(): String {
return "$dynamicID/$originalID" return "GameItem(dynID:$dynamicID,origID:$originalID)"
} }
override fun hashCode(): Int { override fun hashCode(): Int {

View File

@@ -331,6 +331,11 @@ open class GameWorld() : Disposable {
val wireNode = wirings[blockAddr] val wireNode = wirings[blockAddr]
if (wireNode != null) { if (wireNode != null) {
if (!bypassEvent) {
Terrarum.ingame?.queueWireChangedEvent(tile, true, x, y)
Terrarum.ingame?.modified(LandUtil.LAYER_WIRE, x, y)
}
// figure out wiring graphs // figure out wiring graphs
val matchingNeighbours = WireActor.WIRE_NEARBY.mapIndexed { index, (tx, ty) -> val matchingNeighbours = WireActor.WIRE_NEARBY.mapIndexed { index, (tx, ty) ->
(getAllWiresFrom(x + tx, y + ty)?.contains(tile) == true).toInt() shl index (getAllWiresFrom(x + tx, y + ty)?.contains(tile) == true).toInt() shl index

View File

@@ -1,14 +1,13 @@
package net.torvald.terrarum.modulebasegame.gameactors package net.torvald.terrarum.modulebasegame.gameactors
import net.torvald.terrarum.ItemCodex
import net.torvald.terrarum.Terrarum import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.gameitem.GameItem import net.torvald.terrarum.gameitem.GameItem
import net.torvald.terrarum.gameitem.ItemID import net.torvald.terrarum.gameitem.ItemID
import net.torvald.terrarum.itemproperties.ItemCodex
import net.torvald.terrarum.lock import net.torvald.terrarum.lock
import net.torvald.terrarum.modulebasegame.TerrarumIngame import net.torvald.terrarum.modulebasegame.TerrarumIngame
import java.math.BigInteger import java.math.BigInteger
import java.util.concurrent.locks.ReentrantLock import java.util.concurrent.locks.ReentrantLock
import net.torvald.terrarum.*
/** /**
* Created by minjaesong on 2021-03-16. * Created by minjaesong on 2021-03-16.
@@ -109,10 +108,10 @@ open class FixtureInventory() {
existingItem.qty = newCount existingItem.qty = newCount
} }
else { else {
// unequip must be done before the entry removal
unequipFun(existingItem)
// depleted item; remove entry from inventory // depleted item; remove entry from inventory
itemList.remove(existingItem) itemList.remove(existingItem)
// do additional removal job (e.g. unequipping)
unequipFun(existingItem)
} }
} }
else { else {

View File

@@ -2,10 +2,10 @@ package net.torvald.terrarum.modulebasegame.gameactors
import net.torvald.terrarum.App import net.torvald.terrarum.App
import net.torvald.terrarum.ModMgr import net.torvald.terrarum.ModMgr
import net.torvald.terrarum.WireCodex
import net.torvald.terrarum.gameactors.AVKey import net.torvald.terrarum.gameactors.AVKey
import net.torvald.terrarum.gameactors.faction.FactionFactory import net.torvald.terrarum.gameactors.faction.FactionFactory
import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack
import net.torvald.terrarum.*
/** /**
* Created by minjaesong on 2016-02-03. * Created by minjaesong on 2016-02-03.
@@ -77,7 +77,7 @@ object PlayerBuilderSigrid {
fun fillTestInventory(inventory: ActorInventory) { fun fillTestInventory(inventory: ActorInventory) {
App.tileMaker.tags.forEach { t, _ -> App.tileMaker.tags.forEach { t, _ ->
inventory.add(t, 9995) inventory.add(t, 5)
try { try {
inventory.add("wall@"+t, 9995) // this code will try to add nonexisting wall items, do not get surprised with NPEs inventory.add("wall@"+t, 9995) // this code will try to add nonexisting wall items, do not get surprised with NPEs
} }

View File

@@ -20,9 +20,9 @@ class WireCutterAll(originalID: ItemID) : GameItem(originalID) {
override val originalName = "ITEM_WIRE_CUTTER" override val originalName = "ITEM_WIRE_CUTTER"
override var baseMass = 0.1 override var baseMass = 0.1
override var baseToolSize: Double? = baseMass override var baseToolSize: Double? = baseMass
override var stackable = true override var stackable = false
override var inventoryCategory = Category.TOOL override var inventoryCategory = Category.TOOL
override val isUnique = false override val isUnique = true
override val isDynamic = false override val isDynamic = false
override val material = Material() override val material = Material()
override val itemImage: TextureRegion override val itemImage: TextureRegion
@@ -35,7 +35,7 @@ class WireCutterAll(originalID: ItemID) : GameItem(originalID) {
override fun startPrimaryUse(delta: Float): Boolean { override fun startPrimaryUse(delta: Float): Boolean {
val ingame = Terrarum.ingame!! as TerrarumIngame val ingame = Terrarum.ingame!! as TerrarumIngame
val mouseTile = Point2i(Terrarum.mouseTileX, Terrarum.mouseTileY) val mouseTile = Point2i(Terrarum.mouseTileX, Terrarum.mouseTileY)
val wires = ingame.world.getAllWiresFrom(mouseTile.x, mouseTile.y) val wires = ingame.world.getAllWiresFrom(mouseTile.x, mouseTile.y)?.cloneToList()
wires?.forEach { wires?.forEach {
ingame.world.removeTileWire(mouseTile.x, mouseTile.y, it, false) ingame.world.removeTileWire(mouseTile.x, mouseTile.y, it, false)

View File

@@ -130,6 +130,14 @@ class SortedArrayList<T: Comparable<T>>(initialSize: Int = 10) : MutableCollecti
override inline fun forEach(action: Consumer<in T>?) = arrayList.forEach(action) override inline fun forEach(action: Consumer<in T>?) = arrayList.forEach(action)
inline fun forEachIndexed(action: (Int, T) -> Unit) = arrayList.forEachIndexed(action) inline fun forEachIndexed(action: (Int, T) -> Unit) = arrayList.forEachIndexed(action)
fun cloneToList(): List<T> {
val ret = ArrayList<T>()
forEach {
ret.add(it)
}
return ret
}
inline fun <reified R> map(transformation: (T) -> R) = arrayList.map(transformation) inline fun <reified R> map(transformation: (T) -> R) = arrayList.map(transformation)

Binary file not shown.