diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaConfig.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaConfig.kt index b856ba7d..1c39f18e 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaConfig.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/EurekaConfig.kt @@ -120,6 +120,14 @@ object EurekaConfig { @JsonSchema(description = "How fast a ship will stop. 1 = fast stop, 0 = slow stop") var linearStabilizeMaxAntiVelocity = 1.0 + // Instability scaled with mass and squared speed + @JsonSchema(description = "Stronger stabilization with higher mass, less at higher speeds.") + var scaledInstability = 1000.0 + + // Unscaled linear instability cased by speed + @JsonSchema(description = "Less stabilization at higher speed.") + var unscaledInstability = 0.271828 + @JsonSchema(description = "How fast a ship will stop and accelerate.") var linearMassScaling = 0.0002 diff --git a/common/src/main/kotlin/org/valkyrienskies/eureka/ship/Stabilize.kt b/common/src/main/kotlin/org/valkyrienskies/eureka/ship/Stabilize.kt index eddd391c..40b375b1 100644 --- a/common/src/main/kotlin/org/valkyrienskies/eureka/ship/Stabilize.kt +++ b/common/src/main/kotlin/org/valkyrienskies/eureka/ship/Stabilize.kt @@ -6,6 +6,7 @@ import org.valkyrienskies.core.api.ships.PhysShip import org.valkyrienskies.core.impl.game.ships.PhysShipImpl import org.valkyrienskies.eureka.EurekaConfig import kotlin.math.atan +import kotlin.math.max fun stabilize( ship: PhysShipImpl, @@ -46,7 +47,9 @@ fun stabilize( ) ) - stabilizationTorque.mul(EurekaConfig.SERVER.stabilizationTorqueConstant) + val speed = ship.poseVel.vel.length() + + stabilizationTorque.mul(EurekaConfig.SERVER.stabilizationTorqueConstant / max(1.0, speed * speed * EurekaConfig.SERVER.scaledInstability / ship.inertia.shipMass + speed * EurekaConfig.SERVER.unscaledInstability)) forces.applyInvariantTorque(stabilizationTorque) if (linear) {