Skip to content

Commit 1a7adc2

Browse files
committed
redo extendon formula to be more realistic
1 parent 0f57b2e commit 1a7adc2

File tree

2 files changed

+25
-13
lines changed

2 files changed

+25
-13
lines changed

common/src/main/kotlin/org/valkyrienskies/clockwork/content/physicalities/extendon/ExtendonBlockEntity.kt

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,24 @@ import org.joml.Quaterniond
1414
import org.joml.Vector3d
1515
import org.valkyrienskies.clockwork.ClockworkMod
1616
import org.valkyrienskies.clockwork.content.logistics.gas.IHeatableBlockEntity
17+
import org.valkyrienskies.clockwork.util.AerodynamicUtils
1718
import org.valkyrienskies.clockwork.util.universal_joint.IUniversalJoint
1819
import org.valkyrienskies.core.api.ships.properties.ShipId
20+
import org.valkyrienskies.core.api.world.properties.DimensionId
1921
import org.valkyrienskies.core.apigame.joints.*
2022
import org.valkyrienskies.core.apigame.joints.VSD6Joint.D6Axis
2123
import org.valkyrienskies.core.apigame.joints.VSD6Joint.D6Motion
22-
import org.valkyrienskies.kelvin.api.ConnectionType
23-
import org.valkyrienskies.kelvin.api.DuctEdge
24-
import org.valkyrienskies.kelvin.api.DuctNodePos
24+
import org.valkyrienskies.kelvin.api.*
2525
import org.valkyrienskies.kelvin.api.edges.PipeDuctEdge
2626
import org.valkyrienskies.kelvin.util.KelvinExtensions.toDuctNodePos
2727
import org.valkyrienskies.mod.common.getShipManagingPos
2828
import org.valkyrienskies.mod.common.shipObjectWorld
2929
import org.valkyrienskies.mod.common.util.toJOMLD
3030
import java.lang.IllegalStateException
3131
import java.util.EnumMap
32+
import org.valkyrienskies.kelvin.api.DuctNetwork.Companion.idealGasConstant
33+
import org.valkyrienskies.mod.api.dimensionId
34+
import kotlin.math.PI
3235

3336
class ExtendonBlockEntity(type: BlockEntityType<*>?, pos: BlockPos, state: BlockState?) : SmartBlockEntity(type, pos, state), IUniversalJoint, IHeatableBlockEntity {
3437

@@ -57,13 +60,12 @@ class ExtendonBlockEntity(type: BlockEntityType<*>?, pos: BlockPos, state: Block
5760
val kelvin = ClockworkMod.getKelvin()
5861
val serverLevel = level as ServerLevel
5962

60-
val pressure = kelvin.getPressureAt(getDuctNodePosition()) + kelvin.getPressureAt(connectedBe!!.getDuctNodePosition())
61-
val distance = pressureToDistance(pressure)
63+
val distance = gasToDistance(kelvin, getDuctNodePosition(), level.dimensionId!!)
6264

6365

6466
val tempJoint = VSJointAndId(distanceJointId!!, VSDistanceJoint(distanceJoint!!.shipId0, distanceJoint!!.pose0, distanceJoint!!.shipId1, distanceJoint!!.pose1, minDistance = distance, maxDistance = distance))
6567

66-
serverLevel.shipObjectWorld.updateConstraint(distanceJointId!!, tempJoint.joint)
68+
if (distance >= 0.15) serverLevel.shipObjectWorld.updateConstraint(distanceJointId!!, tempJoint.joint)
6769
distanceJoint = tempJoint.joint as VSDistanceJoint
6870
}
6971

@@ -205,14 +207,24 @@ class ExtendonBlockEntity(type: BlockEntityType<*>?, pos: BlockPos, state: Block
205207
}
206208

207209
companion object {
208-
val force = 10000
209-
val radius = 1
210210

211-
fun pressureToDistance(pressure: Double): Float {
212-
val area = pressure / force
213-
val height = area/(2 * Math.PI * radius) - radius
211+
// Calculates volume of cylinder via Ideal Gas Law, and then calculates said cylinder's height
212+
// Doesn't account for the elastic force of the hose, because doing so would require solving a cubic polynomial
213+
fun gasToDistance(network: DuctNetwork<*>, pos: DuctNodePos, dimensionId: DimensionId): Float {
214+
var moles = 0.0
215+
for (gas in network.getGasMassAt(pos)) moles += gas.value / ( gas.key.density * 22.4)
214216

215-
return (height + 0.5).toFloat()
217+
if (moles < 0.01) return 0f
218+
219+
val pressure = AerodynamicUtils.getAirPressureForY(pos.y, dimensionId)
220+
val temperature = network.getTemperatureAt(pos)
221+
222+
val volume = temperature*idealGasConstant*moles/pressure
223+
val height = 4 * volume / PI
224+
225+
println("m $moles, p $pressure, t $temperature, v $volume, d $height ")
226+
227+
return height.toFloat()
216228
}
217229

218230
fun getQuaterniond(direction: Direction): Quaterniond {

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ org.gradle.daemon=false
55
# Identity
66
mod_name=clockwork
77
mod_id=vs_clockwork
8-
mod_version=0.2.1
8+
mod_version=0.2.3
99
archives_base_name=clockwork
1010
maven_group=org.valkyrienskies
1111

0 commit comments

Comments
 (0)