示例#1
0
        public void PointOnDivLineSide2()
        {
            var random = new Random(666);

            for (var i = 0; i < 1000; i++)
            {
                var startY = +1 + 666 * random.NextDouble();
                var endY   = -1 - 666 * random.NextDouble();

                var pointY     = 666 * random.NextDouble() - 333;
                var frontSideX = -1 - 666 * random.NextDouble();
                var backSideX  = -frontSideX;

                var vertex1 = new Vertex(Fixed.Zero, Fixed.FromDouble(startY));
                var vertex2 = new Vertex(Fixed.Zero, Fixed.FromDouble(endY - startY));

                var line = new LineDef(
                    vertex1,
                    vertex2,
                    0, 0, 0, null, null);

                var divLine = new DivLine();
                divLine.MakeFrom(line);

                var y = Fixed.FromDouble(pointY);
                {
                    var x = Fixed.FromDouble(frontSideX);
                    Assert.AreEqual(0, Geometry.PointOnDivLineSide(x, y, divLine));
                }
                {
                    var x = Fixed.FromDouble(backSideX);
                    Assert.AreEqual(1, Geometry.PointOnDivLineSide(x, y, divLine));
                }
            }
        }
示例#2
0
        public void Initialize()
        {
            IsActive            = true;
            StartPoint          = 0;
            StartPointText.text = LocaleManager.instance.GetLocaleText("creator_auto");
            NoteSpeed           = 1.0f;
            SpeedText.text      = NoteSpeed.ToString("N1");
            ScopeVal            = 1.0f;
            ScopeText.text      = (ScopeVal * 100).ToString("N0") + "%";
            DivLine             = 8;
            DivArrayIndex       = 5;
            DivLineText.text    = DivLine.ToString();
            ViewSpecific        = false;
            ViewSpecificBtn.targetGraphic.color = GlobalTheme.ThemeColor();
            ViewSpecificBtn.gameObject.GetComponentInChildren <Text>().color = GlobalTheme.ThemeContrastColor();
            RText.text       = NoteColorR.ToString();
            GText.text       = NoteColorG.ToString();
            BText.text       = NoteColorB.ToString();
            ColorPanel.color = new Color32(NoteColorR, NoteColorG, NoteColorB, 255);

            LevelSelect(LevelVal);
            ChangeLine(MaxLine);
            SelectNoteMode(0);
            SelectFlickMode(0);
            ChangeBeats(BeatVal);
            ChangeSize(1);
            PlaceModeChanged(0);
            Player.Clean();

            MetadataMode = false;
            ShowMetadata();
        }
示例#3
0
        public void DivLineSide3()
        {
            var random = new Random(666);

            for (var i = 0; i < 1000; i++)
            {
                var startX = -1 - 666 * random.NextDouble();
                var endX   = +1 + 666 * random.NextDouble();

                var pointX     = 666 * random.NextDouble() - 333;
                var frontSideY = -1 - 666 * random.NextDouble();
                var backSideY  = -frontSideY;

                for (var j = 0; j < 100; j++)
                {
                    var theta = 2 * Math.PI * random.NextDouble();
                    var ox    = 666 * random.NextDouble() - 333;
                    var oy    = 666 * random.NextDouble() - 333;

                    var vertex1 = new Vertex(
                        Fixed.FromDouble(ox + startX * Math.Cos(theta)),
                        Fixed.FromDouble(oy + startX * Math.Sin(theta)));

                    var vertex2 = new Vertex(
                        vertex1.X + Fixed.FromDouble((endX - startX) * Math.Cos(theta)),
                        vertex1.Y + Fixed.FromDouble((endX - startX) * Math.Sin(theta)));

                    var line = new LineDef(
                        vertex1,
                        vertex2,
                        0, 0, 0, null, null);

                    var divLine = new DivLine();
                    divLine.MakeFrom(line);

                    var node = new Node(
                        Fixed.FromDouble(ox + startX * Math.Cos(theta)),
                        Fixed.FromDouble(oy + startX * Math.Sin(theta)),
                        Fixed.FromDouble((endX - startX) * Math.Cos(theta)),
                        Fixed.FromDouble((endX - startX) * Math.Sin(theta)),
                        Fixed.Zero, Fixed.Zero, Fixed.Zero, Fixed.Zero,
                        Fixed.Zero, Fixed.Zero, Fixed.Zero, Fixed.Zero,
                        0, 0);

                    {
                        var x = Fixed.FromDouble(ox + pointX * Math.Cos(theta) - frontSideY * Math.Sin(theta));
                        var y = Fixed.FromDouble(oy + pointX * Math.Sin(theta) + frontSideY * Math.Cos(theta));
                        Assert.AreEqual(0, Geometry.DivLineSide(x, y, divLine));
                        Assert.AreEqual(0, Geometry.DivLineSide(x, y, node));
                    }
                    {
                        var x = Fixed.FromDouble(ox + pointX * Math.Cos(theta) - backSideY * Math.Sin(theta));
                        var y = Fixed.FromDouble(oy + pointX * Math.Sin(theta) + backSideY * Math.Cos(theta));
                        Assert.AreEqual(1, Geometry.DivLineSide(x, y, divLine));
                        Assert.AreEqual(1, Geometry.DivLineSide(x, y, node));
                    }
                }
            }
        }
示例#4
0
        /// <summary>
        /// Calculate on which side of the line the point is.
        /// </summary>
        /// <returns>
        /// 0 (front) or 1 (back).
        /// </returns>
        public static int PointOnDivLineSide(Fixed x, Fixed y, DivLine line)
        {
            if (line.Dx == Fixed.Zero)
            {
                if (x <= line.X)
                {
                    return(line.Dy > Fixed.Zero ? 1 : 0);
                }
                else
                {
                    return(line.Dy < Fixed.Zero ? 1 : 0);
                }
            }

            if (line.Dy == Fixed.Zero)
            {
                if (y <= line.Y)
                {
                    return(line.Dx < Fixed.Zero ? 1 : 0);
                }
                else
                {
                    return(line.Dx > Fixed.Zero ? 1 : 0);
                }
            }

            var dx = (x - line.X);
            var dy = (y - line.Y);

            // Try to quickly decide by looking at sign bits.
            if (((line.Dy.Data ^ line.Dx.Data ^ dx.Data ^ dy.Data) & 0x80000000) != 0)
            {
                if (((line.Dy.Data ^ dx.Data) & 0x80000000) != 0)
                {
                    // Left is negative.
                    return(1);
                }
                else
                {
                    return(0);
                }
            }

            var left  = new Fixed(line.Dy.Data >> 8) * new Fixed(dx.Data >> 8);
            var right = new Fixed(dy.Data >> 8) * new Fixed(line.Dx.Data >> 8);

            if (right < left)
            {
                // Front side.
                return(0);
            }
            else
            {
                // Back side.
                return(1);
            }
        }
示例#5
0
        /// <summary>
        /// Calculate on which side of the line the point is.
        /// </summary>
        /// <returns>
        /// 0 (front) or 1 (back), or 2 if the box crosses the line.
        /// </returns>
        public static int DivLineSide(Fixed x, Fixed y, DivLine line)
        {
            if (line.Dx == Fixed.Zero)
            {
                if (x == line.X)
                {
                    return(2);
                }

                if (x <= line.X)
                {
                    return(line.Dy > Fixed.Zero ? 1 : 0);
                }

                return(line.Dy < Fixed.Zero ? 1 : 0);
            }

            if (line.Dy == Fixed.Zero)
            {
                if (x == line.Y)
                {
                    return(2);
                }

                if (y <= line.Y)
                {
                    return(line.Dx < Fixed.Zero ? 1 : 0);
                }

                return(line.Dx > Fixed.Zero ? 1 : 0);
            }

            var dx = (x - line.X);
            var dy = (y - line.Y);

            var left  = new Fixed((line.Dy.Data >> Fixed.FracBits) * (dx.Data >> Fixed.FracBits));
            var right = new Fixed((dy.Data >> Fixed.FracBits) * (line.Dx.Data >> Fixed.FracBits));

            if (right < left)
            {
                // Front side.
                return(0);
            }

            if (left == right)
            {
                return(2);
            }
            else
            {
                // Back side.
                return(1);
            }
        }
示例#6
0
        public void ChangeDivLine(int moveVal)
        {
            if (moveVal.Equals(0) && DivArrayIndex > 0)
            {
                DivArrayIndex--;
            }
            else if (moveVal.Equals(1) && DivArrayIndex < 10)
            {
                DivArrayIndex++;
            }
            DivLine          = DivLineArray[DivArrayIndex];
            DivLineText.text = DivLine.ToString();

            UpdateBlockDivLine();
        }
示例#7
0
        public void DivLineSide1()
        {
            var random = new Random(666);

            for (var i = 0; i < 1000; i++)
            {
                var startX = -1 - 666 * random.NextDouble();
                var endX   = +1 + 666 * random.NextDouble();

                var pointX     = 666 * random.NextDouble() - 333;
                var frontSideY = -1 - 666 * random.NextDouble();
                var backSideY  = -frontSideY;

                var vertex1 = new Vertex(Fixed.FromDouble(startX), Fixed.Zero);
                var vertex2 = new Vertex(Fixed.FromDouble(endX - startX), Fixed.Zero);

                var line = new LineDef(
                    vertex1,
                    vertex2,
                    0, 0, 0, null, null);

                var divLine = new DivLine();
                divLine.MakeFrom(line);

                var node = new Node(
                    Fixed.FromDouble(startX),
                    Fixed.Zero,
                    Fixed.FromDouble(endX - startX),
                    Fixed.Zero,
                    Fixed.Zero, Fixed.Zero, Fixed.Zero, Fixed.Zero,
                    Fixed.Zero, Fixed.Zero, Fixed.Zero, Fixed.Zero,
                    0, 0);

                var x = Fixed.FromDouble(pointX);
                {
                    var y = Fixed.FromDouble(frontSideY);
                    Assert.AreEqual(0, Geometry.DivLineSide(x, y, divLine));
                    Assert.AreEqual(0, Geometry.DivLineSide(x, y, node));
                }
                {
                    var y = Fixed.FromDouble(backSideY);
                    Assert.AreEqual(1, Geometry.DivLineSide(x, y, divLine));
                    Assert.AreEqual(1, Geometry.DivLineSide(x, y, node));
                }
            }
        }