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; }
public override void VirtualFixedUpdate(StateArgs args) { base.VirtualFixedUpdate(args); PlanetsStateHelper.SharedFixedUpdate(args); }
public override void VirtualExit(StateArgs args) { EnableCharacter(args, true); }
public override void VirtualExit(StateArgs args) { RemoveHingeJoint(); }
public override void VirtualFixedUpdate(StateArgs args) { args.m_Character.GetComponent<Rigidbody>().velocity = Vector3.zero; base.VirtualFixedUpdate(args); }