private void Fall(MoveSystemNeededProperty entity) { var body = entity.m_bodyProperty; var control = entity.m_controlProperty; ApplyForceUtils.AlignToVector(body[BodyPart.Head], body[BodyPart.Head].BodyTransform.forward, control.m_lookDirection, 0.1f, 20f); ApplyForceUtils.AlignToVector(body[BodyPart.Torso], body[BodyPart.Torso].BodyTransform.up, Vector3.up, 0.1f, 40f); ApplyForceUtils.AlignToVector(body[BodyPart.Torso], body[BodyPart.Torso].BodyTransform.forward, control.m_direction, 0.1f, 40f); ApplyForceUtils.AlignToVector(body[BodyPart.Hip], body[BodyPart.Hip].BodyTransform.up, Vector3.up, 0.1f, 20f); ApplyForceUtils.AlignToVector(body[BodyPart.Hip], body[BodyPart.Hip].BodyTransform.forward, control.m_direction, 0.1f, 20f); ApplyForceUtils.AlignToVector(body[BodyPart.LeftLeg], body[BodyPart.LeftLeg].BodyTransform.up, body[BodyPart.Hip].BodyTransform.up, 0.1f, 20f); ApplyForceUtils.AlignToVector(body[BodyPart.RightLeg], body[BodyPart.RightLeg].BodyTransform.up, body[BodyPart.Hip].BodyTransform.up, 0.1f, 20f); if (InputUtils.ValidMove(new Vector2(control.m_rawDirection.x, control.m_rawDirection.z))) { body[BodyPart.Torso].BodyRigid.AddForce(control.m_direction * 0.2f, ForceMode.VelocityChange); } }
private void Stand(MoveSystemNeededProperty entity) { var body = entity.m_bodyProperty; var control = entity.m_controlProperty; var state = entity.m_stateProperty; ApplyForceUtils.AlignToVector(body[BodyPart.Head], body[BodyPart.Head].BodyTransform.forward, control.m_lookDirection, 0.1f, 20f * control.m_applyForce, true); ApplyForceUtils.AlignToVector(body[BodyPart.Head], body[BodyPart.Head].BodyTransform.up, Vector3.up, 0.1f, 20f * control.m_applyForce, true); ApplyForceUtils.AlignToVector(body[BodyPart.Torso], body[BodyPart.Torso].BodyTransform.forward, control.m_direction, 0.1f, 40f * control.m_applyForce, true); ApplyForceUtils.AlignToVector(body[BodyPart.Torso], body[BodyPart.Torso].BodyTransform.up, Vector3.up, 0.1f, 40f * control.m_applyForce, true); ApplyForceUtils.AlignToVector(body[BodyPart.Hip], body[BodyPart.Hip].BodyTransform.forward, control.m_direction, 0.1f, 40f * control.m_applyForce, true); ApplyForceUtils.AlignToVector(body[BodyPart.Hip], body[BodyPart.Hip].BodyTransform.up, Vector3.up, 0.1f, 30f * control.m_applyForce, true); ApplyForceUtils.AlignToVector(body[BodyPart.LeftLeg], body[BodyPart.LeftLeg].BodyTransform.up, body[BodyPart.Hip].BodyTransform.up, 0.1f, 30f * control.m_applyForce); ApplyForceUtils.AlignToVector(body[BodyPart.RightLeg], body[BodyPart.RightLeg].BodyTransform.up, body[BodyPart.Hip].BodyTransform.up, 0.1f, 30f * control.m_applyForce); body[BodyPart.Torso].BodyRigid.AddForce(new Vector3(0, 4, 0) * control.m_applyForce, ForceMode.VelocityChange); body[BodyPart.Hip].BodyRigid.AddForce(new Vector3(0, -3.5f, 0) * control.m_applyForce, ForceMode.VelocityChange); body[BodyPart.Anchor].BodyRigid.angularVelocity = Vector3.zero; }
private void Run(MoveSystemNeededProperty neededProperty) { var state = neededProperty.m_stateProperty; var control = neededProperty.m_controlProperty; var movement = neededProperty.m_moveProperty; var body = neededProperty.m_bodyProperty; if (control.m_run) { movement.m_cycleSpeed = 0.18f; } else { movement.m_cycleSpeed = 0.23f; } if (state.m_state != state.m_lastState) { if (Random.Range(0, 1) == 1) { movement.m_leftLegPose = Pose.Bent; movement.m_rightLegPose = Pose.Straight; movement.m_leftArmPose = Pose.Straight; movement.m_rightArmPose = Pose.Bent; } else { movement.m_leftLegPose = Pose.Straight; movement.m_rightLegPose = Pose.Bent; movement.m_leftArmPose = Pose.Bent; movement.m_rightArmPose = Pose.Straight; } } RunCycleUpdate(movement); RunCycleRotateAnchor(control, body); RunCycleMainBody(control, movement, body); RunCyclePoseLeg(Side.Left, movement.m_leftLegPose, control, body); RunCyclePoseLeg(Side.Right, movement.m_rightLegPose, control, body); }
private void Jump(MoveSystemNeededProperty entity) { var state = entity.m_stateProperty; var control = entity.m_controlProperty; var body = entity.m_bodyProperty; if (state.m_state != state.m_lastState) { float runFactor = control.m_run ? 0.4f : 0.2f; if (control.m_jump) { Vector3 hipVelocity = body[BodyPart.Hip].BodyRigid.velocity; if (hipVelocity.y < 2f) { body[BodyPart.Torso].BodyRigid.AddForce(control.m_direction * runFactor, ForceMode.VelocityChange); body[BodyPart.Hip].BodyRigid.AddForce(control.m_direction * runFactor, ForceMode.VelocityChange); float torsoY = body[BodyPart.Torso].BodyTransform.position.y; float hipY = body[BodyPart.Hip].BodyTransform.position.y; if (torsoY > hipY) { Vector3 jumpForce = Vector3.up * 30f; body[BodyPart.Torso].BodyRigid.AddForce(jumpForce, ForceMode.VelocityChange); body[BodyPart.Hip].BodyRigid.AddForce(jumpForce, ForceMode.VelocityChange); } else { Vector3 jumpForce = Vector3.up * 15f; body[BodyPart.Torso].BodyRigid.AddForce(jumpForce, ForceMode.VelocityChange); body[BodyPart.Hip].BodyRigid.AddForce(jumpForce, ForceMode.VelocityChange); } } } control.m_jump = false; } if (InputUtils.ValidMove(new Vector2(control.m_rawDirection.x, control.m_rawDirection.z))) { body[BodyPart.Torso].BodyRigid.AddForce(Vector3.up * 2f, ForceMode.VelocityChange); body[BodyPart.Hip].BodyRigid.AddForce(Vector3.up * 2f, ForceMode.VelocityChange); ApplyForceUtils.AlignToVector( body[BodyPart.Torso], body[BodyPart.Torso].BodyTransform.up, Vector3.up, 0.1f, 10f); ApplyForceUtils.AlignToVector( body[BodyPart.Torso], body[BodyPart.Torso].BodyTransform.forward, control.m_direction + Vector3.down, 0.1f, 10f); ApplyForceUtils.AlignToVector( body[BodyPart.Hip], body[BodyPart.Hip].BodyTransform.up, Vector3.up, 0.1f, 10f); ApplyForceUtils.AlignToVector( body[BodyPart.Hip], body[BodyPart.Hip].BodyTransform.forward, control.m_direction + Vector3.up, 0.1f, 10f); ApplyForceUtils.AlignToVector( body[BodyPart.LeftArm], body[BodyPart.LeftArm].BodyTransform.up, body[BodyPart.Torso].BodyTransform.right + body[BodyPart.Torso].BodyTransform.forward, 0.1f, 4f); ApplyForceUtils.AlignToVector( body[BodyPart.LeftElbow], body[BodyPart.LeftArm].BodyTransform.up, body[BodyPart.Torso].BodyTransform.right - body[BodyPart.Torso].BodyTransform.forward, 0.1f, 4f); ApplyForceUtils.AlignToVector( body[BodyPart.RightArm], body[BodyPart.RightArm].BodyTransform.up, -body[BodyPart.Torso].BodyTransform.right + body[BodyPart.Torso].BodyTransform.forward, 0.1f, 4f); ApplyForceUtils.AlignToVector( body[BodyPart.RightElbow], body[BodyPart.RightElbow].BodyTransform.up, -body[BodyPart.Torso].BodyTransform.right - body[BodyPart.Torso].BodyTransform.forward, 0.1f, 4f); ApplyForceUtils.AlignToVector( body[BodyPart.LeftLeg], body[BodyPart.LeftLeg].BodyTransform.up, body[BodyPart.Hip].BodyTransform.up - body[BodyPart.Hip].BodyTransform.forward, 0.1f, 4f); ApplyForceUtils.AlignToVector( body[BodyPart.RightLeg], body[BodyPart.RightLeg].BodyTransform.up, body[BodyPart.Hip].BodyTransform.up - body[BodyPart.Hip].BodyTransform.forward, 0.1f, 4f); } }