private void SetThirdPersonActionVars() { // Movement modifiers RunSpeed = 15f; AirSpeed = 15f; GroundAcceleration = 300f; AirAcceleration = 30f; SpeedDamp = 10f; AirSpeedDamp = 0.01f; SlideSpeed = 22f; // Gravity modifiers DownGravityAdd = 0; // Jump/Wall modifiers JumpVelocity = 16f; JumpBoostSpeed = 18f; JumpBoostRequiredSpeed = 12f; JumpBoostAdd = 10f; WallJumpThreshold = 8f; WallJumpBoost = 1.0f; WallJumpSpeed = 12f; WallRunLimit = 8f; WallRunJumpBoostSpeed = 20f; WallRunJumpBoostAdd = 10f; WallRunJumpSpeed = 12f; WallRunJumpUpSpeed = 12f; WallRunImpulse = 0.0f; WallRunSpeed = 15f; WallRunClimbCosAngle = Mathf.Cos(Mathf.Deg2Rad * 30f); // Toggles conserveUpwardMomentum = false; wallJumpEnabled = true; wallRunEnabled = false; wallClimbEnabled = true; ShortHopEnabled = true; JumpBoostEnabled = true; // Delegates accelerate = AccelerateStandard; // Timings JumpMeterSize = 0.3f; JumpMeterThreshold = JumpMeterSize / 3; jumpGracePeriod = 0.1f; BufferJumpGracePeriod = 0.1f; SlideGracePeriod = 0.2f; WallJumpGracePeriod = 0.1f; WallRunGracePeriod = 0.2f; WallClimbGracePeriod = 0.2f; ReGrabGracePeriod = 0.5f; MovingColliderGracePeriod = 0.01f; MovingPlatformGracePeriod = 0.1f; StuckGracePeriod = 0.2f; }
/// <summary> /// RK4 solver. /// </summary> /// <param name="trial">The current trial</param> /// <param name="state">State of the system (input / output)</param> /// <param name="dt">Time since last evaluation</param> /// <param name="accelFunction">Function to calculate acceleration</param> /// <param name="controlInput">The current joystick or forcing function input</param> private static void Integrate(Trial trial, AxisMotionState state, double dt, AccelerationFunction accelFunction, ControlInput controlInput) { AxisMotionDerivative a; AxisMotionDerivative b; AxisMotionDerivative c; AxisMotionDerivative d; double dadt; double dvdt; a = new AxisMotionDerivative(state.velocity, accelFunction(trial, state, controlInput)); b = RK4Evaluate(trial, state, dt * 0.5, a, controlInput, accelFunction); c = RK4Evaluate(trial, state, dt * 0.5, b, controlInput, accelFunction); d = RK4Evaluate(trial, state, dt, c, controlInput, accelFunction); dadt = 1.0 / 6.0 * (a.dAngle + 2.0 * (b.dAngle + c.dAngle) + d.dAngle); dvdt = 1.0 / 6.0 * (a.dVelocity + 2.0 * (b.dVelocity + c.dVelocity) + d.dVelocity); state.position += dadt * dt; state.velocity += dvdt * dt; state.acceleration = dvdt; }
/// <summary> /// Helper function for the RK4 solver. /// </summary> private static AxisMotionDerivative RK4Evaluate(Trial trial, AxisMotionState initial, double dt, AxisMotionDerivative d, ControlInput controlInput, AccelerationFunction accelFunction) { AxisMotionState state; state = new AxisMotionState(initial.position + d.dAngle * dt, initial.velocity + d.dVelocity * dt, initial.acceleration); return(new AxisMotionDerivative(state.velocity, accelFunction(trial, state, controlInput))); }