Skip to content

Commit 9098469

Browse files
authored
Merge pull request #31 from TechTastic/1.20.x/2.4
Update to 2.4
2 parents e3eeba4 + 7d6b8ea commit 9098469

File tree

21 files changed

+914
-494
lines changed

21 files changed

+914
-494
lines changed

common/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ dependencies {
1818
modApi("org.valkyrienskies:valkyrienskies-120-common:${rootProject.vs2_version}")
1919

2020
compileOnly("org.valkyrienskies.core:api:${rootProject.vs_core_version}")
21-
compileOnly("org.valkyrienskies.core:api-game:${rootProject.vs_core_version}")
21+
compileOnly("org.valkyrienskies.core:internal:${rootProject.vs_core_version}")
2222
compileOnly("org.valkyrienskies.core:util:${rootProject.vs_core_version}")
2323
compileOnly("org.valkyrienskies.core:impl:${rootProject.vs_core_version}")
2424

common/src/main/java/io/github/techtastic/cc_vs/mixin/ShipObjectWorldAccessor.java

Lines changed: 0 additions & 16 deletions
This file was deleted.

common/src/main/kotlin/io/github/techtastic/cc_vs/CCVSMod.kt

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,18 @@
11
package io.github.techtastic.cc_vs
22

33
import dan200.computercraft.api.ComputerCraftAPI
4-
import dan200.computercraft.shared.computer.core.ServerContext
5-
import dev.architectury.event.events.common.LifecycleEvent
4+
import io.github.techtastic.cc_vs.apis.AerodynamicsAPI
5+
import io.github.techtastic.cc_vs.apis.DragAPI
66
import io.github.techtastic.cc_vs.apis.ShipAPI
7-
import io.github.techtastic.cc_vs.ship.PhysTickEventHandler
8-
import io.github.techtastic.cc_vs.ship.PhysicsTicksEventHandler
9-
import org.valkyrienskies.core.impl.hooks.VSEvents
107

118
object CCVSMod {
129
const val MOD_ID = "cc_vs"
13-
lateinit var context: ServerContext
1410

1511
@JvmStatic
1612
fun init() {
17-
LifecycleEvent.SERVER_STARTED.register { context = ServerContext.get(it) }
18-
1913
ComputerCraftAPI.registerAPIFactory(::ShipAPI)
20-
21-
VSEvents.shipLoadEvent.on { huh -> huh.ship.setAttachment(PhysTickEventHandler::class.java, null) }
22-
23-
VSEvents.tickEndEvent.on { huh -> huh.world.loadedShips.forEach { ship ->
24-
PhysicsTicksEventHandler.getOrCreateControl(ship).resetData()
25-
} }
14+
ComputerCraftAPI.registerAPIFactory(::AerodynamicsAPI)
15+
ComputerCraftAPI.registerAPIFactory(::DragAPI)
2616
}
2717

2818
@JvmStatic

common/src/main/kotlin/io/github/techtastic/cc_vs/PlatformUtils.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package io.github.techtastic.cc_vs
22

3-
import dan200.computercraft.shared.computer.core.ServerComputer
43
import dev.architectury.injectables.annotations.ExpectPlatform
54

65
object PlatformUtils {
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
package io.github.techtastic.cc_vs.apis
2+
3+
import dan200.computercraft.api.lua.IArguments
4+
import dan200.computercraft.api.lua.IComputerSystem
5+
import dan200.computercraft.api.lua.ILuaAPI
6+
import dan200.computercraft.api.lua.LuaFunction
7+
import org.valkyrienskies.core.api.VsBeta
8+
import org.valkyrienskies.core.api.util.AerodynamicUtils
9+
import org.valkyrienskies.core.api.util.GameTickOnly
10+
import org.valkyrienskies.core.api.world.properties.DimensionId
11+
import org.valkyrienskies.mod.api.positionToWorld
12+
import org.valkyrienskies.mod.common.ValkyrienSkiesMod
13+
import org.valkyrienskies.mod.common.dimensionId
14+
15+
class AerodynamicsAPI(private val system: IComputerSystem): ILuaAPI {
16+
val dimensionId: DimensionId
17+
get() = system.level.dimensionId
18+
19+
@OptIn(GameTickOnly::class, VsBeta::class)
20+
val utils: AerodynamicUtils?
21+
get() = ValkyrienSkiesMod.api.getServerShipWorld()?.aerodynamicUtils
22+
23+
override fun getNames() = arrayOf("aerodynamics", "aero")
24+
25+
@OptIn(VsBeta::class)
26+
val defaultMax: Double
27+
@LuaFunction
28+
get() = AerodynamicUtils.DEFAULT_MAX
29+
30+
@OptIn(VsBeta::class)
31+
val defaultSeaLevel: Double
32+
@LuaFunction
33+
get() = AerodynamicUtils.DEFAULT_SEA_LEVEL
34+
35+
@OptIn(VsBeta::class)
36+
val dragCoefficient: Double
37+
@LuaFunction
38+
get() = AerodynamicUtils.DRAG_COEFFICIENT
39+
40+
@OptIn(VsBeta::class)
41+
val gravitationalAcceleration: Double
42+
@LuaFunction
43+
get() = AerodynamicUtils.GRAVITATIONAL_ACCELERATION
44+
45+
@OptIn(VsBeta::class)
46+
val universalGasConstant: Double
47+
@LuaFunction
48+
get() = AerodynamicUtils.UNIVERSAL_GAS_CONSTANT
49+
50+
@OptIn(VsBeta::class)
51+
val airMolarMass: Double
52+
@LuaFunction
53+
get() = AerodynamicUtils.AIR_MOLAR_MASS
54+
55+
@OptIn(VsBeta::class)
56+
@LuaFunction
57+
fun getAtmosphericParameters(): Map<String, Double>? {
58+
utils?.let { utils ->
59+
val (maxY, seaLevel, gravity) = utils.getAtmosphereForDimension(dimensionId)
60+
return mapOf(
61+
"maxY" to maxY,
62+
"seaLevel" to seaLevel,
63+
"gravity" to gravity
64+
)
65+
}
66+
return null
67+
}
68+
69+
@OptIn(VsBeta::class)
70+
@LuaFunction
71+
fun getAirDensity(args: IArguments): Double? {
72+
val y = args.optDouble(0, system.level.positionToWorld(system.position.center).y)
73+
return utils?.getAirDensityForY(y, dimensionId)
74+
}
75+
76+
@OptIn(VsBeta::class)
77+
@LuaFunction
78+
fun getAirPressure(args: IArguments): Double? {
79+
val y = args.optDouble(0, system.level.positionToWorld(system.position.center).y)
80+
return utils?.getAirPressureForY(y, dimensionId)
81+
}
82+
83+
@OptIn(VsBeta::class)
84+
@LuaFunction
85+
fun getAirTemperature(args: IArguments): Double? {
86+
val y = args.optDouble(0, system.level.positionToWorld(system.position.center).y)
87+
return utils?.getAirTemperatureForY(y, dimensionId)
88+
}
89+
}
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
package io.github.techtastic.cc_vs.apis
2+
3+
import dan200.computercraft.api.lua.IArguments
4+
import dan200.computercraft.api.lua.IComputerSystem
5+
import dan200.computercraft.api.lua.ILuaAPI
6+
import dan200.computercraft.api.lua.LuaException
7+
import dan200.computercraft.api.lua.LuaFunction
8+
import io.github.techtastic.cc_vs.util.CCVSUtils.toLua
9+
import io.github.techtastic.cc_vs.util.CCVSUtils.verifyAdmin
10+
import org.joml.*
11+
import org.valkyrienskies.core.api.VsBeta
12+
import org.valkyrienskies.core.api.ships.LoadedServerShip
13+
import org.valkyrienskies.core.api.util.GameTickOnly
14+
import org.valkyrienskies.mod.common.*
15+
import java.lang.Math
16+
17+
open class DragAPI(val system: IComputerSystem) : ILuaAPI {
18+
@OptIn(GameTickOnly::class)
19+
val ship: LoadedServerShip
20+
get() = system.level.getLoadedShipManagingPos(system.position)
21+
?: throw LuaException("This computer is not on a Ship!")
22+
23+
override fun getNames(): Array<out String>? = arrayOf("drag")
24+
25+
@OptIn(VsBeta::class, GameTickOnly::class)
26+
@LuaFunction
27+
fun getDragForce() = ship.dragController?.getDragForce()?.toLua()
28+
29+
@OptIn(VsBeta::class, GameTickOnly::class)
30+
@LuaFunction
31+
fun getLiftForce() = ship.dragController?.getLiftForce()?.toLua()
32+
33+
@OptIn(VsBeta::class, GameTickOnly::class)
34+
@LuaFunction
35+
fun enableDrag() {
36+
verifyAdmin(system)
37+
ship.dragController?.enableDrag()
38+
}
39+
40+
@OptIn(VsBeta::class, GameTickOnly::class)
41+
@LuaFunction
42+
fun disableDrag() {
43+
verifyAdmin(system)
44+
ship.dragController?.disableDrag()
45+
}
46+
47+
@OptIn(VsBeta::class, GameTickOnly::class)
48+
@LuaFunction
49+
fun enableLift() {
50+
verifyAdmin(system)
51+
ship.dragController?.enableLift()
52+
}
53+
54+
@OptIn(VsBeta::class, GameTickOnly::class)
55+
@LuaFunction
56+
fun disableLift() {
57+
verifyAdmin(system)
58+
ship.dragController?.disableLift()
59+
}
60+
61+
@OptIn(VsBeta::class, GameTickOnly::class)
62+
@LuaFunction
63+
fun enableRotDrag() {
64+
verifyAdmin(system)
65+
ship.dragController?.enableRotDrag()
66+
}
67+
68+
@OptIn(VsBeta::class, GameTickOnly::class)
69+
@LuaFunction
70+
fun disableRotDrag() {
71+
verifyAdmin(system)
72+
ship.dragController?.disableRotDrag()
73+
}
74+
75+
@OptIn(VsBeta::class, GameTickOnly::class)
76+
@LuaFunction
77+
fun setWindDirection(x: Double, y: Double, z: Double) {
78+
verifyAdmin(system)
79+
ship.dragController?.setWindDirection(x, y, z)
80+
}
81+
82+
@OptIn(VsBeta::class, GameTickOnly::class)
83+
@LuaFunction
84+
fun setWindSpeed(speed: Double) {
85+
verifyAdmin(system)
86+
ship.dragController?.setWindSpeed(speed)
87+
}
88+
89+
@OptIn(VsBeta::class, GameTickOnly::class)
90+
@LuaFunction
91+
fun applyWindImpulse(args: IArguments) {
92+
verifyAdmin(system)
93+
val x = args.getDouble(0)
94+
val y = args.getDouble(1)
95+
val z = args.getDouble(2)
96+
val speed = Math.min(args.getDouble(4), 0.0)
97+
ship.dragController?.applyWindImpulse(Vector3d(x, y, z), speed)
98+
}
99+
}

common/src/main/kotlin/io/github/techtastic/cc_vs/apis/LuaPhysShip.kt

Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@ package io.github.techtastic.cc_vs.apis
22

33
import dan200.computercraft.api.lua.LuaFunction
44
import io.github.techtastic.cc_vs.util.CCVSUtils.toLua
5-
import org.valkyrienskies.core.api.VSBeta
6-
import org.valkyrienskies.core.api.ships.ShipForcesInducer
7-
import org.valkyrienskies.core.impl.game.ships.PhysInertia
8-
import org.valkyrienskies.core.impl.game.ships.PhysShipImpl
5+
import org.valkyrienskies.core.api.ships.PhysShip
6+
import org.valkyrienskies.core.api.util.PhysTickOnly
97

108
data class LuaPhysShip(
119
private val buoyantFactor: Double,
@@ -15,24 +13,20 @@ data class LuaPhysShip(
1513
private val poseVel: Map<String, Map<String, Double>>,
1614
private val forceInducers: List<String>
1715
) {
18-
@OptIn(VSBeta::class)
19-
constructor(physShip: PhysShipImpl): this(
16+
@OptIn(PhysTickOnly::class)
17+
constructor(physShip: PhysShip): this(
2018
physShip.buoyantFactor, physShip.isStatic, physShip.doFluidDrag,
21-
physShip.inertia.let { inertia ->
22-
mapOf(
23-
Pair("momentOfInertiaTensor", inertia.momentOfInertiaTensor.toLua()),
24-
Pair("mass", inertia.shipMass)
25-
)
26-
},
27-
physShip.poseVel.let { poseVel ->
28-
mapOf(
29-
Pair("vel", poseVel.vel.toLua()),
30-
Pair("omega", poseVel.omega.toLua()),
31-
Pair("pos", poseVel.pos.toLua()),
32-
Pair("rot", poseVel.rot.toLua())
33-
)
34-
},
35-
physShip.forceInducers.map(ShipForcesInducer::toString)
19+
mapOf(
20+
Pair("momentOfInertia", physShip.momentOfInertia.toLua()),
21+
Pair("mass", physShip.mass)
22+
),
23+
mapOf(
24+
Pair("vel", physShip.velocity.toLua()),
25+
Pair("omega", physShip.angularVelocity.toLua()),
26+
Pair("pos", physShip.centerOfMass.toLua()),
27+
Pair("rot", physShip.transform.shipToWorldRotation.toLua())
28+
),
29+
listOf()
3630
)
3731

3832
@LuaFunction

0 commit comments

Comments
 (0)