コード例 #1
0
ファイル: Demo.cs プロジェクト: MatijaBrown/SilkyNvg
        private void DrawEyes(float x, float y, float w, float h, float mx, float my, float t)
        {
            float ex    = w * 0.23f;
            float ey    = h * 0.5f;
            float lx    = x + ex;
            float ly    = y + ey;
            float rx    = x + w - ex;
            float ry    = y + ey;
            float br    = MathF.Min(ex, ey) * 0.5f;
            float blink = 1.0f - MathF.Pow(MathF.Sin(t * 0.5f), 200.0f) * 0.8f;

            Paint bg = _nvg.LinearGradient(x, y + (h * 0.5f), x + (w * 0.1f), y + h, _nvg.Rgba(0, 0, 0, 32), _nvg.Rgba(0, 0, 0, 16));

            _nvg.BeginPath();
            _nvg.Ellipse(lx + 3.0f, ly + 16.0f, ex, ey);
            _nvg.Ellipse(rx + 3.0f, ry + 16.0f, ex, ey);
            _nvg.FillPaint(bg);
            _nvg.Fill();

            bg = _nvg.LinearGradient(x, y + (h * 0.25f), x + (w * 0.1f), y + h, _nvg.Rgba(220, 220, 220, 255), _nvg.Rgba(128, 128, 128, 255));
            _nvg.BeginPath();
            _nvg.Ellipse(lx, ly, ex, ey);
            _nvg.Ellipse(rx, ry, ex, ey);
            _nvg.FillPaint(bg);
            _nvg.Fill();

            float dx = (mx - rx) / (ex * 10.0f);
            float dy = (my - ry) / (ey * 10.0f);
            float d  = MathF.Sqrt(dx * dx + dy * dy);

            if (d > 1.0f)
            {
                dx /= d;
                dy /= d;
            }
            dx *= ex * 0.4f;
            dy *= ey * 0.5f;
            _nvg.BeginPath();
            _nvg.Ellipse(lx + dx, ly + dy + ey * 0.25f * (1.0f - blink), br, br * blink);
            _nvg.FillColour(_nvg.Rgba(32, 32, 32, 255));
            _nvg.Fill();

            dx = (mx - rx) / (ex * 10.0f);
            dy = (my - ry) / (ey * 10.0f);
            d  = MathF.Sqrt(dx * dx + dy * dy);
            if (d > 1.0f)
            {
                dx /= d;
                dy /= d;
            }
            dx *= ex * 0.4f;
            dy *= ey * 0.5f;
            _nvg.BeginPath();
            _nvg.Ellipse(rx + dx, ry + dy + ey * 0.25f * (1.0f - blink), br, br * blink);
            _nvg.FillColour(_nvg.Rgba(32, 32, 32, 255));
            _nvg.Fill();

            Paint gloss = _nvg.RadialGradient(lx - ex * 0.25f, ly - ey * 0.5f, ex * 0.1f, ex * 0.75f, _nvg.Rgba(255, 255, 255, 128), _nvg.Rgba(255, 255, 255, 0));

            _nvg.BeginPath();
            _nvg.Ellipse(lx, ly, ex, ey);
            _nvg.FillPaint(gloss);
            _nvg.Fill();

            gloss = _nvg.RadialGradient(rx - ex * 0.25f, ry - ey * 0.5f, ex * 0.1f, ex * 0.75f, _nvg.Rgba(255, 255, 255, 128), _nvg.Rgba(255, 255, 255, 0));
            _nvg.BeginPath();
            _nvg.Ellipse(rx, ry, ex, ey);
            _nvg.FillPaint(gloss);
            _nvg.Fill();
        }