mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-16 02:56:09 -04:00
When moving horizontally and flying, your vertical fly speed should be same as magnitude of horizontal components (thanks Empy).
This commit is contained in:
parent
ae17538e4d
commit
398e775004
@ -227,15 +227,18 @@ namespace ClassicalSharp {
|
|||||||
float yMul = Math.Max( 1f, multiply / 5 ) * modifier;
|
float yMul = Math.Max( 1f, multiply / 5 ) * modifier;
|
||||||
|
|
||||||
if( TouchesAnyWater() && !flying && !noClip ) {
|
if( TouchesAnyWater() && !flying && !noClip ) {
|
||||||
Move( xMoving, zMoving, 0.02f * horMul, waterDrag, liquidGrav, 1 );
|
MoveNormal( xMoving, zMoving, 0.02f * horMul, waterDrag, liquidGrav, 1 );
|
||||||
} else if( TouchesAnyLava() && !flying && !noClip ) {
|
} else if( TouchesAnyLava() && !flying && !noClip ) {
|
||||||
Move( xMoving, zMoving, 0.02f * horMul, lavaDrag, liquidGrav, 1 );
|
MoveNormal( xMoving, zMoving, 0.02f * horMul, lavaDrag, liquidGrav, 1 );
|
||||||
} else if( TouchesAnyRope() && !flying && !noClip ) {
|
} else if( TouchesAnyRope() && !flying && !noClip ) {
|
||||||
Move( xMoving, zMoving, 0.02f * 1.7f, ropeDrag, ropeGrav, 1 );
|
MoveNormal( xMoving, zMoving, 0.02f * 1.7f, ropeDrag, ropeGrav, 1 );
|
||||||
} else {
|
} else {
|
||||||
float factor = !(flying || noClip) && onGround ? 0.1f : 0.02f;
|
float factor = !(flying || noClip) && onGround ? 0.1f : 0.02f;
|
||||||
float gravity = useLiquidGravity ? liquidGrav : normalGrav;
|
float gravity = useLiquidGravity ? liquidGrav : normalGrav;
|
||||||
Move( xMoving, zMoving, factor * horMul, normalDrag, gravity, yMul );
|
if( flying || noClip )
|
||||||
|
MoveFlying( xMoving, zMoving, factor * horMul, normalDrag, gravity, yMul );
|
||||||
|
else
|
||||||
|
MoveNormal( xMoving, zMoving, factor * horMul, normalDrag, gravity, yMul );
|
||||||
|
|
||||||
if( BlockUnderFeet == Block.Ice && !(flying || noClip) ) {
|
if( BlockUnderFeet == Block.Ice && !(flying || noClip) ) {
|
||||||
// limit components to +-0.25f by rescaling vector to [-0.25, 0.25]
|
// limit components to +-0.25f by rescaling vector to [-0.25, 0.25]
|
||||||
@ -260,8 +263,25 @@ namespace ClassicalSharp {
|
|||||||
Velocity += Utils.RotateY( x * multiply, 0, z * multiply, YawRadians );
|
Velocity += Utils.RotateY( x * multiply, 0, z * multiply, YawRadians );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Move( float xMoving, float zMoving, float factor, Vector3 drag, float gravity, float yMul ) {
|
void MoveFlying( float xMoving, float zMoving, float factor, Vector3 drag, float gravity, float yMul ) {
|
||||||
AdjHeadingVelocity( zMoving, xMoving, factor );
|
AdjHeadingVelocity( zMoving, xMoving, factor );
|
||||||
|
float yVel = (float)Math.Sqrt( Velocity.X * Velocity.X + Velocity.Z * Velocity.Z );
|
||||||
|
// make vertical speed the same as vertical speed.
|
||||||
|
if( (xMoving != 0 || zMoving != 0) && yVel > 0.001f ) {
|
||||||
|
Velocity.Y = 0;
|
||||||
|
yMul = 1;
|
||||||
|
if( flyingUp ) Velocity.Y += yVel;
|
||||||
|
if( flyingDown ) Velocity.Y -= yVel;
|
||||||
|
}
|
||||||
|
Move( xMoving, zMoving, factor, drag, gravity, yMul );
|
||||||
|
}
|
||||||
|
|
||||||
|
void MoveNormal( float xMoving, float zMoving, float factor, Vector3 drag, float gravity, float yMul ) {
|
||||||
|
AdjHeadingVelocity( zMoving, xMoving, factor );
|
||||||
|
Move( xMoving, zMoving, factor, drag, gravity, yMul );
|
||||||
|
}
|
||||||
|
|
||||||
|
void Move( float xMoving, float zMoving, float factor, Vector3 drag, float gravity, float yMul ) {
|
||||||
Velocity.Y *= yMul;
|
Velocity.Y *= yMul;
|
||||||
if( !noClip )
|
if( !noClip )
|
||||||
MoveAndWallSlide();
|
MoveAndWallSlide();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user