public override void VirtualFixedUpdate(StateArgs args)
            {
                const float CLIMB_SPEED = 3.0f;

                var pargs = args as PlanetsStateArgs;

                m_TimeSinceLastMove += args.DeltaTime;
                if (m_TimeSinceLastMove > 0.1f)
                {
                    var oldPosOnRope_ws = m_Rope.RopePositionToWorld(m_RopePosition);
                    m_RopePosition = m_Rope.FindClosestRopePosition(oldPosOnRope_ws + args.DeltaTime * CLIMB_SPEED * args.m_RawControl_ws);

                    var link = m_Rope.GetLinkFromRopePosition(m_RopePosition);
                    if (link != null)
                    {
                        var ropePos_ws = m_Rope.RopePositionToWorld(m_RopePosition);
                        m_CreatedHingeJoint.connectedBody   = link.GetComponent <Rigidbody>();
                        m_CreatedHingeJoint.connectedAnchor = link.transform.InverseTransformPoint(ropePos_ws);
                    }
                }

                // Hacky ways to keep player on rope
                //args.RigidBody.velocity = m_Rope.RopePositionToWorld(m_RopePosition) - args.m_Character.transform.position;
                //args.RigidBody.velocity = Vector3.zero;
                //args.m_Character.transform.position = m_Rope.RopePositionToWorld(m_RopePosition);

                if (args.m_Jump)
                {
                    RemoveHingeJoint();
                    if (args.m_RawControl_controller.y >= 0.0f)
                    {
                        pargs.m_PlanetsCharacter.DoJump(args.m_RawControl_ws.x * 5.0f);
                    }
                    else
                    {
                        // Drop?
                        args.ChangeState(pargs.m_PlanetsCharacter.m_InAirState.Init(0.0f));
                    }
                }
            }
            void SetJumpBootsThrusters(StateArgs args, bool newJumpBootsThrusters)
            {
                if (m_JumpBootsThrusters != newJumpBootsThrusters)
                {
                    var jb = args.m_Character.m_JumpBootsThrusters;
                    if (jb != null)
                    {
                        if (newJumpBootsThrusters)
                        {
                            jb.gameObject.SetActive(true);
                            jb.Play(true);
                        }
                        else
                        {
                            //hps.gameObject.SetActive(false);
                            jb.Stop();
                        }
                    }

                    m_JumpBootsThrusters = newJumpBootsThrusters;
                }
            }
 public override void UpdateAnimator(StateArgs args)
 {
     args.UpdateAnimator(args.m_Move, false);
 }
            public override void VirtualFixedUpdate(StateArgs args)
            {
                bool newJumpBootsThrusters = false;

                if (m_yVel < 3.0f)
                {
                    m_JumpBoostFirstAllowed = true;
                }
                if (args.m_JumpBoost && m_JumpBoostFirstAllowed && m_JumpBoostAllowed > 0.0f)
                {
                    bool consumed = ConsumeJumpBoots(args);
                    newJumpBootsThrusters = consumed;
                    if (consumed && m_yVel < 3.0f)
                    {
                        m_JumpBoostAllowed -= args.DeltaTime;
                        m_yVel             += args.DeltaTime * 20.0f;
                    }
                }
                SetJumpBootsThrusters(args, newJumpBootsThrusters);

                //@TODO replace with sliding on steep ground state- allow jumping if there is ground below
                if (args.m_Character.m_IsGrounded && m_yVel < 0.0f && args.m_Jump)
                {
                    m_yVel = args.m_Character.m_JumpPower;
                }
                // Stuck?
                float lastDist = (args.m_GameObject.transform.position - m_LastPosition).magnitude;

                if (lastDist < 0.05f)
                {
                    if (m_yVel < -6.0f)
                    {
                        m_Stuck += args.DeltaTime;
                    }
                    else
                    {
                        m_Stuck = 0.0f;
                    }

                    if (m_Stuck > 0.4f)
                    {
                        m_yVel  = 15.0f;
                        m_Stuck = 0.0f;
                    }
                }
                m_LastPosition = args.m_GameObject.transform.position;

                m_yVel -= args.DeltaTime * 9.8f;

                args.m_Character.HandleAirborneMovement();
                // Did we hit the ground?
                if (args.m_Character.GroundedFlat && m_yVel <= 0.0f)
                {
                    TwoDee.EasySound.Play("land", args.m_GameObject);
                    args.m_Character.ChangeState(args.m_Character.m_WalkingState);
                    FallDamage(args, -m_yVel);
                }
                var vel = args.m_Character.m_Rigidbody.velocity;

                // Take out forward velocity, put it back again
                var velup = Vector3.Dot(args.m_Character.transform.up, vel);

                vel  = m_yVel * args.m_Character.transform.up;
                vel += args.m_Character.transform.forward * args.m_Move.z * 3.0f * args.m_Character.MoveSpeedMultiplier;
                args.m_Character.m_Rigidbody.velocity = vel;

                base.VirtualFixedUpdate(args);
            }
 public virtual bool ConsumeJumpBoots(StateArgs args)
 {
     return(false);
 }
 public override void VirtualExit(StateArgs args)
 {
     SetJumpBootsThrusters(args, false);
 }
 public override void VirtualExit(StateArgs args)
 {
 }
 public override void VirtualEnter(StateArgs args)
 {
 }
 public override void VirtualExit(StateArgs args)
 {
     args.m_Character.m_Capsule.material = args.m_Character.m_ZeroFrictionMaterial;
 }
Exemple #10
0
 public override void VirtualFixedUpdate(StateArgs args)
 {
     base.VirtualFixedUpdate(args);
     PlanetsStateHelper.SharedFixedUpdate(args);
 }
Exemple #11
0
 public override void VirtualExit(StateArgs args)
 {
     EnableCharacter(args, true);
 }
Exemple #12
0
 public override void VirtualExit(StateArgs args)
 {
     RemoveHingeJoint();
 }
Exemple #13
0
 public override void VirtualFixedUpdate(StateArgs args)
 {
     args.m_Character.GetComponent<Rigidbody>().velocity = Vector3.zero;
     base.VirtualFixedUpdate(args);
 }