mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-16 08:36:07 +09:00
now dropped items can produce light (e.g. dropped torch)
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
"id";"drop";"world";"name";"shdr";"shdg";"shdb";"shduv";"str";"dsty";"mate";"solid";"wall";"grav";"dlfn";"fv";"fr";"lumr";"lumg";"lumb";"lumuv";"colour";"vscs";"refl";"tags"
|
"id";"drop";"spawn";"name";"shdr";"shdg";"shdb";"shduv";"str";"dsty";"mate";"solid";"wall";"grav";"dlfn";"fv";"fr";"lumr";"lumg";"lumb";"lumuv";"colour";"vscs";"refl";"tags"
|
||||||
"0";"0";"0";"BLOCK_AIR";"0.0312";"0.0312";"0.0312";"0.0312";"1";"1";"NULL";"0";"1";"N/A";"0";"0";"4";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";""
|
"0";"0";"0";"BLOCK_AIR";"0.0312";"0.0312";"0.0312";"0.0312";"1";"1";"NULL";"0";"1";"N/A";"0";"0";"4";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";""
|
||||||
"16";"17";"17";"BLOCK_STONE";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"1";"N/A";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"ROCK,NATURAL"
|
"16";"17";"17";"BLOCK_STONE";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"1";"N/A";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"ROCK,NATURAL"
|
||||||
"17";"17";"17";"BLOCK_STONE_QUARRIED";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"1";"N/A";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"ROCK"
|
"17";"17";"17";"BLOCK_STONE_QUARRIED";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"1";"N/A";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"ROCK"
|
||||||
@@ -55,10 +55,10 @@
|
|||||||
"162";"162";"162";"BLOCK_PLATFORM_EBONY";"0.0312";"0.0312";"0.0312";"0.0312";"5";"1200";"WOOD";"0";"0";"N/A";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"PLATFORM"
|
"162";"162";"162";"BLOCK_PLATFORM_EBONY";"0.0312";"0.0312";"0.0312";"0.0312";"5";"1200";"WOOD";"0";"0";"N/A";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"PLATFORM"
|
||||||
"163";"163";"163";"BLOCK_PLATFORM_BIRCH";"0.0312";"0.0312";"0.0312";"0.0312";"5";"670";"WOOD";"0";"0";"N/A";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"PLATFORM"
|
"163";"163";"163";"BLOCK_PLATFORM_BIRCH";"0.0312";"0.0312";"0.0312";"0.0312";"5";"670";"WOOD";"0";"0";"N/A";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"PLATFORM"
|
||||||
"164";"164";"164";"BLOCK_PLATFORM_BLOODROSE";"0.0312";"0.0312";"0.0312";"0.0312";"5";"900";"WOOD";"0";"0";"N/A";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"PLATFORM"
|
"164";"164";"164";"BLOCK_PLATFORM_BLOODROSE";"0.0312";"0.0312";"0.0312";"0.0312";"5";"900";"WOOD";"0";"0";"N/A";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"PLATFORM"
|
||||||
"176";"176";"192";"BLOCK_TORCH";"0.0312";"0.0312";"0.0312";"0.0312";"1";"800";"FXTR";"0";"0";"N/A";"1";"0";"16";"1.0000";"0.6372";"0.0000";"0.0000";"N/A";"N/A";"0.0";"LIGHT"
|
"176";"176";"176";"BLOCK_TORCH";"0.0312";"0.0312";"0.0312";"0.0312";"1";"800";"FXTR";"0";"0";"N/A";"1";"0";"16";"1.0000";"0.6372";"0.0000";"0.0000";"N/A";"N/A";"0.0";"LIGHT"
|
||||||
"177";"177";"193";"BLOCK_TORCH_FROST";"0.0312";"0.0312";"0.0312";"0.0312";"1";"1100";"FXTR";"0";"0";"N/A";"1";"0";"16";"0.3048";"0.4848";"1.0000";"0.0000";"N/A";"N/A";"0.0";"LIGHT"
|
"177";"177";"177";"BLOCK_TORCH_FROST";"0.0312";"0.0312";"0.0312";"0.0312";"1";"1100";"FXTR";"0";"0";"N/A";"1";"0";"16";"0.3048";"0.4848";"1.0000";"0.0000";"N/A";"N/A";"0.0";"LIGHT"
|
||||||
"192";"176";"192";"BLOCK_TORCH";"0.0312";"0.0312";"0.0312";"0.0312";"1";"800";"FXTR";"0";"0";"N/A";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"LIGHT,UNLIT"
|
"192";"176";"176";"BLOCK_TORCH";"0.0312";"0.0312";"0.0312";"0.0312";"1";"800";"FXTR";"0";"0";"N/A";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"LIGHT,UNLIT"
|
||||||
"193";"177";"193";"BLOCK_TORCH_FROST";"0.0312";"0.0312";"0.0312";"0.0312";"1";"1100";"FXTR";"0";"0";"N/A";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"LIGHT,UNLIT"
|
"193";"177";"177";"BLOCK_TORCH_FROST";"0.0312";"0.0312";"0.0312";"0.0312";"1";"1100";"FXTR";"0";"0";"N/A";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"LIGHT,UNLIT"
|
||||||
"208";"208";"208";"BLOCK_ILLUMINATOR_WHITE";"0.0312";"0.0312";"0.0312";"0.0312";"1";"2500";"GLAS";"1";"1";"N/A";"0";"0";"16";"0.9270";"0.9414";"0.8519";"0.0000";"N/A";"N/A";"0.0";"LIGHT"
|
"208";"208";"208";"BLOCK_ILLUMINATOR_WHITE";"0.0312";"0.0312";"0.0312";"0.0312";"1";"2500";"GLAS";"1";"1";"N/A";"0";"0";"16";"0.9270";"0.9414";"0.8519";"0.0000";"N/A";"N/A";"0.0";"LIGHT"
|
||||||
"209";"209";"209";"BLOCK_ILLUMINATOR_YELLOW";"0.0312";"0.0312";"0.0312";"0.0312";"1";"2500";"GLAS";"1";"1";"N/A";"0";"0";"16";"1.0000";"0.8408";"0.0000";"0.0000";"N/A";"N/A";"0.0";"LIGHT"
|
"209";"209";"209";"BLOCK_ILLUMINATOR_YELLOW";"0.0312";"0.0312";"0.0312";"0.0312";"1";"2500";"GLAS";"1";"1";"N/A";"0";"0";"16";"1.0000";"0.8408";"0.0000";"0.0000";"N/A";"N/A";"0.0";"LIGHT"
|
||||||
"210";"210";"210";"BLOCK_ILLUMINATOR_ORANGE";"0.0312";"0.0312";"0.0312";"0.0312";"1";"2500";"GLAS";"1";"1";"N/A";"0";"0";"16";"1.0000";"0.5294";"0.0000";"0.0000";"N/A";"N/A";"0.0";"LIGHT"
|
"210";"210";"210";"BLOCK_ILLUMINATOR_ORANGE";"0.0312";"0.0312";"0.0312";"0.0312";"1";"2500";"GLAS";"1";"1";"N/A";"0";"0";"16";"1.0000";"0.5294";"0.0000";"0.0000";"N/A";"N/A";"0.0";"LIGHT"
|
||||||
@@ -123,7 +123,7 @@
|
|||||||
#
|
#
|
||||||
# id: Block ID. ID equal to or greater than 4096 is for fluids, mainly for lighting calculation.
|
# id: Block ID. ID equal to or greater than 4096 is for fluids, mainly for lighting calculation.
|
||||||
# drop: Which item the DroppedItem actually adds to your inventory
|
# drop: Which item the DroppedItem actually adds to your inventory
|
||||||
# world: Which item the DroppedItem should impersonate when spawned
|
# spawn: Which item the DroppedItem should impersonate when spawned
|
||||||
#
|
#
|
||||||
# Drop and World can point to the item from other modules (usually 'basegame')
|
# Drop and World can point to the item from other modules (usually 'basegame')
|
||||||
# To achieve that, specify the full ID, e.g. basegame:32
|
# To achieve that, specify the full ID, e.g. basegame:32
|
||||||
|
|||||||
|
@@ -184,7 +184,7 @@ class BlockCodex {
|
|||||||
// otherModname:id -> as-is
|
// otherModname:id -> as-is
|
||||||
// id -> thisModname:id
|
// id -> thisModname:id
|
||||||
prop.drop = record.get("drop").let { if (it == null) "" else if (it.contains(':')) it else "$modname:$it" }
|
prop.drop = record.get("drop").let { if (it == null) "" else if (it.contains(':')) it else "$modname:$it" }
|
||||||
prop.world = record.get("world").let { if (it == null) "" else if (it.contains(':')) it else "$modname:$it" }
|
prop.world = record.get("spawn").let { if (it == null) "" else if (it.contains(':')) it else "$modname:$it" }
|
||||||
|
|
||||||
prop.shadeColR = record.floatVal("shdr")
|
prop.shadeColR = record.floatVal("shdr")
|
||||||
prop.shadeColG = record.floatVal("shdg")
|
prop.shadeColG = record.floatVal("shdg")
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ import java.util.Properties;
|
|||||||
public class CSVEditor extends JFrame {
|
public class CSVEditor extends JFrame {
|
||||||
|
|
||||||
/** Default columns. When you open existing csv, it should overwrite this. */
|
/** Default columns. When you open existing csv, it should overwrite this. */
|
||||||
private String[] columns = new String[]{"id", "drop", "world", "name", "shdr", "shdg", "shdb", "shduv", "str", "dsty", "mate", "solid", "wall", "grav", "dlfn", "fv", "fr", "lumr", "lumg", "lumb", "lumuv", "colour", "vscs", "refl","tags"};
|
private String[] columns = new String[]{"id", "drop", "spawn", "name", "shdr", "shdg", "shdb", "shduv", "str", "dsty", "mate", "solid", "wall", "grav", "dlfn", "fv", "fr", "lumr", "lumg", "lumb", "lumuv", "colour", "vscs", "refl","tags"};
|
||||||
private final int FOUR_DIGIT = 42;
|
private final int FOUR_DIGIT = 42;
|
||||||
private final int SIX_DIGIT = 50;
|
private final int SIX_DIGIT = 50;
|
||||||
private final int TWO_DIGIT = 30;
|
private final int TWO_DIGIT = 30;
|
||||||
@@ -515,7 +515,7 @@ public class CSVEditor extends JFrame {
|
|||||||
private String captionProperties = """
|
private String captionProperties = """
|
||||||
id=ID of this block
|
id=ID of this block
|
||||||
drop=Which item the DroppedItem actually adds to your inventory
|
drop=Which item the DroppedItem actually adds to your inventory
|
||||||
world=Which item the DroppedItem should impersonate when spawned
|
spawn=Which item the DroppedItem should impersonate when spawned
|
||||||
name=String identifier of the block
|
name=String identifier of the block
|
||||||
shdr=Shade Red (light absorption). Valid range 0.0–1.0+
|
shdr=Shade Red (light absorption). Valid range 0.0–1.0+
|
||||||
shdg=Shade Green (light absorption). Valid range 0.0–1.0+
|
shdg=Shade Green (light absorption). Valid range 0.0–1.0+
|
||||||
|
|||||||
@@ -41,6 +41,28 @@ open class ActorWithBody : Actor {
|
|||||||
|
|
||||||
var physProp = PhysProperties.HUMANOID_DEFAULT
|
var physProp = PhysProperties.HUMANOID_DEFAULT
|
||||||
|
|
||||||
|
// copied from old interface Luminous
|
||||||
|
/**
|
||||||
|
* Arguments:
|
||||||
|
*
|
||||||
|
* Hitbox(x-offset, y-offset, width, height)
|
||||||
|
* (Use ArrayList for normal circumstances)
|
||||||
|
*
|
||||||
|
* NOTE: MUST NOT SERIALISE (use `@Transient`)
|
||||||
|
*/
|
||||||
|
open var lightBoxList: List<Lightbox> = emptyList()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Arguments:
|
||||||
|
*
|
||||||
|
* Hitbox(x-offset, y-offset, width, height)
|
||||||
|
* (Use ArrayList for normal circumstances)
|
||||||
|
*
|
||||||
|
* NOTE: MUST NOT SERIALISE (use `@Transient`)
|
||||||
|
*/
|
||||||
|
open var shadeBoxList: List<Lightbox> = emptyList()
|
||||||
|
// end of Luminous
|
||||||
|
|
||||||
protected constructor() : super()
|
protected constructor() : super()
|
||||||
|
|
||||||
constructor(renderOrder: RenderOrder, physProp: PhysProperties, id: ActorID? = null) : super(renderOrder, id) {
|
constructor(renderOrder: RenderOrder, physProp: PhysProperties, id: ActorID? = null) : super(renderOrder, id) {
|
||||||
|
|||||||
@@ -22,8 +22,10 @@ class Lightbox() {
|
|||||||
* For actors that either emits or blocks lights
|
* For actors that either emits or blocks lights
|
||||||
*
|
*
|
||||||
* Created by minjaesong on 2016-02-19.
|
* Created by minjaesong on 2016-02-19.
|
||||||
|
*
|
||||||
|
* the interface Luminous is merged with the ActorWithBody -- minjaesong on 2022-09-11
|
||||||
*/
|
*/
|
||||||
interface Luminous {
|
/*interface Luminous {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Arguments:
|
* Arguments:
|
||||||
@@ -44,4 +46,4 @@ interface Luminous {
|
|||||||
* NOTE: MUST NOT SERIALISE (use `@Transient`)
|
* NOTE: MUST NOT SERIALISE (use `@Transient`)
|
||||||
*/
|
*/
|
||||||
val shadeBoxList: List<Lightbox>
|
val shadeBoxList: List<Lightbox>
|
||||||
}
|
}*/
|
||||||
@@ -3,7 +3,9 @@ package net.torvald.terrarum.gameitems
|
|||||||
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.terrarum.*
|
import net.torvald.terrarum.*
|
||||||
|
import net.torvald.terrarum.ReferencingRanges.PREFIX_ACTORITEM
|
||||||
import net.torvald.terrarum.ReferencingRanges.PREFIX_DYNAMICITEM
|
import net.torvald.terrarum.ReferencingRanges.PREFIX_DYNAMICITEM
|
||||||
|
import net.torvald.terrarum.ReferencingRanges.PREFIX_VIRTUALTILE
|
||||||
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZED
|
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZED
|
||||||
import net.torvald.terrarum.gameactors.AVKey
|
import net.torvald.terrarum.gameactors.AVKey
|
||||||
import net.torvald.terrarum.gameactors.ActorWithBody
|
import net.torvald.terrarum.gameactors.ActorWithBody
|
||||||
@@ -407,3 +409,11 @@ fun mouseInInteractableRangeTools(actor: ActorWithBody, item: GameItem?, reachMu
|
|||||||
//fun IntRange.pickRandom() = HQRNG().nextInt(this.last - this.first + 1) + this.first // count() on 200 million entries? Se on vitun hyvää idea
|
//fun IntRange.pickRandom() = HQRNG().nextInt(this.last - this.first + 1) + this.first // count() on 200 million entries? Se on vitun hyvää idea
|
||||||
//fun IntArray.pickRandom(): Int = this[HQRNG().nextInt(this.size)]
|
//fun IntArray.pickRandom(): Int = this[HQRNG().nextInt(this.size)]
|
||||||
//fun DoubleArray.pickRandom(): Double = this[HQRNG().nextInt(this.size)]
|
//fun DoubleArray.pickRandom(): Double = this[HQRNG().nextInt(this.size)]
|
||||||
|
|
||||||
|
fun ItemID.isItem() = this.startsWith("item@")
|
||||||
|
fun ItemID.isWire() = this.startsWith("wire@")
|
||||||
|
fun ItemID.isDynamic() = this.startsWith("$PREFIX_DYNAMICITEM:")
|
||||||
|
fun ItemID.isActor() = this.startsWith("$PREFIX_ACTORITEM@")
|
||||||
|
fun ItemID.isVirtual() = this.startsWith("$PREFIX_VIRTUALTILE@")
|
||||||
|
fun ItemID.isBlock() = !this.contains('@')
|
||||||
|
fun ItemID.isWall() = this.startsWith("wall@")
|
||||||
|
|||||||
@@ -8,8 +8,7 @@ import net.torvald.terrarum.ReferencingRanges
|
|||||||
import net.torvald.terrarum.ReferencingRanges.PREFIX_ACTORITEM
|
import net.torvald.terrarum.ReferencingRanges.PREFIX_ACTORITEM
|
||||||
import net.torvald.terrarum.ReferencingRanges.PREFIX_DYNAMICITEM
|
import net.torvald.terrarum.ReferencingRanges.PREFIX_DYNAMICITEM
|
||||||
import net.torvald.terrarum.Terrarum
|
import net.torvald.terrarum.Terrarum
|
||||||
import net.torvald.terrarum.gameitems.GameItem
|
import net.torvald.terrarum.gameitems.*
|
||||||
import net.torvald.terrarum.gameitems.ItemID
|
|
||||||
import net.torvald.terrarum.modulebasegame.TerrarumIngame
|
import net.torvald.terrarum.modulebasegame.TerrarumIngame
|
||||||
import net.torvald.terrarum.modulebasegame.gameactors.CanBeAnItem
|
import net.torvald.terrarum.modulebasegame.gameactors.CanBeAnItem
|
||||||
import net.torvald.terrarum.modulebasegame.gameactors.FixtureBase
|
import net.torvald.terrarum.modulebasegame.gameactors.FixtureBase
|
||||||
@@ -132,27 +131,23 @@ class ItemCodex {
|
|||||||
fun getItemImage(itemID: ItemID?): TextureRegion? {
|
fun getItemImage(itemID: ItemID?): TextureRegion? {
|
||||||
if (itemID == null) return null
|
if (itemID == null) return null
|
||||||
|
|
||||||
// dynamic item
|
if (itemID.isDynamic()) {
|
||||||
if (itemID.startsWith("$PREFIX_DYNAMICITEM:")) {
|
|
||||||
return getItemImage(dynamicToStaticID(itemID))
|
return getItemImage(dynamicToStaticID(itemID))
|
||||||
}
|
}
|
||||||
// item
|
else if (itemID.isItem()) {
|
||||||
else if (itemID.startsWith("item@")) {
|
|
||||||
return itemCodex[itemID]?.itemImage
|
return itemCodex[itemID]?.itemImage
|
||||||
}
|
}
|
||||||
// wires
|
else if (itemID.isWire()) {
|
||||||
else if (itemID.startsWith("wire@")) {
|
|
||||||
return itemCodex[itemID]?.itemImage
|
return itemCodex[itemID]?.itemImage
|
||||||
}
|
}
|
||||||
// wall
|
else if (itemID.isWall()) {
|
||||||
else if (itemID.startsWith("wall@")) {
|
|
||||||
val itemSheetNumber = App.tileMaker.tileIDtoItemSheetNumber(itemID.substring(5))
|
val itemSheetNumber = App.tileMaker.tileIDtoItemSheetNumber(itemID.substring(5))
|
||||||
return BlocksDrawer.tileItemWall.get(
|
return BlocksDrawer.tileItemWall.get(
|
||||||
itemSheetNumber % App.tileMaker.TILES_IN_X,
|
itemSheetNumber % App.tileMaker.TILES_IN_X,
|
||||||
itemSheetNumber / App.tileMaker.TILES_IN_X
|
itemSheetNumber / App.tileMaker.TILES_IN_X
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
// terrain
|
// else: terrain
|
||||||
else {
|
else {
|
||||||
val itemSheetNumber = App.tileMaker.tileIDtoItemSheetNumber(itemID)
|
val itemSheetNumber = App.tileMaker.tileIDtoItemSheetNumber(itemID)
|
||||||
return BlocksDrawer.tileItemTerrain.get(
|
return BlocksDrawer.tileItemTerrain.get(
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ import net.torvald.spriteanimation.HasAssembledSprite
|
|||||||
import net.torvald.spriteanimation.SheetSpriteAnimation
|
import net.torvald.spriteanimation.SheetSpriteAnimation
|
||||||
import net.torvald.terrarum.*
|
import net.torvald.terrarum.*
|
||||||
import net.torvald.terrarum.App.printdbg
|
import net.torvald.terrarum.App.printdbg
|
||||||
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZED
|
|
||||||
import net.torvald.terrarum.gameactors.*
|
import net.torvald.terrarum.gameactors.*
|
||||||
import net.torvald.terrarum.gameactors.faction.Faction
|
import net.torvald.terrarum.gameactors.faction.Faction
|
||||||
import net.torvald.terrarum.gameitems.GameItem
|
import net.torvald.terrarum.gameitems.GameItem
|
||||||
@@ -28,7 +27,7 @@ import org.dyn4j.geometry.Vector2
|
|||||||
*
|
*
|
||||||
* Created by minjaesong on 2016-10-24.
|
* Created by minjaesong on 2016-10-24.
|
||||||
*/
|
*/
|
||||||
open class ActorHumanoid : ActorWithBody, Controllable, Pocketed, Factionable, Luminous, LandHolder, HistoricalFigure {
|
open class ActorHumanoid : ActorWithBody, Controllable, Pocketed, Factionable, LandHolder, HistoricalFigure {
|
||||||
|
|
||||||
protected constructor()
|
protected constructor()
|
||||||
|
|
||||||
@@ -100,15 +99,10 @@ open class ActorHumanoid : ActorWithBody, Controllable, Pocketed, Factionable, L
|
|||||||
* Hitbox(x-offset, y-offset, width, height)
|
* Hitbox(x-offset, y-offset, width, height)
|
||||||
* (Use ArrayList for normal circumstances)
|
* (Use ArrayList for normal circumstances)
|
||||||
*/
|
*/
|
||||||
override val lightBoxList: List<Lightbox>
|
@Transient override var lightBoxList: List<Lightbox> = listOf(Lightbox(Hitbox(2.0, 2.0, baseHitboxW - 3.0, baseHitboxH - 3.0), Cvec(0)))
|
||||||
get() = arrayOf(Lightbox(Hitbox(2.0, 2.0, baseHitboxW - 3.0, baseHitboxH - 3.0), actorValueColour)).toList() // things are asymmetric!!
|
// the actual values are update on the update()
|
||||||
// use getter; dimension of the player may change by time.
|
@Transient override var shadeBoxList: List<Lightbox> = listOf(Lightbox(Hitbox(2.0, 2.0, baseHitboxW - 3.0, baseHitboxH - 3.0), Cvec(0)))
|
||||||
// scaling of the lightbox is performed on the LightmapRenderer. Getter is still required because of the changing actorValueColour. Lightbox.light cannot be `() -> Cvec` due to performance and serialising issue.
|
// the actual values are update on the update()
|
||||||
|
|
||||||
override val shadeBoxList: List<Lightbox>
|
|
||||||
get() = arrayOf(Lightbox(Hitbox(2.0, 2.0, baseHitboxW - 3.0, baseHitboxH - 3.0), actorValueShade)).toList() // things are asymmetric!!
|
|
||||||
// use getter; dimension of the player may change by time.
|
|
||||||
// scaling of the shadebox is performed on the LightmapRenderer. Getter is still required because of the changing actorValueColour. Lightbox.light cannot be `() -> Cvec` due to performance and serialising issue.
|
|
||||||
|
|
||||||
@Transient val BASE_DENSITY = 980.0
|
@Transient val BASE_DENSITY = 980.0
|
||||||
|
|
||||||
@@ -201,6 +195,11 @@ open class ActorHumanoid : ActorWithBody, Controllable, Pocketed, Factionable, L
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun update(delta: Float) {
|
override fun update(delta: Float) {
|
||||||
|
// update lightbox
|
||||||
|
lightBoxList[0].light = actorValueColour
|
||||||
|
shadeBoxList[0].light = actorValueShade
|
||||||
|
|
||||||
|
|
||||||
super.update(delta)
|
super.update(delta)
|
||||||
|
|
||||||
if (vehicleRiding is IngamePlayer)
|
if (vehicleRiding is IngamePlayer)
|
||||||
|
|||||||
@@ -3,16 +3,14 @@ package net.torvald.terrarum.modulebasegame.gameactors
|
|||||||
import com.badlogic.gdx.graphics.g2d.SpriteBatch
|
import com.badlogic.gdx.graphics.g2d.SpriteBatch
|
||||||
import com.badlogic.gdx.graphics.g2d.TextureRegion
|
import com.badlogic.gdx.graphics.g2d.TextureRegion
|
||||||
import com.jme3.math.FastMath
|
import com.jme3.math.FastMath
|
||||||
|
import net.torvald.gdx.graphics.Cvec
|
||||||
import net.torvald.terrarum.BlockCodex
|
import net.torvald.terrarum.BlockCodex
|
||||||
import net.torvald.terrarum.INGAME
|
import net.torvald.terrarum.INGAME
|
||||||
import net.torvald.terrarum.ItemCodex
|
import net.torvald.terrarum.ItemCodex
|
||||||
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE
|
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE
|
||||||
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZED
|
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZED
|
||||||
import net.torvald.terrarum.gameactors.AVKey
|
import net.torvald.terrarum.gameactors.*
|
||||||
import net.torvald.terrarum.gameactors.ActorWithBody
|
import net.torvald.terrarum.gameitems.*
|
||||||
import net.torvald.terrarum.gameactors.PhysProperties
|
|
||||||
import net.torvald.terrarum.gameactors.drawBodyInGoodPosition
|
|
||||||
import net.torvald.terrarum.gameitems.ItemID
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by minjaesong on 2016-03-15.
|
* Created by minjaesong on 2016-03-15.
|
||||||
@@ -38,6 +36,14 @@ open class DroppedItem : ActorWithBody {
|
|||||||
|
|
||||||
fun canBePickedUp() = timeSinceSpawned > NO_PICKUP_TIME && !flagDespawn
|
fun canBePickedUp() = timeSinceSpawned > NO_PICKUP_TIME && !flagDespawn
|
||||||
|
|
||||||
|
private val randKey1 = (Math.random() * 256).toInt()
|
||||||
|
private val randKey2 = (Math.random() * 256).toInt()
|
||||||
|
|
||||||
|
override var lightBoxList = listOf(Lightbox(this.hitbox.clone().setPosition(0.0, 0.0), Cvec(0)))
|
||||||
|
// the Cvec will be calculated dynamically on Update
|
||||||
|
override var shadeBoxList = listOf(Lightbox(this.hitbox.clone().setPosition(0.0, 0.0), Cvec(0)))
|
||||||
|
// the Cvec will be calculated dynamically on Update
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param topLeftX world-wise coord
|
* @param topLeftX world-wise coord
|
||||||
* @param topLeftY world-wise coord
|
* @param topLeftY world-wise coord
|
||||||
@@ -45,12 +51,12 @@ open class DroppedItem : ActorWithBody {
|
|||||||
constructor(itemID: ItemID, topLeftX: Double, topLeftY: Double) : super(RenderOrder.MIDTOP, PhysProperties.PHYSICS_OBJECT) {
|
constructor(itemID: ItemID, topLeftX: Double, topLeftY: Double) : super(RenderOrder.MIDTOP, PhysProperties.PHYSICS_OBJECT) {
|
||||||
this.itemID = itemID
|
this.itemID = itemID
|
||||||
|
|
||||||
if (itemID.startsWith("actor@"))
|
if (itemID.isActor())
|
||||||
throw RuntimeException("Attempted to create DroppedItem actor of a real actor; the real actor must be dropped instead.")
|
throw RuntimeException("Attempted to create DroppedItem actor of a real actor; the real actor must be dropped instead.")
|
||||||
|
|
||||||
isVisible = true
|
isVisible = true
|
||||||
|
|
||||||
avBaseMass = if (itemID.startsWith("item@") || itemID.startsWith("wire@"))
|
avBaseMass = if (itemID.isItem() || itemID.isWire())
|
||||||
(ItemCodex[itemID]?.mass ?: 2.0).coerceAtMost(2.0)
|
(ItemCodex[itemID]?.mass ?: 2.0).coerceAtMost(2.0)
|
||||||
else
|
else
|
||||||
BlockCodex[itemID].density / 1000.0 // block and wall
|
BlockCodex[itemID].density / 1000.0 // block and wall
|
||||||
@@ -73,7 +79,6 @@ open class DroppedItem : ActorWithBody {
|
|||||||
Math.cos(Math.random() * Math.PI / 2 + Math.PI / 2) * magn
|
Math.cos(Math.random() * Math.PI / 2 + Math.PI / 2) * magn
|
||||||
else
|
else
|
||||||
Math.cos(Math.random() * Math.PI) * magn
|
Math.cos(Math.random() * Math.PI) * magn
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun drawBody(batch: SpriteBatch) {
|
override fun drawBody(batch: SpriteBatch) {
|
||||||
@@ -104,6 +109,12 @@ open class DroppedItem : ActorWithBody {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun update(delta: Float) {
|
override fun update(delta: Float) {
|
||||||
|
if (this.itemID.isBlock() || this.itemID.isItem()) {
|
||||||
|
BlockCodex[this.itemID].let {
|
||||||
|
this.lightBoxList[0].light = it.getLumCol(randKey1, randKey2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
super.update(delta)
|
super.update(delta)
|
||||||
|
|
||||||
timeSinceSpawned += delta
|
timeSinceSpawned += delta
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ import kotlin.math.absoluteValue
|
|||||||
*
|
*
|
||||||
* Created by minjaesong on 2022-07-15.
|
* Created by minjaesong on 2022-07-15.
|
||||||
*/
|
*/
|
||||||
open class FixtureSwingingDoorBase : FixtureBase, Luminous {
|
open class FixtureSwingingDoorBase : FixtureBase {
|
||||||
|
|
||||||
/* OVERRIDE THESE TO CUSTOMISE */
|
/* OVERRIDE THESE TO CUSTOMISE */
|
||||||
var tw = 2 // tilewise width of the door when opened
|
var tw = 2 // tilewise width of the door when opened
|
||||||
@@ -45,8 +45,10 @@ open class FixtureSwingingDoorBase : FixtureBase, Luminous {
|
|||||||
private var pixelwiseHitboxHeight = TILE_SIZE * tilewiseHitboxHeight
|
private var pixelwiseHitboxHeight = TILE_SIZE * tilewiseHitboxHeight
|
||||||
private var tilewiseDistToAxis = tw - twClosed
|
private var tilewiseDistToAxis = tw - twClosed
|
||||||
|
|
||||||
@Transient override val lightBoxList: ArrayList<Lightbox> = ArrayList()
|
@Transient override var lightBoxList = listOf(Lightbox(Hitbox(TILE_SIZED * tilewiseDistToAxis, 0.0, TILE_SIZED * twClosed, TILE_SIZED * th), Cvec(0)))
|
||||||
@Transient override val shadeBoxList: ArrayList<Lightbox> = ArrayList()
|
// the Cvec will be calculated dynamically on Update
|
||||||
|
@Transient override var shadeBoxList = listOf(Lightbox(Hitbox(TILE_SIZED * tilewiseDistToAxis, 0.0, TILE_SIZED * twClosed, TILE_SIZED * th), Cvec(0)))
|
||||||
|
// the Cvec will be calculated dynamically on Update
|
||||||
|
|
||||||
protected var doorState = 0 // -1: open toward left, 0: closed, 1: open toward right
|
protected var doorState = 0 // -1: open toward left, 0: closed, 1: open toward right
|
||||||
protected var doorStateTimer: Second = 0f
|
protected var doorStateTimer: Second = 0f
|
||||||
@@ -123,8 +125,7 @@ open class FixtureSwingingDoorBase : FixtureBase, Luminous {
|
|||||||
|
|
||||||
// define light/shadebox
|
// define light/shadebox
|
||||||
// TODO: redefine when opened to left/right
|
// TODO: redefine when opened to left/right
|
||||||
(if (isOpacityActuallyLuminosity) lightBoxList else shadeBoxList).add(
|
(if (isOpacityActuallyLuminosity) lightBoxList else shadeBoxList)[0].light = opacity
|
||||||
Lightbox(Hitbox(TILE_SIZED * tilewiseDistToAxis, 0.0, TILE_SIZED * twClosed, TILE_SIZED * th), opacity))
|
|
||||||
|
|
||||||
// define physical size
|
// define physical size
|
||||||
setHitboxDimension(TILE_SIZE * tilewiseHitboxWidth, TILE_SIZE * tilewiseHitboxHeight, 0, 0)
|
setHitboxDimension(TILE_SIZE * tilewiseHitboxWidth, TILE_SIZE * tilewiseHitboxHeight, 0, 0)
|
||||||
@@ -148,8 +149,7 @@ open class FixtureSwingingDoorBase : FixtureBase, Luminous {
|
|||||||
|
|
||||||
// define light/shadebox
|
// define light/shadebox
|
||||||
// TODO: redefine when opened to left/right
|
// TODO: redefine when opened to left/right
|
||||||
(if (isOpacityActuallyLuminosity) lightBoxList else shadeBoxList).add(
|
(if (isOpacityActuallyLuminosity) lightBoxList else shadeBoxList)[0].light = opacity
|
||||||
Lightbox(Hitbox(TILE_SIZED * tilewiseDistToAxis, 0.0, TILE_SIZED * twClosed, TILE_SIZED * th), opacity))
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
package net.torvald.terrarum.modulebasegame.gameactors
|
package net.torvald.terrarum.modulebasegame.gameactors
|
||||||
|
|
||||||
import com.badlogic.gdx.graphics.g2d.SpriteBatch
|
import com.badlogic.gdx.graphics.g2d.SpriteBatch
|
||||||
import net.torvald.gdx.graphics.Cvec
|
|
||||||
import net.torvald.random.HQRNG
|
|
||||||
import net.torvald.spriteanimation.SheetSpriteAnimation
|
import net.torvald.spriteanimation.SheetSpriteAnimation
|
||||||
import net.torvald.terrarum.BlockCodex
|
import net.torvald.terrarum.BlockCodex
|
||||||
import net.torvald.terrarum.CommonResourcePool
|
import net.torvald.terrarum.CommonResourcePool
|
||||||
@@ -12,7 +10,6 @@ import net.torvald.terrarum.blockproperties.Block
|
|||||||
import net.torvald.terrarum.gameactors.AVKey
|
import net.torvald.terrarum.gameactors.AVKey
|
||||||
import net.torvald.terrarum.gameactors.Hitbox
|
import net.torvald.terrarum.gameactors.Hitbox
|
||||||
import net.torvald.terrarum.gameactors.Lightbox
|
import net.torvald.terrarum.gameactors.Lightbox
|
||||||
import net.torvald.terrarum.gameactors.Luminous
|
|
||||||
import net.torvald.terrarum.gameparticles.ParticleVanishingSprite
|
import net.torvald.terrarum.gameparticles.ParticleVanishingSprite
|
||||||
import net.torvald.terrarum.langpack.Lang
|
import net.torvald.terrarum.langpack.Lang
|
||||||
import net.torvald.terrarum.modulebasegame.TerrarumIngame
|
import net.torvald.terrarum.modulebasegame.TerrarumIngame
|
||||||
@@ -21,20 +18,12 @@ import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack
|
|||||||
/**
|
/**
|
||||||
* Created by minjaesong on 2016-06-17.
|
* Created by minjaesong on 2016-06-17.
|
||||||
*/
|
*/
|
||||||
internal class FixtureTikiTorch : FixtureBase, Luminous {
|
internal class FixtureTikiTorch : FixtureBase {
|
||||||
|
|
||||||
private val rng = HQRNG()
|
private val rndHash1 = (Math.random() * 256).toInt()
|
||||||
private val rndHash1 = rng.nextInt()
|
private val rndHash2 = (Math.random() * 256).toInt()
|
||||||
private val rndHash2 = rng.nextInt()
|
|
||||||
|
|
||||||
private var color: Cvec
|
@Transient override var lightBoxList = listOf(Lightbox(Hitbox(6.0, 5.0, 4.0, 3.0), BlockCodex[Block.TORCH].getLumCol(rndHash1, rndHash2)))
|
||||||
get() = try { BlockCodex[Block.TORCH].getLumCol(rndHash1, rndHash2) } catch (e: NullPointerException) { Cvec() }
|
|
||||||
set(value) {
|
|
||||||
throw UnsupportedOperationException()
|
|
||||||
}
|
|
||||||
|
|
||||||
@Transient override val lightBoxList: ArrayList<Lightbox> = ArrayList(1)
|
|
||||||
@Transient override val shadeBoxList: ArrayList<Lightbox> = ArrayList(1)
|
|
||||||
|
|
||||||
constructor() : super(
|
constructor() : super(
|
||||||
BlockBox(BlockBox.NO_COLLISION, 1, 2),
|
BlockBox(BlockBox.NO_COLLISION, 1, 2),
|
||||||
@@ -51,8 +40,6 @@ internal class FixtureTikiTorch : FixtureBase, Luminous {
|
|||||||
|
|
||||||
setHitboxDimension(16, 32, 0, 0)
|
setHitboxDimension(16, 32, 0, 0)
|
||||||
|
|
||||||
lightBoxList.add(Lightbox(Hitbox(6.0, 5.0, 4.0, 3.0), color))
|
|
||||||
|
|
||||||
makeNewSprite(FixtureBase.getSpritesheet("basegame", "sprites/fixtures/tiki_torch.tga", 16, 32)).let {
|
makeNewSprite(FixtureBase.getSpritesheet("basegame", "sprites/fixtures/tiki_torch.tga", 16, 32)).let {
|
||||||
it.setRowsAndFrames(1,2)
|
it.setRowsAndFrames(1,2)
|
||||||
}
|
}
|
||||||
@@ -64,18 +51,20 @@ internal class FixtureTikiTorch : FixtureBase, Luminous {
|
|||||||
private var spawnTimer = 0f
|
private var spawnTimer = 0f
|
||||||
|
|
||||||
override fun update(delta: Float) {
|
override fun update(delta: Float) {
|
||||||
|
lightBoxList[0].light = BlockCodex[Block.TORCH].getLumCol(rndHash1, rndHash2)
|
||||||
|
|
||||||
super.update(delta)
|
super.update(delta)
|
||||||
|
|
||||||
if (spawnTimer >= nextDelay) {
|
if (spawnTimer >= nextDelay) {
|
||||||
(Terrarum.ingame as TerrarumIngame).addParticle(ParticleVanishingSprite(
|
(Terrarum.ingame as TerrarumIngame).addParticle(ParticleVanishingSprite(
|
||||||
CommonResourcePool.getAsTextureRegionPack("particles-tiki_smoke.tga"),
|
CommonResourcePool.getAsTextureRegionPack("particles-tiki_smoke.tga"),
|
||||||
25f, true, hitbox.centeredX, hitbox.startY, false, rng.nextInt(256)
|
25f, true, hitbox.centeredX, hitbox.startY, false, (Math.random() * 256).toInt()
|
||||||
))
|
))
|
||||||
|
|
||||||
spawnTimer -= nextDelay
|
spawnTimer -= nextDelay
|
||||||
nextDelay = rng.nextFloat() * 0.25f + 0.25f
|
nextDelay = Math.random().toFloat() * 0.25f + 0.25f
|
||||||
|
|
||||||
(sprite as? SheetSpriteAnimation)?.delays?.set(0, rng.nextFloat() * 0.4f + 0.1f)
|
(sprite as? SheetSpriteAnimation)?.delays?.set(0, Math.random().toFloat() * 0.4f + 0.1f)
|
||||||
}
|
}
|
||||||
|
|
||||||
spawnTimer += delta
|
spawnTimer += delta
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
package net.torvald.terrarum.modulebasegame.gameactors
|
package net.torvald.terrarum.modulebasegame.gameactors
|
||||||
|
|
||||||
import net.torvald.gdx.graphics.Cvec
|
import net.torvald.terrarum.gameactors.ActorWithBody
|
||||||
import net.torvald.terrarum.gameactors.*
|
import net.torvald.terrarum.gameactors.PhysProperties
|
||||||
import net.torvald.terrarum.gameitems.ItemID
|
import net.torvald.terrarum.gameitems.ItemID
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by minjaesong on 2016-04-26.
|
* Created by minjaesong on 2016-04-26.
|
||||||
*/
|
*/
|
||||||
class ItemCarrying : ActorWithBody, Luminous {
|
class ItemCarrying : ActorWithBody {
|
||||||
|
|
||||||
var itemID: ItemID = ""; private set
|
var itemID: ItemID = ""; private set
|
||||||
|
|
||||||
@@ -20,30 +20,6 @@ class ItemCarrying : ActorWithBody, Luminous {
|
|||||||
|
|
||||||
// just let the solver use AABB; it's cheap but works just enough
|
// just let the solver use AABB; it's cheap but works just enough
|
||||||
|
|
||||||
/**
|
|
||||||
* Recommended implementation:
|
|
||||||
*
|
|
||||||
override var color: Int
|
|
||||||
get() = actorValue.getAsInt(AVKey.LUMINOSITY) ?: 0
|
|
||||||
set(value) {
|
|
||||||
actorValue[AVKey.LUMINOSITY] = value
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
private var color: Cvec
|
|
||||||
get() = throw UnsupportedOperationException()
|
|
||||||
set(value) {
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Arguments:
|
|
||||||
*
|
|
||||||
* Hitbox(x-offset, y-offset, width, height)
|
|
||||||
* (Use ArrayList for normal circumstances)
|
|
||||||
*/
|
|
||||||
override val lightBoxList: List<Lightbox>
|
|
||||||
get() = throw UnsupportedOperationException()
|
|
||||||
override val shadeBoxList: List<Lightbox>
|
|
||||||
get() = throw UnsupportedOperationException()
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,14 +3,15 @@ package net.torvald.terrarum.modulebasegame.gameactors
|
|||||||
import com.badlogic.gdx.graphics.Color
|
import com.badlogic.gdx.graphics.Color
|
||||||
import com.badlogic.gdx.graphics.g2d.SpriteBatch
|
import com.badlogic.gdx.graphics.g2d.SpriteBatch
|
||||||
import net.torvald.gdx.graphics.Cvec
|
import net.torvald.gdx.graphics.Cvec
|
||||||
|
import net.torvald.terrarum.BlockCodex
|
||||||
|
import net.torvald.terrarum.INGAME
|
||||||
import net.torvald.terrarum.Point2d
|
import net.torvald.terrarum.Point2d
|
||||||
import net.torvald.terrarum.Terrarum
|
|
||||||
import net.torvald.terrarum.blockproperties.Block
|
import net.torvald.terrarum.blockproperties.Block
|
||||||
import net.torvald.terrarum.blockproperties.BlockCodex
|
import net.torvald.terrarum.gameactors.ActorWithBody
|
||||||
|
import net.torvald.terrarum.gameactors.Hitbox
|
||||||
|
import net.torvald.terrarum.gameactors.Lightbox
|
||||||
|
import net.torvald.terrarum.gameactors.PhysProperties
|
||||||
import org.dyn4j.geometry.Vector2
|
import org.dyn4j.geometry.Vector2
|
||||||
import java.util.*
|
|
||||||
import net.torvald.terrarum.*
|
|
||||||
import net.torvald.terrarum.gameactors.*
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Simplest projectile.
|
* Simplest projectile.
|
||||||
@@ -19,7 +20,7 @@ import net.torvald.terrarum.gameactors.*
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// TODO simplified, lightweight physics (does not call PhysicsSolver)
|
// TODO simplified, lightweight physics (does not call PhysicsSolver)
|
||||||
open class ProjectileSimple : ActorWithBody, Luminous, Projectile {
|
open class ProjectileSimple : ActorWithBody, Projectile {
|
||||||
|
|
||||||
private var type: Int = 0
|
private var type: Int = 0
|
||||||
var damage: Int = 0
|
var damage: Int = 0
|
||||||
@@ -38,8 +39,8 @@ open class ProjectileSimple : ActorWithBody, Luminous, Projectile {
|
|||||||
* Hitbox(x-offset, y-offset, width, height)
|
* Hitbox(x-offset, y-offset, width, height)
|
||||||
* (Use ArrayList for normal circumstances)
|
* (Use ArrayList for normal circumstances)
|
||||||
*/
|
*/
|
||||||
@Transient override val lightBoxList = ArrayList<Lightbox>()
|
@Transient override var lightBoxList = listOf(Lightbox(Hitbox(-4.0, -4.0, 8.0, 8.0), color)) // lightbox sized 8x8 centered to the bullet
|
||||||
@Transient override val shadeBoxList = ArrayList<Lightbox>()
|
|
||||||
|
|
||||||
private val lifetimeMax = 2500
|
private val lifetimeMax = 2500
|
||||||
private var lifetimeCounter = 0f
|
private var lifetimeCounter = 0f
|
||||||
@@ -57,8 +58,6 @@ open class ProjectileSimple : ActorWithBody, Luminous, Projectile {
|
|||||||
|
|
||||||
setPosition(fromPoint.x, fromPoint.y)
|
setPosition(fromPoint.x, fromPoint.y)
|
||||||
posPre = Point2d(fromPoint.x, fromPoint.y)
|
posPre = Point2d(fromPoint.x, fromPoint.y)
|
||||||
// lightbox sized 8x8 centered to the bullet
|
|
||||||
lightBoxList.add(Lightbox(Hitbox(-4.0, -4.0, 8.0, 8.0), color))
|
|
||||||
//this.externalV.set(velocity)
|
//this.externalV.set(velocity)
|
||||||
|
|
||||||
damage = bulletDatabase[type][OFFSET_DAMAGE] as Int
|
damage = bulletDatabase[type][OFFSET_DAMAGE] as Int
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import net.torvald.terrarum.*
|
|||||||
import net.torvald.terrarum.gameactors.ActorWithBody
|
import net.torvald.terrarum.gameactors.ActorWithBody
|
||||||
import net.torvald.terrarum.gameitems.GameItem
|
import net.torvald.terrarum.gameitems.GameItem
|
||||||
import net.torvald.terrarum.gameitems.ItemID
|
import net.torvald.terrarum.gameitems.ItemID
|
||||||
|
import net.torvald.terrarum.gameitems.isWall
|
||||||
import net.torvald.terrarum.gameitems.mouseInInteractableRange
|
import net.torvald.terrarum.gameitems.mouseInInteractableRange
|
||||||
import net.torvald.terrarum.gameworld.GameWorld
|
import net.torvald.terrarum.gameworld.GameWorld
|
||||||
import net.torvald.terrarum.modulebasegame.TerrarumIngame
|
import net.torvald.terrarum.modulebasegame.TerrarumIngame
|
||||||
@@ -40,7 +41,7 @@ object BlockBase {
|
|||||||
if (!ret1) return@mouseInInteractableRange -1L
|
if (!ret1) return@mouseInInteractableRange -1L
|
||||||
}
|
}
|
||||||
|
|
||||||
val isWall = itemID.startsWith("wall@")
|
val isWall = itemID.isWall()
|
||||||
val terrainUnderCursor = ingame.world.getTileFromTerrain(mouseTile.x, mouseTile.y)
|
val terrainUnderCursor = ingame.world.getTileFromTerrain(mouseTile.x, mouseTile.y)
|
||||||
val wallUnderCursor = ingame.world.getTileFromWall(mouseTile.x, mouseTile.y)
|
val wallUnderCursor = ingame.world.getTileFromWall(mouseTile.x, mouseTile.y)
|
||||||
|
|
||||||
|
|||||||
@@ -12,10 +12,8 @@ import net.torvald.terrarum.blockproperties.Block
|
|||||||
import net.torvald.terrarum.blockproperties.BlockProp
|
import net.torvald.terrarum.blockproperties.BlockProp
|
||||||
import net.torvald.terrarum.blockproperties.Fluid
|
import net.torvald.terrarum.blockproperties.Fluid
|
||||||
import net.torvald.terrarum.gameactors.ActorWithBody
|
import net.torvald.terrarum.gameactors.ActorWithBody
|
||||||
import net.torvald.terrarum.gameactors.Luminous
|
|
||||||
import net.torvald.terrarum.gameworld.BlockAddress
|
import net.torvald.terrarum.gameworld.BlockAddress
|
||||||
import net.torvald.terrarum.gameworld.GameWorld
|
import net.torvald.terrarum.gameworld.GameWorld
|
||||||
import net.torvald.terrarum.gameworld.fmod
|
|
||||||
import net.torvald.terrarum.modulebasegame.IngameRenderer
|
import net.torvald.terrarum.modulebasegame.IngameRenderer
|
||||||
import net.torvald.terrarum.modulebasegame.ui.abs
|
import net.torvald.terrarum.modulebasegame.ui.abs
|
||||||
import net.torvald.terrarum.realestate.LandUtil
|
import net.torvald.terrarum.realestate.LandUtil
|
||||||
@@ -349,46 +347,44 @@ object LightmapRenderer {
|
|||||||
lanternMap.clear()
|
lanternMap.clear()
|
||||||
shadowMap.clear()
|
shadowMap.clear()
|
||||||
actorContainer.forEach {
|
actorContainer.forEach {
|
||||||
if (it is Luminous) {
|
val lightBoxCopy = it.lightBoxList.subList(0, it.lightBoxList.size) // make copy to prevent ConcurrentModificationException
|
||||||
val lightBoxCopy = it.lightBoxList.subList(0, it.lightBoxList.size) // make copy to prevent ConcurrentModificationException
|
val shadeBoxCopy = it.shadeBoxList.subList(0, it.shadeBoxList.size) // make copy to prevent ConcurrentModificationException
|
||||||
val shadeBoxCopy = it.shadeBoxList.subList(0, it.shadeBoxList.size) // make copy to prevent ConcurrentModificationException
|
val scale = it.scale
|
||||||
val scale = it.scale
|
|
||||||
|
|
||||||
// put lanterns to the area the luminantBox is occupying
|
// put lanterns to the area the luminantBox is occupying
|
||||||
lightBoxCopy.forEach { (lightBox, colour) ->
|
lightBoxCopy.forEach { (lightBox, colour) ->
|
||||||
val lightBoxX = it.hitbox.startX + (lightBox.startX * scale)
|
val lightBoxX = it.hitbox.startX + (lightBox.startX * scale)
|
||||||
val lightBoxY = it.hitbox.startY + (lightBox.startY * scale)
|
val lightBoxY = it.hitbox.startY + (lightBox.startY * scale)
|
||||||
val lightBoxW = lightBox.width * scale
|
val lightBoxW = lightBox.width * scale
|
||||||
val lightBoxH = lightBox.height * scale
|
val lightBoxH = lightBox.height * scale
|
||||||
for (y in lightBoxY.div(TILE_SIZE).floorInt()
|
for (y in lightBoxY.div(TILE_SIZE).floorInt()
|
||||||
..lightBoxY.plus(lightBoxH).div(TILE_SIZE).floorInt()) {
|
..lightBoxY.plus(lightBoxH).div(TILE_SIZE).floorInt()) {
|
||||||
for (x in lightBoxX.div(TILE_SIZE).floorInt()
|
for (x in lightBoxX.div(TILE_SIZE).floorInt()
|
||||||
..lightBoxX.plus(lightBoxW).div(TILE_SIZE).floorInt()) {
|
..lightBoxX.plus(lightBoxW).div(TILE_SIZE).floorInt()) {
|
||||||
|
|
||||||
val oldLight = lanternMap[LandUtil.getBlockAddr(world, x, y)] ?: Cvec(0) // if two or more luminous actors share the same block, mix the light
|
val oldLight = lanternMap[LandUtil.getBlockAddr(world, x, y)] ?: Cvec(0) // if two or more luminous actors share the same block, mix the light
|
||||||
val actorLight = colour
|
val actorLight = colour
|
||||||
|
|
||||||
lanternMap[LandUtil.getBlockAddr(world, x, y)] = oldLight.maxAndAssign(actorLight)
|
lanternMap[LandUtil.getBlockAddr(world, x, y)] = oldLight.maxAndAssign(actorLight)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// put shades to the area the luminantBox is occupying
|
// put shades to the area the luminantBox is occupying
|
||||||
shadeBoxCopy.forEach { (shadeBox, colour) ->
|
shadeBoxCopy.forEach { (shadeBox, colour) ->
|
||||||
val lightBoxX = it.hitbox.startX + (shadeBox.startX * scale)
|
val lightBoxX = it.hitbox.startX + (shadeBox.startX * scale)
|
||||||
val lightBoxY = it.hitbox.startY + (shadeBox.startY * scale)
|
val lightBoxY = it.hitbox.startY + (shadeBox.startY * scale)
|
||||||
val lightBoxW = shadeBox.width * scale
|
val lightBoxW = shadeBox.width * scale
|
||||||
val lightBoxH = shadeBox.height * scale
|
val lightBoxH = shadeBox.height * scale
|
||||||
for (y in lightBoxY.div(TILE_SIZE).floorInt()
|
for (y in lightBoxY.div(TILE_SIZE).floorInt()
|
||||||
..lightBoxY.plus(lightBoxH).div(TILE_SIZE).floorInt()) {
|
..lightBoxY.plus(lightBoxH).div(TILE_SIZE).floorInt()) {
|
||||||
for (x in lightBoxX.div(TILE_SIZE).floorInt()
|
for (x in lightBoxX.div(TILE_SIZE).floorInt()
|
||||||
..lightBoxX.plus(lightBoxW).div(TILE_SIZE).floorInt()) {
|
..lightBoxX.plus(lightBoxW).div(TILE_SIZE).floorInt()) {
|
||||||
|
|
||||||
val oldLight = shadowMap[LandUtil.getBlockAddr(world, x, y)] ?: Cvec(0) // if two or more luminous actors share the same block, mix the light
|
val oldLight = shadowMap[LandUtil.getBlockAddr(world, x, y)] ?: Cvec(0) // if two or more luminous actors share the same block, mix the light
|
||||||
val actorLight = colour
|
val actorLight = colour
|
||||||
|
|
||||||
shadowMap[LandUtil.getBlockAddr(world, x, y)] = oldLight.maxAndAssign(actorLight)
|
shadowMap[LandUtil.getBlockAddr(world, x, y)] = oldLight.maxAndAssign(actorLight)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user