Пример #1
0
        private void SubDivideSpline(GameObject theGameObject, CCBezierSpline theSpline, int theDepth)
        {
            int mySubdivs = random.Random(1, subDivisions);

            for (int j = 0; j < mySubdivs; j++)
            {
                CCBezierSpline myBase = theSpline.Clone();
                myBase.BeginEditSpline();
                Vector3 lastPoint = myBase.LastPoint();
                for (int c = 0; c < addPoints; c++)
                {
                    float lastY = lastPoint.y;
                    lastPoint.x += random.Random(-xRange, xRange);
                    lastPoint.z += random.Random(-xRange, xRange);
                    lastPoint.y += random.Random(yStart, yStart + yRange);
                    // myBase.AddPoint(lastPoint, curveTensionA, curveTensionB);
                    myBase.AddControlPoints(new Vector3(lastPoint.x, Mathf.Lerp(lastPoint.y, lastY, curveTensionA), lastPoint.z), lastPoint);
                }
                myBase.EndEditSpline();
                if (theDepth > 0)
                {
                    SubDivideSpline(theGameObject, myBase, theDepth - 1);
                }
                _myPaths.Add(new TreeSpline(theGameObject, myBase));
            }
        }
Пример #2
0
        private CCBezierSpline BuildSpline(Transform theTransform)
        {
            CCBezierSpline mySpline = new CCBezierSpline();

            mySpline.BeginEditSpline();
            mySpline.AddPoint(theTransform.position);

            Transform myLastTransform = theTransform;

            while (myLastTransform.transform.parent != null)
            {
                Vector3 a = myLastTransform.position;
                Vector3 b = myLastTransform.transform.parent.position;

                mySpline.AddControlPoints(
                    new Vector3(a.x, (a.y + b.y) / 2, a.z),
                    new Vector3(b.x, (a.y + b.y) / 2, b.z),
                    b
                    );
                myLastTransform = myLastTransform.transform.parent;
            }
            mySpline.EndEditSpline();
            mySpline.Invert();
            return(mySpline);
        }
Пример #3
0
 private void BuildSplines(Transform t)
 {
     if (t.childCount == 0)
     {
         CCBezierSpline mySpline = BuildSpline(t);
         _myPaths.Add(new TreeSpline(t.gameObject, mySpline));
         return;
     }
     for (var i = 0; i < t.childCount; i++)
     {
         var childTransform = t.GetChild(i);
         BuildSplines(childTransform);
     }
 }
Пример #4
0
        private void UpdateSplines()
        {
            //if (_myPaths != null && _myPaths.Count > 0) return;

            Debug.Log("Update Splines");

            _myPaths.Clear();

            BuildSplines(transform);

            random.RandomSeed(randomSeed);

            new List <TreeSpline>(_myPaths).ForEach(p => {
                int mySubSplines = random.Random(1, subSplines);
                for (int i = 0; i < subSplines; i++)
                {
                    CCBezierSpline s = p.spline.SubSpline(0, random.Random(endRandomMin, endRandomMax));;
                    SubDivideSpline(p.gameObject, s, depth);
                }
            });
        }
Пример #5
0
 public TreeSpline(GameObject theObject, CCBezierSpline theSpline)
 {
     gameObject = theObject;
     spline     = theSpline;
 }