package com.projectsacrifice.game; /** Immutable release-tuned physics constants shared by realtime and deterministic automation. */ public final class PhysicsConfig { private static final PhysicsConfig RELEASE = new PhysicsConfig( 1, 1f / 60f, 1_800f, 370f, 880f, 0.13f, 0.14f, 0.78f, 0.10f, 0.12f, 0.24f, 0.32f, 16); private final int version; private final float fixedStepSeconds; private final float gravity; private final float runSpeed; private final float jumpSpeed; private final float coyoteSeconds; private final float jumpBufferSeconds; private final float respawnSeconds; private final float turnSeconds; private final float landSeconds; private final float interactSeconds; private final float stunnedSeconds; private final int maximumBodies; private PhysicsConfig(int version, float fixedStepSeconds, float gravity, float runSpeed, float jumpSpeed, float coyoteSeconds, float jumpBufferSeconds, float respawnSeconds, float turnSeconds, float landSeconds, float interactSeconds, float stunnedSeconds, int maximumBodies) { this.version = version; this.fixedStepSeconds = fixedStepSeconds; this.gravity = gravity; this.runSpeed = runSpeed; this.jumpSpeed = jumpSpeed; this.coyoteSeconds = coyoteSeconds; this.jumpBufferSeconds = jumpBufferSeconds; this.respawnSeconds = respawnSeconds; this.turnSeconds = turnSeconds; this.landSeconds = landSeconds; this.interactSeconds = interactSeconds; this.stunnedSeconds = stunnedSeconds; this.maximumBodies = maximumBodies; } public static PhysicsConfig release() { return RELEASE; } public int version() { return version; } public float fixedStepSeconds() { return fixedStepSeconds; } public float gravity() { return gravity; } public float runSpeed() { return runSpeed; } public float jumpSpeed() { return jumpSpeed; } public float coyoteSeconds() { return coyoteSeconds; } public float jumpBufferSeconds() { return jumpBufferSeconds; } public float respawnSeconds() { return respawnSeconds; } public float turnSeconds() { return turnSeconds; } public float landSeconds() { return landSeconds; } public float interactSeconds() { return interactSeconds; } public float stunnedSeconds() { return stunnedSeconds; } public int maximumBodies() { return maximumBodies; } }