public void Setup(SpringInfo a, SpringInfo b, float springChangeTime)
 {
     var amount = MathHelper.Saturate(springChangeTime);
     Stiffness = MathHelper.SmoothStep(a.Stiffness, b.Stiffness, amount);
     Damping = MathHelper.SmoothStep(a.Damping, b.Damping, amount);
     Mass = MathHelper.SmoothStep(a.Mass, b.Mass, amount);
 }
Ejemplo n.º 2
0
    private void makeSpring(NodeInfo node1, NodeInfo node2, SpringType springType)
    {
        SpringInfo newSpringInfo = new SpringInfo();

        newSpringInfo.Node1      = node1;
        newSpringInfo.Node2      = node2;
        newSpringInfo.SpringType = springType;


        springs.Add(newSpringInfo);


        if (initSpringRenderers == true)
        {
            GameObject nodeRender = (GameObject)Instantiate(debugRenderer, Vector3.zero, Quaternion.identity);
            LineDraw   nodeDraw   = nodeRender.GetComponent <LineDraw>();
            nodeDraw.vertices.Add(node1.WorldPosition);
            nodeDraw.vertices.Add(node2.WorldPosition);
            nodeDraw.colorStart = Color.white;
            nodeDraw.colorEnd   = Color.red;

            nodeRender.transform.parent        = transform;
            springLineRenderers[newSpringInfo] = nodeDraw;
        }
    }
Ejemplo n.º 3
0
            public void Setup(SpringInfo a, SpringInfo b, float springChangeTime)
            {
                var amount = MathHelper.Saturate(springChangeTime);

                Stiffness = MathHelper.SmoothStep(a.Stiffness, b.Stiffness, amount);
                Damping   = MathHelper.SmoothStep(a.Damping, b.Damping, amount);
                Mass      = MathHelper.SmoothStep(a.Mass, b.Mass, amount);
            }
        static MyThirdPersonSpectator()
        {
            LookAt = MySession.Is25DSector ? new Vector3(0, 130, 65) : new Vector3(0, 20, 50);

            NormalSpring   = new SpringInfo(10000, 1414, 50);
            StrafingSpring = new SpringInfo(36000, 2683, 50);
            AngleSpring    = new SpringInfo(30, 14.5f, 2);

            m_targetSpring  = NormalSpring;
            m_currentSpring = new SpringInfo(NormalSpring);
        }
        //private readonly List<HkBodyCollision> m_hkBodyCollisions = new List<HkBodyCollision>(32);

        public MyThirdPersonSpectator()
        {
            Static       = this;
            NormalSpring = new SpringInfo(20000, 1114, 50);
            //StrafingSpring = new SpringInfo(36000, 2683, 50);
            //AngleSpring = new SpringInfo(30, 14.5f, 2);

            //m_targetSpring = NormalSpring;
            m_currentSpring = new SpringInfo(NormalSpring);

            m_lookAt        = m_lookAtDirection * m_lookAtDefaultLength;
            m_clampedlookAt = m_lookAt;

            m_saveSettings = false;

            ResetViewerDistance();
        }
Ejemplo n.º 6
0
 // Sets inner state (like target spring properties) which depends on ship movement type i.e. strafe
 private void SetState(Vector3 moveIndicator, Vector2 rotationIndicator, float rollIndicator)
 {
     if (rollIndicator < float.Epsilon &&
         (Math.Abs(moveIndicator.X) > float.Epsilon || Math.Abs(moveIndicator.Y) > float.Epsilon) &&
         Math.Abs(moveIndicator.Z) < float.Epsilon)
     {
         if (m_targetSpring != StrafingSpring)
         {
             m_springChangeTime = 0;
             m_targetSpring     = StrafingSpring;
         }
     }
     else if (m_targetSpring != NormalSpring)
     {
         m_springChangeTime = 0;
         m_targetSpring     = NormalSpring;
     }
 }
Ejemplo n.º 7
0
        public MyThirdPersonSpectator()
        {
            Static         = this;
            NormalSpring   = new SpringInfo(20000, 1114, 50);
            StrafingSpring = new SpringInfo(36000, 2683, 50);
            AngleSpring    = new SpringInfo(30, 14.5f, 2);

            m_targetSpring  = NormalSpring;
            m_currentSpring = new SpringInfo(NormalSpring);

            m_lookAt = LOOK_AT_DIRECTION * LOOK_AT_DEFAULT_LENGTH;

            m_saveSettings = false;

            ResetDistance();

            for (int i = 0; i < m_lastShapeCastDistance.Length; ++i)
            {
                m_lastShapeCastDistance[i] = float.PositiveInfinity;
            }
        }
 public void Setup(SpringInfo spring)
 {
     Stiffness = spring.Stiffness;
     Damping = spring.Damping;
     Mass = spring.Mass;
 }
Ejemplo n.º 9
0
    private void computeSpringForces(SpringInfo springInfo)
    {
        NodeInfo node1Info = springInfo.Node1;

        NodeInfo node2Info = springInfo.Node2;

        // figure out the type of spring; set local spring constants relevant to that type

        float springConstant  = 0.0f;
        float dampingConstant = 0.0f;
        float restLength      = 0.0f;

        switch (springInfo.SpringType)
        {
        case SpringType.bend:
            springConstant  = bendSpringConstant;
            dampingConstant = bendDampingConstant;
            restLength      = bendSpringRestLength;
            break;

        case SpringType.manhattan:
            springConstant  = manhattanSpringConstant;
            dampingConstant = manhattanDampingConstant;
            restLength      = manhattanSpringRestLength;
            break;

        case SpringType.shear:
            springConstant  = shearSpringConstant;
            dampingConstant = shearDampingConstant;
            restLength      = shearSpringRestLength;
            break;

        case SpringType.structural:
            springConstant  = structuralSpringConstant;
            dampingConstant = structuralDampingConstant;
            restLength      = structuralSpringRestLength;
            break;
        }



        // Spring force: multiply the negative spring constant (the tendancy of the spring to remain at rest length) by
        // the rest length minus the distance between the two nodes.

        Vector3 vectorBetween     = node2Info.WorldPosition - node1Info.WorldPosition;
        Vector3 vectorBetweenNorm = vectorBetween.normalized;

        float nodeDistance = Vector3.Distance(node1Info.WorldPosition, node2Info.WorldPosition);
        float springForce  = -springConstant * (restLength - nodeDistance);

        // Damping force: multiply the negative damping constant (i dunno what that means) by the velocity of the first node minus the
        // velocity of the second node.

        // Next, we find the 1D velocities
        float node1Velocity = Vector3.Dot(vectorBetweenNorm, node1Info.Velocity);
        float node2Velocity = Vector3.Dot(vectorBetweenNorm, node2Info.Velocity);

        float damperForce = -dampingConstant * (node1Velocity - node2Velocity);

        // Add the two forces to compute the spring-damper force on the first node, the spring-damper force on the second node is negative
        // spring-damper on the first.

        float springDamperForce = springForce + damperForce;

        // Now, that we've found 1D force, map it back into 3D

        Vector3 force1 = springDamperForce * vectorBetweenNorm;
        Vector3 force2 = -force1;

        // Apply the forces
        node1Info.Force += force1;
        node2Info.Force += force2;
    }
Ejemplo n.º 10
0
 public void Setup(SpringInfo spring)
 {
     Stiffness = spring.Stiffness;
     Damping   = spring.Damping;
     Mass      = spring.Mass;
 }
Ejemplo n.º 11
0
 public SpringInfo(SpringInfo spring)
 {
     Setup(spring);
 }
Ejemplo n.º 12
0
 public void Setup(SpringInfo a, SpringInfo b, float springChangeTime)
 {
     Stiffness = MathHelper.SmoothStep(a.Stiffness, b.Stiffness, springChangeTime);
     Damping = MathHelper.SmoothStep(a.Damping, b.Damping, springChangeTime);
     Mass = MathHelper.SmoothStep(a.Mass, b.Mass, springChangeTime);
 }
Ejemplo n.º 13
0
        public MyThirdPersonSpectator()
        {
            Static = this;
            NormalSpring = new SpringInfo(20000, 1114, 50);
            //StrafingSpring = new SpringInfo(36000, 2683, 50);
            //AngleSpring = new SpringInfo(30, 14.5f, 2);

            //m_targetSpring = NormalSpring;
            m_currentSpring = new SpringInfo(NormalSpring);

            m_lookAt = m_lookAtDirectionCharacter * m_lookAtDefaultLength;
            m_clampedlookAt = m_lookAt;

            m_saveSettings = false;

            ResetViewerDistance();
        }
Ejemplo n.º 14
0
 // Sets inner state (like target spring properties) which depends on ship movement type i.e. strafe
 private void SetState(Vector3 moveIndicator, Vector2 rotationIndicator, float rollIndicator)
 {
     if (rollIndicator < float.Epsilon &&
         (Math.Abs(moveIndicator.X) > float.Epsilon || Math.Abs(moveIndicator.Y) > float.Epsilon) &&
         Math.Abs(moveIndicator.Z) < float.Epsilon)
     {
         if (m_targetSpring != StrafingSpring)
         {
             m_springChangeTime = 0;
             m_targetSpring = StrafingSpring;
         }
     }
     else if (m_targetSpring != NormalSpring)
     {
         m_springChangeTime = 0;
         m_targetSpring = NormalSpring;
     }
 }
 public void Setup(SpringInfo a, SpringInfo b, float springChangeTime)
 {
     Stiffness = MathHelper.SmoothStep(a.Stiffness, b.Stiffness, springChangeTime);
     Damping   = MathHelper.SmoothStep(a.Damping, b.Damping, springChangeTime);
     Mass      = MathHelper.SmoothStep(a.Mass, b.Mass, springChangeTime);
 }
Ejemplo n.º 16
0
 public SpringInfo(SpringInfo spring)
 {
     Setup(spring);
 }
Ejemplo n.º 17
0
        public MyThirdPersonSpectator()
        {
            Static = this;
            NormalSpring = new SpringInfo(20000, 1114, 50);
            StrafingSpring = new SpringInfo(36000, 2683, 50);
            AngleSpring = new SpringInfo(30, 14.5f, 2);

            m_targetSpring = NormalSpring;
            m_currentSpring = new SpringInfo(NormalSpring);

            m_lookAt = LOOK_AT_DIRECTION * LOOK_AT_DEFAULT_LENGTH;

            m_saveSettings = false;

            ResetDistance();

            for (int i = 0; i < m_lastShapeCastDistance.Length; ++i)
            {
                m_lastShapeCastDistance[i] = float.PositiveInfinity;
            }
        }
Ejemplo n.º 18
0
        static MyThirdPersonSpectator()
        {
            LookAt = MySession.Is25DSector ? new Vector3(0, 130, 65) : new Vector3(0, 20, 50);

            NormalSpring = new SpringInfo(10000, 1414, 50);
            StrafingSpring = new SpringInfo(36000, 2683, 50);
            AngleSpring = new SpringInfo(30, 14.5f, 2);

            m_targetSpring = NormalSpring;
            m_currentSpring = new SpringInfo(NormalSpring);
        }