Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 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 void SetState(HkCharacterStateType state)
 {
     if (m_isDynamic)
     {
         CharacterRigidBody.SetState(state);
     }
     else
     {
         CharacterProxy.SetState(state);
     }
 }
Exemplo n.º 5
0
        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;
        }