private unsafe void DrawLines(float x, float y, float w, float h, float t) { float pad = 5.0f; float s = w / 9.0f - pad * 2; float *pts = stackalloc float[4 * 2]; LineCap[] joins = { LineCap.Miter, LineCap.Round, LineCap.Bevel }; LineCap[] caps = { LineCap.Butt, LineCap.Round, LineCap.Square }; _nvg.Save(); pts[0] = -s * 0.25f + MathF.Cos(t * 0.3f) * s * 0.5f; pts[1] = MathF.Sin(t * 0.3f) * s * 0.5f; pts[2] = -s * 0.25f; pts[3] = 0; pts[4] = s * 0.25f; pts[5] = 0; pts[6] = s * 0.25f + MathF.Cos(-t * 0.3f) * s * 0.5f; pts[7] = MathF.Sin(-t * 0.3f) * s * 0.5f; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { float fx = x + s * 0.5f + (i * 3 + j) / 9.0f * w + pad; float fy = y - s * 0.5f + pad; _nvg.LineCap(caps[i]); _nvg.LineJoin(joins[j]); _nvg.StrokeWidth(s * 0.3f); _nvg.StrokeColour(new Colour(0, 0, 0, 160)); _nvg.BeginPath(); _nvg.MoveTo(fx + pts[0], fy + pts[1]); _nvg.LineTo(fx + pts[2], fy + pts[3]); _nvg.LineTo(fx + pts[4], fy + pts[5]); _nvg.LineTo(fx + pts[6], fy + pts[7]); _nvg.Stroke(); _nvg.LineCap(LineCap.Butt); _nvg.LineJoin(LineCap.Bevel); _nvg.StrokeWidth(1.0f); _nvg.StrokeColour(new Colour(0, 192, 255, 255)); _nvg.BeginPath(); _nvg.MoveTo(fx + pts[0], fy + pts[1]); _nvg.LineTo(fx + pts[2], fy + pts[3]); _nvg.LineTo(fx + pts[4], fy + pts[5]); _nvg.LineTo(fx + pts[6], fy + pts[7]); _nvg.Stroke(); } } _nvg.Restore(); }