/// <summary> /// Initialise the spring /// </summary> public void Init(VectorGridPoint point1, VectorGridPoint point2, GridSpringType springType, float stiffness, float damping, float restDistanceScalar) { m_Point1 = point1; m_Point2 = point2; m_SpringType = springType; m_Stiffness = stiffness; m_Damping = damping; m_RestDistance = Vector3.Distance(m_Point1.m_OriginalPosition, m_Point2.m_OriginalPosition) * restDistanceScalar; }
/// <summary> /// Inits the grid - creates a grid of points at the appropriate positions /// </summary> public void InitGrid() { m_ThickLineSpacingX = Mathf.Max(m_ThickLineSpacingX, 1); m_ThickLineSpacingY = Mathf.Max(m_ThickLineSpacingY, 1); if(m_RenderMode == RenderMode.Sphere) { int latitudes = m_GridWidth; int longitudes = m_GridHeight; float radius = m_GridScale; float latitudeIncrement = 360.0f / latitudes; float longitudeIncrement = 180.0f / longitudes; m_VectorGridPoints = new VectorGridPoint[m_GridWidth + 1, m_GridHeight + 1]; int uIndex = 0; int tIndex = 0; for (float u = 0; u < 360.0f; u += latitudeIncrement) { for (float t = 0; t < 180.0f; t += longitudeIncrement) { float rad = radius; Vector3 position; Color spawnColor = (uIndex % m_ThickLineSpacingX == 0 || tIndex % m_ThickLineSpacingY == 0) ? m_ThickLineSpawnColor : m_ThinLineSpawnColor; position.x = (float) (rad * Mathf.Sin(Mathf.Deg2Rad * t) * Mathf.Sin(Mathf.Deg2Rad * u)); position.y = (float) (rad * Mathf.Cos(Mathf.Deg2Rad * t)); position.z = (float) (rad * Mathf.Sin(Mathf.Deg2Rad * t) * Mathf.Cos(Mathf.Deg2Rad * u)); m_VectorGridPoints[uIndex, tIndex] = new VectorGridPoint(position, m_VectorGridPointMass, m_VelocityDamping, spawnColor, m_MaxFogDistance, m_MaxFogAlphaScale, m_TwoWayFog); tIndex++; } tIndex = 0; uIndex++; } } else { m_VectorGridPoints = new VectorGridPoint[m_GridWidth, m_GridHeight]; for(int x = 0; x < m_GridWidth; x++) { for(int y = 0; y < m_GridHeight; y++) { Color spawnColor = (x % m_ThickLineSpacingX == 0 || y % m_ThickLineSpacingY == 0) ? m_ThickLineSpawnColor : m_ThinLineSpawnColor; Vector3 position = new Vector3((x * m_GridScale) - (m_GridScale * m_GridWidth * 0.5f), (y * m_GridScale) - (m_GridScale * m_GridHeight * 0.5f), 0.0f); m_VectorGridPoints[x, y] = new VectorGridPoint(position, m_VectorGridPointMass, m_VelocityDamping, spawnColor, m_MaxFogDistance, m_MaxFogAlphaScale, m_TwoWayFog); } } } InitSprings(); BuildMesh(); }
/// <summary> /// Connect this grid point to another with a spring /// </summary> public void ConnectTo(VectorGridPoint other, VectorGridSpring.GridSpringType springType, float stiffness, float damping, float restDistanceScalar) { m_GridSpring[(int)springType].Init(this, other, springType, stiffness, damping, restDistanceScalar); }
/// <summary> /// Resets the bodies, thereby disconnecting the spring /// </summary> public void Reset() { m_Point1 = null; m_Point2 = null; }