public HkCharacterStateType GetState() { if (!this.m_isDynamic) { return(this.CharacterProxy.GetState()); } HkCharacterStateType state = this.CharacterRigidBody.GetState(); if (state != HkCharacterStateType.HK_CHARACTER_ON_GROUND) { this.m_airFrameCounter++; } if (state == HkCharacterStateType.HK_CHARACTER_ON_GROUND) { this.m_airFrameCounter = 0; } if ((state == HkCharacterStateType.HK_CHARACTER_IN_AIR) && (this.m_airFrameCounter < 8)) { state = HkCharacterStateType.HK_CHARACTER_ON_GROUND; } if (this.AtLadder) { state = HkCharacterStateType.HK_CHARACTER_CLIMBING; } return(state); }
public void SetState(HkCharacterStateType state) { if (m_isDynamic) { CharacterRigidBody.SetState(state); } else { CharacterProxy.SetState(state); } }
void OnCharacterStateChanged(HkCharacterStateType newState) { if (m_currentMovementState != MyCharacterMovementEnum.Died) { var jetpack = JetpackComp; bool canFly = jetpack != null && jetpack.Running; if (!canFly) { if (m_currentJumpTime == 0 && (newState == HkCharacterStateType.HK_CHARACTER_IN_AIR) || ((int)newState == MyCharacter.HK_CHARACTER_FLYING)) { StartFalling(); } else { if (m_isFalling) { StopFalling(); } } } } m_currentCharacterState = newState; //MyTrace.Watch("CharacterState", newState.ToString()); }
public unsafe void MoveAndRotate(ref Vector3 moveIndicator, ref Vector2 rotationIndicator, float roll, bool canRotate) { MyCharacterProxy characterProxy = base.Character.Physics.CharacterProxy; this.ThrustComp.ControlThrust = Vector3.Zero; base.Character.SwitchAnimation(MyCharacterMovementEnum.Flying, true); base.Character.SetCurrentMovementState(MyCharacterMovementEnum.Flying); MyCharacterMovementFlags movementFlags = base.Character.MovementFlags; MyCharacterMovementFlags flags2 = base.Character.MovementFlags; this.IsFlying = !(moveIndicator.LengthSquared() == 0f); HkCharacterStateType type = (characterProxy != null) ? characterProxy.GetState() : HkCharacterStateType.HK_CHARACTER_ON_GROUND; if ((type == HkCharacterStateType.HK_CHARACTER_IN_AIR) || (type == ((HkCharacterStateType)5))) { base.Character.PlayCharacterAnimation("Jetpack", MyBlendOption.Immediate, MyFrameOption.Loop, 0.2f, 1f, false, null, false); base.Character.CanJump = true; } MatrixD worldMatrix = base.Character.WorldMatrix; if (canRotate) { MatrixD identity = MatrixD.Identity; MatrixD xd3 = MatrixD.Identity; MatrixD xd4 = MatrixD.Identity; if (Math.Abs(rotationIndicator.X) > float.Epsilon) { if (base.Character.Definition.VerticalPositionFlyingOnly) { base.Character.SetHeadLocalXAngle(base.Character.HeadLocalXAngle - (rotationIndicator.X * base.Character.RotationSpeed)); } else { identity = MatrixD.CreateFromAxisAngle(worldMatrix.Right, (double)((-rotationIndicator.X * base.Character.RotationSpeed) * 0.02f)); } } if (Math.Abs(rotationIndicator.Y) > float.Epsilon) { xd3 = MatrixD.CreateFromAxisAngle(worldMatrix.Up, (double)((-rotationIndicator.Y * base.Character.RotationSpeed) * 0.02f)); } if (!base.Character.Definition.VerticalPositionFlyingOnly && (Math.Abs(roll) > float.Epsilon)) { xd4 = MatrixD.CreateFromAxisAngle(worldMatrix.Forward, (double)(roll * 0.02f)); } float y = base.Character.ModelCollision.BoundingBoxSizeHalf.Y; MatrixD xd7 = worldMatrix.GetOrientation() * ((identity * xd3) * xd4); MatrixD *xdPtr1 = (MatrixD *)ref xd7; xdPtr1.Translation = (base.Character.Physics.GetWorldMatrix().Translation + (worldMatrix.Up * y)) - (xd7.Up * y); base.Character.WorldMatrix = xd7; base.Character.ClearShapeContactPoints(); } Vector3 position = moveIndicator; if (base.Character.Definition.VerticalPositionFlyingOnly) { float num2 = Math.Sign(base.Character.HeadLocalXAngle); double x = Math.Abs(MathHelper.ToRadians(base.Character.HeadLocalXAngle)); double y = 1.95; double num5 = Math.Pow(x, y) * (x / Math.Pow((double)MathHelper.ToRadians((float)89f), y)); position = (Vector3)Vector3D.Transform(position, MatrixD.CreateFromAxisAngle(Vector3D.Right, num2 * num5)); } if (!Vector3.IsZero(position)) { position.Normalize(); } MyJetpackThrustComponent thrustComp = this.ThrustComp; thrustComp.ControlThrust += position * this.ForceMagnitude; }