private static void ShiftPoints(float irregularity)
        {
            for (var i = 0; i < pointCount; i++)
            {
                var point  = points[i];
                var delta  = Random.insideUnitCircle.normalized * FindMaxMovement(point.X, point.Y) * irregularity;
                var deltaX = Mathf.RoundToInt(delta.x);
                var deltaY = Mathf.RoundToInt(delta.y);

                if (point.X <= xMin || point.X >= xMax)
                {
                    deltaX = 0;
                }
                if (point.Y <= yMin || point.Y >= yMax)
                {
                    deltaY = 0;
                }

                if (deltaX != 0 || deltaY != 0)
                {
                    var newPoint = new D2dVector2(point.X + deltaX, point.Y + deltaY);

                    MovePoints(point, newPoint);

                    points[i] = newPoint;
                }
            }
        }
 private static void TryMovePoint(ref D2dVector2 point, D2dVector2 oldPoint, D2dVector2 newPoint)
 {
     if (point.X == oldPoint.X && point.Y == oldPoint.Y)
     {
         point.X = newPoint.X;
         point.Y = newPoint.Y;
     }
 }
        private static void MovePoints(D2dVector2 oldPoint, D2dVector2 newPoint)
        {
            for (var i = 0; i < quadCount; i++)
            {
                var quad = quads[i];

                TryMovePoint(ref quad.BL, oldPoint, newPoint);
                TryMovePoint(ref quad.BR, oldPoint, newPoint);
                TryMovePoint(ref quad.TL, oldPoint, newPoint);
                TryMovePoint(ref quad.TR, oldPoint, newPoint);

                quads[i] = quad;
            }
        }
Esempio n. 4
0
        public void AddTriangle(D2dVector2 a, D2dVector2 b, D2dVector2 c)
        {
            if (a.Y != b.Y || a.Y != c.Y)
            {
                //var z = (a.V + b.V + c.V) / 3.0f;
                //var z1 = Vector3.MoveTowards(a.V, z, 1.0f);
                //var z2 = Vector3.MoveTowards(b.V, z, 1.0f);
                //var z3 = Vector3.MoveTowards(c.V, z, 1.0f);

                //Debug.DrawLine(z1, z2, Color.red, 10.0f);
                //Debug.DrawLine(z2, z3, Color.red, 10.0f);
                //Debug.DrawLine(z3, z1, Color.red, 10.0f);

                // Make a highest, and c lowest
                if (b.Y > a.Y)
                {
                    D2dHelper.Swap(ref a, ref b);
                }
                if (c.Y > a.Y)
                {
                    D2dHelper.Swap(ref c, ref a);
                }
                if (c.Y > b.Y)
                {
                    D2dHelper.Swap(ref b, ref c);
                }

                var fth = a.Y - c.Y;                 // Full triangle height
                var tth = a.Y - b.Y;                 // Top triangle height
                var bth = b.Y - c.Y;                 // Bottom triangle height

                // Find a to c intercept along b plane
                var inx = c.X + (a.X - c.X) * D2dHelper.Divide(bth, fth);
                var d   = new D2dVector2((int)inx, b.Y);

                // Top triangle
                var abs = D2dHelper.Divide(a.X - b.X, tth);                 // A/B slope
                var ads = D2dHelper.Divide(a.X - d.X, tth);                 // A/D slope

                AddTriangle(b.X, d.X, abs, ads, b.Y, 1, tth);

                // Bottom triangle
                var cbs = D2dHelper.Divide(c.X - b.X, bth);                 // C/B slope
                var cds = D2dHelper.Divide(c.X - d.X, bth);                 // C/D slope

                AddTriangle(b.X, d.X, cbs, cds, b.Y, -1, bth);
            }
        }
        private static void TryAddPoint(D2dVector2 newPoint)
        {
            for (var i = 0; i < pointCount; i++)
            {
                var point = points[i];

                if (point.X == newPoint.X && point.Y == newPoint.Y)
                {
                    return;
                }
            }

            if (points.Count > pointCount)
            {
                points[pointCount] = newPoint;
            }
            else
            {
                points.Add(newPoint);
            }

            pointCount += 1;
        }
        protected override void OnAlphaDataSubset(D2dVector2 size, D2dVector2 offset)
        {
            base.OnAlphaDataSubset(size, offset);

            Rebuild();
        }
Esempio n. 7
0
 protected virtual void OnAlphaDataSubset(D2dVector2 size, D2dVector2 offset)
 {
     UpdateBeforeBuild();
 }