Beispiel #1
0
 void CalculateTextureBased(Texture2D texture, Rect uvRect)
 {
     FillCommonParameters();
     _parameters.maskRect   = LocalMaskRect(Vector4.zero);
     _parameters.maskRectUV = Mathr.ToVector(uvRect);
     _parameters.texture    = texture;
     _parameters.borderMode = BorderMode.Simple;
 }
Beispiel #2
0
    private void Start()
    {
        Debug.Log(Mathr.InverseLerp(0.0f, 10.0f, 5.0f, INTERPOLATION.Linear));
        Debug.Log(Mathr.InverseLerp(0.0, 10.0, 5.0f, INTERPOLATION.Linear));

        Debug.Log(Mathr.Lerp(0.0, 10.0, 0.5f, INTERPOLATION.Linear));

        Debug.Log(Mathr.InverseLerp(Vector2.zero, new Vector2(10.0f, 10.0f), new Vector2(5.0f, 5.0f), INTERPOLATION.Linear));
    }
Beispiel #3
0
        void CalculateSpriteBased(Sprite sprite, BorderMode borderMode)
        {
            var lastSprite = _lastUsedSprite;

            _lastUsedSprite = sprite;
            var spriteErrors = Diagnostics.CheckSprite(sprite);

            if (spriteErrors != Errors.NoError)
            {
                if (lastSprite != sprite)
                {
                    WarnSpriteErrors(spriteErrors);
                }
                CalculateSolidFill();
                return;
            }
            if (!sprite)
            {
                CalculateSolidFill();
                return;
            }
            FillCommonParameters();
            var spriteRect    = Mathr.Move(Mathr.ToVector(sprite.rect), sprite.textureRect.position - sprite.rect.position - sprite.textureRectOffset);
            var textureRect   = Mathr.ToVector(sprite.textureRect);
            var textureBorder = Mathr.BorderOf(spriteRect, textureRect);
            var textureSize   = Vector2.zero;

            if (sprite.texture != null)
            {
                textureSize = new Vector2(sprite.texture.width, sprite.texture.height);
            }
            var fullMaskRect = LocalMaskRect(Vector4.zero);

            _parameters.maskRectUV = Mathr.Div(textureRect, textureSize);
            if (borderMode == BorderMode.Simple)
            {
                var textureRectInFullRect = Mathr.Div(textureBorder, Mathr.Size(spriteRect));
                _parameters.maskRect = Mathr.ApplyBorder(fullMaskRect, Mathr.Mul(textureRectInFullRect, Mathr.Size(fullMaskRect)));
            }
            else
            {
                _parameters.maskRect = Mathr.ApplyBorder(fullMaskRect, textureBorder * GraphicToCanvasScale(sprite));
                var fullMaskRectUV = Mathr.Div(spriteRect, textureSize);
                var adjustedBorder = AdjustBorders(sprite.border * GraphicToCanvasScale(sprite), fullMaskRect);
                _parameters.maskBorder   = LocalMaskRect(adjustedBorder);
                _parameters.maskBorderUV = Mathr.ApplyBorder(fullMaskRectUV, Mathr.Div(sprite.border, textureSize));
            }
            _parameters.texture    = sprite.texture;
            _parameters.borderMode = borderMode;
            if (borderMode == BorderMode.Tiled)
            {
                _parameters.tileRepeat = MaskRepeat(sprite, _parameters.maskBorder);
            }
        }
Beispiel #4
0
    /// <summary>
    /// 八进制转换为二进制
    /// </summary>
    /// <returns></returns>
    public static string Octal2Binary(string o)
    {
        o = Mathr.TrimZero(o);
        string output = "";

        for (int i = 0, l = o.Length; i < l; i++)
        {
            output += SignOctal2Binary(o[i]);
        }
        output = Mathr.TrimZero(output);
        return(output);
    }
Beispiel #5
0
    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.LeftArrow) || Input.GetKeyDown(KeyCode.DownArrow))
        {
            Minus();
        }

        if (Input.GetKeyDown(KeyCode.RightArrow) || Input.GetKeyDown(KeyCode.RightArrow))
        {
            Plus();
        }

        if (Input.GetKeyDown(KeyCode.R))
        {
            Plus();
            Stop();
        }

        if (Input.GetKeyDown(KeyCode.Space))
        {
            Active();
        }

        if (!m_work)
        {
            return;
        }

        m_cube.position = Mathr.Lerp(m_v0, m_v1, m_time, m_interpolation);

        if (m_time >= 1.0f)
        {
            if (m_auto)
            {
                Next();
            }
            else
            {
                m_work = false;
            }
        }

        m_time += (Time.deltaTime * m_velocity);

        if (m_time >= 1.0f)
        {
            m_time = 1.0f;
        }

        SetTime();
    }
Beispiel #6
0
    /// <summary>
    /// 十进制分数部分转换
    /// </summary>
    /// <returns></returns>
    private static string Fraction2Radix(decimal f, byte b, byte p = 64)
    {
        string output = "";
        int    count  = 0;

        do
        {
            decimal result = f * b;
            int     i      = Mathr.Decimal2Integer(result);
            f       = Mathr.Decimal2Fraction(result);
            output += i;
            count++;
        }while (f != 0 && count < p);
        return(output);
    }
Beispiel #7
0
        void CalculateSpriteBased(Sprite sprite, BorderMode borderMode)
        {
            var lastSprite = _lastUsedSprite;

            _lastUsedSprite = sprite;
            var spriteErrors = Diagnostics.CheckSprite(sprite);

            if (spriteErrors != Errors.NoError)
            {
                if (lastSprite != sprite)
                {
                    WarnSpriteErrors(spriteErrors);
                }
                CalculateSolidFill();
                return;
            }
            if (!sprite)
            {
                CalculateSolidFill();
                return;
            }
            FillCommonParameters();
            var inner        = DataUtility.GetInnerUV(sprite);
            var outer        = DataUtility.GetOuterUV(sprite);
            var padding      = DataUtility.GetPadding(sprite);
            var fullMaskRect = LocalMaskRect(Vector4.zero);

            _parameters.maskRectUV = outer;
            if (borderMode == BorderMode.Simple)
            {
                var normalizedPadding = Mathr.Div(padding, sprite.rect.size);
                _parameters.maskRect = Mathr.ApplyBorder(fullMaskRect, Mathr.Mul(normalizedPadding, Mathr.Size(fullMaskRect)));
            }
            else
            {
                _parameters.maskRect = Mathr.ApplyBorder(fullMaskRect, padding * SpriteToCanvasScale(sprite));
                var adjustedBorder = AdjustBorders(sprite.border * SpriteToCanvasScale(sprite), fullMaskRect);
                _parameters.maskBorder   = LocalMaskRect(adjustedBorder);
                _parameters.maskBorderUV = inner;
            }
            _parameters.texture    = sprite.texture;
            _parameters.borderMode = borderMode;
            if (borderMode == BorderMode.Tiled)
            {
                _parameters.tileRepeat = MaskRepeat(sprite, _parameters.maskBorder);
            }
        }
Beispiel #8
0
        static Vector4 AdjustBorders(Vector4 border, Vector4 rect)
        {
            // Copied from Unity's Image.
            var size = Mathr.Size(rect);

            for (int axis = 0; axis <= 1; axis++)
            {
                // If the rect is smaller than the combined borders, then there's not room for
                // the borders at their normal size. In order to avoid artefacts with overlapping
                // borders, we scale the borders down to fit.
                float combinedBorders = border[axis] + border[axis + 2];
                if (size[axis] < combinedBorders && combinedBorders != 0)
                {
                    float borderScaleRatio = size[axis] / combinedBorders;
                    border[axis]     *= borderScaleRatio;
                    border[axis + 2] *= borderScaleRatio;
                }
            }
            return(border);
        }
Beispiel #9
0
        // ICanvasRaycastFilter
        public bool IsRaycastLocationValid(Vector2 sp, Camera cam)
        {
            Vector2 localPos;

            if (!RectTransformUtility.ScreenPointToLocalPointInRectangle(maskTransform, sp, cam, out localPos))
            {
                return(false);
            }
            if (!Mathr.Inside(localPos, LocalMaskRect(Vector4.zero)))
            {
                return(_invertOutsides);
            }
            if (!_parameters.texture)
            {
                return(true);
            }
            if (!isUsingRaycastFiltering)
            {
                return(true);
            }
            float mask;

            if (!_parameters.SampleMask(localPos, out mask))
            {
                Debug.LogErrorFormat(this,
                                     "Raycast Threshold greater than 0 can't be used on Soft Mask with texture '{0}' because "
                                     + "it's not readable. You can make the texture readable in the Texture Import Settings.",
                                     _parameters.activeTexture.name);
                return(true);
            }
            if (_invertMask)
            {
                mask = 1 - mask;
            }
            return(mask >= _raycastThreshold);
        }
Beispiel #10
0
 Vector2 MapSimple(Vector2 localPos)
 {
     return(Mathr.Remap(localPos, maskRect, maskRectUV));
 }
Beispiel #11
0
        Vector2 MaskRepeat(Sprite sprite, Vector4 centralPart)
        {
            var textureCenter = Mathr.ApplyBorder(Mathr.ToVector(sprite.textureRect), sprite.border);

            return(Mathr.Div(Mathr.Size(centralPart) * GraphicToCanvasScale(sprite), Mathr.Size(textureCenter)));
        }
Beispiel #12
0
 Vector4 LocalMaskRect(Vector4 border)
 {
     return(Mathr.ApplyBorder(Mathr.ToVector(maskTransform.rect), border));
 }