SetControlPointMode() public method

public SetControlPointMode ( int index, BezierControlPointMode mode ) : void
index int
mode BezierControlPointMode
return void
Example #1
0
    void Awake()
    {
        float xCenterOffset = _bodyScale * (float)(_horizontalQuads - 1) / 2f;

        // Generate mesh from piece info
        MeshFilter meshFilter = GetComponent <MeshFilter>();

        List <Vector3> vertices  = new List <Vector3>();
        List <Vector2> uvs       = new List <Vector2>();
        List <int>     triangles = new List <int>();

        int appliedVerticalQuads = _verticalQuads * _bodyLength;

        for (int y = 0; y < appliedVerticalQuads; y++)
        {
            for (int x = 0; x < _horizontalQuads; x++)
            {
                vertices.Add(new Vector3(x * _bodyScale - xCenterOffset, y * _bodyScale));
                uvs.Add(new Vector2(x / (float)(_horizontalQuads - 1), y / (float)(appliedVerticalQuads - 1)));

                if (x != 0 && y != 0)
                {
                    int topRight    = y * _horizontalQuads + x;
                    int topLeft     = y * _horizontalQuads + x - 1;
                    int bottomRight = (y - 1) * _horizontalQuads + x;
                    int bottomLeft  = (y - 1) * _horizontalQuads + x - 1;

                    triangles.Add(bottomLeft);
                    triangles.Add(topLeft);
                    triangles.Add(topRight);

                    triangles.Add(bottomRight);
                    triangles.Add(bottomLeft);
                    triangles.Add(topRight);
                }
            }
        }

        Mesh mesh = meshFilter.mesh;

        mesh.Clear();

        mesh.vertices  = vertices.ToArray();
        mesh.uv        = uvs.ToArray();
        mesh.triangles = triangles.ToArray();
        mesh.UploadMeshData(false);

        // Generate texture from pieces

        List <Texture2D> texturesToStitch = new List <Texture2D>();

        texturesToStitch.Add(_feetTextures[Random.Range(0, _feetTextures.Length)]);
        for (int i = 0; i < _bodyLength - 2; i++)
        {
            texturesToStitch.Add(_bodyTextures[Random.Range(0, _bodyTextures.Length)]);
        }
        texturesToStitch.Add(_topTextures[Random.Range(0, _topTextures.Length)]);

        int totalHeight = _bodyLength * texturesToStitch[0].height;

        int prevY = 0;

        _stitchedTexture = new Texture2D(texturesToStitch[0].width, totalHeight);
        for (int i = 0; i < texturesToStitch.Count; i++)
        {
            _stitchedTexture.SetPixels(0, prevY, texturesToStitch[i].width, texturesToStitch[i].height, texturesToStitch[i].GetPixels());
            prevY += texturesToStitch[i].height;
        }

        _stitchedTexture.Apply();
        renderer.material.SetTexture("_MainTex", _stitchedTexture);

        int colorPairIndex = Random.Range(0, _colorPairs.Length);

        renderer.material.SetColor("_FurColor", _colorPairs[colorPairIndex].furColor);
        renderer.material.SetColor("_SkinColor", _colorPairs[colorPairIndex].skinColor);

        Renderer handRenderer = FindObjectOfType <MonsterArmTag>().renderer;

        handRenderer.material.SetColor("_FurColor", _colorPairs[colorPairIndex].furColor);
        handRenderer.material.SetColor("_SkinColor", _colorPairs[colorPairIndex].skinColor);

        // Generate paths for guys to travel along
        // F**k this forever
        for (int i = 0; i < _numPathsToCreate; i++)
        {
            GameObject guyPathObj = new GameObject("GuyPath", typeof(BezierSpline));
            guyPathObj.transform.parent = transform;
            BezierSpline guyPathSpline = guyPathObj.GetComponent <BezierSpline>();

            guyPathSpline.Reset();
            for (int j = 0; j < texturesToStitch.Count - 1; j++)
            {
                guyPathSpline.AddCurve();
            }

            for (int j = 0; j < guyPathSpline.ControlPointCount; j++)
            {
                if (j == 0)
                {
                    // Set at one of the foot points
                    guyPathSpline.SetControlPoint(j, Vector3.zero + Vector3.right * _footSpawnXOffset * Mathf.Sign(Random.value - 0.5f));
                    guyPathSpline.SetControlPoint(j + 1, guyPathSpline.GetControlPoint(j) + Vector3.up);
                }
                else if (j == guyPathSpline.ControlPointCount - 1)
                {
                    // Last point
                    guyPathSpline.SetControlPoint(j, Vector3.up * _bodyScale * (appliedVerticalQuads - _verticalQuads / 2f));
                    guyPathSpline.SetControlPoint(j - 1, guyPathSpline.GetControlPoint(j) - Vector3.up);
                }
                else if (j % 3 == 0)
                {
                    guyPathSpline.SetControlPoint(j, Vector3.up * j / 3f * _verticalQuads * _bodyScale + Vector3.right * Random.Range(-_spawnXOffset, _spawnXOffset));

                    guyPathSpline.SetControlPointMode(j, BezierControlPointMode.Mirrored);
                    guyPathSpline.SetControlPoint(j + 1, guyPathSpline.GetControlPoint(j) + Vector3.up);
                }
            }
        }

        // Setup collider
        BoxCollider2D boxCollider = gameObject.AddComponent <BoxCollider2D>();

        Vector2 boxScale = boxCollider.size;

        boxScale.Scale(_boxSizeScale);

        boxCollider.size = boxScale;
    }
    // Use this for initialization
    void Start()
    {
        randomSpline.Reset();

        int totalCurves = Random.Range(30, 50);

        for (int i = 1; i < totalCurves; i++)
        {
            randomSpline.AddCurve();
        }

        Vector3 point = Vector3.zero;
        float   radiusX = 10f, radiusY = 20f;
        float   radiusAmount = 0f;

        for (int i = 0; i < randomSpline.CurveCount; i++)
        {
            radiusAmount = ((float)i / randomSpline.CurveCount) * (2 * Mathf.PI);
            point        = new Vector3(radiusX * Mathf.Cos(radiusAmount), 0f, radiusY * Mathf.Sin(radiusAmount));       //+
            //new Vector3(Random.Range (-0.5f, 0.5f), 0f, Random.Range (-0.5f, 0.5f));

            point = radiusSize * point;

            randomSpline.SetControlPointMode(i * 3, BezierControlPointMode.Free);
            randomSpline.SetControlPoint(i * 3, point);

            if (i * 3 - 1 >= 0)
            {
                randomSpline.SetControlPoint(i * 3 - 1, point);
            }

            if (i * 3 + 1 < randomSpline.ControlPointCount)
            {
                randomSpline.SetControlPoint(i * 3 + 1, point);
            }
        }

        randomSpline.SetControlPoint(randomSpline.ControlPointCount - 1, point);

        Vector3 lastPoint = randomSpline.GetControlPoint(0);

        for (int i = 1; i < randomSpline.CurveCount; i++)
        {
            point = randomSpline.GetControlPoint(i * 3);

            Vector3 crossVector = Vector3.Cross(point - lastPoint, Vector3.up);

            Vector3 p1 = point + 0.5f * roadSize * crossVector.normalized;
            Vector3 p2 = point - 0.5f * roadSize * crossVector.normalized;

            meshBuilder.Vertices.Add(p1);
            meshBuilder.Vertices.Add(point);
            meshBuilder.Vertices.Add(p2);

            lastPoint = point;
        }

        int baseIndex = 0;
        int sizeX     = 2;
        int sizeY     = randomSpline.CurveCount - 2;

        int vi = baseIndex;

        for (int y = 0; y < sizeY; y++, vi++)
        {
            for (int x = 0; x < sizeX; x++, vi++)
            {
                meshBuilder.AddTriangle(vi, vi + sizeX + 1, vi + 1);
                meshBuilder.AddTriangle(vi + 1, vi + sizeX + 1, vi + sizeX + 2);

                if (y == sizeY - 1)
                {
                    meshBuilder.AddTriangle(vi + sizeX + 1, baseIndex + x, vi + sizeX + 2);
                    meshBuilder.AddTriangle(baseIndex + x + 1, vi + sizeX + 2, baseIndex + x);
                }
            }
        }

        GetComponent <MeshFilter> ().mesh = meshBuilder.CreateMesh();
    }
    private void DrawSelectedPointInspector()
    {
        GUILayout.BeginVertical("box");
        GUILayout.Label("Selected Point: " + selectedIndex);
        GUILayout.Space(5);

        EditorGUI.BeginChangeCheck();
        Vector3 point = EditorGUILayout.Vector3Field("Position", spline.GetControlPoint(selectedIndex));

        if (EditorGUI.EndChangeCheck())
        {
            Undo.RecordObject(spline, "Move Point");
            EditorUtility.SetDirty(spline);
            spline.SetControlPoint(selectedIndex, point);
        }
        GUILayout.Space(5);

        EditorGUI.BeginChangeCheck();
        BezierControlPointMode mode = (BezierControlPointMode)
                                      EditorGUILayout.EnumPopup("Mode", spline.GetControlPointMode(selectedIndex));

        if (EditorGUI.EndChangeCheck())
        {
            Undo.RecordObject(spline, "Change Point Mode");
            spline.SetControlPointMode(selectedIndex, mode);
            EditorUtility.SetDirty(spline);
        }

        GUILayout.Space(5);

        EditorGUI.BeginChangeCheck();
        float zRotation = EditorGUILayout.FloatField("Z Rotation At Point", spline.zRotationAtPoint[(selectedIndex + 1) / 3]);

        if (EditorGUI.EndChangeCheck())
        {
            Undo.RecordObject(spline, "Variable change");
            int index = (selectedIndex + 1) / 3;
            EditorUtility.SetDirty(spline);
            spline.zRotationAtPoint[index] = zRotation;

            if (spline.Loop && (index == spline.zRotationAtPoint.Length - 1 || index == 0))
            {
                spline.zRotationAtPoint[index] = spline.zRotationAtPoint[0] = zRotation;
            }
        }
        GUILayout.Space(5);

        EditorGUI.BeginChangeCheck();
        Vector3 scale = EditorGUILayout.Vector3Field("Scale Factor", spline.scaleFactor3d[(selectedIndex + 1) / 3]);

        if (EditorGUI.EndChangeCheck())
        {
            Undo.RecordObject(spline, "Variable change");
            int index = (selectedIndex + 1) / 3;
            EditorUtility.SetDirty(spline);
            spline.scaleFactor3d[index] = scale;

            if (spline.Loop && (index == spline.zRotationAtPoint.Length - 1 || index == 0))
            {
                spline.scaleFactor3d[index] = spline.scaleFactor3d[0] = scale;
            }
        }


        GUILayout.Space(5);
        GUILayout.EndVertical();
    }
Example #4
0
        private void SectionDrawSelectedPoint()
        {
            if (selectedIndex >= 0 && selectedIndex < spline.ControlPointCount)
            {
                Header("Selected Point");

                GUILayout.Label("Selected Point");
                EditorGUI.BeginChangeCheck();

                EditorGUILayout.BeginHorizontal();
                {
                    EditorGUILayout.BeginVertical();
                    {
                        GUILayout.Space(4);

                        pointBuffer = spline.GetControlPoint(selectedIndex) + spline.transform.position;
                        Vector3 point = isWorldSpace ? pointBuffer : spline.GetControlPoint(selectedIndex);
                        pointSelected = EditorGUILayout.Vector3Field("Position", point);

                        if (EditorGUI.EndChangeCheck())
                        {
                            Undo.RecordObject(spline, "Move Point");
                            EditorUtility.SetDirty(spline);
                            spline.SetControlPoint(selectedIndex, pointSelected);
                        }
                    }
                    EditorGUILayout.EndVertical();

                    if (GUILayout.Button(isWorldSpace ? "W" : "L", GUILayout.MaxHeight(BUTTONS_SIZE), GUILayout.MaxWidth(BUTTONS_SIZE)))
                    {
                        isWorldSpace = !isWorldSpace;
                    }

                    if (GUILayout.Button("C", GUILayout.MaxHeight(BUTTONS_SIZE), GUILayout.MaxWidth(BUTTONS_SIZE)))
                    {
                        string posSaved = string.Format("{0},{1},{2}", pointBuffer.x, pointBuffer.y, pointBuffer.z);
                        EditorGUIUtility.systemCopyBuffer = posSaved;
                        Debug.Log(EditorGUIUtility.systemCopyBuffer);
                    }

                    if (GUILayout.Button("P", GUILayout.MaxHeight(BUTTONS_SIZE), GUILayout.MaxWidth(BUTTONS_SIZE)))
                    {
                        Debug.Log(EditorGUIUtility.systemCopyBuffer);
                        Vector3 point = StringToVector3(EditorGUIUtility.systemCopyBuffer);
                        spline.SetControlPoint(selectedIndex, point - spline.transform.position);
                    }
                }
                EditorGUILayout.EndHorizontal();

                GUILayout.Space(4);
                EditorGUI.BeginChangeCheck();
                BezierControlPointMode mode = (BezierControlPointMode)EditorGUILayout.EnumPopup("Mode", spline.GetControlPointMode(selectedIndex));
                GUILayout.Space(4);

                if (EditorGUI.EndChangeCheck())
                {
                    Undo.RecordObject(spline, "Change Point Mode");
                    spline.SetControlPointMode(selectedIndex, mode);
                    EditorUtility.SetDirty(spline);
                }

                Footer();
            }
        }