Exemplo n.º 1
0
    private void OnValidate()
    {
        if (path == null)
        {
            return;
        }

        for (int i = 0; i < pathAlignObjects.Length; i++)
        {
            PathAlignObject pao = pathAlignObjects[i];
            if (pao.transform != null)
            {
                Vector3 position  = path.GetPoint(pao.alpha);
                Vector3 direction = path.GetDirection(pao.alpha);
                Vector3 normal    = path.GetNormal(pao.alpha);

                pao.transform.position = position + Quaternion.AngleAxis(pao.offsetAngle, direction) * (normal * pao.offset);

                Quaternion lookRot = Quaternion.identity;
                if (pao.alignDirection == AlignDirection.ZForward)
                {
                    lookRot = Quaternion.AngleAxis(pao.rotAngle, direction) * Quaternion.LookRotation(direction, normal);
                }
                else
                {
                    lookRot = Quaternion.AngleAxis(pao.rotAngle, direction) * Quaternion.LookRotation(normal, direction);
                }

                pao.transform.rotation = lookRot;
            }
        }
    }
Exemplo n.º 2
0
    private void AddEdgeLoop(float iter, int numIter, Vector3?forwardOverride = null)
    {
        Vector3 point = path.GetPoint(iter);

        Vector3 forward = path.GetDirection(iter);

        if (forwardOverride.HasValue)
        {
            forward = forwardOverride.Value;
        }

        Vector3 right = path.GetNormal(iter);
        Vector3 up    = Vector3.Cross(forward, right).normalized;

        right = Vector3.Cross(up, forward).normalized;

        float yAlpha = dists[numIter] / pathLength;

        if (float.IsNaN(yAlpha))
        {
            yAlpha = 0f;
        }

        Color color = Color.black;

        if (colorVerts)
        {
            color = colorGradient.Evaluate(yAlpha);
        }

        float widthMod = 1f;

        if (variableWidth)
        {
            widthMod = widthCurve.Evaluate(yAlpha);
        }

        int numVerts = verts.Count;
        int startNum = (subdivisions + 1) * numIter;

        for (int i = startNum; i <= startNum + subdivisions; i++)
        {
            float xAlpha = (i - startNum) / (float)subdivisions;

            Vector3 offset = right * Mathf.Cos(xAlpha * LuckshotMath.TAU) + up * Mathf.Sin(xAlpha * LuckshotMath.TAU);
            Vector3 vert   = point + offset * path.Radius * widthMod;

            verts.Add(transform.InverseTransformPoint(vert));
            normals.Add(transform.InverseTransformVector(offset));
            uvs.Add(new Vector2(xAlpha, dists[numIter]));

            if (colorVerts)
            {
                colors.Add(color);
            }

            if (numIter == 0)
            {
                if (i > startNum)
                {
                    indices.Add(0);
                    indices.Add(i + 1);
                    indices.Add(i);
                }
            }
            else
            {
                if (iter == fillAmount)
                {
                    if (i > startNum)
                    {
                        indices.Add(i);
                        indices.Add(i + 1);
                        indices.Add(startNum + (subdivisions + 1) + 1);
                    }
                }

                if (i > startNum)
                {
                    indices.Add(i + 1);
                    indices.Add(i);
                    indices.Add(i - (subdivisions + 1));


                    indices.Add(i + 1 - (subdivisions + 1));
                    indices.Add(i + 1);
                    indices.Add(i - (subdivisions + 1));
                }
            }
        }
    }