void CalculateTextureBased(Texture2D texture, Rect uvRect) { FillCommonParameters(); _parameters.maskRect = LocalMaskRect(Vector4.zero); _parameters.maskRectUV = Mathr.ToVector(uvRect); _parameters.texture = texture; _parameters.borderMode = BorderMode.Simple; }
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)); }
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); } }
/// <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); }
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(); }
/// <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); }
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); } }
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); }
// 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); }
Vector2 MapSimple(Vector2 localPos) { return(Mathr.Remap(localPos, maskRect, maskRectUV)); }
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))); }
Vector4 LocalMaskRect(Vector4 border) { return(Mathr.ApplyBorder(Mathr.ToVector(maskTransform.rect), border)); }