From eaedd4cf923beaf1872243316a751af49f93fc59 Mon Sep 17 00:00:00 2001 From: Evan Hemsley <2342303+ehemsley@users.noreply.github.com> Date: Fri, 7 Jun 2019 11:17:04 -0700 Subject: [PATCH] center line --- content/pong/scoring/center_line.md | 59 ++++++++++++++++++++++++++++ static/images/center_line.png | Bin 0 -> 12592 bytes 2 files changed, 59 insertions(+) create mode 100644 content/pong/scoring/center_line.md create mode 100644 static/images/center_line.png diff --git a/content/pong/scoring/center_line.md b/content/pong/scoring/center_line.md new file mode 100644 index 0000000..1a10fc0 --- /dev/null +++ b/content/pong/scoring/center_line.md @@ -0,0 +1,59 @@ +--- +title: "Center Line" +date: 2019-06-07T10:43:23-07:00 +weight: 50 +--- + +Now we need to draw the center line. + +This will be a fairly basic GeneralRenderer - it doesn't need to react to anything. + +```ts +import { GeneralRenderer } from "encompass-ecs"; + +export class CenterLineRenderer extends GeneralRenderer { + public layer = 0; + + private middle: number; + private height: number; + + public initialize(middle: number, height: number) { + this.middle = middle; + this.height = height; + } + + public render() { + love.graphics.setLineWidth(2); + this.dotted_line(this.middle, 0, this.middle, this.height, 10, 10); + } + + private dotted_line(x1: number, y1: number, x2: number, y2: number, dash: number, gap: number) { + const dx = x2 - x1; + const dy = y2 - y1; + const angle = math.atan2(dy, dx); + const st = dash + gap; + const len = math.sqrt(dx * dx + dy * dy); + const nm = (len - dash) / st; + + love.graphics.push(); + + love.graphics.translate(x1, y1); + love.graphics.rotate(angle); + for (let i = 0; i < nm; i++) { + love.graphics.line(i * st + gap * 0.5, 0, i * st + dash + gap * 0.5, 0); + } + + love.graphics.pop(); + } +} +``` + +I took the dotted line draw procedure from [this helpful forum post](https://love2d.org/forums/viewtopic.php?t=83295) and modified it slightly. Thanks Ref! + +Add it to the WorldBuilder... + +```ts +world_builder.add_renderer(CenterLineRenderer).initialize(play_area_width * 0.5, play_area_height); +``` + +![center line](/images/center_line.png) diff --git a/static/images/center_line.png b/static/images/center_line.png new file mode 100644 index 0000000000000000000000000000000000000000..4ea361d6c86af7ccfc48898607913abf975ceed7 GIT binary patch literal 12592 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