public static void RoundRect(CanvasContext2D ctx, int x, int y, int width, int height, int radius = 5, bool fill = true, bool stroke = false) { ctx.Save(); ctx.LineWidth = 3; ctx.BeginPath(); ctx.MoveTo(x + radius, y); ctx.LineTo(x + width, y); //ctx.quadraticCurveTo(x + width, y, x + width, y + radius); ctx.LineTo(x + width, y + height); // ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height); ctx.LineTo(x, y + height); // ctx.quadraticCurveTo(x, y + height, x, y + height - radius); ctx.LineTo(x, y + radius); ctx.QuadraticCurveTo(x, y, x + radius, y); ctx.ClosePath(); if (stroke) ctx.Stroke(); if (fill) ctx.Fill(); ctx.Restore(); }
protected override void Update(CanvasContext2D context) { if (Status != RaceStatus.Fail && Status != RaceStatus.Win) { context.DrawImage(_timeLeftFrame, 308, 10); Type.SetField(context, "textAlign", "right"); context.FillStyle = "#00AD11"; if (TimeLeft > 10000 || Math.Floor((TimeLeft / 300) % 2) != 0) { if (TimeLeft < 0) TimeLeft = 0; context.Font = "110px Digital"; context.FillText(Math.Floor(TimeLeft / 1000).ToString(), 475, 105); } if (Speed > 0) { context.Save(); context.Scale(-1, 1); long width = Math.Floor((10 * Speed) / MaxSpeed) * 22; if (width > 0) context.DrawImage(_meterImage, 220 - width, 0, width, 102, -561 - width, 20, width, 102); context.Restore(); } context.Font = "30px Digital"; context.FillText(Math.Floor(Speed * 5) + " Km/h", 780, 120); int rpmWidth = Math.Floor(_rpm / 500) * 22 + 22; context.DrawImage(_meterImage, 220 - rpmWidth, 0, rpmWidth, 102, 240 - rpmWidth, 20, rpmWidth, 102); context.FillText(Math.Floor(_rpm) + " RPM", 130, 120); context.BeginPath(); context.LineWidth = 3; context.StrokeStyle = "#00AD11"; context.MoveTo(5, 150); float x = 5 + Math.Min(Position * 735 / RoadLength, 735); context.LineTo(x, 150); context.Stroke(); context.ClosePath(); context.BeginPath(); context.StrokeStyle = "#006808"; context.MoveTo(x, 150); context.LineTo(790, 150); context.Stroke(); context.ClosePath(); context.DrawImage(_markerImage, x, 142); } if (Status == RaceStatus.Running) { TimeLeft -= DeltaTime; if (TimeLeft < 0) { _music.Pause(); CarSystem.CarObject.CurrentAnimation = "Forward"; Status = RaceStatus.Fail; ShowMessage(_failMessage); RemoveSystem(_engineSoundSystem); RemoveSystem(_npcSystem); pendingTimers.Add(Window.SetTimeout(delegate() { UpdateMessage("<p>Press a key to continue.</p>"); }, 3000)); } } }
private bool DrawTriangle(CanvasContext2D ctx, ImageElement im, double x0, double y0, double x1, double y1, double x2, double y2, double sx0, double sy0, double sx1, double sy1, double sx2, double sy2) { if (!Intersects(0, Width, 0, Height, x0, y0, x1, y1, x2, y2)) { return false; } //double edgeOffset = isOutlined ? ContractionInPixels : ExpansionInPixels; //Vector2d expandedS0 = GetMiterPoint(Vector2d.Create(x0, y0), Vector2d.Create(x1, y1), Vector2d.Create(x2, y2), ExpansionInPixels); //Vector2d expandedS1 = GetMiterPoint(Vector2d.Create(x1, y1), Vector2d.Create(x0, y0), Vector2d.Create(x2, y2), ExpansionInPixels); //Vector2d expandedS2 = GetMiterPoint(Vector2d.Create(x2, y2), Vector2d.Create(x1, y1), Vector2d.Create(x0, y0), ExpansionInPixels); //Vector2d expandedS0 = MiterPoint(x0, y0, x1, y1, x2, y2); //Vector2d expandedS1 = MiterPoint(x1, y1, x0, y0, x2, y2); //Vector2d expandedS2 = MiterPoint(x2, y2, x1, y1, x0, y0); MiterPointOut(expandedS0, x0, y0, x1, y1, x2, y2, ExpansionInPixels); MiterPointOut(expandedS1, x1, y1, x0, y0, x2, y2, ExpansionInPixels); MiterPointOut(expandedS2, x2, y2, x1, y1, x0, y0, ExpansionInPixels); x0 = expandedS0.X; y0 = expandedS0.Y; x1 = expandedS1.X; y1 = expandedS1.Y; x2 = expandedS2.X; y2 = expandedS2.Y; ctx.Save(); if (RenderingOn) { ctx.BeginPath(); ctx.MoveTo(x0, y0); ctx.LineTo(x1, y1); ctx.LineTo(x2, y2); ctx.ClosePath(); ctx.Clip(); } double denom = sx0 * (sy2 - sy1) - sx1 * sy2 + sx2 * sy1 + (sx1 - sx2) * sy0; //if (denom == 0) //{ // ctx.Restore(); // return false; //} double m11 = -(sy0 * (x2 - x1) - sy1 * x2 + sy2 * x1 + (sy1 - sy2) * x0) / denom; double m12 = (sy1 * y2 + sy0 * (y1 - y2) - sy2 * y1 + (sy2 - sy1) * y0) / denom; double m21 = (sx0 * (x2 - x1) - sx1 * x2 + sx2 * x1 + (sx1 - sx2) * x0) / denom; double m22 = -(sx1 * y2 + sx0 * (y1 - y2) - sx2 * y1 + (sx2 - sx1) * y0) / denom; double dx = (sx0 * (sy2 * x1 - sy1 * x2) + sy0 * (sx1 * x2 - sx2 * x1) + (sx2 * sy1 - sx1 * sy2) * x0) / denom; double dy = (sx0 * (sy2 * y1 - sy1 * y2) + sy0 * (sx1 * y2 - sx2 * y1) + (sx2 * sy1 - sx1 * sy2) * y0) / denom; ctx.Transform(m11, m12, m21, m22, dx, dy); if (RenderingOn) { ctx.Alpha = Opacity; if (lighting < 1.0) { ctx.Alpha = 1; ctx.FillStyle = "Black"; ctx.FillRect(0, 0, Width, Height); ctx.Alpha = lighting * Opacity; } ctx.DrawImage(im, 0, 0); } ctx.Restore(); return true; }
private bool DrawTriangle(CanvasContext2D ctx, ImageElement im, double x0, double y0, double x1, double y1, double x2, double y2, double sx0, double sy0, double sx1, double sy1, double sx2, double sy2) { bool inside; if (factor == 1.0) { inside = Intersects(0, Width, 0, Height, x0, y0, x1, y1, x2, y2); } else { hw = Width / 2; qw = hw * factor; hh = Height / 2; qh = hh * factor; inside = Intersects(hw - qw, hw + qw, hh - qh, hh + qh, x0, y0, x1, y1, x2, y2); } if (!inside) { return false; } double edgeOffset = isOutlined ? ContractionInPixels : ExpansionInPixels; Vector2d expandedS0 = GetMiterPoint(Vector2d.Create(x0, y0), Vector2d.Create(x1, y1), Vector2d.Create(x2, y2), edgeOffset); Vector2d expandedS1 = GetMiterPoint(Vector2d.Create(x1, y1), Vector2d.Create(x0, y0), Vector2d.Create(x2, y2), edgeOffset); Vector2d expandedS2 = GetMiterPoint(Vector2d.Create(x2, y2), Vector2d.Create(x1, y1), Vector2d.Create(x0, y0), edgeOffset); x0 = expandedS0.X; y0 = expandedS0.Y; x1 = expandedS1.X; y1 = expandedS1.Y; x2 = expandedS2.X; y2 = expandedS2.Y; ctx.Save(); ctx.BeginPath(); ctx.MoveTo(x0, y0); ctx.LineTo(x1, y1); ctx.LineTo(x2, y2); ctx.ClosePath(); ctx.Clip(); double denom = sx0 * (sy2 - sy1) - sx1 * sy2 + sx2 * sy1 + (sx1 - sx2) * sy0; if (denom == 0) { ctx.Restore(); return false; } double m11 = -(sy0 * (x2 - x1) - sy1 * x2 + sy2 * x1 + (sy1 - sy2) * x0) / denom; double m12 = (sy1 * y2 + sy0 * (y1 - y2) - sy2 * y1 + (sy2 - sy1) * y0) / denom; double m21 = (sx0 * (x2 - x1) - sx1 * x2 + sx2 * x1 + (sx1 - sx2) * x0) / denom; double m22 = -(sx1 * y2 + sx0 * (y1 - y2) - sx2 * y1 + (sx2 - sx1) * y0) / denom; double dx = (sx0 * (sy2 * x1 - sy1 * x2) + sy0 * (sx1 * x2 - sx2 * x1) + (sx2 * sy1 - sx1 * sy2) * x0) / denom; double dy = (sx0 * (sy2 * y1 - sy1 * y2) + sy0 * (sx1 * y2 - sx2 * y1) + (sx2 * sy1 - sx1 * sy2) * y0) / denom; ctx.Transform(m11, m12, m21, m22, dx, dy); ctx.DrawImage(im, 0, 0); ctx.Restore(); if (factor != 1.0) { ctx.BeginPath(); ctx.MoveTo(hw - qw, hh - qh); ctx.LineTo(hw + qw, hh - qh); ctx.LineTo(hw + qw, hh + qh); ctx.LineTo(hw - qw, hh + qh); ctx.ClosePath(); ctx.StrokeStyle = "yellow"; ctx.Stroke(); } return true; }
public override void Draw(CanvasContext2D canv) { if (!Visible) return; canv.Save(); if (!Focused) { CursorPosition = -1; DragPosition = -1; } DrawTicks++; can = canv; canv.StrokeStyle = ButtonBorderGrad; canv.FillStyle = Clicking ? Button1Grad : Button2Grad; canv.LineWidth = 2; CHelp.RoundRect(canv, TotalX, TotalY, Width, Height, 2, true, true); if (canv.Font != Font) canv.Font = Font; if (DragPosition != -1) { canv.FillStyle = "#598AFF"; var w1 = canv.MeasureText(Text.Substring(0, Math.Min(DragPosition, CursorPosition))).Width; var w2 = canv.MeasureText(Text.Substring(0, Math.Max(DragPosition, CursorPosition))).Width; canv.FillRect(TotalX + 8 + w1, TotalY + 3, w2 - w1, ( Height - 7 )); } canv.FillStyle = "#000000"; int hc; if (canv.Font.IndexOf("pt") != -1) hc = int.Parse(canv.Font.Substr(0, canv.Font.IndexOf("pt"))); else hc = int.Parse(canv.Font.Substr(0, canv.Font.IndexOf("px"))); canv.FillText(Text, TotalX + 8, TotalY + ( ( Height - hc ) / 2 ) + Height / 2); if (Focused && ( ( blinkTick++ % 35 ) == 0 )) blinked = !blinked; if (Focused && blinked) { canv.StrokeStyle = "#000000"; var w = canv.MeasureText(Text.Substring(0, CursorPosition)).Width; canv.BeginPath(); canv.MoveTo(TotalX + 8 + w, TotalY + 3); canv.LineTo(TotalX + 8 + w, TotalY + ( Height - 7 )); canv.LineWidth = 2; canv.Stroke(); } canv.Restore(); base.Draw(canv); }