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); }
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; } }
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(); }
// 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 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; }
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; }
public void Setup(SpringInfo spring) { Stiffness = spring.Stiffness; Damping = spring.Damping; Mass = spring.Mass; }
public SpringInfo(SpringInfo spring) { Setup(spring); }
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); }
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(); }
// 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); }
public SpringInfo(SpringInfo spring) { Setup(spring); }
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; } }
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); }