diff --git a/assets/mods/basegame/crafting/items.json b/assets/mods/basegame/crafting/items.json index 8070d4fba..0be3da265 100644 --- a/assets/mods/basegame/crafting/items.json +++ b/assets/mods/basegame/crafting/items.json @@ -11,6 +11,10 @@ "workbench": "", "ingredients": [[2, 1, "item@basegame:112", 1, "$ROCK", 1, "$WOOD"]] /* 1 copper ingot, 1 rock, 1 planks */ }, + "item@basegame:57": { /* signal pushbutton */ + "workbench": "", + "ingredients": [[2, 1, "item@basegame:112", 1, "$ROCK", 1, "item@basegame:113"]] /* 1 copper ingot, 1 rock, 1 iron */ + }, "item@basegame:1048576": { /* wooden bucket */ "workbench": "basiccrafting", "ingredients": [[1, 3, "$WOOD"]] /* 3 planks */ diff --git a/assets/mods/basegame/items/itemid.csv b/assets/mods/basegame/items/itemid.csv index 22baff848..f0f84b0a0 100644 --- a/assets/mods/basegame/items/itemid.csv +++ b/assets/mods/basegame/items/itemid.csv @@ -55,6 +55,7 @@ id;classname;tags 54;net.torvald.terrarum.modulebasegame.gameitems.ItemMechanicalTines;FIXTURE,MUSIC,SIGNAL 55;net.torvald.terrarum.modulebasegame.gameitems.ItemGlowOrb;LIGHT,THROWABLE 56;net.torvald.terrarum.modulebasegame.gameitems.ItemClayBrick; +57;net.torvald.terrarum.modulebasegame.gameitems.ItemLogicSignalPushbutton;FIXTURE,SIGNAL diff --git a/assets/mods/basegame/items/items.tga b/assets/mods/basegame/items/items.tga index 3e5d0a3c4..99aa4d3d0 100644 --- a/assets/mods/basegame/items/items.tga +++ b/assets/mods/basegame/items/items.tga @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:faabfd9b9af70cf352986289d3e487fb720601670d2172caba48bc46d0565256 +oid sha256:8feec26254c144344667b35800a2c6db4dc70703bc2cb8a5cffe7eed5a7912f8 size 2408466 diff --git a/assets/mods/basegame/sprites/fixtures/copper_bulb_emissive.tga b/assets/mods/basegame/sprites/fixtures/copper_bulb_emsv.tga similarity index 100% rename from assets/mods/basegame/sprites/fixtures/copper_bulb_emissive.tga rename to assets/mods/basegame/sprites/fixtures/copper_bulb_emsv.tga diff --git a/assets/mods/basegame/sprites/fixtures/signal_pushbutton.tga b/assets/mods/basegame/sprites/fixtures/signal_pushbutton.tga new file mode 100644 index 000000000..b8f0dc2e5 --- /dev/null +++ b/assets/mods/basegame/sprites/fixtures/signal_pushbutton.tga @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96ab5ca66507feddeae09d9cdb06b02e17129161ccb8b521440e1d8b63a3ae97 +size 2066 diff --git a/assets/mods/basegame/sprites/fixtures/signal_pushbutton_emsv.tga b/assets/mods/basegame/sprites/fixtures/signal_pushbutton_emsv.tga new file mode 100644 index 000000000..2c90b63da --- /dev/null +++ b/assets/mods/basegame/sprites/fixtures/signal_pushbutton_emsv.tga @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ba88bd98ea70ebeda41e23d1e0a19fd180e377e14ab69b58571a14b3eea86c3f +size 2066 diff --git a/src/net/torvald/terrarum/IngameInstance.kt b/src/net/torvald/terrarum/IngameInstance.kt index c3e69e420..7f44223f9 100644 --- a/src/net/torvald/terrarum/IngameInstance.kt +++ b/src/net/torvald/terrarum/IngameInstance.kt @@ -560,7 +560,8 @@ open class IngameInstance(val batch: FlippingSpriteBatch, val isMultiplayer: Boo fun getActorsAt(worldX: Double, worldY: Double): List { val outList = ArrayList() try { - actorsRTree.find(worldX - 0.5, worldY - 0.5, worldX + 0.5, worldY + 0.5, outList) +// actorsRTree.find(worldX - 0.5, worldY - 0.5, worldX + 0.5, worldY + 0.5, outList) + actorsRTree.find(worldX, worldY, worldX, worldY, outList) } catch (e: NullPointerException) {} return outList diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalBulb.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalBulb.kt index f3114df6a..7c70209a8 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalBulb.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalBulb.kt @@ -23,7 +23,7 @@ class FixtureLogicSignalBulb : Electric { init { val itemImage = FixtureItemBase.getItemImageFromSingleImage("basegame", "sprites/fixtures/copper_bulb.tga") - val itemImage2 = FixtureItemBase.getItemImageFromSingleImage("basegame", "sprites/fixtures/copper_bulb_emissive.tga") + val itemImage2 = FixtureItemBase.getItemImageFromSingleImage("basegame", "sprites/fixtures/copper_bulb_emsv.tga") density = 1400.0 setHitboxDimension(TerrarumAppConfiguration.TILE_SIZE, TerrarumAppConfiguration.TILE_SIZE, 0, 1) diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalSwitchManual.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalSwitchManual.kt index 0d0dedb5a..9e563db43 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalSwitchManual.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalSwitchManual.kt @@ -1,6 +1,7 @@ package net.torvald.terrarum.modulebasegame.gameactors import net.torvald.spriteanimation.SheetSpriteAnimation +import net.torvald.terrarum.INGAME import net.torvald.terrarum.TerrarumAppConfiguration import net.torvald.terrarum.gameactors.AVKey import net.torvald.terrarum.langpack.Lang @@ -53,8 +54,10 @@ class FixtureLogicSignalSwitchManual : Electric { super.reload() (sprite as SheetSpriteAnimation).currentFrame = variant + (spriteGlow as SheetSpriteAnimation).currentFrame = variant (sprite as SheetSpriteAnimation).currentRow = state.toInt() + (spriteGlow as SheetSpriteAnimation).currentRow = state.toInt() setWireEmissionAt(0, 0, Vector2(state.toInt().toDouble(), 0.0)) } @@ -63,4 +66,68 @@ class FixtureLogicSignalSwitchManual : Electric { (sprite as SheetSpriteAnimation).currentRow = state.toInt() setWireEmissionAt(0, 0, Vector2(state.toInt().toDouble(), 0.0)) } +} + +/** + * Created by minjaesong on 2024-09-27. + */ +class FixtureLogicSignalPushbutton : Electric { + + @Transient override val spawnNeedsFloor = true + @Transient override val spawnNeedsWall = true + + constructor() : super( + BlockBox(BlockBox.NO_COLLISION, 1, 1), + nameFun = { Lang["ITEM_LOGIC_SIGNAL_PUSHBUTTON"] } + ) + + private var triggeredTime: Long? = null // null = off; number: TIME_T that the button was held down + + private val state: Int + get() = (triggeredTime != null).toInt() + + init { + val itemImage = FixtureItemBase.getItemImageFromSingleImage("basegame", "sprites/fixtures/signal_pushbutton.tga") + val itemImage2 = FixtureItemBase.getItemImageFromSingleImage("basegame", "sprites/fixtures/signal_pushbutton_emsv.tga") + + density = 1400.0 + setHitboxDimension(TerrarumAppConfiguration.TILE_SIZE, TerrarumAppConfiguration.TILE_SIZE, 0, 1) + + makeNewSprite(TextureRegionPack(itemImage.texture, TerrarumAppConfiguration.TILE_SIZE, TerrarumAppConfiguration.TILE_SIZE)).let { + it.setRowsAndFrames(2,1) + it.delays = floatArrayOf(Float.POSITIVE_INFINITY, Float.POSITIVE_INFINITY) + } + makeNewSpriteEmissive(TextureRegionPack(itemImage2.texture, TerrarumAppConfiguration.TILE_SIZE, TerrarumAppConfiguration.TILE_SIZE)).let { + it.setRowsAndFrames(2,1) + it.delays = floatArrayOf(Float.POSITIVE_INFINITY, Float.POSITIVE_INFINITY) + } + + actorValue[AVKey.BASEMASS] = FixtureLogicSignalEmitter.MASS + + + setWireEmitterAt(0, 0, "digital_bit") + } + + override fun updateSignal() { + // decide when to un-trigger + if (INGAME.world.worldTime.TIME_T - (triggeredTime ?: 0L) >= 60) { + triggeredTime = null + } + + (sprite as SheetSpriteAnimation).currentRow = state + (spriteEmissive as SheetSpriteAnimation).currentRow = state + setWireEmissionAt(0, 0, Vector2(state.toDouble(), 0.0)) + } + + override fun reload() { + super.reload() + + (sprite as SheetSpriteAnimation).currentRow = state + (spriteEmissive as SheetSpriteAnimation).currentRow = state + setWireEmissionAt(0, 0, Vector2(state.toDouble(), 0.0)) + } + + override fun onInteract(mx: Double, my: Double) { + triggeredTime = INGAME.world.worldTime.TIME_T + } } \ No newline at end of file diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemLogicSignalSwitchManual.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemLogicSignalSwitchManual.kt index 8ae579bdc..7f60fbb6a 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemLogicSignalSwitchManual.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemLogicSignalSwitchManual.kt @@ -1,6 +1,5 @@ package net.torvald.terrarum.modulebasegame.gameitems -import com.badlogic.gdx.graphics.g2d.TextureRegion import net.torvald.terrarum.CommonResourcePool import net.torvald.terrarum.Terrarum import net.torvald.terrarum.gameactors.ActorWithBody @@ -34,4 +33,32 @@ class ItemLogicSignalSwitchManual(originalID: ItemID) : FixtureItemBase(original (Terrarum.ingame!! as TerrarumIngame).selectedWireRenderClass = "" } +} + +/** + * Created by minjaesong on 2024-09-27. + */ +class ItemLogicSignalPushbutton(originalID: ItemID) : FixtureItemBase(originalID, "net.torvald.terrarum.modulebasegame.gameactors.FixtureLogicSignalPushbutton") { + + override var dynamicID: ItemID = originalID + override var baseMass = FixtureLogicSignalEmitter.MASS + override val canBeDynamic = false + override val materialId = "" + init { + itemImage = CommonResourcePool.getAsItemSheet("basegame.items").get(8, 2) + } + + override var baseToolSize: Double? = baseMass + override var originalName = "ITEM_LOGIC_SIGNAL_PUSHBUTTON" + + override fun effectWhileEquipped(actor: ActorWithBody, delta: Float) { + super.effectWhileEquipped(actor, delta) + (Terrarum.ingame!! as TerrarumIngame).selectedWireRenderClass = "signal" + } + + override fun effectOnUnequip(actor: ActorWithBody) { + super.effectOnUnequip(actor) + (Terrarum.ingame!! as TerrarumIngame).selectedWireRenderClass = "" + } + } \ No newline at end of file diff --git a/src/net/torvald/terrarum/modulebasegame/worldgenerator/Worldgen.kt b/src/net/torvald/terrarum/modulebasegame/worldgenerator/Worldgen.kt index 43c700b60..0141ec3da 100644 --- a/src/net/torvald/terrarum/modulebasegame/worldgenerator/Worldgen.kt +++ b/src/net/torvald/terrarum/modulebasegame/worldgenerator/Worldgen.kt @@ -102,7 +102,6 @@ object Worldgen { Work(Lang["MENU_IO_WORLDGEN_FLOODING_UNDERGROUND"], Aquagen(world, false, groundScalingCached, params.seed, params.terragenParams), listOf("WATER")), Work(Lang["MENU_IO_WORLDGEN_GROWING_MINERALS"], Oregen(world, false, caveAttenuateBiasScaledForOresCache, params.seed, oreRegistry, params.terragenParams), listOf("ORES")), Work(Lang["MENU_IO_WORLDGEN_POSITIONING_ROCKS"], OregenAutotiling(world, false, params.seed, oreTilingModes), listOf("ORES")), - // TODO generate gemstones Work(Lang["MENU_IO_WORLDGEN_PAINTING_GREEN"], Biomegen(world, false, params.seed, params.biomegenParams, biomeMap), listOf("BIOME")), Work(Lang["MENU_IO_WORLDGEN_PAINTING_GREEN"], Treegen(world, true, params.seed, params.terragenParams, params.treegenParams, biomeMap), listOf("TREES")), ).filter(tagFilter) diff --git a/work_files/graphics/items/basegame_items.kra b/work_files/graphics/items/basegame_items.kra index cf6a9b93c..11a25f5cf 100644 --- a/work_files/graphics/items/basegame_items.kra +++ b/work_files/graphics/items/basegame_items.kra @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:154af945243d2046a17a4ec63066c1d13cff5fcb2c99b448f710740002c077b3 -size 1769693 +oid sha256:a6e238743c393404c4dea112605ae7ecc89f331d969b71173a1adfaa13b8325e +size 1780248 diff --git a/work_files/graphics/sprites/fixtures/signal_pushbutton.kra b/work_files/graphics/sprites/fixtures/signal_pushbutton.kra new file mode 100644 index 000000000..b93b65304 --- /dev/null +++ b/work_files/graphics/sprites/fixtures/signal_pushbutton.kra @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1bd1016d9fe15f806c7e2556418446518b83f289f0cfaa737f49c02fb96c8cfb +size 213314