mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-07 12:21:52 +09:00
more belt graphics
This commit is contained in:
@@ -2,12 +2,10 @@ 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.terrarum.App
|
import net.torvald.terrarum.*
|
||||||
import net.torvald.terrarum.INGAME
|
|
||||||
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZED
|
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZED
|
||||||
import net.torvald.terrarum.gameactors.ActorWithBody
|
import net.torvald.terrarum.gameactors.ActorWithBody
|
||||||
import net.torvald.terrarum.inUse
|
import net.torvald.terrarum.modulebasegame.worldgenerator.HALF_PI
|
||||||
import net.torvald.terrarum.tryDispose
|
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import kotlin.math.*
|
import kotlin.math.*
|
||||||
|
|
||||||
@@ -34,6 +32,7 @@ class ActorConveyors : ActorWithBody {
|
|||||||
cy2 = 0.0
|
cy2 = 0.0
|
||||||
|
|
||||||
r = 0.5 * TILE_SIZED.minus(2)
|
r = 0.5 * TILE_SIZED.minus(2)
|
||||||
|
l = 0.0
|
||||||
c = 0
|
c = 0
|
||||||
|
|
||||||
btx1 = 0.0
|
btx1 = 0.0
|
||||||
@@ -52,7 +51,8 @@ class ActorConveyors : ActorWithBody {
|
|||||||
val x2: Int // always positive
|
val x2: Int // always positive
|
||||||
val y2: Int
|
val y2: Int
|
||||||
|
|
||||||
private val s: Double // belt length
|
private val s: Double // belt length (total)
|
||||||
|
private val l: Double // belt length (single straight part)
|
||||||
private val c: Int // segment counts
|
private val c: Int // segment counts
|
||||||
|
|
||||||
private val di: Double // inclination deg
|
private val di: Double // inclination deg
|
||||||
@@ -79,10 +79,10 @@ class ActorConveyors : ActorWithBody {
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private val COL_BELT = Color(0x444444ff)
|
private val COL_BELT = Color(0x444444ff)
|
||||||
private val COL_BELT_ALT = Color(0x666666ff)
|
private val COL_BELT_TOP = Color(0x666666ff)
|
||||||
|
|
||||||
private val COL_BELT_TOP = Color(0x666666ff.toInt())
|
private val COL_BELT_ALT = Color(0x888888ff.toInt())
|
||||||
private val COL_BELT_TOP_ALT = Color(0x999999ff.toInt())
|
private val COL_BELT_TOP_ALT = Color(0xccccccff.toInt())
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transient private var shapeRender = App.makeShapeRenderer()
|
@Transient private var shapeRender = App.makeShapeRenderer()
|
||||||
@@ -103,6 +103,7 @@ class ActorConveyors : ActorWithBody {
|
|||||||
this.y2 = y2
|
this.y2 = y2
|
||||||
|
|
||||||
s = calcBeltLength(x1, y1, x2, y2)
|
s = calcBeltLength(x1, y1, x2, y2)
|
||||||
|
l = calcBeltLengthStraightPart(x1, y1, x2, y2)
|
||||||
|
|
||||||
di = atan2(this.y2.toDouble() - this.y1, this.x1.toDouble() - this.x2)
|
di = atan2(this.y2.toDouble() - this.y1, this.x1.toDouble() - this.x2)
|
||||||
dd = atan2(this.y1.toDouble() - this.y2, this.x2.toDouble() - this.x1)
|
dd = atan2(this.y1.toDouble() - this.y2, this.x2.toDouble() - this.x1)
|
||||||
@@ -113,7 +114,7 @@ class ActorConveyors : ActorWithBody {
|
|||||||
cy2 = (this.y2 + 0.5) * TILE_SIZED
|
cy2 = (this.y2 + 0.5) * TILE_SIZED
|
||||||
|
|
||||||
r = 0.5 * TILE_SIZED.minus(2)
|
r = 0.5 * TILE_SIZED.minus(2)
|
||||||
c = (s / 8).roundToInt() * 2 // 4px segments rounded towards nearest even number
|
c = (s / 4).roundToInt() * 2 // 4px segments rounded towards nearest even number
|
||||||
|
|
||||||
btx1 = cx1 + r * sin(di)
|
btx1 = cx1 + r * sin(di)
|
||||||
bty1 = cy1 + r * cos(di)
|
bty1 = cy1 + r * cos(di)
|
||||||
@@ -127,7 +128,10 @@ class ActorConveyors : ActorWithBody {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun calcBeltLength(x1: Int, y1: Int, x2: Int, y2: Int) =
|
private fun calcBeltLength(x1: Int, y1: Int, x2: Int, y2: Int) =
|
||||||
2 * (hypot((x2 - x1) * TILE_SIZED, (y2 - y1) * TILE_SIZED) + Math.PI * TILE_SIZED / 2)
|
2 * (calcBeltLengthStraightPart(x1, y1, x2, y2) + Math.PI * TILE_SIZED / 2)
|
||||||
|
|
||||||
|
private fun calcBeltLengthStraightPart(x1: Int, y1: Int, x2: Int, y2: Int) =
|
||||||
|
hypot((x2 - x1) * TILE_SIZED, (y2 - y1) * TILE_SIZED)
|
||||||
|
|
||||||
|
|
||||||
override fun drawBody(frameDelta: Float, batch: SpriteBatch) {
|
override fun drawBody(frameDelta: Float, batch: SpriteBatch) {
|
||||||
@@ -146,6 +150,19 @@ class ActorConveyors : ActorWithBody {
|
|||||||
// right arc
|
// right arc
|
||||||
drawArcOnWorld(cx2, cy2, r, di, -Math.PI, 2f)
|
drawArcOnWorld(cx2, cy2, r, di, -Math.PI, 2f)
|
||||||
|
|
||||||
|
// draw belt stripes under
|
||||||
|
it.color = COL_BELT_ALT
|
||||||
|
val segmentLen = s / c
|
||||||
|
val topSegRemainder = l % segmentLen
|
||||||
|
for (i in 0 until c) {
|
||||||
|
val x1 = btx1 + r * sin(di - HALF_PI) * (i - turn + 0.00) * segmentLen
|
||||||
|
val y1 = bty1 + r * cos(di - HALF_PI) * (i - turn + 0.00) * segmentLen
|
||||||
|
val x2 = btx1 + r * sin(di - HALF_PI) * (i - turn + 0.25) * segmentLen
|
||||||
|
val y2 = bty1 + r * cos(di - HALF_PI) * (i - turn + 0.25) * segmentLen
|
||||||
|
|
||||||
|
drawLineOnWorld(x1, y1, x2, y2, 2f)
|
||||||
|
}
|
||||||
|
|
||||||
it.color = COL_BELT_TOP
|
it.color = COL_BELT_TOP
|
||||||
// belt top
|
// belt top
|
||||||
drawLineOnWorld(btx1, bty1 - 0.5f, btx2, bty2 - 0.5f, 1f)
|
drawLineOnWorld(btx1, bty1 - 0.5f, btx2, bty2 - 0.5f, 1f)
|
||||||
|
|||||||
Reference in New Issue
Block a user